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