pythonで画像処理プログラムを作成しています。
google-colaboratry で以下のコードを走らせても
pca.fit(X_train)
の行で以下のエラーメッセージを吐いて処理が止まってしまいます。
PCAの次元削減の部分でどうしてもエラーが返ってきます。
どうすればいいか皆目見当がつきません。
どうかご助力お願いします。
python
1import numpy as np 2import random #擬似乱数を生成するライブラリー 3from PIL import Image, ImageOps #画像処理ライブラリー 4from sklearn.metrics import accuracy_score #モデルの正解率を計算するライブラリー 5import glob #ファイルパス名を取得するライブラリ 6import matplotlib.pyplot as plt #図をプロットするためのライブラリー 7import pandas as pd 8from sklearn.model_selection import train_test_split 9from sklearn.decomposition import PCA 10from sklearn.svm import LinearSVC 11from sklearn.neighbors import KNeighborsClassifier 12from sklearn.svm import SVC 13import xgboost as xgb 14import lightgbm 15 16np.random.seed(0) #乱数のシードの設定 17 18def main(): 19 path_train = glob.glob("*****/*.jpg") 20 df_val = pd.read_csv("******/train.csv", index_col=0) 21 print(df_val) 22 df = pd.DataFrame({}) 23 24 for item in path_train: 25 # im = Image.open(item).convert('RGB') 26 im = Image.open(item).convert("L") 27 28 img_resize =im.resize((128,128)) # 画像のサイズ変更 29 im_array = np.ravel(np.asarray(img_resize)) # 画像を配列に変換 30# im_array = np.asarray(img_resize) 31 im_regularized = im_array/255 # 正規化 32 33 list_value = [[item, im_regularized]] 34 peace = pd.DataFrame(list_value, columns=["image", "data"]) 35 peace = peace.set_index("image") 36 df = pd.concat([df, peace], axis=0) 37 print(df) 38 39 X_train, X_test, y_train, y_test = train_test_split(df, df_val, test_size=0.2, random_state=0) 40 41 N_dim = 100 # 100列に落とし込む 42 pca = PCA(n_components=N_dim, random_state=0) 43 pca.fit(X_train) 44 45 X_train_pca = pca.transform(X_train) 46 X_test_pca = pca.transform(X_test) 47 48 print('累積寄与率: {0}'.format(sum(pca.explained_variance_ratio_))) 49 50if __name__ == "__main__": 51 main()
エラーメッセージ
###############################
TypeError Traceback (most recent call last)
TypeError: only size-1 arrays can be converted to Python scalars
The above exception was the direct cause of the following exception:
ValueError Traceback (most recent call last)
<ipython-input-17-8d81aa9fba70> in <module>
57
58 if name == "main":
---> 59 main()
5 frames
<ipython-input-17-8d81aa9fba70> in main()
49
50 pca = PCA(n_components=N_dim, random_state=0)
---> 51 pca.fit(X_train)
52
53 X_train_pca = pca.transform(X_train)
/usr/local/lib/python3.7/dist-packages/sklearn/decomposition/_pca.py in fit(self, X, y)
380 Returns the instance itself.
381 """
--> 382 self._fit(X)
383 return self
384
/usr/local/lib/python3.7/dist-packages/sklearn/decomposition/_pca.py in _fit(self, X)
429
430 X = self._validate_data(
--> 431 X, dtype=[np.float64, np.float32], ensure_2d=True, copy=self.copy
432 )
433
/usr/local/lib/python3.7/dist-packages/sklearn/base.py in _validate_data(self, X, y, reset, validate_separately, **check_params)
564 raise ValueError("Validation should be done on X, y or both.")
565 elif not no_val_X and no_val_y:
--> 566 X = check_array(X, **check_params)
567 out = X
568 elif no_val_X and not no_val_y:
/usr/local/lib/python3.7/dist-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator)
744 array = array.astype(dtype, casting="unsafe", copy=False)
745 else:
--> 746 array = np.asarray(array, order=order, dtype=dtype)
747 except ComplexWarning as complex_warning:
748 raise ValueError(
/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py in array(self, dtype)
1991
1992 def array(self, dtype: NpDtype | None = None) -> np.ndarray:
-> 1993 return np.asarray(self._values, dtype=dtype)
1994
1995 def array_wrap(
ValueError: setting an array element with a sequence.
###############################

回答1件
あなたの回答
tips
プレビュー