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

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

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

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

Python 3.x

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

機械学習

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

Python

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

Q&A

解決済

1回答

11512閲覧

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

benkyouchuu

総合スコア26

Python 2.7

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

Python 3.x

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

機械学習

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

Python

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

0グッド

1クリップ

投稿2018/01/10 15:10

編集2018/01/10 15:12

現在、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時間ぐらい悩んでいます。

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

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

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


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

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

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

python

1from sklearn.metrics import accuracy_score 2import numpy as np 3 4a = np.random.randint(3, size=(10, 2)) 5b = np.random.randint(3, size=(10, 2)) 6 7print(a) 8print(b) 9 10try: 11 print(accuracy_score(a,b)) 12except ValueError as e: 13 print(e) 14 15print('0-acc:', accuracy_score(a[:, 0],b[:, 0])) 16print('1-acc:', accuracy_score(a[:, 1],b[:, 1]))

投稿2018/01/10 17:59

編集2018/01/11 07:58
mkgrei

総合スコア8560

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

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

benkyouchuu

2018/01/11 07:25

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

2018/01/11 07:59

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

2018/01/30 12:42

ありがとうございます。 別々にすることで解決しました。 返信が遅くなりまして申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問