私の理解では、PCAは連続機能に対してのみ実行できると考えました。しかし、onehotエンコーディングとラベルエンコーディングの違いを理解しようとすると、次のリンクの投稿がありました。
One Hot Encoding vs LabelEncoder vs DictVectorizorを使用する場合
PCAが後に続く1つのホットエンコーディングは非常に優れた方法であり、基本的にPCAがカテゴリ機能に適用されることを示しています。したがって、混乱して、同じ上で私を提案してください。
私は他の人に同意しません。
バイナリデータでPCAを使用できます(たとえば、ワンホットエンコードデータ)は、それが良いことを意味しないか、非常にうまく機能します。
PCAは、continuous変数用です。分散(=平方偏差)を最小化しようとします。バイナリ変数がある場合、偏差の二乗の概念が崩れます。
はい、PCAを使用できます。そして、はい、あなたは出力を取得します。それは最小二乗出力ですら-PCAがそのようなデータをセグメンテーション違反するようなものではありません。それは動作しますが、それはあなたが望んでいるよりもはるかに少ない意味があります。そしておそらくよりも有意義ではありません頻繁なパターンマイニング。
MCAは、カテゴリカルデータディメンション削減の既知の手法です。 Rには、MCAを使用したり、混合コンテキストでPCAと混合したりするためのパッケージがたくさんあります。 python存在するmcaライブラリ。MCAは、PCA、実際にフランスの統計学者が「データ分析は対角化する正しい行列を見つけることです」と同じような数学を適用します
http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/
最近の出版物 は、シンプレックス頂点として扱われるカテゴリ変数でPCAを計算するときに、優れた意味のある結果を示します。
カテゴリ変数の共分散とPCA、新妻裕隆、岡田隆、2018年.
基本的に、PCAは機能セットに関する情報量の少ない(重複する)情報を見つけて排除し、機能スペースの次元を削減します。言い換えると、N次元のハイパースペースを想像してください。PCAは、データが最も変化するM(M <N)の特徴を見つけます。このようにして、データはM次元の特徴ベクトルとして表されます。数学的には、特徴空間の一種の固有値と固有ベクトルの計算です。
したがって、機能が連続しているかどうかは重要ではありません。
PCAは多くのアプリケーションで広く使用されています。主に、分類/認識の前に何らかのセンサーまたはハードウェアから送信される、ノイズが多く情報量の少ないデータを排除するため。
PCAは 次元削減法 であり、あらゆる機能セットに適用できます。次に、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]])