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

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

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

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

Python

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

Q&A

解決済

1回答

957閲覧

ValueError: Number of features of the model must match the input. scikit-learnで決定木を実装したいがエラー

Quad

総合スコア18

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/06/22 06:38

編集2019/06/22 10:50

前提・実現したいこと

scikit-learnを使って決定木を実装しています。
可視化しようとdtreevizのコードを書いていたらエラーが発生しました。
dtreevizは関係ないかもしれません。

実行結果・エラーメッセージ

0.7368421052631579 0.9642857142857143 変数 重要度 0 食料 0.000000 1 住居 0.000000 2 水道光熱費 0.183482 3 家具家事用品 0.000000 4 衣類 0.095694 5 保険医療 0.000000 6 交通通信 0.000000 7 教育 0.000000 8 教養娯楽 0.720824 9 諸雑費 0.000000 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-104-2d435d3c4d5a> in <module>() 36 target_name='大都市圏分類', 37 feature_names=X_train.columns, ---> 38 class_names=[str(i) for i in class_names] 39 ) 40 4 frames /usr/local/lib/python3.6/dist-packages/sklearn/tree/tree.py in _validate_X_predict(self, X, check_input) 400 "match the input. Model n_features is %s and " 401 "input n_features is %s " --> 402 % (self.n_features_, n_features)) 403 404 return X ValueError: Number of features of the model must match the input. Model n_features is 4 and input n_features is 10

該当のソースコード

python

1import pandas as pd 2from sklearn.model_selection import train_test_split 3from sklearn import tree 4from dtreeviz.trees import dtreeviz 5data = pd.read_csv('consumerPrices_tree.csv') 6 7X = data.drop(['都道府県', '大都市圏分類'], axis=1) 8Y = data['大都市圏分類'] 9 10from sklearn.tree import DecisionTreeClassifier 11model = DecisionTreeClassifier(max_depth=3, random_state=0) 12model.fit(X, Y) 13model.predict(X) 14 15predicted = pd.DataFrame({'Predicted':model.predict(X)}) 16data_predicted = pd.concat([data, predicted], axis =1) 17sum(model.predict(X)==Y)/len(Y) 18 19X_train,X_test,Y_train,Y_test = train_test_split(X, Y,random_state=0, test_size=0.4) 20 21model = DecisionTreeClassifier(max_depth=3, random_state=0) 22model.fit(X_train, Y_train) 23model.predict(X_train) 24from sklearn import metrics 25print(metrics.accuracy_score(Y_test, model.predict(X_test))) 26print(metrics.accuracy_score(Y_train, model.predict(X_train))) 27 28importance = pd.DataFrame({ '変数':X.columns, '重要度':model.feature_importances_}) 29print(importance) 30 31class_names = Y_train.unique().tolist() 32viz = dtreeviz( 33 classifier, 34 X_train, 35 Y_train, 36 target_name='大都市圏分類', 37 feature_names=X_train.columns, 38 class_names=[str(i) for i in class_names] 39 ) 40 41display(viz) 42 43

csvです。他のサイトが公開しているデータなので一応伏せています。
ここからダウンロードできます。

都道府県,食料,住居,水道光熱費,家具家事用品,衣類,保険医療,交通通信,教育,教養娯楽,諸雑費,大都市圏分類 北 海 道,98.7,82.6,116.3,99.3,103.8,100.2,99.5,93.2,97.1,100.9,1 ...... ......

試したこと

モデルの特徴が4個というのがよく分かりません。
なぜ10個ではないのでしょうか?

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

google colaboratory (python3)

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

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

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

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

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

hayataka2049

2019/06/22 08:34

このままだと回答しづらいので、エラーメッセージの全体、省略なしのcsvを示していただけないでしょうか。
Quad

2019/06/22 08:42

本当に申し訳ありません。 今パソコンが触れない状態です。 2時間後には触れるはずなので使えるようになり次第修正します。
Quad

2019/06/22 10:25

修正しました。
guest

回答1

0

ベストアンサー

取り急ぎコードを見てみましたが、

python

1model = DecisionTreeClassifier(max_depth=3, random_state=0) 2# 中略 3 4viz = dtreeviz( 5 classifier, 6 X_train, 7 Y_train, 8 target_name='大都市圏分類', 9 feature_names=X_train.columns, 10 class_names=[str(i) for i in class_names] 11 )

modelとして決定木を定義しているのに、下でclassifierを渡しているので、通常ならclassifierという変数がないというエラーになるはずです。

Jupyterで実行しているようなので、以前に定義したclassifierが残った状態でそれを参照しているのではないでしょうか。

投稿2019/06/22 10:32

hayataka2049

総合スコア30933

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

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

Quad

2019/06/22 10:35

なるほど! 少し前にアヤメで試していたclassifierが残っていました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問