欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

机器学习——支持向量机

程序员文章站 2022-06-26 20:00:49
SVM就是试图把棍放在一堆球中的最佳位置,好让在棍的两边有尽可能大的间隙。这个间隙就是球到棍的距离。 支持向量机:找到分类界面,使支持向量间的间隔最大,支持向量到分割界面的距离最小 支持向量是通过到分割界面距离最小的点的向量,且两向量间的距离最大,在二维中其实就是点 取支持向量间的最大间隔是为了若当 ......

svm就是试图把棍放在一堆球中的最佳位置,好让在棍的两边有尽可能大的间隙。这个间隙就是球到棍的距离。

  • 支持向量机:找到分类界面,使支持向量间的间隔最大,支持向量到分割界面的距离最小
  • 支持向量是通过到分割界面距离最小的点的向量,且两向量间的距离最大,在二维中其实就是点
  • 取支持向量间的最大间隔是为了若当再添加一个点到一类中,最大间隔可以容许,仍然可以进行有效分割
  • 支持向量到分割界面(决策面)距离最小意思是这些点最为接近

导入类库

1 from sklearn.datasets import load_digits
2 from sklearn.metrics import classification_report
3 from sklearn.model_selection import train_test_split
4 from sklearn.preprocessing import standardscaler
5 from sklearn.svm import linearsvc
6 import numpy as np
7 import matplotlib.pyplot as plt

代码

 1 def hw_recognition():
 2     digits = load_digits()
 3 
 4     x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.25, random_state=23)
 5 
 6     ss = standardscaler()
 7     # fit 是实例方法,必须由实例调用
 8     x_train = ss.fit_transform(x_train)
 9     x_test = ss.transform(x_test)
10 
11     lsvc = linearsvc()
12     lsvc.fit(x_train, y_train)
13 
14     # 预测测试集数据
15     # y_predict = lsvc.predict(np.array([x_test[90]]))
16     # print(y_predict)
17 
18     # 生成评估报告
19     # 精确率precision = 正正 / (正正 + 反正)
20     # 按列计算
21     #
22     # 召回率recall = 正正 / (正正 + 正反)
23     # 按行计算
24     # 按行解释正反:正正-真正的正例预测为正例;正反-真正的正例预测为反例
25     #            反正-真正的反例预测为正例;反正-真正的反例预测为正例
26     y_predict = lsvc.predict(x_test)
27     print(classification_report(y_test, y_predict, target_names=digits.target_names.astype(str)))
28 
29     # 对比预测的数字与原图像中的数字
30     # y_predict = lsvc.predict(np.array([digits.data[307]]))
31     # plt.imshow(digits.images[307])
32     # print(y_predict)
33     # plt.show()

解析

 1 真实数据       预测数据
 2 ---------------------------
 3            18正     12反   
 4  20正      12正正    8正反  
 5  10反       6反正    4反反  
 6 ---------------------------
 7 
 8 精确率precision = 正正/(正正+反正)            按列计算
 9 
10 召回率recall = 正正/(正正+正反)            按行计算

运行结果

精确率      召回率
             precision    recall  f1-score   support

          0       1.00      1.00      1.00        37
          1       0.86      0.90      0.88        48
          2       1.00      0.98      0.99        46
          3       0.91      0.98      0.94        41
          4       1.00      0.96      0.98        49
          5       0.91      0.98      0.94        50
          6       0.98      0.98      0.98        41
          7       0.92      0.95      0.93        37
          8       0.93      0.89      0.91        46
          9       1.00      0.91      0.95        55

avg / total       0.95      0.95      0.95       450