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

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

ただいまの
回答率

90.51%

  • Python

    7947questions

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

  • Python 3.x

    6359questions

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

  • Python 2.7

    1263questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

  • 機械学習

    682questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

sklearn、RandomForestを使ったマルチラベルでの分類器の評価の際のエラー

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 425

benkyouchuu

score 16

現在、sklearnのRandomForestを使った分類器を作成しています。

 分類器について

ラベル:ユーザの年と性別のフラグ
data:文書

文書を入れると分類され結果、文書のユーザと性別がわかるようにしたいです。

学習は可能なのですが、評価方法がわからず困っております。

 評価方法

accuracy_scoreを使ったシンプルなものを検討していますが、実際に実行すると

ValueError: multiclass-multioutput is not supported

と出てしまい、前に進めません。

ソース

def machine_learning(db):
    dates =[]
    labels = []
    dictionary=get_dictionary(db)
    for age in range(1,3):
        for gender_flag in range(0,1):
            descriptions = []
            for data in db.profile.find({"age": age*10,"gender": gender_flag}).limit(1000):
                descriptions.append(data['description'].encode('utf-8'))
            tagger = MeCab.Tagger('-Ochasen')
            for description in descriptions:
                words=[]
                nodes = tagger.parseToNode(description)
                while nodes:
                    if nodes.feature.split(',')[0] == '名詞':
                        word = nodes.surface.decode('utf-8')
                        words.append(json.dumps(word, ensure_ascii=False))
                    nodes = nodes.next
                labels.append([age,gender_flag])
                tmp = dictionary.doc2bow(words)
                dense = list(gensim.matutils.corpus2dense([tmp], num_terms=len(dictionary)).T[0])
                dates.append(dense)

    data_train_s, data_test_s, label_train_s, label_test_s = train_test_split(dates, labels, test_size=0.4)

    estimator = RandomForestClassifier(random_state=777)
    estimator.fit(data_train_s, label_train_s)
    predicted = estimator.predict(data_test_s)
    # get the accuracy
    print accuracy_score(np.ndarray(label_test_s), predicted)

どうか助けてください。。。。

この問題で4時間ぐらい悩んでいます。

また、マルチラベルで他にいい方法があれば提案して頂けたら嬉しいです。

よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

年齢と性別を別々に与えればマルチラベルではなくなります。


追記:
データの数がマルチなら、そのすべての値は0か1でなければなりません。

今、性別はその要件を満たしますが、年齢がバイナリではありません。

ならば、性別の正解率は性別で行って、
年齢の正解率は年齢で行えばよいことになります。

from sklearn.metrics import accuracy_score
import numpy as np

a = np.random.randint(3, size=(10, 2))
b = np.random.randint(3, size=(10, 2))

print(a)
print(b)

try:
    print(accuracy_score(a,b))
except ValueError as e:
    print(e)

print('0-acc:', accuracy_score(a[:, 0],b[:, 0]))
print('1-acc:', accuracy_score(a[:, 1],b[:, 1]))

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/11 16:25

    別々にラベルをつけても学習してくれるのでしょうか?

    キャンセル

  • 2018/01/11 16:59

    学習はそのままで問題ありません。
    評価する時に別々に行えば良いです。
    それっぽいサンプルコードを追記しました。

    キャンセル

  • 2018/01/30 21:42

    ありがとうございます。
    別々にすることで解決しました。

    返信が遅くなりまして申し訳ございません。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    Kerasを用いたCNN3によるcifar10の画像認識

    Keras初心者です。 CNNを理解するためにKerasでモデルを作り、cifar10のデータを元にモデルの認識精度を出力しようとしています。 以下のプログラムに対するエラーの

  • 解決済

    Tensorflowのfully_connected_feedの実行にエラーが続く

    tensoflowのfully_connected_feed.pyを実行しようとしているのですが、どう試行錯誤してもエラーが続きます。 tensorflowのインストールの仕方、

  • 解決済

    hyperoptを使ってdeep learning(keras)のhyper parameterをt...

    Hyperoptというpythonのライブラリーがあります。 これは、機械学習において、hyper parameterを自動的に最適化する優れものです。 また、tensolfl

  • 解決済

    Pyhon : k 近傍の混同行列

    前提・実現したいこと k 近傍法の実装の正解率の結果を元に混同行列を作成したいのですがどうすればいいのか。(kの大きさごとに混合行列を作成したいため) 該当のソースコード fr

  • 解決済

    swift 特定の文字を含むラベルを探す方法

    Swift3にて、複数のラベルの中から特定の文字列が含まれているラベルを探し出し、そのラベルを特定する方法を知りたいです。 <試したこと> .contains で特定の文字列が

  • 解決済

    入力データの読み込みのエラー(Keras)

    識別(りんごとオレンジ)https://qiita.com/hiroeorz@github/items/ecb39ed4042ebdc0a957 上記のプログラム参考にしてRG

  • 解決済

    自前のデータセットの作成方法について

     前提・実現したいこと 今年の4月から機械学習の勉強を始めた大学院生です。 横軸が時間、縦軸が力のグラフを分類してくれるモデルを作りたいと考えています。 そのため、測定したデー

  • 解決済

    学習の様子を可視化できない

    学習の様子を可視化できないです。 ・ ・ ・ # placeholders input_sequence = Input((story_maxlen,)) question =

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

  • Python

    7947questions

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

  • Python 3.x

    6359questions

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

  • Python 2.7

    1263questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

  • 機械学習

    682questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。