python選擇最佳決策樹參數


# -*- coding: utf-8 -*-
#導入數據
import pandas as pd
data = pd.read_csv(r'E:\Python\machine learning\own\decision_tree\test.csv')
X = data.ix[:,0:4].values
y = data.ix[:,4].values

#設置待選的參數        
from sklearn.tree import DecisionTreeClassifier
from sklearn.grid_search import GridSearchCV
from sklearn.model_selection import StratifiedKFold
decision_tree_classifier = DecisionTreeClassifier()
parameter_grid = {'max_depth':[1,2,3,4,5],
                  'max_features':[1,2,3,4]}
cross_validation = StratifiedKFold(y,n_folds=10)

#將不同參數帶入
gridsearch = GridSearchCV(decision_tree_classifier,
                          param_grid = parameter_grid,
                          cv = cross_validation)
gridsearch.fit(X,y)

#得分最高的參數值,並構建最佳的決策樹
best_param = gridsearch.best_params_
best_decision_tree_classifier = DecisionTreeClassifier(max_depth=best_param['max_depth'],
                                                       max_features=best_param['max_features'])
  DecisionTreeClassfier的參數有
1.criterion gini or entropy 2.splitter best or random 前者是在所有特征中找最好的切分點 后者是在部分特征中(數據量大的時候) 3.max_features 默認是None(所有),log2,sqrt,N 特征小於50的時候一般使用所有的 #N就是特征屬性的個數 4.max_depth 數據少或者特征少的時候可以不管這個值,如果模型樣本量多,特征也多的情況下,可以嘗試限制下 #防止過擬合 5.min_samples_split 如果某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特征來進行划分。 如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。 6.min_samples_leaf 這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被 剪枝,如果樣本量不大,不需要管這個值,大些如10W可是嘗試下5 7.min_weight_fraction_leaf 這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起 被剪枝默認是0,就是不考慮權重問題。一般來說,如果我們有較多樣本有缺失值, 或者分類樹樣本的分布類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。 8.max_leaf_nodes 通過限制最大葉子節點數,可以防止過擬合,默認是"None”,即不限制最大的葉子節點數。 如果加了限制,算法會建立在最大葉子節點數內最優的決策樹。 如果特征不多,可以不考慮這個值,但是如果特征分成多的話,可以加以限制 具體的值可以通過交叉驗證得到。 9.class_weight 指定樣本各類別的的權重,主要是為了防止訓練集某些類別的樣本過多 導致訓練的決策樹過於偏向這些類別。這里可以自己指定各個樣本的權重 如果使用“balanced”,則算法會自己計算權重,樣本量少的類別所對應的樣本權重會高。 10.min_impurity_split 這個值限制了決策樹的增長,如果某節點的不純度 (基尼系數,信息增益,均方差,絕對差)小於這個閾值 則該節點不再生成子節點。即為葉子節點 。

注:學習的網易雲課堂的Python數據分析(機器學習)經典案例,每個案例會教你數據預處理、畫圖和模型優化。比有些簡單調個包跑一下的課程負責任的多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM