teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2018/09/04 04:40

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -22,7 +22,7 @@
22
22
  >>> X = pca.fit_transform(iris.data)
23
23
  >>> X[0] # 0番目の変換後のデータ
24
24
  array([-2.68420713e+00, 3.26607315e-01, -2.15118370e-02, 1.00615724e-03])
25
- >>> np.matmul(iris.data - iris.data.mean(axis=0), pca.components_.T)[0] # 平均を引いてセンタリングして、pca.components_を転置したものと行列積を計算し、0番目を取り出す
25
+ >>> np.matmul(iris.data - iris.data.mean(axis=0), pca.components_.T)[0] # データから平均を引いてセンタリングして、pca.components_を転置したものと行列積を計算し、0番目を取り出す
26
26
  array([-2.68420713e+00, 3.26607315e-01, -2.15118370e-02, 1.00615724e-03])
27
27
  ```
28
28
 

1

追記

2018/09/04 04:40

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -8,4 +8,22 @@
8
8
 
9
9
  「棒」の上にあれば1次元で表現できます(棒の曲がりや太さは考えないものとする)。この場合も同様。
10
10
 
11
- 主成分を削減後の空間の基底にしたいので、主成分が直交するような表現を作ります。これは共分散行列を固有値分解して固有ベクトルを得れば良いのですね。
11
+ 主成分を削減後の空間の基底にしたいので、主成分が直交するような表現を作ります。これは共分散行列を固有値分解して固有ベクトルを得れば良いのですね。
12
+
13
+ ### 追記
14
+ components_から削減後のデータ(いわゆる主成分得点)を生成するのは簡単です。
15
+
16
+ ```python
17
+ >>> import numpy as np
18
+ >>> from sklearn.decomposition import PCA
19
+ >>> from sklearn.datasets import load_iris
20
+ >>> iris = load_iris()
21
+ >>> pca = PCA()
22
+ >>> X = pca.fit_transform(iris.data)
23
+ >>> X[0] # 0番目の変換後のデータ
24
+ array([-2.68420713e+00, 3.26607315e-01, -2.15118370e-02, 1.00615724e-03])
25
+ >>> np.matmul(iris.data - iris.data.mean(axis=0), pca.components_.T)[0] # 平均を引いてセンタリングして、pca.components_を転置したものと行列積を計算し、0番目を取り出す
26
+ array([-2.68420713e+00, 3.26607315e-01, -2.15118370e-02, 1.00615724e-03])
27
+ ```
28
+
29
+ transformを呼ぶと、こういう処理がなされると。