一、SVM分类
SVM既可以做回归,也可以做分类器。
如何创建一个 SVM 分类器呢?
首先使用 SVC 的构造函数:model = svm.SVC(kernel=‘rbf’, C=1.0, gamma=‘auto’),
这里有三个重要的参数 kernel、C 和 gamma。
kernel 代表核函数的选择,它有四种选择,只不过默认是 rbf,即高斯核函数。
1. linear:线性核函数 。 解决线性问题。
2. poly: 多项式核函数 解决偏线性问题。
3. rbf: 高斯核函数(默认)。 解决非线性问题。
4. sigmoid:双曲正切核函数。 解决偏非线性问题。
二、乳腺癌数据使用
选用的数据集:点击下载
威斯康星州乳腺癌(诊断)数据集 ,乳腺癌数据集一共有569个样本,30个特征(10个平均值,10个标准差,10个最值),标签为二分类。其中良性benign为357个,恶性malignant为212个。
可以直接下载数据集,用data = pd.read_csv("./data.csv") 导入,也可以直接从sklearn的数据库下载。
from sklearn.datasets import load_breast_cancer
cancers = load_breast_cancer() #下载乳腺癌数据集
具体见参考博客。
三、使用4种核函数测试代码
3.1导入所需要的包
# SVM 分类
# 乳腺癌诊断分类
from sklearn.datasets import load_breast_cancer
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler
import time
3.2导入乳腺癌数据集
cancers = load_breast_cancer() #下载乳腺癌数据集
X = cancers.data #获取特征值
Y = cancers.target #获取标签
3.3生成分类器预测分类,数据规范化处理
原博客在这一步没有进行数据规范化处理。通过对比,规范化处理后的预测结果更好。未规范化处理时,使用多项式poly核函数没有运行出结果(也许是时间太长)。
# 训练集占80%,测试集占20%
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
# 采用Z-Score规范化数据,保证每个特征维度的数据均值为0,方差为1
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)
3.3 可视化乳腺癌数据集
绘制 X[:, 0], X[:, 1] 的点图, 可以看出特征值与目标结果分布具有一定相关性。可选取任意2个特征值绘制点图观察。选择不同的特征值,大体上可以看出,特征值越高,恶性样本数越多。
np.unique(Y) # 查看label都由哪些分类 (unique去除数组中的重复数字,并进行排序之后输出)
plt.scatter(X[:, 0], X[:, 1], c= Y ) #任选某2个特征 与 良性恶性的关系
plt.show() #显示图像