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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3685閲覧

python:混合行列

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/12/10 09:49

編集2017/12/11 14:47

###前提・実現したいこと
Digtisデータで混合行列を作成するコードようにmnistデータでも同じように混合行列を作成したいのですがどのようにしたらいいですか。

原因と改善策を教えてください。

また、Digtisデータで混同行列は以下のようにできたのに今回はエラーが出るのでしょうか。

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

python

1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3<ipython-input-5-f6ad643389d7> in <module>() 4 29 5 30 if __name__ == '__main__': 6---> 31 main() 7 8<ipython-input-5-f6ad643389d7> in main() 9 21 10 22 # 正解率を計算 11---> 23 score = accuracy_score(test_dataY, predicted_labels) 12 24 print("正解率:{}".format(score)) 13 25 14 15~\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in accuracy_score(y_true, y_pred, normalize, sample_weight) 16 174 17 175 # Compute accuracy for each possible representation 18--> 176 y_type, y_true, y_pred = _check_targets(y_true, y_pred) 19 177 if y_type.startswith('multilabel'): 20 178 differing_labels = count_nonzero(y_true - y_pred, axis=1) 21 22~\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in _check_targets(y_true, y_pred) 23 69 y_pred : array or indicator matrix 24 70 """ 25---> 71 check_consistent_length(y_true, y_pred) 26 72 type_true = type_of_target(y_true) 27 73 type_pred = type_of_target(y_pred) 28 29~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_consistent_length(*arrays) 30 202 if len(uniques) > 1: 31 203 raise ValueError("Found input variables with inconsistent numbers of" 32--> 204 " samples: %r" % [int(l) for l in lengths]) 33 205 34 206 35 36ValueError: Found input variables with inconsistent numbers of samples: [21000, 1] 37

###Digitsデータでのソースコード

python

1from sklearn import datasets 2from sklearn.model_selection import LeaveOneOut 3from sklearn.metrics import accuracy_score, confusion_matrix 4from sklearn.neighbors import KNeighborsClassifier 5 6def main(): 7 dataset = datasets.load_digits() 8 9 features = dataset.data 10 targets = dataset.target 11 12 predicted_labels = [] 13 14 loo = LeaveOneOut() 15 for train, test in loo.split(features): 16 train_data = features[train] 17 target_data = targets[train] 18 19 model = KNeighborsClassifier(n_neighbors=1, metric='euclidean') 20 model.fit(train_data, target_data) 21 22 predicted_label = model.predict(features[test]) 23 predicted_labels.append(predicted_label) 24 25 print(predicted_labels) 26 score = accuracy_score(targets, predicted_labels) 27 print(score) 28 29 # 混合行列を表示 30 cm = confusion_matrix(targets, predicted_labels) 31 print(cm) 32 33 34if __name__ == '__main__': 35 main()

###mnistデータでのソースコード

python

1from collections import Counter 2from matplotlib import pyplot as plt 3from sklearn import datasets, model_selection, metrics 4from sklearn.metrics import accuracy_score, confusion_matrix 5from sklearn.neighbors import KNeighborsClassifier 6import sklearn.datasets as datasets 7import numpy as np 8import pandas as pd 9import time 10state = np.random.RandomState(1) 11 12mnist = datasets.fetch_mldata('MNIST original', data_home='data/src/download/') 13 14def main(): 15 16 # 特徴データとラベルデータを取り出す 17 features = mnist.data 18 targets = mnist.target 19 20 #データを分割 21 train_dataX, test_dataX, train_dataY, test_dataY = model_selection.train_test_split(features,targets,test_size=0.3) 22 23 predicted_labels = [] 24 25 # モデルを学習 26 model = KNeighborsClassifier(n_neighbors=1, metric='euclidean') 27 model.fit(train_dataX,train_dataY) 28 29 # 一つだけ取り除いたテストデータを識別 30 predicted_label = model.predict(test_dataX) 31 predicted_labels.append(predicted_label) 32 33 ## print(predicted_labels) 34 35 # 正解率を計算 36 score = accuracy_score(test_dataY, predicted_labels) 37 print("正解率:{}".format(score)) 38 39 # 混合行列を表示 40 cm = confusion_matrix(test_dataY, predicted_labels) 41 print(cm) 42 43if __name__ == '__main__': 44 main()

###補足情報(言語/FW/ツール等のバージョンなど)
Anaconda

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

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

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

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

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

guest

回答1

0

ベストアンサー

predicted_labelsは、初期設定しているものの、その後にデータが与えれておらず空の状態です。test_dataYはエラーメッセージからすると21,000件なのでそれに見合った件数の予測結果を引数に設定する必要があります。どのデータ同士を対比した混合行列を作るつもりなのか、確認したほうがいいでしょう。

投稿2017/12/10 15:03

R.Shigemori

総合スコア3376

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

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

退会済みユーザー

退会済みユーザー

2017/12/11 09:03

predicted_label = model.predict(test_dataX)の下に predicted_labels.append(predicted_label)を付け加えたのですがこれも違いました。
R.Shigemori

2017/12/11 12:25

appendを使っているのはどういう意図でしょうか? 上記の説明通りだと、predicted_labelsには1件のデータが格納されます。比較対象であるtest_dataYは21,000件なので件数の不一致でエラーになります。test_dataYと比較したいものが何なのか確認したほうがいいかと思います。
退会済みユーザー

退会済みユーザー

2017/12/11 14:45

Digtisデータで混合行列を作成するコードようにmnistデータでも同じように混合行列を作成したいのですがどのようにしたらいいですか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問