# -*- 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數據分析(機器學習)經典案例,每個案例會教你數據預處理、畫圖和模型優化。比有些簡單調個包跑一下的課程負責任的多。
