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

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

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

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

Q&A

解決済

1回答

851閲覧

決定木モデルの評価方法が常に同じになることについての疑問

melo_yuya

総合スコア16

Python 3.x

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

0グッド

0クリップ

投稿2020/03/19 06:46

現在大学生で研究に使用しています。クラスを行っているのですが、特徴量を増やしていくことによる判別精度の評価を行っています。

Python

1import pandas as pd 2from sklearn.model_selection import train_test_split 3from sklearn.tree import DecisionTreeClassifier 4from sklearn import tree 5from sklearn.model_selection import KFold 6from sklearn.model_selection import cross_val_score 7 8sasa2 = pd.read_csv('sasa(2)_1.csv', 9 encoding = "shift-jis", 10 skiprows = 1, 11 names = ['ID','menseki','totiriyou','0722RADER','0604RADER','0611RADER', 12 '0525A','0606A','0513A','R_avg','A_avg','rorn', 13 '0404N','0504N','0511N','0524N','1001N','1028N','1117N','0404R','0504R','0511R','0524R','1001R','1028R','1117R','0404G','0504G','0511G','0524G','1001G','1028G','1117G','0404B','0504B','0511B','0524B','1001B','1028B','1117B', 14 '0409N','0416N','0516N','0625N','1102N','1115N','0409R','0416R','0516R','0625R','1102R','1115R','0409G','0416G','0516G','0625G','1102G','1115G','0409B','0416B','0516B','0625B','1102B','1115B', 15 '0404Y','0504Y','0511Y','0524Y','1001Y','1028Y','1117Y','0409Y','0416Y','0516Y','0625Y','1102Y','1115Y','0712A','0724A','0805A','A7_avg','A7-A_avg', 16 '170623N','170720N','170809N','170829N','170926N','180715N','180928N','170623R','170720R','170809R','170829R','170926R','180715R','180928R','170623G','170720G','170809G','170829G','170926G','180715G','180928G','170623B','170720B','170809B','170829B','170926B','180715B','180928B', 17 "A8_avg","180804R","180804G","180804B","180804N", 18 '0404I1','0409I1','0416I1','0504I1','0511I1','0516I1','0524I1','170623I1','0625I1','180715I1','170720I1','170809I1','170829I1','170926I1','180928I1','1001I1','1028I1','1102I1','1115I1','1117I1','180804I1', 19 '170623Y','170720Y','170809Y','170829Y','170926Y','180715Y','180928Y','180804Y', 20 '0618A','0630A', 21 'clusterid' 22 ]) 23 24sasa3 = pd.read_csv('sasa(3)_2.csv', 25 encoding = "shift-jis", 26 skiprows = 1, 27 names = ['ID','menseki','totiriyou','0722RADER','0604RADER','0611RADER', 28 '0525A','0606A','0513A','R_avg','A_avg','rorn', 29 '0404N','0504N','0511N','0524N','1001N','1028N','1117N','0404R','0504R','0511R','0524R','1001R','1028R','1117R','0404G','0504G','0511G','0524G','1001G','1028G','1117G','0404B','0504B','0511B','0524B','1001B','1028B','1117B', 30 '0409N','0416N','0516N','0625N','1102N','1115N','0409R','0416R','0516R','0625R','1102R','1115R','0409G','0416G','0516G','0625G','1102G','1115G','0409B','0416B','0516B','0625B','1102B','1115B', 31 '0404Y','0504Y','0511Y','0524Y','1001Y','1028Y','1117Y','0409Y','0416Y','0516Y','0625Y','1102Y','1115Y','0712A','0724A','0805A','A7_avg','A7-A_avg', 32 '170623N','170720N','170809N','170829N','170926N','180715N','180928N','170623R','170720R','170809R','170829R','170926R','180715R','180928R','170623G','170720G','170809G','170829G','170926G','180715G','180928G','170623B','170720B','170809B','170829B','170926B','180715B','180928B', 33 "A8_avg","180804R","180804G","180804B","180804N", 34 '0404I1','0409I1','0416I1','0504I1','0511I1','0516I1','0524I1','170623I1','0625I1','180715I1','170720I1','170809I1','170829I1','170926I1','180928I1','1001I1','1028I1','1102I1','1115I1','1117I1','180804I1', 35 '170623Y','170720Y','170809Y','170829Y','170926Y','180715Y','180928Y','180804Y', 36 '0618A','0630A', 37 'clusterid' 38 ]) 39 40sasa3 = sasa3.replace([1,2], [2,3]) 41 42sasa23 = pd.concat([sasa2,sasa3]) 43sasa23 = sasa23.dropna(how='any') 44X=sasa23.loc[:,[ 45# '0525A', 46# '0606A', 47# '0513A', 48# '0404N', 49# '0504N', 50# '0511N', 51# '0524N', 52# '1001N', 53# '1028N', 54# '1117N', 55# '0409N', 56# '0416N', 57# '1102N', 58# '1115N' 59# '0712A', 60# '0724A', 61# '0805A', 62 '0404I1', 63 '0409I1', 64 '0416I1', 65 '0504I1', 66 '0511I1', 67 '0524I1', 68 '1001I1', 69 '1028I1', 70 '1102I1', 71 '1115I1', 72 '1117I1', 73# '0618A', 74# '0630A' 75 ]] 76y=sasa23['clusterid'] 77X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=0) 78clf = DecisionTreeClassifier(max_depth = 3) 79clf = clf.fit(X_train,y_train) 80kfold = KFold(n_splits=3) 81print("Cross-Validation score:\n{}".format( 82 cross_val_score(clf,X,y,cv=kfold)))

上記のコードを回してみました。

決定木モデルの評価方法は層化k分割交差検証を使用しました。3分割にして評価してみると、3分割目の結果が0.549で常に同じになってしまいました。

なぜこのように判別精度が常に等しくなってしまうのでしょうか?
少しでも分かる方がいれば教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

max_depth = 3なので、行われる分割の回数は相当限られたものになります(3回分岐するとして7回、その数え方でいいのかは確認していませんが)。使われる特徴量の数もその程度です。

良い分割から試みられるので、特徴量を増やす前から良い特徴量が十分に含まれていれば、モデルには反映されないかと思います。

plot_treeを使うなどして、実際にどのような決定木が構築されているのかを確認すると良いと思います。

sklearn.tree.plot_tree — scikit-learn 0.22.2 documentation

投稿2020/03/20 19:32

hayataka2049

総合スコア30935

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問