###前提・実現したいこと
k-Nearest Neighbors (k-NN) を使った手書き文字認識のコードを作成しています。
scikit-learnを使わない方法です。
###発生している問題・エラーメッセージ
エラーメッセージ --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-194-1b587794855b> in <module>() ----> 1 validate_homework() 2 # score_homework() <ipython-input-187-6d60eddb843b> in validate_homework() 28 test_y_mini = test_y[:1000] 29 ---> 30 pred_y = homework(train_X_mini, train_y_mini, test_X_mini) 31 print(f1_score(test_y_mini, pred_y, average='macro')) 32 <ipython-input-193-f2d288ab731e> in homework(train_X, train_y, test_X) 17 list_x=distances.argsort()[0:5] 18 for j in list_x: ---> 19 count[j] +=1 20 pred_y=np.append(pred_y,np.argmax(count)) 21 return pred_y IndexError: index 273 is out of bounds for axis 1 with size 10 ###該当のソースコード def homework(train_X, train_y, test_X): import collections as cp train_X, valid_X, train_y, valid_y = train_test_split(train_X, train_y, test_size=0.2, random_state=42) k=5 norm = np.linalg.norm(train_X, ord=2, axis=1) norm2 = np.linalg.norm(valid_X, ord=2, axis=1) normalized_train_X = train_X / norm[:, np.newaxis] normalized_valid_X = valid_X / norm2[:, np.newaxis] pred_y=np.array([]) for i in range(test_X.shape[0]): count=np.zeros(10) distances=np.dot(normalized_valid_X,normalized_train_X.T) list_x=distances.argsort()[0:5] for j in list_x: count[j] +=1 pred_y=np.append(pred_y,np.argmax(count)) return pred_y from sklearn.utils import shuffle from sklearn.metrics import f1_score from sklearn.datasets import fetch_mldata from sklearn.model_selection import train_test_split import numpy as np def load_mnist(): mnist = fetch_mldata('MNIST original') mnist_X, mnist_y = shuffle(mnist.data.astype('float32'), mnist.target.astype('int32'), random_state=42) mnist_X = mnist_X / 255.0 return train_test_split(mnist_X, mnist_y, test_size=0.2, random_state=42) def validate_homework(): train_X, test_X, train_y, test_y = load_mnist() train_X_mini = train_X[:1000] train_y_mini = train_y[:1000] test_X_mini = test_X[:1000] test_y_mini = test_y[:1000] pred_y = homework(train_X_mini, train_y_mini, test_X_mini) print(f1_score(test_y_mini, pred_y, average='macro')) validate_homework()
インデントが失われていて、コードが全くわかりません。コードを ``` で囲んでください。
回答1件
あなたの回答
tips
プレビュー