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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1574閲覧

作成したデータセットにPCAを適用し次元削減時のエラー

warage

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/11/05 02:17

編集2020/11/06 05:23

前提・実現したいこと

python3で教師なし学習での画像分類のシステムを作っています。
次元削減機能を実装中に以下のエラーメッセージが発生しました。
エラーを検索しても答えが見つけられず困っています。

発生している問題・エラーメッセージ

NotFittedError Traceback (most recent call last)
<ipython-input-14-7b16379e72ab> in <module>
6 r_dataset = ipca.partial_fit(dataset[i*batch_size:(i+1)*batch_size])
7
----> 8 r_dataset = ipca.transform(dataset)
9 print(r_dataset.shape)
10 print("PCA done.")

~\anaconda3\lib\site-packages\sklearn\decomposition_incremental_pca.py in transform(self, X)
349 return np.vstack(output)
350 else:
--> 351 return super().transform(X)

~\anaconda3\lib\site-packages\sklearn\decomposition_base.py in transform(self, X)
123 >>> ipca.transform(X) # doctest: +SKIP
124 """
--> 125 check_is_fitted(self)
126
127 X = check_array(X)

~\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_is_fitted(estimator, attributes, msg, all_or_any)
965
966 if not attrs:
--> 967 raise NotFittedError(msg % {'name': type(estimator).name})
968
969

NotFittedError: This IncrementalPCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

エラーメッセージ NotFittedError: This IncrementalPCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

以下全体のコードです。
python初心者のためfitやtransformについて調べましたが全くどこに問題があるのか、どう改善するべきなのかわかりません…
どなたかご教授お願いいたします。

該当のソースコード

python

1ソースコード 2import os 3import glob 4from PIL import Image 5import numpy as np 6import matplotlib.pyplot as plt 7%matplotlib inline 8from sklearn.decomposition import IncrementalPCA 9from sklearn.cluster import KMeans 10 11np.random.seed(5) 12import cv2 13 14 15img_paths = [] 16 17for file in glob.glob("./seikaku2/*.jpg"): 18 img_paths.append(file) 19 20 print("Image number:", len(img_paths)) 21 print("Image list make done.") 22 23for i in img_paths: 24 img = Image.open(i) 25 26 print(img.size) 27 plt.figure() 28 plt.imshow(np.asarray(img)) 29 plt.close("all") 30 31img_paths = img_paths 32print(len(img_paths)) 33 34def img_to_matrix(img): 35 img_array = np.asarray(img) 36 return img_array 37 38def flatten_img(img_array): 39 s = img_array.shape[0] * img_array.shape[1] * img_array.shape[2] 40 img_width = img_array.reshape(1, s) 41 42 return img_width[0] 43 44dataset = [] 45 46for i in img_paths: 47 img = Image.open(i) 48 49 img = img.resize((int(1232/6), int(1754/6)), Image.BICUBIC) 50 51 img = img_to_matrix(img) 52 img = flatten_img(img) 53 dataset.append(img) 54 55dataset = np.array(dataset) 56print(dataset.shape) 57print("Dataset make done.") 58 59n = dataset.shape[0] 60batch_size = 180 61ipca = IncrementalPCA(n_components=100) 62 63for i in range(n//batch_size): 64 r_dataset = ipca.partial_fit(dataset[i*batch_size:(i+1)*batch_size]) 65 66r_dataset = ipca.transform(dataset) 67print(r_dataset.shape) 68print("PCA done.")

補足情報(FW/ツールのバージョンなど)

以下のサイトを参考にしています。
https://avinton.com/academy/image-classification/

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問