###前提・実現したいこと
Digitsデータで最適なkを探すknnのプログラムを作ったのですが
mnistデータでも最適なkを探すknnのプログラムを教えてください。
###発生している問題・エラーメッセージ
・容量が大きくて実行できない。
・NameError Traceback (most recent call last)
<ipython-input-24-b95cedfc1745> in <module>()
28 print('k={0}: {1}'.format(k, ac_score))
29
---> 30 accuracy_scores.append(score)
31
32 # 各経過時間を表示
NameError: name 'score' is not defined
・Digitsデータではそのようなエラーはなかった
###Digitsデータで最適なkを探すknnのプログラム
python
1from matplotlib import pyplot as plt 2from sklearn import datasets 3from sklearn.model_selection import LeaveOneOut 4from sklearn.metrics import accuracy_score 5from sklearn.neighbors import KNeighborsClassifier 6import time 7 8def main(): 9 dataset = datasets.load_digits() 10 11 features = dataset.data 12 targets = dataset.target 13 14 K = 10 15 ks = range(1, K + 1) 16 17 accuracy_scores = [] 18 start = time.time() 19 for k in ks: 20 predicted_labels = [] 21 loo = LeaveOneOut() 22 for train, test in loo.split(features): 23 train_data = features[train] 24 target_data = targets[train] 25 26 elapsed_time = time.time() - start 27 28 model = KNeighborsClassifier(n_neighbors=k) 29 model.fit(train_data, target_data) 30 31 predicted_label = model.predict(features[test]) 32 predicted_labels.append(predicted_label) 33 34 score = accuracy_score(targets, predicted_labels) 35 print('k={0}: {1}'.format(k, score)) 36 37 accuracy_scores.append(score) 38 39 print("経過時間:{0}".format(elapsed_time)) 40 41 X = list(ks) 42 plt.plot(X, accuracy_scores) 43 44 plt.xlabel('k') 45 plt.ylabel('accuracy rate') 46 plt.show() 47 48 49if __name__ == '__main__': 50 main()
###mnistデータで最適なkを探すknnのプログラム 改善版
python
1 2train_size = 500 3test_size = 100 4train_data, test_data, label_train, label_test = model_selection.train_test_split(mnist_data, mnist_label, test_size=test_size, train_size=train_size) 5 6K = 10 7ks = range(1, K + 1) 8 9 10 # 使う近傍数ごとに正解率&各経過時間を計算 11accuracy_scores = [] 12start = time.time() 13for k in ks: 14 predicted_labels = [] 15 loo = LeaveOneOut() 16 17 for train, test in loo.split(mnist.data): 18 train_data = mnist.data[train] 19 label_train = mnist.target[train] 20 21 elapsed_time = time.time() - start 22 23 # モデルを学習させる 24 model = KNeighborsClassifier(n_neighbors=k) 25 model.fit(train_data, label_train) 26 27 # 一つだけ取り除いたテストデータを識別 28 predicted_label = model.predict(train_data[test]) 29 predicted_labels.append(predicted_label) 30 31 # 正解率を計算 32 ac_score = metrics.accuracy_score(label_test, pre) 33 print('k={0}: {1}'.format(k, ac_score)) 34 35 accuracy_scores.append(score) 36 37 # 各経過時間を表示 38 print("経過時間:{0}".format(elapsed_time)) 39 40 # 使う近傍数ごとの正解率を折れ線グラフ 41 X = list(ks) 42 plt.plot(X, ac_score) 43 44 plt.xlabel('k') 45 plt.ylabel('accuracy rate') 46 plt.show()
###試したこと
mnistのデータ
mnist = datasets.fetch_mldata('MNIST original', data_home='data/src/download/')
###補足情報(言語/FW/ツール等のバージョンなど)
Anaconda3 python
回答1件
あなたの回答
tips
プレビュー