決定木の種類
モジュール sklearn.tree
tree.DecisionTreeClassifier: 分類木
tree.DecisionTreeRegressor: 回帰木
tree.export.graphviz: 生成された決定木を描画専用の DOT 形式にエクスポートし、決定木を視覚化できます
tree.ExtraTreeClassifier: 分類木の高ランダム バージョン
tree.ExtraTreeRegressor
決定木モデリングのプロセス
決定木は、分類子の統合を通じて最終的な決定木を選択します。決定木分類のためにいくつかの特徴を複数回ランダムに選択し、複数の決定木を取得した後、最も適合する効果 (最高スコア) を持つ決定木モデルを選択します。
各ノードの分類は、エントロピー係数とジニ係数に基づいてノードを分割し、係数を計算した後、不純物が得られます.不純物が低いほど、ノードに分類されたデータはより統一されます. たとえば、リンゴ、ナシ、バナナがあり、ノード カテゴリはリンゴに分類されますが、ナシとバナナが少数含まれています。不純度が 0 の場合、すべてのレコードが同じラベルを持つことを意味し、葉ノードの不純度は 0 です。
関連コード:
モデリングコード
clf = tree.DecisionTreeClassifier(criterion='entropy'[default gini]
, random_state=30[特定の規則に従って地物を選択する, 地物をランダムに選択しない, 同じ値を入力すると同じツリーが生成される]
, splitter='random'【コントロール ランダムに選択された特徴は、ランダムとベストに分けられます. ベストが特徴をランダムに選択する決定木である場合, より重要な特徴が分岐のために選択されます. ランダムが分岐である場合, よりランダムになり、選択されたトレーニングのフィッティングオーバーフィッティング時のフィッティングを減らすためにこの方法がよく使われる場合]
、 max_depth=3 [ツリーの最大レイヤー数(ルートレイヤーは含まない)、大きすぎるとオーバーします。 -fit であり、
小さすぎる場合は underfit になります。オーバーフィッティングになります]
, min_samples_split=10 [ノードには少なくとも 10 個のノードが含まれます])
clf=clf.fit(Xtrain,Ytrain)
score=clf.score(Xtest,Ytest)
ビジュアルコード
グラフビズをインポート
feature_name=['a','b','c']
dot_data=tree.export_graphviz(clf, feature_name=feature_name,class_names=['a','b','v'],filled=True,rounded=True)
グラフ=graphviz.Source(dot_data)
注: feature_name はデータ セットの特徴、class_names はレコードのラベル、filled は色を付けるかどうかです。
#ディシジョン ツリー表示機能の重要性
clf.feature_importance_
[zip(feature_name,clf.feature_importances_)]
環境設定
matplotlib.pyplot を plt としてインポート
テスト=[]
for i in range(10):
clf=tree.DecisionTreeClassifier(max_depth=i+1
,criterion = "entropy"
,random_state=30)
clf=clf.fit(Xtrain,Ytrain)
スコア=clf.score(Xtest,Ytest)
test.append(score)
plt.plot(range(1,11),test,color='red',label='max_depth')
plt.legend()
plt.show()
パラメータをトラバースし、max_depth だけでなく他のパラメータも含めて、最適なパラメータを選択します。
重要なインターフェース
clf.apply(Xtest)# 各サンプルが配置されているリーフ ノードのインデックスを返します
clf.predict(Xtest)#各サンプルの分類と回帰の結果を返します