質問編集履歴

2 現在の状況

退会済みユーザー

退会済みユーザー

2017/12/11 23:46  投稿

python:混合行列
###前提・実現したいこと
k 近傍法の実装の正解率の結果を元に混同行列を作成したいです
容量が大きいためかうまくいきません。
Digtisデータで混合行列を作成するコードようにmnistデータでも同じように混合行列を作成したいのですがどのようにしたらいいですか
原因と改善策を教えてください。
また、Digtisデータで混同行列は以下のようにできたのに今回はエラーが出るのでしょうか。
###発生している問題・エラーメッセージ
```python
---------------------------------------------------------------------------
ValueError                               Traceback (most recent call last)
<ipython-input-5-f6ad643389d7> in <module>()
    29
    30 if __name__ == '__main__':
---> 31    main()
<ipython-input-5-f6ad643389d7> in main()
    21
    22    # 正解率を計算
---> 23    score = accuracy_score(test_dataY, predicted_labels)
    24    print("正解率:{}".format(score))
    25
~\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in accuracy_score(y_true, y_pred, normalize, sample_weight)
   174
   175    # Compute accuracy for each possible representation
--> 176    y_type, y_true, y_pred = _check_targets(y_true, y_pred)
   177    if y_type.startswith('multilabel'):
   178        differing_labels = count_nonzero(y_true - y_pred, axis=1)
~\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in _check_targets(y_true, y_pred)
    69    y_pred : array or indicator matrix
    70    """
---> 71    check_consistent_length(y_true, y_pred)
    72    type_true = type_of_target(y_true)
    73    type_pred = type_of_target(y_pred)
~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_consistent_length(*arrays)
   202    if len(uniques) > 1:
   203        raise ValueError("Found input variables with inconsistent numbers of"
--> 204                         " samples: %r" % [int(l) for l in lengths])
   205
   206
ValueError: Found input variables with inconsistent numbers of samples: [21000, 1]
```
###Digitsデータでのソースコード
```python
from sklearn import datasets
from sklearn.model_selection import LeaveOneOut
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.neighbors import KNeighborsClassifier
def main():
   dataset = datasets.load_digits()
   features = dataset.data
   targets = dataset.target
   predicted_labels = []
   loo = LeaveOneOut()
   for train, test in loo.split(features):
       train_data = features[train]
       target_data = targets[train]
       model = KNeighborsClassifier(n_neighbors=1, metric='euclidean')
       model.fit(train_data, target_data)
       predicted_label = model.predict(features[test])
       predicted_labels.append(predicted_label)
   print(predicted_labels)
   score = accuracy_score(targets, predicted_labels)
   print(score)
   # 混合行列を表示
   cm = confusion_matrix(targets, predicted_labels)
   print(cm)
if __name__ == '__main__':
   main()
```
###mnistデータでのソースコード
```python
from collections import Counter
from matplotlib import pyplot as plt
from sklearn import datasets, model_selection, metrics
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.neighbors import KNeighborsClassifier
import sklearn.datasets as datasets
import numpy as np
import pandas as pd
import time
state = np.random.RandomState(1)
mnist = datasets.fetch_mldata('MNIST original', data_home='data/src/download/')
def main():
   
   # 特徴データとラベルデータを取り出す
   features = mnist.data
   targets = mnist.target
   
   #データを分割
   train_dataX, test_dataX, train_dataY, test_dataY = model_selection.train_test_split(features,targets,test_size=0.3)
   predicted_labels = []
   
   # モデルを学習
   model = KNeighborsClassifier(n_neighbors=1, metric='euclidean')
   model.fit(train_dataX,train_dataY)
   # 一つだけ取り除いたテストデータを識別
   predicted_label = model.predict(test_dataX)
   predicted_labels.append(predicted_label)
       
   ## print(predicted_labels)
   # 正解率を計算
   score = accuracy_score(test_dataY, predicted_labels)
   print("正解率:{}".format(score))
       
   # 混合行列を表示
   cm = confusion_matrix(test_dataY, predicted_labels)
   print(cm)
if __name__ == '__main__':
   main()
```
###補足情報(言語/FW/ツール等のバージョンなど)
Anaconda
  • Python

    23308 questions

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

  • Python 3.x

    15702 questions

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

1 書式な改善と現在のコードの状況

退会済みユーザー

退会済みユーザー

2017/12/11 18:39  投稿

python:混合行列
###前提・実現したいこと
k 近傍法の実装の正解率の結果を元に混同行列を作成したいです。
容量が大きいためかうまくいきません。
原因と改善策を教えてください。
 
また、Digtisデータで混同行列は以下のようにできたのに今回はエラーが出るのでしょうか。  
 
