[解決済み] sklearn classifier get ValueError: Bad input shape.
2022-02-18 20:12:17
質問
私はcsvを持っています、構造体は次のとおりです。
CAT1,CAT2,TITLE,URL,CONTENT
CAT1、CAT2、TITLE、CONTENTは中国語で書かれています。
列車を走らせたい
LinearSVC
または
MultinomialNB
X(TITLE)とfeature(CAT1,CAT2)を指定した場合、どちらもこのエラーが発生します。
追記:この例では以下のようなコードを書いています。 scikit-learn text_analytics (テキスト分析)
import numpy as np
import csv
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
label_list = []
def label_map_target(label):
''' map chinese feature name to integer '''
try:
idx = label_list.index(label)
except ValueError:
idx = len(label_list)
label_list.append(label)
return idx
c1_list = []
c2_list = []
title_list = []
with open(csv_file, 'r') as f:
# row_from_csv is for shorting this example
for row in row_from_csv(f):
c1_list.append(label_map_target(row[0])
c2_list.append(label_map_target(row[1])
title_list.append(row[2])
data = np.array(title_list)
target = np.array([c1_list, c2_list])
print target.shape
# (2, 4405)
target = target.reshape(4405,2)
print target.shape
# (4405, 2)
docs_train, docs_test, y_train, y_test = train_test_split(
data, target, test_size=0.25, random_state=None)
# vect = TfidfVectorizer(tokenizer=jieba_tokenizer, min_df=3, max_df=0.95)
# use custom chinese tokenizer get same error
vect = TfidfVectorizer(min_df=3, max_df=0.95)
docs_train= vect.fit_transform(docs_train)
clf = LinearSVC()
clf.fit(docs_train, y_train)
のエラーが発生しました。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-24-904eb9af02cd> in <module>()
1 clf = LinearSVC()
----> 2 clf.fit(docs_train, y_train)
C:\Python27\lib\site-packages\sklearn\svm\classes.pyc in fit(self, X, y)
198
199 X, y = check_X_y(X, y, accept_sparse='csr',
--> 200 dtype=np.float64, order="C")
201 self.classes_ = np.unique(y)
202
C:\Python27\lib\site-packages\sklearn\utils\validation.pyc in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric)
447 dtype=None)
448 else:
--> 449 y = column_or_1d(y, warn=True)
450 _assert_all_finite(y)
451 if y_numeric and y.dtype.kind == 'O':
C:\Python27\lib\site-packages\sklearn\utils\validation.pyc in column_or_1d(y, warn)
483 return np.ravel(y)
484
--> 485 raise ValueError("bad input shape {0}".format(shape))
486
487
ValueError: bad input shape (3303, 2)
解決方法は?
meeloさんのおかげで、この問題は解決しました。
彼が言ったように、私のコードでは
data
は特徴ベクトルです。
target
は目標値です。2つのものをごっちゃにしてしまいました。
ということを知りました。
TfidfVectorizer
は、データを[data, feature]に処理し、各データは1つのターゲットにのみマッピングされる必要があります。
もし、2つのタイプのターゲットを予測したいのであれば、2つの異なるターゲットが必要です。
-
target_C1
すべてのC1値で -
target_C2
をC2値すべてで表示します。
そして,2つのターゲットと元データを用いて,それぞれのターゲットに対して2つの分類器を学習します.
関連
-
Python関数の高度な応用を解説
-
python string splicing.join()とsplitting.split()の説明
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] ValueError: 未知のラベルタイプ:'unknown'
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
Python関数の高度な応用を解説
-
Pythonによるjieba分割ライブラリ
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】ValueError: xとyは同じサイズでなければならない