決定木アルゴリズムを実装sklearn

1、決定木アルゴリズムは、ノンパラメトリックな判定アルゴリズムでは、マルチレベルであると分類データが異なる特性に応じて決定され、最終的な判定結果予測が必要です。これは、分類アルゴリズムを解決することができ、回帰の問題を解決することができる優れた説明力で、。さらに、決定木の出発点は、ツリーの各デシジョン・ポイントにある構築する方法、開始点を複数有する決定木を構築する構築するための種々の方法を持つための方法は、必要がある分割した寸法上のノードでこれらの寸法のために閾値ことパーティショニングを行うように詳細をして。

特定のプログラムコードは、分類と回帰問題を解決するにsklearnにおける決定木アルゴリズムを呼び出し、次のとおりです。


#インポート1-1基本的なトレーニングデータセット
NP ASインポートnumpyの
インポートは、PLT AS matplotlib.pyplot
からインポートデータセットsklearn
D = datasets.load_iris()
X = d.data [:2]
Y = d.target
(plt.figure )
plt.scatter(X [Yの== 0,0]、X [0,1 == Y]、色= "R&LT")
plt.scatter(X [Yの== 1,0]、X [Y == 1,1]、カラー= "G")
plt.scatter(X [Y == 2,0]、X [2,1 == Y]、色= "B")
plt.show()
#1-2予測達成するためのデータ分類トレーニングの輸入決定木アルゴリズムsklearn
sklearn.treeインポートDecisionTreeClassifierから
DT1 = DecisionTreeClassifier(MAX_DEPTH = 2、基準=「エントロピー」)#は、ハイパー決定ツリー分類器関連の決定を定義します
(dt1.fit X、Y)
DEF plot_decision_boundary(モデル、軸)#出力決定境界機能(二次元データ点)
X0、X1 = np.meshgrid(
np.linspace(軸[0]、軸[1]、INT((軸[1]γ軸[0])* 100))。(-1,1)を整形、
np.linspace(軸[2]、軸[3]、INT((軸[3] -軸[2])* 100)。)整形(-1,1)

x_new = np.c_ [x0.ravel()、x1.ravel()]
y_pre = model.predict(x_new)
ZZ = y_pre.reshape(x0.shape)
matplotlib.colorsからインポートListedColormap
CUS = ListedColormap([ "#1 EF9A9A"、 "#1 FFF59D"、 "#90CAF9"])
plt.contourf(X0、X1 、ZZ、CMAP = CUS)
plot_decision_boundary(DT1、軸= 0.5,8,0,3])
plt.scatter(X [Yの== 0,0]、[Y == 0,1] X、色=」 R ")
plt.scatter(X [Yの== 1,0]、色= [Y == 1,1]×" G」)
plt.scatter(X [Yの== 2,0]、X [Y == 2,1]、色= "B")
plt.show()
定义二分类问题的信息熵计算函数np.sum(-pの*のNP。
(P))のログデフエントロピー(p)を:
* -p np.logリターン(P) - (1-P)* np.log(1-P)
X1 = np.linspace(0.01,0.99,100)
Y1 =エントロピー(X1)
plt.plot(X1、Y1 、 "R&LT")
()plt.show
#情報エントロピー原理決定木構築エントロピー実装コードのデータ分割原理の実施形態達成
DEF分割を(X、Y、D、値):
index_a =(Xの[: 、D <=値)
index_b =(X [:、D]>値)
のリターンX [index_a]、X [index_b]、Y [index_a]、Y [index_b]
コレクションからインポートカウンタ
DEFエントロピー(Y):
カウンタカウンタ=(Y)
RES = 0.0
Counter1.values NUMにするための():
P NUM = / LEN(Y)は
- RES = + * P np.log(P)
RESを返す
:DEF try_spit(X、Y)
best_entropy =フロート( "INF")
best_d、best_v = -1、-1
の範囲内のD(x.shape用)[1]:
sorted_index = np.argsort(Xの[:、D])
のIの範囲内の(1、LEN(X)):
もしX [sorted_index [I-1]、D] = xで[sorted_index [i]は、D]!
V =(X [sorted_index [I-1]、D] + X [sorted_index [i]は、D])/ 2
X_L、X_R、Y_L、y_r =スプリット(X、Y、D、V)
E =エントロピー(Y_L )+エントロピー(y_r)
もしE <best_entropy:
best_entropy、best_d、best_v = E、D、V
、best_entropy戻りbest_d、best_v
プリント(try_spit(X、Y))
best_entropy = try_spit(x、y)は[0]
best_d = try_spit(x、y)は[1]
best_v = try_spit(x、y)は[2]
X_L、X_R、Y_L、y_r =スプリット(X、Y、best_d、best_v)
プリント(エントロピー(Y_L))
プリント(エントロピー(y_r ))
基尼系数方式构建决策树的代码实现
sklearn.treeインポートからDecisionTreeClassifier
DT2 = DecisionTreeClassifier(MAX_DEPTH = 2、基準= "ジニ")#决策树的分类定义楽器相关决策超参数
dt2.fit(x、y)は
plot_decision_boundary(DT2、軸= [0.5,8、 0,3])
plt.scatter(X [Yの== 0,0]] [Y == 0,1、X、色= "R")
plt.scatter(X [Yの== 1,0]、X [Yの== 1,1]、色= "G")
plt.scatter(X [Yの== 2,0]、色= "B"、[Y == 2,1]×)
plt.show()
DEF分割(X、Y、D、値):
index_a =(X [:、D <=値)
index_b =(X [:、D]>値)
のリターン[index_a]、[index_b]、Y [X X index_a]、yは[index_b]
コレクションからインポートカウンタ
DEFジニ(Y):
カウンタ=カウンタ(Y)
RES = 1.0
Counter1.valuesにnumの():
P = NUM / LEN(V)
A - P = 2 **
RESを返す
:(X、Y)try_spit1 DEF
best_gini =フロート( "INF")
best_d、best_v = -1、-1
の範囲内のD(x.shapeの[1])の場合:
sorted_index np.argsort =(Xの[: D])
の範囲で
I(1、LEN(X)):!IF X [sorted_index [I-1]、D] = X [sorted_index [I]、D]
。V =(X [sorted_index [I- 1 ]、D] + X [sorted_index [I]、D])/ 2
X_L、X_R、Y_L、Y_r =スプリット(X、Y、D、V)
G =ジニ(Y_L)+ジニ(Y_r)
IF G <best_gini :
best_gini、best_d、best_v = G、D、Vの
リターン[best_gini、best_d、best_v]
best_gini、best_d、best_v try_spit1 =(X、Y)
の印刷(best_gini、best_d、best_v)
決定剪定の数に対応する#フィッティングを通じて極力低減と
NPとして輸入numpyの
PLTインポートAS matplotlib.pyplot
sklearnインポートデータセットからの
データサンプルを生成するために、デフォルトのデータ#100としてX、Y = datasets.make_moons(ノイズ= 0.25、random_state = 666)
プリント(x.shape)
プリント(y.shape)
plt.figureを()
plt.scatter(X [Y == 0,0]、X [0,1 == Y]、色= "R&LT")
plt.scatter(X [Yの== 1,0]、X [Y = 1,1 =]、カラー= "G")
plt.show()
sklearn.treeインポートDecisionTreeClassifierから
DT2 = DecisionTreeClassifier (MAX_DEPTH = 2、10 = min_samples_split、min_samples_leaf = 6、max_leaf_nodesの= 4)、#デフォルトケースジニと比較係数、深さは、これまでにジニ係数が0で分周されたであろう
#スーパーツリー主要パラメータ
dt2.fit(X、Y)
- plot_decision_boundary([2,3、-1,1.5] DT2、軸=)
plt.scatter (X [Y == 0,0]、X [0,1 == Y]、色= "R&LT")
plt.scatter(X [Yの== 1,0]、X [1,1 == Y] 、カラー= "G")
PLT。ショー()
#は、回帰問題を解決するために決定木を使用
NP AS numpyのをインポート
インポートPLT AS matplotlib.pyplot
sklearnインポートデータセットから
= datasets.load_boston(D)
X-d.dataは=
y-d.target =
印刷(x.shape)
印刷(y.shapeを)
インポートtrain_test_splitのsklearn.model_selection
x_train、x_test、y_train、android.permission.FACTOR。train_test_split =(X、Y、random_state = 666)
sklearn.treeインポートDecisionTreeRegressorから
DR = DecisionTreeRegressor()
dr.fit(x_train、y_train)
プリント(dr.score(x_test 、android.permission.FACTOR。))
= 1トレーニングデータセットで、テストセットにおけるプリント(dr.score(x_train、y_train))#R2が比較的小さいので、オーバーフィッティング生成された、学習曲線は、より良好な過剰適合を反映することができケース開閉
#学習曲線は、パラメータの異なる組み合わせの下でプロット
sklearn.metricsインポートmean_squared_errorから
DEF plot_learning_curve(アルゴ、x_train、x_test、y_train、android.permission.FACTORを。):
train_score = []
test_score = []
範囲(1、(x_train)をLEN)中のI
algo.fit(x_trainの[:I]、y_trainの[:I])
y_train_pre = algo.predict(x_trainの[:I])
y_test_pre = algo.predict(x_test)
:(y_train_pre)mean_squared_error(y_train の[I])train_score.append
test_score.append(mean_squared_error(y_test、y_test_pre))
plt.figure()
の範囲内plt.plot([私のために(1 、LEN(x_train))]、np.sqrt(train_score)、 "G"、ラベル= "train_error")
plt.plot([I iに対して範囲内で(1、LEN(x_train))]、np.sqrt(test_score )、 "R"、ラベル= "test_error")
plt.legend()
#1 plt.axis([0、LEN(x_train)+1,0,5])
plt.show()
plot_learning_curve(DecisionTreeRegressor(MAX_DEPTH = 1) 、x_train、x_test、y_train、y_test)#1 underfittingケース
plot_learning_curve(DecisionTreeRegressor(MAX_DEPTH = 5) 、x_train、x_test、y_train、y_test)#は、 より良好なケースフィット
plot_learning_curve(DecisionTreeRegressorを(MAX_DEPTH = 15)、x_train、 x_test、y_train、y_test)#の過剰適合ケース













おすすめ

転載: www.cnblogs.com/Yanjy-OnlyOne/p/11372286.html