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

相关推荐
Wnq1007227 分钟前
工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望
人工智能·算法·计算机视觉·激光雷达·视觉导航·人形机器人·巡检机器人
(・Д・)ノ1 小时前
python打卡day27
开发语言·python
小oo呆2 小时前
【学习心得】Jupyter 如何在conda的base环境中其他虚拟环境内核
python·jupyter·conda
天上路人2 小时前
AI神经网络降噪算法在语音通话产品中的应用优势与前景分析
深度学习·神经网络·算法·硬件架构·音视频·实时音视频
好吃的肘子2 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
小白学大数据3 小时前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街3 小时前
TensorFlow之微分求导
人工智能·python·tensorflow
立秋67893 小时前
用Python绘制梦幻星空
开发语言·python·pygame
汉克老师3 小时前
GESP2025年3月认证C++二级( 第三部分编程题(1)等差矩阵)
c++·算法·矩阵·gesp二级·gesp2级
alpszero3 小时前
YOLO11解决方案之对象裁剪探索
人工智能·python·计算机视觉·yolo11