机器学习:基于主成分分析(PCA)对数据降维
機器學習:基于主成分分析(PCA)對數據降維
作者:AOAIYI
作者簡介:Python領域新星作者、多項比賽獲獎者:AOAIYI首頁
😊😊😊如果覺得文章不錯或能幫助到你學習,可以點贊👍收藏📁評論📒+關注哦!👍👍👍
📜📜📜如果有小伙伴需要數據集和學習交流,文章下方有交流學習區!一起學習進步!💪
| 機器學習:基于邏輯回歸對某銀行客戶違約預測分析 |
| 機器學習:學習k-近鄰(KNN)模型建立、使用和評價 |
| 機器學習:基于支持向量機(SVM)進行人臉識別預測 |
| 決策樹算法分析天氣、周末和促銷活動對銷量的影響 |
| 機器學習:線性回歸分析女性身高與體重之間的關系 |
| 機器學習:基于樸素貝葉斯對花瓣花萼的寬度和長度分類預測 |
| 機器學習:學習KMeans算法,了解模型創建、使用模型及模型評價 |
文章目錄
- 機器學習:基于主成分分析(PCA)對數據降維
- 一、實驗目的
- 二、實驗原理
- 三、實驗環境
- 四、實驗內容
- 五、實驗步驟
- 1.數據準備
- 2.PCA分析
- 3.查看主成分的解釋能力
- 4.主成分軸(Principal Axes)的可視化
- 5.基于PCA的降維
- 6.降維處理
- 7.PCA逆向處理
- 8.使用digits.data訓練PCA模型并將結果可視化
- 總結
一、實驗目的
1、了解數據降維的各種算法原理
2、熟練掌握sklearn.decomposition中降維方法的使用
二、實驗原理
主成分分析算法(Principal Component Analysis, PCA)的目的是找到能用較少信息描述數據集的特征組合。它意在發現彼此之間沒有相關性、能夠描述數據集的特征,確切說這些特征的方差跟整體方差沒有多大差距,這樣的特征也被稱為主成分。這也就意味著,借助這種方法,就能通過更少的特征捕獲到數據集的大部分信息。
主成分分析原理
設法將原來變量重新組合成一組新的相互無關的幾個綜合變量,同時根據實際需要從中可以取出幾個較少的總和變量盡可能多地反映原來變量的信息的統計方法叫做主成分分析或稱主分量分析,也是數學上處理降維的一種方法。主成分分析是設法將原來眾多具有一定相關性(比如P個指標),重新組合成一組新的互相無關的綜合指標來代替原來的指標。通常數學上的處理就是將原來P個指標作線性組合,作為新的綜合指標。最經典的做法就是用F1(選取的第一個線性組合,即第一個綜合指標)的方差來表達,即Va(rF1)越大,表示F1包含的信息越多。因此在所有的線性組合中選取的F1應該是方差最大的,故稱F1為第一主成分。如果第一主成分不足以代表原來P個指標的信息,再考慮選取F2即選第二個線性組合,為了有效地反映原來信息,F1已有的信息就不需要再出現在F2中,用數學語言表達就是要求Cov(F1,F2)=0,則稱F2為第二主成分,依此類推可以構造出第三、第四,……,第P個主成分。
sklearn中主成分分析的模型
class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)
sklearn.decomposition.PCA參數介紹
接下來我們主要基于sklearn.decomposition.PCA類來講解如何使用scikit-learn進行PCA降維。PCA類基本不需要調參,一般來說,我們只需要指定要降維到的維度,或者希望降維后主成分的方差和占原始維度所有特征方差和的比例閾值就可以了。
現在我們介紹一下sklearn.decomposition.PCA的主要參數:
- n_components:這個參數指定了希望PCA降維后的特征維度數目。最常用的做法是直接指定降維到的維度數目,此時n_components是一個大于等于1的整數。當然,我們也可以指定主成分的方差和所占的最小比例閾值,讓PCA類自己去根據樣本特征方差來決定降維到的維度數,此時n_components是一個(0,1]之間的浮點數。當然,我們還可以將參數設置為"mle",此時PCA類會用MLE算法根據特征的方差分布情況自己去選擇一定數量的主成分特征來降維。我們也可以使用默認值,即不輸入n_components,此時n_components=min(樣本數,特征數)。
- whiten:判斷是否進行白化。所謂白化,就是對降維后的數據的每個特征進行歸一化,讓方差都為1。對于PCA降維本身來說,一般不需要白化。如果在PCA降維后有后續的數據處理動作,可以考慮白化。默認值是False,即不進行白化。
- svd_solver:即指定奇異值分解SVD的方法,由于特征分解是奇異值分解SVD的一個特例,一般的PCA庫都是基于SVD實現的。有4個可以選擇的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。'randomized’一般適用于數據量大,數據維度多同時主成分數目比例又較低的PCA降維,它使用了一些加快SVD的隨機算法。'full’則是傳統意義上的SVD,使用了scipy庫中的實現。‘arpack’和’randomized’的適用場景類似,區別是’randomized’使用的是scikit-learn中的SVD實現,而’arpack’直接使用了scipy庫的sparse SVD實現。默認是’auto’,即PCA類會自己去權衡前面講到的三種算法,選擇一個合適的SVD算法來降維。一般來說,使用默認值就夠了。
除了這些輸入參數外,有兩個PCA類的成員值得關注。第一個是explained_variance_,它代表降維后的各主成分的方差值。方差值越大,則說明越是重要的主成分。第二個是explained_variance_ratio_,它代表降維后的各主成分的方差值占總方差值的比例,這個比例越大,則越是重要的主成分。
三、實驗環境
Python 3.9
Anaconda 4
Jupyter Notebook
四、實驗內容
本實驗介紹了主成分分析算法PCA并以實例驗證
五、實驗步驟
1.數據準備
1.導入所需的模塊
import numpy as np import matplotlib.pyplot as plt import seaborn as sns;sns.set() %matplotlib inline2.構建示例數據
#創建隨機數生成器 rng=np.random.RandomState(1) X=np.dot(rng.rand(2,2),rng.randn(2,200)).T plt.scatter(X[:,0],X[:,1]) plt.axis("equal")如上所示,第一組示例數據為一組樣本量為200的隨機的二維數組
2.PCA分析
1.導入 Scikit-Learn 中用于主成分分析的 PCA 模塊,構建一個主成分分析模型對象,并進行訓練。在這次構建中,我們設定 PCA 函數的參數 n_components 為2,這意味這我們將得到特征值最大的兩個特征向量
from sklearn.decomposition import PCA pca=PCA(n_components=2) #使用fit()方法擬合模型 pca.fit(X)n_components參數表示PCA算法中所要保留的主成分個數n,也即保留下來的特征個數n
2.模型訓練完成后, components_ 屬性可以查看主成分分解的特征向量:
print(pca.components_)3.使用.shape方法查看矩陣形狀
pca.components_.shape4.使用type()方法查看pca.components_類型
type(pca.components_)3.查看主成分的解釋能力
1.explained_variance_代表降維后的各主成分的方差值。方差值越大,則說明越是重要的主成分
pca.explained_variance_4.主成分軸(Principal Axes)的可視化
1.我們可以通過如下方式將主成分分析中的特征向量描繪出來,下圖中向量的起點為樣本數據的均值
def draw_vector(v0,v1,ax=None): ax = ax or plt.gca() arrowprops=dict(linewidth=2,shrinkA=0,shrinkB=0) ax.annotate('',v1,v0,arrowprops=arrowprops) #描繪數據 plt.scatter(X[:,0],X[:,1],alpha=0.2) for length,vector in zip(pca.explained_variance_,pca.components_): v = vector * 3 * np.sqrt(length) draw_vector(pca.mean_,pca.mean_ + v) plt.axis('equal')5.基于PCA的降維
1.將n_components設置為1,并使用fit()方法進行擬合
pca=PCA(n_components=1) pca.fit(X)6.降維處理
1.將數據X轉換成降維后的數據X_pca,并打印X和X_pca的矩陣形狀
X_pca=pca.transform(X) print("original shape:",X.shape) print("transformed shape:",X_pca.shape)2.使用切片打印X的前十項
X[:10]3.使用切片打印X_pca的前十項
X_pca[:10]7.PCA逆向處理
1.將降維后的數據轉換成原始數據
X_new=pca.inverse_transform(X_pca) #描繪數據 plt.scatter(X[:,0],X[:,1],alpha=0.2) plt.scatter(X_new[:,0],X_new[:,1],alpha=0.8) plt.axis('equal')8.使用digits.data訓練PCA模型并將結果可視化
1.導入sklearn.datasets模塊中的load_digits函數
from sklearn.datasets import load_digits digits=load_digits() #查看digits.data的矩陣形狀 digits.data.shape2.使用digits.data訓練PCA模型并將結果可視化
pca=PCA().fit(digits.data) plt.plot(np.cumsum(pca.explained_variance_ratio_)) plt.xlabel("number of components") plt.ylabel("cumlative explained variance")總結
主成分分析算法(Principal Component Analysis, PCA)的目的是找到能用較少信息描述數據集的特征組合。它意在發現彼此之間沒有相關性、能夠描述數據集的特征,確切說這些特征的方差跟整體方差沒有多大差距,這樣的特征也被稱為主成分。這也就意味著,借助這種方法,就能通過更少的特征捕獲到數據集的大部分信息。
總結
以上是生活随笔為你收集整理的机器学习:基于主成分分析(PCA)对数据降维的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用 MoviePy 实现 FLV 转
- 下一篇: 贪心算法之埃及分数问题