↑↑↑點擊上方藍字,回覆資料,10個G的驚喜
100天搞定機器學習|Day58 機器學習入門:硬核拆解GBDT
數學概念
方差:用來衡量隨機變量與其數學期望(均值)之間的偏離程度。統計中的方差(樣本方差)是各個數據分別與其平均數之差的平方的和的平均數。
協方差:度量兩個隨機變量關係的統計量,協方差爲0的兩個隨機變量是不相關的。
協方差矩陣:在統計學與概率論中,協方差矩陣的每個元素是各個向量元素之間的協方差。特殊的,矩陣對角線上的元素分別是向量的方差。
PCA原理
主成分分析法(Principal Component Analysis)是一種基於變量協方差矩陣對數據進行壓縮降維、去噪的有效方法,它藉助正交變換將一組可能存在相關性的變量轉換爲一組線性不相關的變量,轉換後的這組變量叫主成分(PC),主成分是舊特徵的線性組合。
PCA的本質就是找一些投影方向,使得數據在這些投影方向上的方差最大,而且這些投影方向是相互正交的。這其實就是找新的正交基的過程,計算原始數據在這些正交基上投影的方差,方差越大,就說明在對應正交基上包含了更多的信息量。如下圖,第一個 PC 爲 c1 所在的軸,第二個PC 爲 c2 所在的軸,第三個 PC 爲與平面正交的軸。我們僅保留一定數量的主成分來解釋原始數據集的方差,而忽略其餘部分。
PCA常用於高維數據的降維、數據噪音消除、圖像壓縮、特徵臉等等。
PCA公式推導
1.假設 爲 維隨機變量,其均值爲 ,協方差矩陣爲 。
考慮由 維隨機變量 到 維隨機變量 的線性變換
其中 。
如果該線性變換滿足以下條件,則稱之爲總體主成分:
(1) ;
(2) ;
(3)變量 是 的所有線性變換中方差最大的; 是與 不相關的 的所有線性變換中方差最大的;一般地, 是與都不相關的 的所有線性變換中方差最大的;這時分別稱 爲 的第一主成分、第二主成分、…、第 主成分。
假設 是 維隨機變量,其協方差矩陣是 , 的特徵值分別是 ,特徵值對應的單位特徵向量分別是 ,則 的第2主成分可以寫作
並且, 的第 主成分的方差是協方差矩陣 的第 個特徵值,即
3.主成分有以下性質:
主成分 的協方差矩陣是對角矩陣
主成分 的方差之和等於隨機變量 的方差之和
其中 是 的方差,即協方差矩陣 的對角線元素。
主成分 與變量 的相關係數 稱爲因子負荷量(factor loading),它表示第 個主成分 與變量 的相關關係,即 對 的貢獻程度。
4.樣本主成分分析就是基於樣本協方差矩陣的主成分分析。
給定樣本矩陣
其中 是 的第 個獨立觀測樣本, 。
的樣本協方差矩陣
給定樣本數據矩陣 ,考慮向量 到 的線性變換
如果該線性變換滿足以下條件,則稱之爲樣本主成分。樣本第一主成分 是在 條件下,使得 的樣本方差 最大的 的線性變換;
樣本第二主成分 是在 和 與 的樣本協方差 條件下,使得 的樣本方差 最大的 的線性變換;
一般地,樣本第 主成分 是在 和 與 的樣本協方差 條件下,使得 的樣本方差 最大的 的線性變換。
5.主成分分析方法主要有兩種,可以通過相關矩陣的特徵值分解或樣本矩陣的奇異值分解進行。
(1)相關矩陣的特徵值分解算法。針對 樣本矩陣 ,求樣本相關矩陣
再求樣本相關矩陣的 個特徵值和對應的單位特徵向量,構造正交矩陣
的每一列對應一個主成分,得到 樣本主成分矩陣
(2)矩陣 的奇異值分解算法。針對 樣本矩陣
對矩陣 進行截斷奇異值分解,保留 個奇異值、奇異向量,得到
的每一列對應一個主成分,得到 樣本主成分矩陣
PCA算法流程
輸入:n維樣本集 ,要降維到的維數n'. 輸出:降維後的樣本集
1、 對所有的樣本進行中心化:
2、 計算樣本的協方差矩陣
3、 對矩陣
進行特徵值分解
4、 取出最大的n'個特徵值對應的特徵向量
, 將所有的特徵向量標準化後,組成特徵向量矩陣W。
5、 對樣本集中的每一個樣本 ,轉化爲新的樣本
6、 得到輸出樣本集
有時候,我們不指定降維後的n'的值,而是換種方式,指定一個降維到的主成分比重閾值t。這個閾值t在(0,1]之間。假如我們的n個特徵值爲
,則n'可以通過下式得到:
scikit-learn中PCA的使用方法
調用
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 參數速查手冊文字版
PCA 的使用簡單的離譜,一般指定n_components即可,如果設置爲整數,說明要保留的主成分數量。如果將其設置爲小數,則說明降維後的數據能保留的信息。
上面提到主成分分析方法主要有兩種,可以通過相關矩陣的特徵值分解或樣本矩陣的奇異值分解 進行。scikit-learn庫的PCA使用的就是奇異值分解方法,通過svd_solver參數指定:
randomized:適用於數據量大,數據維度多同時主成分數目比例又較低的 PCA 降維
full:傳統意義上的 SVD,使用了 scipy 庫對應的實現
arpack:直接使用 scipy 庫的 sparse SVD 實現,和 randomized 的適用場景類似
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.decomposition import PCA
from sklearn.datasets.samples_generator import make_blobs
X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],
cluster_std=[0.2, 0.1, 0.2, 0.2], random_state=9)
fig = plt.figure()
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')
plt.show()
# 降維到二維
pca = PCA(n_components=2)
pca.fit(X)
# 輸出特徵值
print(pca.explained_variance_)
輸出特徵向量
print(pca.components_)
# 降維後的數據
X_new = pca.transform(X)
print(X_new)
fig = plt.figure()
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')
plt.show()
這樣我們就實現了三維到二維的轉換,可以把結果可視化:
PCA算法優缺點
PCA算法優點
1,僅僅需要以方差衡量信息量,不受數據集以外的因素影響
2,各主成分之間正交,可消除原始數據成分間的相互影響的因素
3,計算方法簡單,主要運算時特徵值分解,易於實現
4,它是無監督學習,完全無參數限制的。
PCA算法缺點
1,主成分各個特徵維度的含義具有一定的模糊性,不如原始樣本特徵的解釋性強
2,方差小的非主成分也可能含有對樣本差異的重要信息,因降維丟棄可能對後續數據處理有影響。
參考
https://github.com/fengdu78/lihang-code
https://finthon.com/python-pca/ https://www.cnblogs.com/pinard/p/6239403.html
也可以加一下老胡的微信
圍觀朋友圈~~~
推薦閱讀
(點擊標題可跳轉閱讀)
老鐵,三連支持一下,好嗎?↓↓↓
本文分享自微信公衆號 - 機器學習算法與Python實戰(tjxj666)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。