机器学习4-分类学习-支持向量机分类

分类模型最终都是要应用在未知分布的测试数据上,因此我们更加关注如何最大限度地为未知分布的数据提供足够的待预测空间,需要为“稍稍偏离”的样本提供足够的“容忍度”。

支持向量机分类

根据训练样本的分类,搜索所有可能的线性分类器中最佳的那个。
决定分类直线的位置的样本并不是所有训练数据,而是其中的两个空间间隔最小的两个不同类别的数据点,而我们把这种可以用来真正帮助决策最优线性分类模型的数据点叫做“支持向量”。
逻辑斯蒂回归模型在训练过程中由于考虑了所有训练样本对参数的影响,因此不一定获得最佳的分类器。

# -*- coding: UTF-8 -*-
#数据描述:邮政系统每天都会处理大量的信件,最为要紧的一环是要根据信件上的收信人邮编进行识别和分类,以便确定信件的投送地。
# 大量研究证明,支持向量机可以在手写数字图片的分类任务上展现良好的性能。

#使用支持向量级分类器处理Scikit-learn内部集成的手写体数字图片数据集,并且通过代码提取数据。

#从sklearn.datasets里导入手写体数字加载器。
from sklearn.datasets import load_digits
#从通过数据加载器获得手写体数字的数码图像数据并储存在digits变量中。
digits = load_digits()
#检视数据规模和特征维度
print(digits.data.shape)
#out[]: (1797, 64)
#该手写体数码图像数据共有1797条,并且每幅图片是8*8=64的像素矩阵表示。
# 在模型使用这些像素矩阵时候,习惯将2D的图片像素矩阵逐行首尾拼接为1D的像素特征向量,这样做会损失一些数据本身的结构信息。

#数据分割
from sklearn.model_selection import train_test_split
#随机选取75%数据作为训练集,25%的数据作为测试集
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)
#out[]: (1347,)
print(y_test.shape)
#out[]: (450,)

#使用1347条样本训练基于线性假设的支持向量机模型
from sklearn.preprocessing import StandardScaler
#从sklearn.svm里导入基于线性假设的支持向量机分类器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中。
y_predict = lsvc.predict(X_test)

#支持向量机(分类)模型对手写体数码图像识别能力的评估
print('The Accuracy of Linear SVC is', lsvc.score(X_test, y_test))
from sklearn.metrics import classification_report
print(classification_report(y_test, y_predict, target_names=digits.target_names.astype(str)))
#out[]:
# The Accuracy of Linear SVC 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
# 
# avg / total       0.95      0.95      0.95       450

特点分析

支持向量机模型可以帮助我们在海量甚至高维度的数据中,筛选对预测任务最为有效的少数训练样本。这样做不仅节省了模型学习所需要的数据内存,同时也提高了模型的预测性能。然而要获得如此的优势就必然要付出更多的计算代价(CPU资源和计算时间)。

猜你喜欢

转载自blog.csdn.net/qq_38195197/article/details/80989463