テキスト分類のValueError: dimension mismatchの対処で困っています。。
- 評価
- クリップ 0
- VIEW 2,756
実現したいこと
テキストデータ(仕事内容(20文字程度))をjanomeで形態素解析し、CountVectorizerで配列化し、sklearn.naive_bayes(MultinomialNB)で学習させ、仕事内容から仕事分類を予測したいです。
※説明変数は仕事内容、目的変数は仕事分類、環境はpython3.6
困っていること
学習及び検証までは実施できましたが、この学習済みモデルに未知データ(学習、検証以外のデータ)を与えて、検証でやった正答率が正しいかを確認したいと思っていますが、以下エラーになり対処が分かりません。。(p_-)皆さんに教えていただければ幸いです。どうぞよろしくお願いします。m(__)m
コード
from janome.tokenizer import Tokenizer
documents = [] # 形態素用の配列を用意
t = Tokenizer()
y = [] # クラスラベル用の配列を用意
with open('./test.csv') as f:
reader = csv.reader(f)
next(reader)
for columns in reader:
y.append(columns[1]) # 仕事分類をクラスラベルとしてまとめる
document = [] # 1行分の仮の配列を用意
for token in t.tokenize(columns[0]):
document.append(token.surface) # 仮の配列に形態素を追加
documents.append(' '.join(document))
import numpy as np
from sklearn.feature_extraction.text $import CountVectorizer
CountVect = CountVectorizer(min_df=1)
X = CountVect.fit_transform(documents)
from sklearn.externals import joblib
clf2 = joblib.load('clf.pkl')
clf2.predict(X)
print(clf2.score(X, y))
エラー内容
ValueError Traceback (most recent call last)
<ipython-input-38-8c6bc2aa9621> in <module>()
4
5 #■学習済みモデルから、未知データを予測する
----> 6 clf2.predict(X)
7 print(clf2.score(X, y))
8
C:\Users\XXXX\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\naive_bayes.py in predict(self, X)
63 Predicted target values for X
64 """
---> 65 jll = self._joint_log_likelihood(X)
66 return self.classes_[np.argmax(jll, axis=1)]
67
C:\Users\XXXX\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\naive_bayes.py in _joint_log_likelihood(self, X)
705
706 X = check_array(X, accept_sparse='csr')
--> 707 return (safe_sparse_dot(X, self.feature_log_prob_.T) +
708 self.class_log_prior_)
709
C:\Users\XXXX\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\utils\extmath.py in safe_sparse_dot(a, b, dense_output)
182 """
183 if issparse(a) or issparse(b):
--> 184 ret = a * b
185 if dense_output and hasattr(ret, "toarray"):
186 ret = ret.toarray()
C:\Users\XXXX\AppData\Local\Continuum\Anaconda3\lib\site-packages\scipy\sparse\base.py in __mul__(self, other)
403
404 if other.shape[0] != self.shape[1]:
--> 405 raise ValueError('dimension mismatch')
406
407 result = self._mul_multivector(np.asarray(other))
ValueError: dimension mismatch
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
学習済みモデルと与えてる未知データのベクトル行列の次元数が違うからValueErrorになってるんじゃないですかね
学習済みモデルをoutputして他で適用するのは自分は試していないので正しいかどうかはなんとも言えませんが
print(X.shape)
上記のようなコードで次元数の確認を行うことをオススメします
学習済みモデルを作成した際の次元数はどんなものだったか確認して、その次元数に合うようにすれば、エラーは消えると思いますが
あと蛇足ですがコード大変読みにくいので他の方にいただいたアドバイスはしっかり目を通すべきかと
追記
回答したあとで見つけましたが、こちらの質問が今回の本当に知りたい回答に近いと思いました。
機械学習の勉強を初めてまだ2ヶ月程度の自分はまだ当たっていませんが、私自身もいずれ当たる課題だと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.32%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
shimizukawa
2017/07/22 09:00
ソースコードのインデントが消滅していてコードが非常に読みづらいので、次のページを参考にして、ソースコード部分を整形してください。 https://teratail.com/help/question-tips#questionTips3-5-1
Ya.Tatsuro
2017/07/22 13:32 編集
見ていただきありがとうございます‼
すみませんでした、スペース入れても変わらなかったので、$を入れて分かるようにしてみました。どうぞ、よろしいお願いしますm(_ _)m
shimizukawa
2017/07/22 14:52
いやそうじゃない。リンク先読みました? "teratailではソースコードをシンタックスハイライトすることができます。" の部分です
Ya.Tatsuro
2017/07/23 21:22
誤っており、また遅くなり大変すみませんでした。再度ご確認頂けましたらと思います。