1. 程式人生 > >chapter02 PCA主成分分析在手寫數字識別分類的應用

chapter02 PCA主成分分析在手寫數字識別分類的應用

git 性能 .cn its nts line hive 基礎上 存儲

#coding=utf8
# 導入numpy工具包。
import numpy as np
# 導入pandas用於數據分析。
import pandas as pd

from sklearn.metrics import classification_report
# 從sklearn.decomposition導入PCA。
from sklearn.decomposition import PCA

# 從互聯網讀入手寫體圖片識別任務的訓練數據,存儲在變量digits_train中。
digits_train = pd.read_csv(https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra
, header=None) # 從互聯網讀入手寫體圖片識別任務的測試數據,存儲在變量digits_test中。 digits_test = pd.read_csv(https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tes, header=None) # 對訓練數據、測試數據進行特征向量(圖片像素)與分類目標的分隔。 X_train = digits_train[np.arange(64)] y_train = digits_train[64] X_test = digits_test[np.arange(64)] y_test
= digits_test[64] # 導入基於線性核的支持向量機分類器。 from sklearn.svm import LinearSVC # 使用默認配置初始化LinearSVC,對原始64維像素特征的訓練數據進行建模,並在測試數據上做出預測,存儲在y_predict中。 svc = LinearSVC() svc.fit(X_train, y_train) y_predict = svc.predict(X_test) # 使用PCA將原64維的圖像數據壓縮到20個維度。 estimator = PCA(n_components=20) # 利用訓練特征決定(fit)20個正交維度的方向,並轉化(transform)原訓練特征。
pca_X_train = estimator.fit_transform(X_train) # 測試特征也按照上述的20個正交維度方向進行轉化(transform)。 pca_X_test = estimator.transform(X_test) # 使用默認配置初始化LinearSVC,對壓縮過後的20維特征的訓練數據進行建模,並在測試數據上做出預測,存儲在pca_y_predict中。 pca_svc = LinearSVC() pca_svc.fit(pca_X_train, y_train) pca_y_predict = pca_svc.predict(pca_X_test) # 對使用原始圖像高維像素特征訓練的支持向量機分類器的性能作出評估。 print svc.score(X_test, y_test) print classification_report(y_test, y_predict, target_names=np.arange(10).astype(str)) # 對使用PCA壓縮重建的低維圖像特征訓練的支持向量機分類器的性能作出評估。 print pca_svc.score(pca_X_test, y_test) print classification_report(y_test, pca_y_predict, target_names=np.arange(10).astype(str))

結果:

技術分享

分析:雖然損失了%3的預測準確性,但是相比於原來的64維特征,使用PCA壓縮並降低了68.75%的維度,能改節省大量的訓練時間,在保持數據多樣性的基礎上,規避掉了大量特征冗余和噪聲。

chapter02 PCA主成分分析在手寫數字識別分類的應用