Python使用SVC算法解决乳腺癌数据集分类问题——寻找最佳核函数

Python使用SVC算法解决乳腺癌数据集分类问题------寻找最佳核函数

最佳内核

您的任务是选择最佳内核,使用SVC算法解决乳腺癌数据集的分类问题。填写下面的代码模板并选择最佳内核,保持其他超参数不变。

其他超参数的值:

  • C = 1.0
  • degree(多项式核)= 2
  • gamma = 'auto'
  • random_state = 42

要尝试的内核:线性、多项式、径向、S 形。

作为答案,请提供最佳内核的字符串名称,不带引号和其他小写的附加字符。这是指您传递给 SVC 参数的名称(即不是"多项式",而是"poly")

为了检查问题解决方案的质量,请使用参数"test_size=0.2"和"random_state=42"将样本分成训练和测试,以使用"准确度"来检查。

不要忘记使用"StandardScaler"

模板

python 复制代码
import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split


data = datasets.load_breast_cancer()
X, y = data.data, data.target

X_train, X_test, y_train, y_test = # 将样本分为训练集和测试集

"""
Обучите и примените StandardScaler
训练并部署 StandardScaler
"""

def compare_svm_kernels(X_train, X_test, y_train, y_test):
    """
      Напишите функцию, определяющую наилучшее ядро для решения данной задачи
      编写一个函数来确定解决这个问题的最佳内核。
    """

compare_svm_kernels(X_train, X_test, y_train, y_test)

解决思路

我直接将解体思路写在了代码注释里,如果你不需要注释直接看代码部分:

python 复制代码
import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 1. 从 sklearn 库的 datasets 模块中加载乳腺癌数据集
# 该数据集包含了用于乳腺癌分类任务的特征数据和对应的标签
data = datasets.load_breast_cancer()
# 从加载的数据中提取特征数据,存储在变量 X 中
X, y = data.data, data.target

# 2. 使用 train_test_split 函数将数据集划分为训练集和测试集
# test_size=0.2 表示将 20% 的数据作为测试集
# random_state=42 用于确保每次划分的结果一致,方便结果复现
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 对训练集和测试集进行标准化
# 实例化 StandardScaler 类,用于数据标准化操作
scaler = StandardScaler()
# 对训练集进行拟合和转换操作
# fit_transform 会计算训练集的均值和标准差,并将训练集数据进行标准化
X_train = scaler.fit_transform(X_train)
# 对测试集进行转换操作
# 这里使用训练集计算得到的均值和标准差对测试集进行标准化
X_test = scaler.transform(X_test)

# 4. 定义一个函数,用于比较不同核函数的支持向量机模型在给定数据集上的表现
def compare_svm_kernels(X_train, X_test, y_train, y_test):
    # 定义一个包含不同核函数名称的列表
    # 后续将尝试使用这些核函数来训练支持向量机模型
    kernels = ['linear', 'poly', 'rbf','sigmoid']
    # 初始化最优核函数名称为 None
    best_kernel = None
    # 初始化最优准确率为 0
    best_accuracy = 0
    # 遍历核函数列表
    for kernel in kernels:
        '''
        # 实例化支持向量机分类器 SVC
        # C=1.0 是正则化参数,控制模型的复杂度
        # degree=2 是多项式核函数的阶数
        # gamma='auto' 是核系数,用于控制模型对数据的拟合程度
        # random_state=42 确保每次模型初始化的结果一致
        # kernel=kernel 指定当前使用的核函数
        '''
        svc = SVC(C=1.0, degree=2, gamma='auto', random_state=42, kernel=kernel)
        # 使用训练集数据对支持向量机模型进行训练
        svc.fit(X_train, y_train)
        # 使用训练好的模型对测试集数据进行预测
        y_pred = svc.predict(X_test)
        # 使用 accuracy_score 函数计算预测结果的准确率
        accuracy = accuracy_score(y_test, y_pred)
        # 如果当前核函数对应的模型准确率高于之前记录的最优准确率
        if accuracy > best_accuracy:
            # 更新最优准确率
            best_accuracy = accuracy
            # 更新最优核函数名称
            best_kernel = kernel
    # 打印出最优核函数的名称
    print(best_kernel)

# 5. 调用 compare_svm_kernels 函数,传入训练集和测试集数据
compare_svm_kernels(X_train, X_test, y_train, y_test)

输出:rbf

证明rbf是最佳核函数

代码

python 复制代码
import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

data = datasets.load_breast_cancer()
X, y = data.data, data.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 对训练集和测试集进行标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)


def compare_svm_kernels(X_train, X_test, y_train, y_test):
    kernels = ['linear', 'poly', 'rbf','sigmoid']
    best_kernel = None
    best_accuracy = 0
    for kernel in kernels:
        svc = SVC(C=1.0, degree=2, gamma='auto', random_state=42, kernel=kernel)
        svc.fit(X_train, y_train)
        y_pred = svc.predict(X_test)
        accuracy = accuracy_score(y_test, y_pred)
        if accuracy > best_accuracy:
            best_accuracy = accuracy
            best_kernel = kernel
    print(best_kernel)


compare_svm_kernels(X_train, X_test, y_train, y_test)

输出:rbf

证明rbf是最佳核函数

相关推荐
开开心心就好1 分钟前
网页图片批量下载工具,输入链接就保存
服务器·算法·leetcode·支持向量机·pdf·ocr·1024程序员节
weixin1997010801619 分钟前
官方授权通道和灰色爬虫,做数据服务该选哪条路(附 python 源码)
c++·爬虫·python
Ryan-Zhong26 分钟前
数字人口播视频 API 实战:Python 跑通模板合成、异步轮询与批量出片
开发语言·python·音视频
quantdash_cc31 分钟前
个人开发者用 QuantDash 读取港股行情:00700.HK 的 Python 函数封装与校验实践
python·数据分析·pandas·量化交易·股票数据·quantdash
fengci.34 分钟前
CTF2困难部分
开发语言·网络·python·安全·php
小小张说故事40 分钟前
Python 的 0.1 + 0.2 为什么不等于 0.3?拆开 IEEE 754 与那串死循环小数
后端·python
LK_0744 分钟前
【Agent】工具调用的安全边界:从模型输出到程序执行
人工智能·笔记·python·agent
十二同学啊1 小时前
Python 工程化详解:项目结构、依赖管理、代码质量、测试与部署
java·开发语言·python
打工仔折腾 AI1 小时前
鸿蒙移动端直连 Windows 远程桌面配置与性能调优实践
人工智能·windows·后端·python·华为·性能优化·harmonyos
Navigator_Z1 小时前
LeetCode //C - 1313. Decompress Run-Length Encoded List
c语言·算法·leetcode