本博客内容来自《PYTHON机器学习及实践-从零开始通往KAGGLE竞赛之路》一书
from sklearn.datasets import load_digits #导入手写字数据集
from sklearn.model_selection import train_test_split #训练/测试数据切分模块
from sklearn.preprocessing import StandardScaler #数据归一化模块
from sklearn.svm import LinearSVC #导入基于线性假设的支持向量机分类器LinearSVC
from sklearn.metrics import classification_report
#加载手写字数据
digits = load_digits() #1797张8*8灰度图
#将数据集分为3:1的训练:测试集
X_train,X_test,y_train,y_test = train_test_split(digits.data,digits.target,test_size=0.25,random_state=33)
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
lsvc = LinearSVC()
lsvc.fit(X_train,y_train)
y_predict = lsvc.predict(X_test)
print('The Accuracy of Linear SVCC is ',lsvc.score(X_test,y_test))
print(classification_report(y_test,y_predict,target_names=digits.target_names.astype(str)))
The Accuracy of Linear SVCC is 0.9533333333333334
precision recall f1-score support
0 0.92 1.00 0.96 35
1 0.96 0.98 0.97 54
2 0.98 1.00 0.99 44
3 0.93 0.93 0.93 46
4 0.97 1.00 0.99 35
5 0.94 0.94 0.94 48
6 0.96 0.98 0.97 51
7 0.92 1.00 0.96 35
8 0.98 0.84 0.91 58
9 0.95 0.91 0.93 44
micro avg 0.95 0.95 0.95 450
macro avg 0.95 0.96 0.95 450
weighted avg 0.95 0.95 0.95 450
这里需要指出:召回率,准确率和F1指标最先适合用于二分类任务,但是在本例中,我们分类目标有10个类别,
即0~9的10个数组,因此无法直接计算上述三个指标,通常做法是逐一评估某个类别的这三个性能指标,
事实上不仅学习模型在对待多类分类任务是是这样做的,最终输出也证明了如此
特点分析:
支持向量机模型曾经在机器学习研究领域繁荣发展了很长一段时间,主要原因在于其精妙的模型假设,
可以帮助我们在海量甚至高纬度的数据中筛选对预测任务最为有效的少数训练样本,这样做不仅节省了模型学习所需要的数据内存
同时也提高了模型的预测性能,然而,要获得如此的优势就比然要付出更多的计算代价,因此,
请在世纪使用该模型的时候权衡其中的利弊,进而达成各自的任务目标