天天看點

【機器學習】PCA主成分分析算法及python實作

  • 回歸:産生連續結果,可用于預測
  • 分類:産生離散結果,可用于預測
  • 聚類:産生一組集合,用于降維

聚類分析: 是将一組研究對象分為相對同質的群組的統計分析技術,常用到的聚類分析有PCA主成分分析,K-means分析

PCA主成分分析

通過線型變換将原始資料變換為一組各次元線性無關的表示,用于提取資料的主要特征分量,高維資料的降維

主成分分析(Principal Components Analysis),簡稱PCA,是一種資料降維技術,用于資料預處理。一般我們擷取的原始資料次元都很高,比如1000個特征,在這1000個特征中可能包含了很多無用的資訊或者噪聲,真正有用的特征才100個,那麼我們可以運用PCA算法将1000個特征降到100個特征。這樣不僅可以去除無用的噪聲,還能減少很大的計算量。

PCA算法是如何實作的?

簡單來說,就是将資料從原始的空間中轉換到新的特征空間中,例如原始的空間是三維的(x,y,z),x、y、z分别是原始空間的三個基,我們可以通過某種方法,用新的坐标系(a,b,c)來表示原始的資料,那麼a、b、c就是新的基,它們組成新的特征空間。在新的特征空間中,可能所有的資料在c上的投影都接近于0,即可以忽略,那麼我們就可以直接用(a,b)來表示資料,這樣資料就從三維的(x,y,z)降到了二維的(a,b)。

PCA算法的python實作

資料建立:産生一組二維的資料

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 資料建立
rng = np.random.RandomState(8)
data = np.dot(rng.rand(2,2),rng.randn(2,200)).T
df = pd.DataFrame({'X1':data[:,0],'X2':data[:,1]})

print(df.head())
print(df.shape)
plt.scatter(df['X1'],df['X2'],alpha = 0.8 ,marker = '.')
plt.axis('equal')
plt.grid()
           
【機器學習】PCA主成分分析算法及python實作

二維資料降維

from sklearn.decomposition import PCA

pca = PCA(n_components = 1)
pca.fit(df)
# n_components:降為一維
# copy:運作算法是是否将原始數組複制,預設為TRUE

print(pca.explained_variance_)
print(pca.components_)
print(pca.n_components_)

# 降維後主成分:a1 = 0.7788006 * X1 +  0.627271588 *X2
x_pca = pca.transform(df)#資料轉換
x_new = pca.inverse_transform(x_pca) #降維後的資料轉化為原始資料
print('orifinal shape:',df.shape)
print('transformed shape',x_pca.shape)
print(x_pca[:5])
print('--------------------')

plt.scatter(df['X1'],df['X2'],alpha = 0.8,marker = '.')
plt.scatter(x_new[:,0],x_new[:,1],alpha = 0.8,marker = '.',color = 'r')
plt.axis('equal')
plt.grid()
           
【機器學習】PCA主成分分析算法及python實作

紅色資料為降維後的資料

繼續閱讀