回答編集履歴
2
修正
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
追記
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を呼ぶと、こういう処理がなされると。
|