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

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

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

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

2回答

1617閲覧

カラー画像にPCAの用いる方法について

trafalbad

総合スコア303

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2018/05/31 01:07

編集2018/05/31 13:20

PCAで次元削減を行いたいのですが、どの事例を見てもmnistのようなモノクロ画像の例しかでてきませゆ。カラー画像のような(h,w,3)の画像をPCAに適用するにはどんな形にreshapeすれば良いのでしょうか?

python

1import cv2 2import scipy.misc 3import os 4import sys 5import matplotlib.pyplot as plt 6from sklearn.decomposition import PCA 7 8 9a_path='/Users/adidas' 10ad = [cv2.imread(a_path+'/'+i) for i in os.listdir(a_path)] 11 12ad_img=[cv2.resize(i,(150,150)) for i in ad if i is not None] 13# 次元削減ようにreshape 14ad=np.reshape(van_img, (12129,3,150*150)) 15 16# 次元削減実行 17pca = PCA(n_components=50,svd_solver='full') 18pca.fit(ad[1]) 19x = pca.fit_transform(img) 20print(x.shape) 21 22>>>(3, 3) 23 24 25 26pca.fit(ad[1]) 27>>>PCA(copy=True, iterated_power='auto', n_components=50, random_state=None, 28 svd_solver='full', tol=0.0, whiten=False)

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

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

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

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

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

guest

回答2

0

ベストアンサー

たとえば、MNISTで主成分分析をやるのなら 28 x 28ピクセルの画像を28*28=784次元のベクトルにして入力しているのだと思います。このベクトルを複数枚ある画像分だけ作って、PCAの入力にするというお話ですよね。

カラーでもまったく同じ考え方をすることができて、hw3次元のベクトルが作れます。というか、それ以外やりようがありません。

投稿2018/05/31 20:46

hayataka2049

総合スコア30933

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

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

trafalbad

2018/06/02 13:34

よく計算量を減らすためにPCAを用いるのは聞いてるのですが、削減後は何を画像として使いますか?tranceformで削減したものを使うとしてもこれは可視化できないので、PCA実行は何を使えばいいのでしょうか?
hayataka2049

2018/06/02 16:49 編集

PCAをかけた時点でデータはベクトルになっているので、素直に画像として扱うことは難しいかと・・・機械学習などの入力にする場合、計算処理はベクトルのまま取り扱うのではないでしょうか ベクトルを逆変換すれば情報の落ちた画像になります。sklearnならinverse_transformというメソッドがありますね あるいは、主成分に対応する固有ベクトルを見るということをやっている記事も見かけます。こうすると入れたデータの分散の具合がわかる、とでもいいましょうか
trafalbad

2018/06/03 00:25

そんなのがあるんですね、詳しい情報ありがとうございます。あと一つお伺いしたいのですが、inverse_transformで戻したら計算量は少なくなる(計算速度は速くなる)ということで良いのでしょうか?
hayataka2049

2018/06/03 02:48

基本的になりません。情報が落ちた画像が見れるだけです
trafalbad

2018/06/03 07:30 編集

よく聞く計算量を落とすとか計算量を削減するというのはPCAでは何を指すのでしょう?次元削減して計算速度を下げることは無理なのでしょうか?情報の落ちた画像を機械学習で使用しても計算量が変わらなければ意味がない気がしますが
hayataka2049

2018/06/03 15:24 編集

機械学習などの入力に使うのは「transformで削減したもの」ですね。 そのURLのページには「Visualizing the Eigenvalues」という節がありますが、あれは固有ベクトルです。ああいう画像を見たければ固有ベクトルを(適当にreshapeして)見れば良いです。
trafalbad

2018/06/04 12:19

ありがとうございました!
guest

0

シンプルに考えると要素数h×w×3のベクトルにreshapeするといいと思います。
ただ、カラー画像ということで色合いを強めに意識するのであれば、配列[1]と配列[2]と配列[3]を別々にPCAするのも一案かと思います。その上で、[削減後の次元数,3]の配列として処理するもいいでしょうし、そのまま横に連結してあげてもいいかと思います。

投稿2018/06/03 14:40

R.Shigemori

総合スコア3376

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

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

trafalbad

2018/06/03 14:46

よく次元削減して、計算量減らすという手法を聞きますが、削減した後はほかの方の回答を見ても計算量は変わらないそうなのですが、次元削減後は何を訓練画像とすれば計算量を減らせるのでしょうか?固有値関係でこういう記事を見つけたのですが、このような手法であってますでしょうか?https://stackoverflow.com/questions/6574782/how-to-whiten-matrix-in-pca?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
R.Shigemori

2018/06/03 16:54

> よく次元削減して、計算量減らすという手法を聞きます ここでいう計算量が何を指し示すのかによると思います。モデルの複雑度を計算量とするのであれば、次元削減はそのまま計算量削減になります。一方、機械学習やニューラルネットワークでいう学習処理の繰り返し回数を計算量とするのであれば、次元削減が繰り返し回数減を保証するものではないので、変わらないという理解になろうかと思います。 > 次元削減後は何を訓練画像とすれば計算量を減らせるのでしょうか? 通常PCAを活用する場合、元の画像→PCAモデル作成→次元削減(画像から成分抽出)→タスクに応じたモデル作成、という感じで進めらます。したがって、元の画像から抽出した成分をインプットとしたモデリングと学習を行えば、次元数そのものが減少していることから、モデルの複雑度が緩和しているので計算量が減少しているととらえていいのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問