前提・実現したいこと
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/
あなたの回答
tips
プレビュー