特征工程——數據降維


數據降維

概念:在盡量減少信息量的前提下,采用某種映射方法(函數)
把原來的高維數據(變量多)---映射--->低維數據(變量少)
避免維數災難 :增加樣本量
常用的降維方法:
    線性方法                          非線性方法
有監督方法 --> LDA(線性判別分析)      無
無監督方法 --> PCA(主成分分析)        局部線性嵌入(LLE)拉普拉斯特征映射

一、主成分分析(PCA)原理(無監督)

理解 PCA 的關鍵,一是坐標變換,二是新坐標(也就是投影)

1.1 通過線性投影

這里寫圖片描述

1.2 主成分分析(PCA)操作流程

A 原始數據—減均值
這里寫圖片描述
B 求特征變量的協方差矩陣
這里寫圖片描述
C 求協方差的 特征值 和 特征向量
D 將特征值大->小排序,選擇最大的k(1)個,然后對k(1)個特征向量分別作為 列向量組成特征向量矩陣(最大的特征根對應的特征向量)
E 將樣本點投影到選取的向量上,得到最終降維后的新維度(1個)

代碼:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'
from sklearn import datesets

iris= datasets.load_iris() #導入iris數據
X = iris.data
y = iris.target
X[:10]
y[:10]

#PCA 降維

from sklearn.decomposition import PCA
 # sklearn.decomposition.PCA(n_components=None,copy = True whiten = False)
 # n_components:主成分個數
 # copy:是否在運行算法時,將原始數據復制一份,缺省時默認 Ture
 # whiten:白化,使得每個特征具有相同的方差,缺省時默認 False

PCA = PCA(n_components = 3)   #定義一個PCA模型
pca.fit(X)                    #fit
X_new = pca.transform(X)      #transform
X_new[:5]
X_new = pca.fit_transform(X) #fit_transform --可以替代fit 和 transform(X)
X_new[:5]

 #主成分 解釋方差占比
print pca.explained_variance_ratio_
print pca.explained_variance_ 
 #PCA 降維后可視化
pca = PCA(n_components = 2)
pca.fit(X)
X_new = pca.transform(X)
import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(X_new[:,0],X_new[:,1],mark = 'o',c = y)
plt.show()

二、線性判別分析(LDA)原理(有監督)

LDA 是一種 監督學習 的線性降維技術,與PCA最大的區別,它需要一個目標類別變量
LDA 思想:投影后類內方差最小,類間方差最大。--能最好的把目標變量的類別區分開
LDA降維后得到的新維度可以繼續作用目標變量分類預測的特征

PCA 與 LDA對比
PCA 投影后的目的:整體方差最大(不關心目標變量各類別的區隔,強調整體方差最大化 即顯示所有數據)
LDA ----------:類內方差最小,類間方差最大(目標變量各類別區隔明顯,強調局部)
PCA 與 LDA總結
    如果研究問題有目標變量(類別型)
        優先使用LDA 降維
        可以先使用PCA做小幅度的降維,消去噪聲,然后再使用LDA降維
    如果研究的問題沒有目標變量
        優先使用PCA降維
代碼:iris數據集
        iris = datasets.load_iris()    #導入iris數據
        X = iris.data
        y = iris.target
        X[:10]
        y[:10]

LDA 降維
    from sklearn.lda import LDA
    lda = LDA(n_components=2)          #定義一個LDA模型
    X_new = lda.fit_transform(X,y)     #fit_transform --可以替代fit 和 transform(X)
    X_new[:5]
    lda.predict(X) #predict(X)
    lda.score(X,y) #score

對比 PCA 與LDA:

from sklearn.decomposition import PCA  #PCA降維后作圖
pca = PCA(n_components = 2)
pca.fit(X)
X_new = pca.transform(X)
import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(X_new[:,0],X_new[:,1],mark = 'o',c = y)
plt.show()
from sklearn.decomposition import LDA

LDA降維后作圖
lda = PCA(n_components = 2)
lda.fit(X,y)
X_new = lda.transform(X)

import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(X_new[:,0],X_new[:,1],mark = 'o',c = y)
plt.show()

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com