前提・実現したいこと
100次元の元データが300個あります.(300×100次元)
このデータについて主成分分析で導出した100次元の固有ベクトルが1本あります.
次に,元データとは別の100次元のデータ300個があります.
これらについて,先ほど導出した主成分軸(固有ベクトル)上でどの位置に投影されるかを確認したい(基底変換を行いデータをフィットさせたい)です.
リンク内容
上記のサイトを参考にしていますが,基底変換行列を求める部分で詰まってしまいました.
発生している問題・エラーメッセージ
計算後のデータが合わず進めることができません.
おそらく,元データの基底(E)の指定の方法がおかしいのだと考えていますが,どのように指定すればよいかわかりません.
(300, 100) (100,) numpy.linalg.LinAlgError: 1-dimensional array given. Array must be at least two-dimensional
該当のソースコード
# ファイル名を指定 X = pd.read_csv('hogehoge.csv', sep=",", header=None).values print(X.shape) #主成分軸取り出し U1 = pca.components_[0, :] print(U1.shape) #------------------------------------------------------------------------------- #テストデータの基底変換 #------------------------------------------------------------------------------- #元データの基底 E = np.eye(100) #基底変換行列計算 P = np.linalg.solve(E, U1) #------------------------------------------------------------------------------- # テストデータの主成分軸投影 #------------------------------------------------------------------------------- z = np.linalg.solve(P, X)
試したこと
P = np.linalg.solve(E, U.T) print(P.shape) >>(100,)
基底変換行列Pは正方行列になるはずなのですが,1行のベクトルになってしまいます.
基礎的な数学になってしまうのですが,よろしくお願いいたします.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/25 07:45
2020/09/25 08:20
退会済みユーザー
2020/09/25 08:30