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

相关推荐
INGNIGHT11 分钟前
单词搜索 II · Word Search II
数据结构·c++·算法
DKunYu19 分钟前
PyTorch入门
人工智能·pytorch·python·深度学习
ZhengEnCi30 分钟前
Python_哈希表完全指南-从字典到高效查找的 Python 编程利器
python
黄卷青灯7732 分钟前
标定系数为什么会存储在相机模组里面,在标定的时候,算法是在割草机的X3板上运行的啊?
数码相机·算法·相机内参
今天没ID34 分钟前
Python 集合类型全解析:从网球赛事案例看透字符串、列表、元组、集合与字典(1)
python
小宁爱Python44 分钟前
从零搭建 RAG 智能问答系统 4:从多模态架构到 Milvus 向量存储实践
python·milvus
林炳然1 小时前
Python-Basic Day-2 python容器(列表、元组)
python
螺丝钉的扭矩一瞬间产生高能蛋白1 小时前
PID算法基础知识
算法
可触的未来,发芽的智生1 小时前
一万个为什么:汉语词性对NLP的作用
python·神经网络·程序人生·自然语言处理
盼哥PyAI实验室1 小时前
Python函数进阶秘籍:闭包、装饰器与作用域全解析(通俗版)
开发语言·python