当前位置: 首页 > news >正文

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”

模板

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)

解决思路

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

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

代码

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

相关文章:

  • 【UEFI】关于Secure Boot
  • 2.3.5 覆盖率数据的合并
  • 【前端】使用 HTML、CSS 和 JavaScript 创建一个数字时钟和搜索功能的网页
  • 计算机二级:基础操作题
  • 大模型在支气管哮喘手术全流程风险预测与治疗方案制定中的应用研究
  • 【HTML 基础教程】HTML 编辑器
  • 【Java 优选算法】链表
  • C++:异常的深度解析
  • STM32学习笔记之常见外设汇总
  • 【QA】外观模式在Qt中有哪些应用?
  • 【C++】Chapter02 内存管理
  • 群体智能优化算法-多版本优化器(Multi-Verse Optimizer, MVO,含Matlab源代码)
  • (Arxiv-2025)MagicDistillation:用于大规模人像少步合成的弱到强视频蒸馏
  • notify_one() 会阻塞吗?
  • 5分钟快速上手Docker容器化部署:从零到实践
  • 紧凑交叉引用表
  • 使用XiaoESP32S3在Arduino环境中实现颜色识别
  • 安铂克科技APLC系列射频模拟信号发生器
  • 常见框架漏洞之一:Thinkphp5x
  • Qt开发:QVariant的使用
  • 澎湃读报丨央媒头版头条集中刊发:大国应有的样子
  • 武汉大学新闻与传播学院已由“80后”副院长吴世文主持工作
  • 韩国代总统、国务总理韩德洙宣布辞职,将择期宣布参选总统
  • 人民日报社论:坚定信心、奋发有为、创新创造——写在“五一”国际劳动节
  • 剑指3000亿产业规模,机器人“武林大会”背后的无锡“野望”
  • 比黄油年糕热量还高,这个火爆全网的甜品劝你慎吃