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是最佳核函数

相关推荐
星星火柴93616 分钟前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
AntBlack1 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
艾莉丝努力练剑1 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
C++、Java和Python的菜鸟3 小时前
第六章 统计初步
算法·机器学习·概率论
Cx330❀3 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.3 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
散1123 小时前
01数据结构-Prim算法
数据结构·算法·图论
起个昵称吧3 小时前
线程相关编程、线程间通信、互斥锁
linux·算法
myzzb4 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa
TLuoQiu4 小时前
小电视视频内容获取GUI工具
爬虫·python