SVM实战–乳腺癌检测
大纲
- 算法背景
- 二分类向多分类问题的推广
- 乳腺癌数据挖掘实战
算法背景
SVM(支持向量机)是在样本数据空间中找到一个超平面将不同类别的样本进行分割。划分的方式有很多,为了提高模型的泛化能力和鲁棒性,应尽量选择具有最大分类间隔的分割超平面,分类间隔可以理解为样本点到分割超平面的距离(实质为点到平面的距离公式—高中几何知识)
按照svm的演化路线,可分为3个方向:(1,2处理线性可分的数据情况,3处理线性不可分的情况)
1.硬间隔:严格不允许分类错误,有时候因为数据噪声的影响使得所能找到的最大间距很小,模型泛化能力差
2.软间隔:允许一定的分类错误,避免数据过拟合
3.引入核函数:样本数据线性不可分时,利用核函数将当前维的数据映射到更高维的空间中以实现对样本数据的线性划分。
常用的核函数有:
线性核、多项式核、高斯径向核、sigmoid核或者这些核函数的组合
二分类向多分类问题的推广
1.one VS one
比较常用的是一对一方法,举例:如果要对ABC三类进行分类,则需要训练C(3,2)=3个分类器,分别为:A对B,A对C,B对C。做预测时把样本输入到三个分类器进行分类投票,某一个类别的票数最多就将其归到某一类中。不足之处是若类别数过多,则需要构建的分类器也会很多(相比于第二种方法),但出现新的类别数据时,只需要构建新的分类器,而不用改变已训练好的。
2.one VS rest
另一种方法是一对多,举例:还是对ABC三类分类,则需要训练3个分类器,分别为:A对B+C、B对A+C、C对A+B,存在的一个问题是正负样本数量可能会不对称,且如果数据集中出现了新的类别数据,前面训练好的模型可能要重新训练。
乳腺癌数据挖掘实战
导入相关库:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
from sklearn.svm import SVC,LinearSVC
from sklearn import metrics
pd.set_option('display.max_columns', None)
医疗人员采集了患者乳腺肿块经过细针穿刺后的数字化图像,并且对图像进行了特征提取,数据展示如下:(详情参见GitHub链接)
data = pd.read_csv("data.csv"