支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
原理
具体原理:
- 在n维空间中找到一个分类超平面,将空间上的点分类。
- 一般而言,一个点距离超平面的远近可以表示为分类预测的确信或准确程度。SVM就是要最大化这个间隔值。
- 把样例特征映射到高维空间中去。线性不可分映射到高维空间,可能会导致维度大小高到可怕的(19维乃至无穷维的例子),导致计算复杂。核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。
4.使用松弛变量处理数据噪音
具体原理就不讲了,下面代码是利用支持向量机来训练手写识别的
from sklearn.datasets import load_digits
#从sklearn.datasets导入手写数字加载器
#把加载的数据存储到digits变量中
digits=load_digits()
#检查数据的规模和特征维度
print(digits.data.shape)
#导入train_text_split用于数据分割
from sklearn.cross_validation import train_test_split
#分割数据25%用于测试,75%用于训练
X_train,X_test,Y_train,Y_test=train_test_split(digits.data,digits.target,test_size=0.25,random_state=33)
#查看数据分布
print(Y_train.shape)
print(Y_test.shape)
#导入数据标准化模块
from sklearn.preprocessing import StandardScaler
#导入支持向量机分类器LinearSVC
from sklearn.svm import LinearSVC
#对数据进行标准化
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
#初始化支持向量机LinearSVC
lsvc=LinearSVC()
#进行模型训练
lsvc.fit(X_train,Y_train)
#使用训练好的模型进行预测
y_predict=lsvc.predict(X_test)
#使用模型自带的评估函数进行准确性评测
print('The Accuracy of Linear SVC is',lsvc.score(X_test,Y_test))
#使用sklearn.metrics里面的classification_report模块对预测结果做性能分析
from sklearn.metrics import classification_report
print(classification_report(Y_test,y_predict,target_names=digits.target_names.astype(str)))
结果如下所示: