問題
1、 比如拿到一個汽車的樣本,里面既有以“千米/每小時”度量的最大速度特征,也有“英里/小時”的最大速度特征,顯然這兩個特征有一個多余。
2、 拿到一個數學系的本科生期末考試成績單,里面有三列,一列是對數學的興趣程度,一列是復習時間,還有一列是考試成績。我們知道要學好數學,需要有濃厚的興趣,所以第二項與第一項強相關,第三項和第二項也是強相關。那是不是可以合並第一項和第二項呢?
3、 拿到一個樣本,特征非常多,而樣例特別少,這樣用回歸去直接擬合非常困難,容易過度擬合。比如北京的房價:假設房子的特征是(大小、位置、朝向、是否學區房、建造年代、是否二手、層數、所在層數),搞了這么多特征,結果只有不到十個房子的樣例。要擬合房子特征‐>房價的這么多特征,就會造成過度擬合。
4、 這個與第二個有點類似, 假設在 IR 中我們建立的文檔‐詞項矩陣中, 有兩個詞項為 “learn”和“study” ,在傳統的向量空間模型中,認為兩者獨立。然而從語義的角度來講,兩者是相似的,而且兩者出現頻率也類似,是不是可以合成為一個特征呢?
5、 在信號傳輸過程中,由於信道不是理想的,信道另一端收到的信號會有噪音擾動,那么怎么濾去這些噪音呢?
- 剔除和類標簽無關的特征,比如“學生的名字”就和他的“成績”無關,使用的是互信息的方法。
- 剔除和類標簽有關的,但里面存在噪聲或者冗余的特征。在這種情況下,需要一種特征降維的方法來減少特征數,減少噪音和冗余,減少過度擬合的可能性。
備注:互信息——指兩個事件集合之間的相關性。
兩個事件X和Y的互信息定義為:I(X,Y) = H(X) + H(Y) - H(X,Y)
其中 H(X,Y) 是聯合熵(Joint Entropy),其定義為:H(X,Y) = - ∑ p(x,y)logp(x,y)
特征降維——去掉可分性不強和冗余的特征
PCA 的思想
將 n維特征映射到 k 維上(k<n) ,這 k 維是全新的正交特征。這 k 維特征稱為主元,是重新構造出來的 k 維特征,而不是簡單地從 n 維特征中去除其余 n‐k 維特征。
算法思想:最大方差理論、最小平方誤差理論、坐標軸相關度理論
PCA 計算過程
假設我們得到的 2 維數據如下:
行代表樣例,列代表特征,這里有 10 個樣例,每個樣例兩個特征。
第一步,分別求 x 和 y 的平均值,然后對於所有的樣例,都減去對應的均值。
這里 x 的均值是 1.81,y 的均值是 1.91,減去后得到
若樣本特征之間的方差存在明顯差異,需要對特征做方差歸一化(可省略)。求每個特征的標准差σ,然后對每個樣例在該特征下的數據除以σ。
第二步,求特征協方差矩陣。
如果數據是 3 維,那么協方差矩陣是
這里只有 x 和 y,求解得
注:對角線上分別是 x 和 y 的方差,非對角線上是協方差。
l 協方差 > 0時,表示 x 和 y 若有一個增,另一個也增;
l 協方差 < 0時,表示一個增,一個減;
l 協方差 = 0 時,兩者獨立。
l 協方差絕對值越大,兩者對彼此的影響越大,反之越小。
求解協方差流程:
第三步,求協方差的特征值和特征向量,得到
這里的特征向量都歸一化為單位向量。
第四步,將特征值按照從大到小的順序排序,選擇其中最大的 k 個,然后將其對應的 k個特征向量分別作為列向量組成特征向量矩陣。
第五步,將樣本點投影到選取的特征向量上。
假設樣例數為 m,特征數為 n,減去均值后的樣本矩陣為 DataAdjust(m*n),協方差矩陣是 n*n,選取的 k 個特征向量組成的矩陣為EigenVectors(n*k)。
那么投影后的數據為
這樣,就將原始樣例的 n 維特征變成了 k 維,這 k 維就是原始特征在 k 維上的投影。
本案例令k=1,得到結果:
PCA 理論基礎
最大方差理論
在信號處理中認為信號具有較大的方差, 噪聲有較小的方差, 信噪比就是信號與噪聲的方差比,越大越好。
如下圖所示,樣本在橫軸上的投影方差較大, 在縱軸上的投影方差較小,那么認為縱軸上的投影是由噪聲引起的。因此我們認為,最好的k維特征,是將n維樣本點轉換為k維后,每一維上的樣本方差都很大。
對於下圖的5個樣本點,假設我們選擇兩條不同的直線做投影。根據方差最大化理論,左邊的好,因為左邊投影后的樣本點之間的方差最大。
投影
1) 紅色點表示樣例
2) 藍色點是在u上的投影點,離原點的距離是<>(即或)
3) u是直線的斜率,也是直線的方向向量,而且是單位向量。
4) 樣本點(樣例)的每一維特征的均值,和投影到 u上的樣本點的均值相等。
最佳的投影向量u,可以使得投影后的樣本點方差最大。
在本案例中,已知均值為0,因此方差為
因此,λ就是Σ的特征值,u 是特征向量。最佳的投影直線,是特征值λ最大時對應的特征向量。我們只需要對協方差矩陣進行特征值分解,得到的前 k 大特征值對應的特征向量就是最佳的k維新特征,而且這k維新特征是正交的。
獲得的新樣本為:,其中的第 j 維就是在上的投影。
通過選取最大的 k 個 u,使得方差較小的特征(如噪聲)被丟棄。
最小平方誤差理論
假設有這樣的二維樣本點(紅色點),通過線性回歸求一個線性函數,使得直線能夠最佳擬合樣本點。回歸時,最小二乘法度量的是樣本點到直線的坐標軸距離。
比如這個問題中,特征是 x,類標簽是 y。回歸時最小二乘法度量的是距離 d。如果使用回歸方法來度量最佳直線,那么就是直接在原始樣本上做回歸了,跟特征選擇就沒什么關系了。因此,我們打算選用另外一種評價直線好壞的方法,使用點到直線的距離 d’ 來度量。
現在有 n 個樣本點,每個樣本點為 m 維。將樣本點在直線上的投影記為,那么我們就是要最小化
這個公式稱作最小平方誤差(Least Squared Error)。而確定一條直線,一般只需要確定一個點,並且確定方向即可。
第一步,確定點:
總結與討論
1) PCA 技術的一大好處,是對數據進行降維的處理。我們可以對新求出的“主元”向量的重要性進行排序,根據需要取前面最重要的部分,將后面的維數省去,可以達到降維,從而達到簡化模型或對數據進行壓縮的效果,同時最大程度的保持了原有數據的信息。
2) PCA 技術的一個很大的優點是,它是完全無參數限制的。在 PCA 的計算過程中完全不需要人為的設定參數或是根據任何經驗模型對計算進行干預,最后的結果只與數據相關,與用戶是獨立的。
3) 但是,這一點同時也可以看作是缺點。如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特征,卻無法通過參數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高。
4) PCA 還可以用於預測矩陣中缺失的元素。
5) 有時數據的分布並不是滿足高斯分布。在非高斯分布的情況下,PCA方法得出的主元可能並不是最優的。
6) 在尋找主元時,不能將方差作為衡量重要性的標准。要根據數據的分布情況,選擇合適的描述完全分布的變量,然后根據概率分布式,來計算兩個向量上數據分布的相關性。等價的,保持主元間的正交假設,尋找的主元同樣要使
。這一類方法被稱為獨立主元分解(ICA)。
MATLAB
函數說明
1、cov_x=cov(x) %求取x的協方差矩陣
2、[V,D] = eig(cov_x) %矩陣V為特征向量,D為特征值(對比上面的latent)組成的對角線矩陣
3、example = fix(rand(10,3)*50); %獲取一個10*3的隨機矩陣
4、dim1 = example(:,1); %為第一(列)維特征命名
5、mean(dim1) %求每一列的均值
mean(dim1,2) %求每一行的均值
6、std(dim1)^2 %求方差
7、row=size(A,1) · %該語句返回的是矩陣A的行數
col=size(A,2) %該語句返回的是矩陣A的列數
8、B=repmat(A,m,n) %將矩陣 A 復制 m×n 塊,即把 A 作為 B 的元素,B 由 m×n 個 A 平鋪而成。B 的維數是 [size(A,1)*m, (size(A,2)*n]
9、行為元組,列為屬性
10、pareto 柏拉圖
具體實現
%獲取10*3隨機數據源
MySample = fix(rand(10,3)*50);
%為每一列命名
dim1 = MySample(:,1);
dim2 = MySample(:,2);
dim3 = MySample(:,3);
%方差歸一化
MySample= zscore(MySample);
%計算協方差
sum((dim1-mean(dim1)) * (dim2-mean(dim2))) / ( size(MySample,1)-1 )
sum((dim1-mean(dim1)) * (dim3-mean(dim3))) / ( size(MySample,1)-1 )
sum((dim2-mean(dim2)) * (dim3-mean(dim3))) / ( size(MySample,1)-1 )
%計算方差
std(dim1)^2
std(dim2)^2
std(dim3)^2
%計算協方差矩陣,驗證結果
%方法1
C = cov(MySample)
%方法2
X = MySample- repmat(mean(MySample),10,1); % 中心化樣本矩陣
C = (X'*X)/(size(X,1)-1)
%計算協方差矩陣的特征向量和特征值
[V,D] = eig(C)
latent = sort(eig(cov(MySample)),'descend'); %貢獻率(一維),從大到小排序
%選擇成分組成模式矢量
%得到降維后的數據
[coef,score,latent,tsquare]=princomp(MySample) %PCA降維處理
%coef:為系數矩陣,即表示輸入矩陣x是如何轉換成score矩陣的。
%score:主元分析加工后的數據。
%latent:一維向量,貢獻率,等同於協方差矩陣的特征值,按照從大到小的順序排列的。
%MySample:即PCA函數的輸入矩陣。
%可視化( 圖中的線表示累積變量解釋程度,柱狀表示對應成分)
figure;
percent_explained = 100*latent/sum(latent);
pareto(percent_explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
print -djpeg 2;
WEKA
weka.filters.unsupervised.attribute.PrincipalComponents