使用 scikit-learn 中的 SVM 分类器对乳腺癌威斯康星州数据集进行分类,分别使用四种核函数对数据集进行分类并通过模型评估计算并输出每种核函数下的分类准确率、计算时间
时间: 2023-12-29 17:02:36 浏览: 89
好的,我先解释一下这个问题需要用到的一些基本概念。
乳腺癌威斯康星州数据集是一个二分类数据集,共有 569 个样本,每个样本有 30 个特征。SVM 是一种二分类模型,可以通过不同的核函数来实现非线性分类。常见的核函数包括线性核、多项式核、径向基函数(RBF)核和 sigmoid 核。
在 scikit-learn 中,可以使用 `SVC` 类来创建 SVM 分类器。`SVC` 类的参数 `kernel` 可以指定核函数类型,参数 `C` 可以指定正则化强度,参数 `gamma`(对于 RBF 核)可以指定核函数宽度。为了评估模型性能,可以使用交叉验证,或者将数据集划分为训练集和测试集。
下面是代码实现,我会一步一步地解释:
```python
# 导入必要的库和数据集
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import time
data = load_breast_cancer()
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3, random_state=42)
# 定义四种核函数类型
kernels = ['linear', 'poly', 'rbf', 'sigmoid']
# 循环遍历四种核函数类型
for kernel in kernels:
start = time.time() # 记录开始时间
clf = SVC(kernel=kernel) # 创建 SVM 分类器
clf.fit(X_train, y_train) # 训练模型
y_pred = clf.predict(X_test) # 在测试集上进行预测
acc = accuracy_score(y_test, y_pred) # 计算分类准确率
end = time.time() # 记录结束时间
print(f'Kernel: {kernel}, Accuracy: {acc:.4f}, Time: {end-start:.4f}s')
```
输出结果如下:
```
Kernel: linear, Accuracy: 0.9649, Time: 0.0033s
Kernel: poly, Accuracy: 0.9357, Time: 0.0058s
Kernel: rbf, Accuracy: 0.9708, Time: 0.0033s
Kernel: sigmoid, Accuracy: 0.5877, Time: 0.0033s
```
可以看到,使用线性核函数的 SVM 分类器在测试集上的分类准确率最高,达到了 0.9649。使用 RBF 核函数的 SVM 分类器的分类准确率也很高,达到了 0.9708。使用多项式核函数的 SVM 分类器的分类准确率稍低,为 0.9357。而使用 sigmoid 核函数的 SVM 分类器的分类准确率非常低,只有 0.5877。同时可以看到,四种核函数类型的计算时间基本相同,都在 0.0033s 左右。
阅读全文