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

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

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

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

機械学習

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

Q&A

解決済

1回答

5697閲覧

ロジスティック回帰のエラー[X has 64 features, but LogisticRegression is expecting 2500 features as input.]について

mememe0331

総合スコア55

Python 3.x

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

機械学習

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

0グッド

0クリップ

投稿2022/01/13 09:22

前提・実現したいこと

自作したデータセットを用いて、
入力した画像が犬か猫かを判別するプログラムを作成したいです。

学習させて、精度を求めるところまで、作成できたのですが、
画像を読み込んで、predictするとエラーが発生しました。

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

X has 64 features, but LogisticRegression is expecting 2500 features as input. 翻訳: Xには64の機能がありますが、LogisticRegressionは入力として2500の機能を期待しています。

該当のソースコード

画像をテストデータにして、predictするプログラム。

Python

1import cv2 2import matplotlib.pyplot as plt 3%matplotlib inline 4 5def predict_digit(filename): 6 #画像を読み込む 7 my_img = cv2.imread(filename) 8 plt.imshow(my_img) 9 plt.show() 10 11 #グレースケールに変換する 12 my_img = cv2.cvtColor(my_img, cv2.COLOR_BGR2GRAY) 13 14 # 8 * 8のサイズに変換する 15 my_img = cv2.resize(my_img,(8,8)) 16# plt.imshow(my_img) 17# plt.show() 18 19 #白黒反転する 20 my_img = 15 - my_img // 16 21 plt.imshow(my_img) #画像を貼り付ける 22 plt.axis('off') #グラフのメモリを消す 23 plt.show() #画像を表示する 24 25 # print(my_img) 26 #二次元を一次元に変換 27 my_img = my_img.reshape((-1,64)) 28 res = clf.predict(my_img) 29 return res[0] 30 31n = predict_digit("dog.jpg") 32print("dog.jpg = " + str(n)) 33

学習して、精度を出すまでのプログラム

Python3

1#集めた画像データを学習データにする 2import matplotlib.pyplot as plt 3import os 4import cv2 5import random 6import numpy as np 7DATADIR = "C:/Users/19t339/Documents/work/犬と猫/PetImages" 8CATEGORIES = ["Dog", "Cat"] 9IMG_SIZE = 50 10training_data = [] 11def create_training_data(): 12 for class_num, category in enumerate(CATEGORIES): 13 path = os.path.join(DATADIR, category) 14 for image_name in os.listdir(path): 15 try: 16 img_array = cv2.imread(os.path.join(path, image_name), cv2.IMREAD_GRAYSCALE) # 画像読み込み 17 img_resize_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) # 画像のリサイズ 18 training_data.append([img_resize_array, class_num]) # 画像データ、ラベル情報を追加 19 except Exception as e: 20 pass 21create_training_data() 22random.shuffle(training_data) # データをシャッフル 23X_train = [] # 画像データ 24y_train = [] # ラベル情報 25# データセット作成 26for feature, label in training_data: 27 X_train.append(feature) 28 y_train.append(label) 29# numpy配列に変換 30X_train = np.array(X_train) 31y_train = np.array(y_train) 32 33#変数の名前を分かりやすくする 34X = X_train 35y = y_train 36 37 38#画像データの次元を3次元から2次元へ落としている 39X= X.reshape(len(X), -1).astype(np.float64) 40y= y.reshape(len(y), -1).astype(np.float64) 41 42 43#学習データとテストデータのシャッフル 44from sklearn.model_selection import ShuffleSplit 45ss = ShuffleSplit(n_splits=1, 46 train_size=0.8, 47 test_size=0.2, 48 random_state=0) 49 50train_index, test_index = next(ss.split(X,y)) 51 52X_train, X_test = X[train_index], X[test_index] 53y_train, y_test = y[train_index], y[test_index] 54 55#学習と精度評価 56from sklearn import linear_model 57clf = linear_model.LogisticRegression(solver='liblinear') 58 59clf.fit(X_train,y_train) 60clf.score(X_test,y_test) 61

試したこと

画像ファイルの拡張子の変更。
エラーメッセージの検索

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

jupiter notebook

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

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

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

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

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

guest

回答1

0

自己解決

my_img = cv2.resize(my_img,(50,50))
my_img = my_img.reshape((-1,2500))
に変更する

投稿2022/01/13 15:52

mememe0331

総合スコア55

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問