1 from sklearn.svm importLinearSVC2 from sklearn.metrics importclassification_report3 from sklearn.decomposition importPCA4 importpandas as pd5 importnumpy as np6 ‘‘‘
7 主成分分析:8 特征降低维度的方法。9 提取主要特征成分,有关联的特征进行运算组合10 丢弃不显著的特征成分, 同时可能损失有意义的特征11 实现降低特征维度12 api使用:13 estimator = PCA(n_components=20)14 pca_x_train = estimator.fit_transform(x_train)15 pca_x_test = estimator.transform(x_test)16
17 分别使用支持向量机进行学习降维前后的数据再预测18
19 该数据集源自网上 https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/20 我把他下载到了本地21 训练样本3823条, 测试样本1797条22 图像通过8*8像素矩阵表示共64个维度,1个目标维度表示数字类别23
24 ‘‘‘
25
26 #1 准备数据
27 digits_train = pd.read_csv("./data/optdigits/optdigits.tra", header=None)28 digits_test = pd.read_csv("./data/optdigits/optdigits.tes", header=None)29 #从样本中抽取出64维度像素特征和1维度目标
30 x_train = digits_train[np.arange(64)]31 y_train = digits_train[64]32 x_test = digits_test[np.arange(64)]33 y_test = digits_test[64]34
35 #2 对图像数据进行降维,64维度降低到20维度
36 estimator = PCA(n_components=20)37 pca_x_train =estimator.fit_transform(x_train)38 pca_x_test =estimator.transform(x_test)39
40 #3.1 使用默认配置的支持向量机进行学习和预测未降维的数据
41 svc =LinearSVC()42 #学习
43 svc.fit(x_train, y_train)44 #预测
45 y_predict =svc.predict(x_test)46
47 #3.2 使用默认配置的支持向量机学习和预测降维后的数据
48 pca_svc =LinearSVC()49 #学习
50 pca_svc.fit(pca_x_train, y_train)51 pca_y_predict =pca_svc.predict(pca_x_test)52
53 #4 模型评估
54 print("原始数据的准确率:", svc.score(x_test, y_test))55 print("其他评分:\n", classification_report(y_test, y_predict, target_names=np.arange(10).astype(str)))56
57 print("降维后的数据准确率:", pca_svc.score(pca_x_test, y_test))58 print("其他评分:\n", classification_report(y_test, pca_y_predict, target_names=np.arange(10).astype(str)))59
60 ‘‘‘
61 原始数据的准确率: 0.916527545909849862 其他评分:63 precision recall f1-score support64
65 0 0.98 0.98 0.98 17866 1 0.73 0.99 0.84 18267 2 0.98 0.97 0.98 17768 3 0.96 0.88 0.92 18369 4 0.94 0.95 0.95 18170 5 0.91 0.96 0.93 18271 6 0.99 0.96 0.98 18172 7 0.98 0.92 0.95 17973 8 0.84 0.79 0.81 17474 9 0.94 0.76 0.84 18075
76 avg / total 0.92 0.92 0.92 179777
78 降维后的数据准确率: 0.922092376182526579 其他评分:80 precision recall f1-score support81
82 0 0.97 0.97 0.97 17883 1 0.93 0.86 0.89 18284 2 0.96 0.97 0.96 17785 3 0.93 0.87 0.90 18386 4 0.94 0.97 0.96 18187 5 0.86 0.96 0.91 18288 6 0.97 0.98 0.98 18189 7 0.97 0.88 0.92 17990 8 0.89 0.89 0.89 17491 9 0.82 0.88 0.85 18092
93 avg / total 0.92 0.92 0.92 179794 ‘‘‘