在我的理解中,我認爲PCA只能用於連續功能。PCA對於分類特徵?
When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?
它指出,一個熱碼,然後PCA是一個很好的方法,這基本上意味着PCA:但是當試圖瞭解onehot編碼和標籤編碼之間的差異通過以下鏈接此帖一適用於分類特徵。 因此困惑,請建議我一樣。
在我的理解中,我認爲PCA只能用於連續功能。PCA對於分類特徵?
When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?
它指出,一個熱碼,然後PCA是一個很好的方法,這基本上意味着PCA:但是當試圖瞭解onehot編碼和標籤編碼之間的差異通過以下鏈接此帖一適用於分類特徵。 因此困惑,請建議我一樣。
我不同意別人。
雖然您可以使用PCA二進制數據(例如一個熱門編碼數據),這並不意味着這是一件好事,或它會工作得很好。
PCA is desinged for continuous variables。它試圖最小化方差(=平方偏差)。當有二元變量時,平方偏差的概念會被打破。
所以是的,你可以使用PCA。是的,你會得到一個輸出。它甚至是最小平方輸出 - 並不像PCA會在這些數據上發生故障。它可以工作,但它比你想要的要少得多有意義的;並且據認爲比例如頻繁模式挖掘。
PCA是一個dimensionality reduction method,可以應用任何一組功能。下面是使用OneHotEncoded(即分類)的數據的一個示例:
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
X = enc.fit_transform([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]).toarray()
print(X)
> array([[ 1., 0., 1., 0., 0., 0., 0., 0., 1.],
[ 0., 1., 0., 1., 0., 1., 0., 0., 0.],
[ 1., 0., 0., 0., 1., 0., 1., 0., 0.],
[ 0., 1., 1., 0., 0., 0., 0., 1., 0.]])
from sklearn.decomposition import PCA
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X)
print(X_pca)
> array([[-0.70710678, 0.79056942, 0.70710678],
[ 1.14412281, -0.79056942, 0.43701602],
[-1.14412281, -0.79056942, -0.43701602],
[ 0.70710678, 0.79056942, -0.70710678]])
基本上,PCA發現並消除功能集較少信息(一式兩份)的信息和減少的特徵空間的維數。換句話說,設想一個N維超空間,PCA發現數據變化最大的特徵M(M < N)。這樣數據可以表示爲M維特徵向量。在數學上,它是某種特徵值計算特徵空間的特徵向量。
因此,功能是否連續並不重要。
PCA在許多應用中被廣泛使用。主要用於在分類/識別之前消除來自某些傳感器或硬件的嘈雜,信息量較少的數據。
MCA是用於分類數據降維的已知技術。在R中,有很多包使用MCA,甚至在混合環境中與PCA混合使用。在python中也存在一個mca庫。 MCA應用該PCA,的確是法國統計學家曾經說過類似的數學,「數據分析發現正確的矩陣對角化」
http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/
感謝詳細的解釋。你可以建議我如何解釋代碼中一個熱門編碼器的結果。 – vikky
如果我正確記得,PCA算法通過求解特徵向量和特徵值將特徵投影到不同的空間上。然後它查看頂部N(在這種情況下爲3)最大特徵值並取這些特徵向量分量。這個想法是用更少的功能編碼最有用的數據。 – AlexG
謝謝youuuuuuu – vikky