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

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

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

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

Q&A

解決済

1回答

1527閲覧

画像に主成分分析を行い基底を可視化したい

reonald

総合スコア32

Python

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

0グッド

0クリップ

投稿2021/08/11 03:22

import matplotlib.pyplot as plt import numpy as np from PIL import Image data = np.zeros(height*width*N).reshape(N, height*width) for i in range(N): data[i] = np.array(Image.open("./M2/./pca/./kkkkk/_"+str(i)+".jpg")).flatten() height = 32 width = 32 N = 100 #データセットの確認 data_drawing = data.reshape(N, height, width) fig1 = plt.figure(figsize=(6,6)) fig1.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05) for i in range(N): ax1 = fig1.add_subplot(10, 10, i+1, xticks=[], yticks=[]) ax1.imshow(data_drawing[i], cmap=plt.cm.gray, interpolation='nearest') plt.show() #固有値固有ベクトルを求める def eigsort(S): eigv_raw, u_raw = LA.eig(S) eigv_index = np.argsort(eigv_raw)[::-1] eigv = eigv_raw[eigv_index] u = u_raw[:, eigv_index] return [eigv, u] m = np.mean(data, axis=0) data_m = data - m[None, :] S_inner = np.array((1/N) * ((data_m) @ (data_m).T)) [eig, u_inner] = eigsort(S_inner) u = np.array((data_m.T @ u_inner)/np.sqrt(N * eig)) #累積寄与率を求める xlist = np.arange(eig.shape[0]) y = np.cumsum(eig) ylist = y / y[-1] plt.plot(xlist, ylist) index = np.where(ylist>=0.8)[0] ylist[:index[0]+1] コード
principals = 22 u_compressed = u[:, 0:principals] fig2 = plt.figure(figsize=(20,20)) fig2.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05) from matplotlib.colors import Normalize from matplotlib.cm import ScalarMappable, get_cmap norm = Normalize(vmin=u_drawing.min(), vmax=u_drawing.max()) cmap = get_cmap('PuOr') mappable = ScalarMappable(cmap=cmap, norm=norm) mappable._A = [] for i in range(principals): ax2 = fig2.add_subplot(7,6, i+1, xticks=[], yticks=[]) ax2.imshow(u_drawing[i], cmap=cmap, interpolation='nearest') cbar = plt.colorbar(mappable) ticks = np.linspace(norm.vmin, norm.vmax, 5) cbar.set_ticks(ticks) コード

https://tips-memo.com/python-2d-pca 【超初心者向け】画像の主成分分析(PCA)をpythonで実装してみる。))))))

↑のサイトを参考に画像100枚に対して主成分分析を行っております。1番目のコードで累積寄与率までは求めることができました。
次は基底の可視化を行いたいと思い,上記サイトを参考に2番目のコードを書いたのですが,下記エラーが発生しました。

NameError Traceback (most recent call last) <ipython-input-50-07b3075fabb7> in <module> 7 from matplotlib.colors import Normalize 8 from matplotlib.cm import ScalarMappable, get_cmap ----> 9 norm = Normalize(vmin=u_drawing.min(), vmax=u_drawing.max()) 10 cmap = get_cmap('PuOr') 11 mappable = ScalarMappable(cmap=cmap, norm=norm) NameError: name 'u_drawing' is not defined コード

u_drawingを定義していないのでエラーが出ることが当たり前なのは承知しているのですが,具体的にu_drawingに何を入れればよいかわからず困っております。
どなたか詳しい方がいらっしゃったら教えて頂けると助かります。

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

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

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

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

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

jbpb0

2021/08/11 14:22

参考にしてるWebページの一番下にある「全コード」を参照してみてください 本文中のコードは省略されてたりするので
reonald

2021/08/12 05:25

u_drawing = u_compressed.T.reshape(principals, height, width) が書いてありました。 ありがとうございます。
guest

回答1

0

ベストアンサー

リンク先には

python

1u_drawing = u_compressed.T.reshape(principals, height, width)

と定義されているので、これを入れればよいのではないですか?

投稿2021/08/11 09:17

Yhaya

総合スコア439

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問