質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2013閲覧

PCA主成分分析における次元削減手法について dim errorへの対応方法

yohehe

総合スコア48

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/21 16:36

編集2018/06/21 16:42

PCAによる次元削除について勉強しています。
PCAが最小二乗法によって情報損失量の二乗和の最小を求めて次元削減を行っているというイメージはでき手法についてプログラムを作成しているのですが、以下のデータ設定においての次元削減の手法のプログラミングがわからずエラーが出ております。

x,y,z軸で測定したデータ各200個ずつのデータを一つのデータとしてnpyファイルデータを測定しているデータを読み込んでいます。
pcaをかけて次元削減を目指すことでdeeplearningにおける正答率などの向上をめざしています。

python

1data=np.load("acdata0.npy") 2data=np.array(data) 3print(data.shape) 4#この時点でdataのshapeは(200,3,1)の次元になっております。reshape(3,200)などをかけても(3,200,1)となってしまいdimentionが消せずに困っております。 5 6#このままpcaにかけると 7from sklearn import cross_validation, preprocessing,decomposition 8pca=decomposition.PCA(n_components=2) 9pca.fit(data) 10 11 12Found array with dim 3. Estimator expected <= 2. 13#以上のdimensionのエラーがでます。 14 15#data.ravel()を用いて(600,)の形にすると 16pca.fit(data) 17 18Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample. 19#ravel()によるreshapeを行うと以上のエラーとなる。

おそらく自分の中でのpcaについての考え方が間違っているのだとは思うのですが、xyz各200個のデータ(200,3,1)のデータをravel()などで(600,)の配列にする前にpcaをかけて次元を減らす手法などはございますでしょうか。この問題について何かアドバイスがいただけますと幸いです。

追記

この場合のpcaによる次元削減においては1つのarrayデータにx200個,y200個,z200個のデータが存在しているため、600次元のデータとはなっていると考えています。もしかするとまとめてではなく、x、y,zを各々を抽出してpcaで線形単回帰をおこなっていくべきなのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PCAで次元削減を行いたければ複数のデータを入れてあげる必要があります。
50のデータを持っているなら、各データをravelで600次元に変換した結果をnp.vstackなどで積み重ねてshape=(50, 600)の配列を作り、それをfitに渡してやる形です。
ただし、テスト用データはPCAのfitからは外した方が厳密には正しく評価できます(検証用データはfit時には一切関わるべきではない)。手元で実験する際には、どうせ大勢に影響はないと割り切るのも手ですが、そういう話があるということは覚えておいてください(「機械学習 leakage」とかで検索すると出てくるはずです)。


PCAであれば簡単なものですから、まずは原理を勉強してください。理解して使うことが望ましいです。

投稿2018/06/21 17:08

編集2018/06/21 17:12
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohehe

2018/06/21 17:13

hayataka様、ありがとうございます。 すみません、pcaについて理論的に勉強不足でした。実装する位置が間違っていたのですか。改めて理論について読み直し、pcaを組み込んだプログラムを実装してみます。
yohehe

2018/06/21 17:29

テストデータは正しくするには除外する必要があるのですか、なるほど勉強になります。leakageについての追記の記載ありがとうございます。教えていただきました内容についても調べて見ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問