###発生している問題・エラーメッセージ
```python
---------------------------------------------------------------------------
ValueError                               Traceback (most recent call last)
<ipython-input-5-8b4965474dfa> in <module>()
    28
    29 if __name__ == '__main__':
---> 30    main()
<ipython-input-5-f6ad643389d7> in <module>()
    29
    30 if __name__ == '__main__':
---> 31    main()
<ipython-input-5-8b4965474dfa> in main()
    24
    25    # 混合行列を表示
---> 26    cm = confusion_matrix(test_dataY, predicted_labels)
    27    print(cm)
    28
<ipython-input-5-f6ad643389d7> in main()
    21
    22    # 正解率を計算
---> 23    score = accuracy_score(test_dataY, predicted_labels)
    24    print("正解率:{}".format(score))
    25
~\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in confusion_matrix(y_true, y_pred, labels, sample_weight)
   248
   249    """
--> 250    y_type, y_true, y_pred = _check_targets(y_true, y_pred)
   251    if y_type not in ("binary", "multiclass"):
   252        raise ValueError("%s is not supported" % y_type)
~\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in accuracy_score(y_true, y_pred, normalize, sample_weight)
   174
   175    # Compute accuracy for each possible representation
--> 176    y_type, y_true, y_pred = _check_targets(y_true, y_pred)
   177    if y_type.startswith('multilabel'):
   178        differing_labels = count_nonzero(y_true - y_pred, axis=1)
~\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in _check_targets(y_true, y_pred)
    69    y_pred : array or indicator matrix
    70    """
---> 71    check_consistent_length(y_true, y_pred)
    72    type_true = type_of_target(y_true)
    73    type_pred = type_of_target(y_pred)
~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_consistent_length(*arrays)
   202    if len(uniques) > 1:
   203        raise ValueError("Found input variables with inconsistent numbers of"
--> 204                         " samples: %r" % [int(l) for l in lengths])
   205
   206
ValueError: Found input variables with inconsistent numbers of samples: [21000, 0]
ValueError: Found input variables with inconsistent numbers of samples: [21000, 1]
```
###Digitsデータでのソースコード  
```python  
from sklearn import datasets  
from sklearn.model_selection import LeaveOneOut  
from sklearn.metrics import accuracy_score, confusion_matrix  
from sklearn.neighbors import KNeighborsClassifier  
###該当のソースコード
def main():
   dataset = datasets.load_digits()
   features = dataset.data
   targets = dataset.target
   predicted_labels = []
   loo = LeaveOneOut()
   for train, test in loo.split(features):
       train_data = features[train]
       target_data = targets[train]
       model = KNeighborsClassifier(n_neighbors=1, metric='euclidean')
       model.fit(train_data, target_data)
       predicted_label = model.predict(features[test])
       predicted_labels.append(predicted_label)
   print(predicted_labels)
   score = accuracy_score(targets, predicted_labels)
   print(score)
   # 混合行列を表示
   cm = confusion_matrix(targets, predicted_labels)
   print(cm)
if __name__ == '__main__':
   main()
```
###mnistデータでのソースコード
```python
from collections import Counter
from matplotlib import pyplot as plt
from sklearn import datasets, model_selection, metrics
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.neighbors import KNeighborsClassifier
import sklearn.datasets as datasets
import numpy as np
import pandas as pd
import time
state = np.random.RandomState(1)
mnist = datasets.fetch_mldata('MNIST original', data_home='data/src/download/')
def main():
   
   # 特徴データとラベルデータを取り出す
   features = mnist.data
   targets = mnist.target
   
   #データを分割  
   train_dataX, test_dataX, train_dataY, test_dataY = model_selection.train_test_split(features,targets,test_size=0.3)
 
   # 使う近傍数ごとに正解率&各経過時間を計算  
   accuracy_scores = []  
   predicted_labels = []
   
   # モデルを学習
   model = KNeighborsClassifier(n_neighbors=1, metric='euclidean')
   model.fit(train_dataX,train_dataY)
   # 一つだけ取り除いたテストデータを識別
   predicted_label = model.predict(test_dataX)
   predicted_labels.append(predicted_label)  
         
   ## print(predicted_labels)  
   # 正解率を計算
   score = accuracy_score(test_dataY, predicted_label)
   score = accuracy_score(test_dataY, predicted_labels)
   print("正解率:{}".format(score))
       
   # 混合行列を表示
   cm = confusion_matrix(test_dataY, predicted_labels)
   print(cm)
     
if __name__ == '__main__':
   main()
```
###補足情報(言語/FW/ツール等のバージョンなど)
Anaconda
  • Python

    23308 questions

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

  • Python 3.x

    15702 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る