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

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

ただいまの
回答率

91.25%

  • Python

    4197questions

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

  • Python 3.x

    2753questions

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

python:mnistデータで各数字の割合を知るには

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 85

ponn

score 13

前提・実現したいこと

pythonで使うこの mnist = datasets.fetch_mldata('MNIST original', data_home='data/src/download/')
の各数字のトレーニングデータとテストデータの割合を知るにはどのようにコードを作成すればよいですか。

例 このような感じで。

三列目は合計
![イメージ説明]

URL(https://qiita.com/ToshikiShimizu/items/6bfacef12dafd63b1080#%E5%90%84%E6%95%B0%E5%AD%97%E3%81%AE%E5%89%B2%E5%90%88) 参照

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

Anaconda3

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

numpy.bincount()を使うのが簡単ではないでしょうか

from sklearn import datasets, model_selection, metrics
import sklearn.datasets as datasets
import numpy as np


mnist = datasets.fetch_mldata('MNIST original', data_home='./data/src/download')
train_data, test_data, train_label, test_label = model_selection.train_test_split(mnist.data, mnist.target, test_size=0.3)

train_count = np.bincount(train_label.astype(np.int8))
test_count = np.bincount(test_label.astype(np.int8))
total_count = train_count + test_count

print(train_count)
print(test_count)
print(total_count)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/12 21:06

    ありがとうございました。
    細かいのは自分で出来ました!

    キャンセル

  • 2017/12/12 21:12

    ちなみに、実行する度にデータ数が変わるのはなぜですか。

    キャンセル

  • 2017/12/12 21:17

    trainデータとtestデータに分割する train_test_split() には、データをshuffleするオプションがあり、デフォルトでTrueになっております。
    ですので毎回結果が変わるのかと思います。(合計は変わってないですよね)

    キャンセル

  • 2017/12/12 21:19

    そうだったのですね・・・ありがとうございます。
    ちなみに、シャッフルをオフにすることは可能なのでしょうか。可能でしたら方法を教えてください。

    キャンセル

  • 2017/12/12 21:40

    scikit-learnのversionが0.19以降であれば train_test_split()の引数に shuffle=False を指定して shuffleをDisableにすることができます

    キャンセル

  • 2017/12/12 23:48 編集

    ありがとうございます。0.19ですが入れると
    train_data, test_data, train_label, test_label = model_selection.train_test_split(mnist.data, mnist.target, test_size=0.3, shuffle=False)

    train_count = np.bincount(train_label.astype(np.int8))
    test_count = np.bincount(test_label.astype(np.int8))
    total_count = train_count + test_count

    print(" 0 1 2 3 4 5 6 7 8 9" )
    print("traing_data {}".format(train_count))
    print("test_data {}".format(test_count))
    print("traing_data + test_data {}".format(total_count))

    ---------------------------------------------------------------------------
    ValueError Traceback (most recent call last)
    <ipython-input-7-8406e21e208d> in <module>()
    3 train_count = np.bincount(train_label.astype(np.int8))
    4 test_count = np.bincount(test_label.astype(np.int8))
    ----> 5 total_count = train_count + test_count
    6
    7 print(" 0 1 2 3 4 5 6 7 8 9" )

    ValueError: operands could not be broadcast together with shapes (9,) (10,)

    キャンセル

  • 2017/12/13 08:21

    たぶん train_label には '9' の データが含まれていないのでしょう。
    (今回はshuffle=False なので、元々の並びがそうなのかと思います)
    その結果、train_count は 0~8 の結果が格納された、サイズが9のデータとなっており、対して test_count には '9' の データも含まれた、サイズ 10 のデータが得られるので、

    total_count = train_count + test_count

    の部分で、長さが違う配列同士の足し算を行っているとしてエラーになっているようです。
    で、修正方法ですが、 np.bincount() の引数に minlength=10 を与えてください。そうすることで、たとえ '9'のデータを含んでいない場合も、サイズ10の結果を返すようになりますので、問題なく足し算が実行できるかと思います。

    キャンセル

  • 2017/12/13 20:32 編集

    ありがとうございます。出来たのはできたのですが
               
    traing_data [5923 6742 5958 6131 5842 5421 5918 6265 800 0]
    test_data [ 980 1135 1032 1010 982 892 958 1028 6025 6958]
    traing_data + test_data [6903 7877 6990 7141 6824 6313 6876 7293 6825 6958]

    traing_dataの9はなぜ0なのでしょうか

    キャンセル

  • 2017/12/14 09:51 編集

    そもそも、上記の "2017/12/12 23:48" のエラーが出た原因が 「traing_dataの9 が 0 」だったからです。これにより bitcount の戻り値として 0~8 の集計データとなっておりました。(9は集計が0なので結果に含まれてなかった)
    で、「集計がなくても 最低10個(0~9)の結果を返してね。」というのが'minlength=10' ということになります。

    「traing_dataの9 が 何故0なのか 」に関しては、『元々のデータの並びが、データを2つ(Traing data と Test data)に分割したとき、片側に9のデータが偏るように"たまたま"なっていた』ということでしょう。

    キャンセル

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

ただいまの回答率

91.25%

関連した質問

  • 解決済

    PyCharmとGitLabの連携方法について

    PyCharm2017.1 を使っております https://plugins.jetbrains.com/plugin/7319-gitlab-integration 上記のG

  • 解決済

    PyQtにおけるQWidgetとQGraphicsViewの組み合わせ

    http://d.hatena.ne.jp/mFumi/20141112/1415806010 このサイトをお手本にQWidgetとQGraphicsViewの組み合わせを実

  • 解決済

    回答ありがとうございました

    質問消せないようなので問題文は 消させていただきます 回答ありがとうございました

  • 解決済

    Python ImportError エラー

    http://qiita.com/ynakayama/items/2cc0b1d3cf1a2da612e4 このサイトの通りに進めているのですが、エラーが出てしまいます。

  • 解決済

    vb2017でexcel2016操作

    vb2017を使っています。 communityです。 excel2016を開いてセルのデータを読み込みたいと思っています。 参考にしているサイトです。 http://d.

  • 解決済

    Pythonのクラスについて

    pythonのクラスについて質問があります class Python: def __init__(self,パラメーター1...): ... def ta

  • 解決済

    pythonの図示 matpotlib

    pythonで四角形が格子状に区切られそれぞれの点に数字が振られています。それをコンターマップのように(ただし、等高線はいらない)図示したいのですがどのように書けばよいでしょうか

  • 解決済

    mampでpythonをcgiとして実行したいが500インターネットサーバーエラー

    前提・実現したいこと 現在chrome拡張機能を作成しており、jsとpythonをajaxなどで連携させたいと考えています。そこで、pythonをmampでcgiとして実行したいの

同じタグがついた質問を見る

  • Python

    4197questions

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

  • Python 3.x

    2753questions

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