sklearn中調用PCA算法
PCA算法是一種數據降維的方法,它可以對於數據進行維度降低,實現提高數據計算和訓練的效率,而不丟失數據的重要信息,其sklearn中調用PCA算法的具體操作和代碼如下所示:
#sklearn中調用PCA函數進行相關的訓練和計算(自定義數據)
import numpy as np
import matplotlib.pyplot as plt
x=np.empty((100,2))
x[:,0]=np.random.uniform(0.0,100.0,size=100)
x[:,1]=0.75*x[:,0]+3.0*np.random.normal(0,3,size=100)
plt.figure()
plt.scatter(x[:,0],x[:,1])
plt.show()
from sklearn.decomposition import PCA #在sklearn中調用PCA機器學習算法
pca=PCA(n_components=1) #定義所需要分析主成分的個數n
pca.fit(x) #對基礎數據集進行相關的計算,求取相應的主成分
print(pca.components_) #輸出相應的n個主成分的單位向量方向
x_reduction=pca.transform(x) #進行數據的降維
x_restore=pca.inverse_transform(x_reduction) #對降維數據進行相關的恢復工作
plt.figure()
plt.scatter(x[:,0],x[:,1],color="g")
plt.scatter(x_restore[:,0],x_restore[:,1],color="r")
plt.show()
#sklearn中利用手寫字體的數據集進行實際的PCA算法
#1-1導入相應的庫函數
from sklearn import datasets
d=datasets.load_digits()
x=d.data
y=d.target
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)
print(x_train.shape)
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier()
knn.fit(x_train,y_train)
print(knn.score(x_test,y_test))
#1-2對於64維的原始數據進行降維,降到2維數據
pca1=PCA(n_components=2)
pca1.fit(x_train)
x_train_re=pca1.transform(x_train) #對於訓練數據和測試數據進行降維到二維數據
x_test_re=pca1.transform(x_test)
knn1=KNeighborsClassifier()
knn1.fit(x_train_re,y_train) #再對降維到的二維數據進行KNN算法的訓練和測試准確度
print(knn1.score(x_test_re,y_test))
print(pca1.explained_variance_ratio_)
#1-3-1對於訓練數據和測試數據進行降維到64維數據,維度不變
pca2=PCA(n_components=64) #對於訓練數據和測試數據進行降維到64維數據,維度不變
pca2.fit(x_train)
x_train_re=pca2.transform(x_train)
x_test_re=pca2.transform(x_test)
knn1=KNeighborsClassifier()
knn1.fit(x_train_re,y_train)
print(knn1.score(x_test_re,y_test))
print(pca2.explained_variance_ratio_) #輸出各個主成分對於整體數據的方差的體現比例
#1-3-2輸出前n個主成分所能夠反映的數據的特征權重
plt.figure()
plt.plot([i for i in range(x.shape[1])],[np.sum(pca2.explained_variance_ratio_[:i+1]) for i in range(x.shape[1])])
plt.show()
#1-4PCA(a)括號里面的a為0-1的數字,表示輸出滿足能夠反映原始數據比重為a時的最低維度時的PCA,之后進行訓練和分類會提高計算的效率5-10倍,但是分類准確度基本相差無幾,可以用准確度來換取計算的效率
pca3=PCA(0.95)
pca3.fit(x_train)
print(pca3.n_components_) #輸出此時降到的數據維度
x_train_re1=pca3.transform(x_train)
x_test_re1=pca3.transform(x_test)
knn2=KNeighborsClassifier()
knn2.fit(x_train_re1,y_train)
print(knn2.score(x_test_re1,y_test))
#1-5對於64維度數據進行降維到二維數據,之后進行數據的可視化,可以對於不同的分類結果進行查詢和可視化區分
pca1=PCA(n_components=2)
pca1.fit(x)
x_re=pca1.transform(x)
plt.figure()
for i in range(10):
plt.scatter(x_re[y==i,0],x_re[y==i,1])
plt.show()
輸出結果如下所示: