[TOC] 更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlhtml
scikit-learn庫之決策樹
在scikit-learn庫中決策樹使用的CART算法,所以該決策樹既能夠解決迴歸問題又能夠解決分類問題,即下面即將講的DecisionTreeClassifier
和DecisionTreeRegressor
兩個模型。node
接下來將會討論這二者的區別,因爲是從官方文檔翻譯而來,翻譯會略有偏頗,有興趣的也能夠去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.treepython
1、DecisionTreeClassifier
1.1 使用場景
DecisionTreeClassifier
模型即CART算法實現的決策樹,一般用於解決分類問題。算法
1.2 代碼
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data[:, [2, 3]]
y = iris.target
clf = DecisionTreeClassifier(random_state=0)
clf.fit(X, y)
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False, random_state=0,
splitter='best')
cross_val_score(clf, iris.data, iris.target, cv=10)
array([1. , 0.93333333, 1. , 0.93333333, 0.93333333,
0.86666667, 0.93333333, 1. , 1. , 1. ])
1.3 參數詳解
- **criterion:**特徵選擇,str類型。criterion='gini'表示基尼指數;criterion='entropy'表示信息增益,推薦使用'gini'。默認爲'gini'。
- **splitter:**特徵劃分點選擇,str類型。splitter='best'在特徵的全部劃分點中找出最優的劃分點,適合小樣本量;splitter='random'隨機的在部分劃分點中找到局部最優的劃分點,適合大樣本量。默認爲'best'。
- **max_depth:**最大深度,int類型。若是樣本特徵數較少可使用默認值,若是樣本特徵數較多通常用max_depty=10-100限制樹的最大深度。默認爲None。
- **min_samples_split:**內部節點劃分須要最少樣本數,float類型。限定子樹繼續劃分的條件,若是某節點的樣本數少於min_samples_split,則會中止繼續劃分子樹。若是樣本數量過大,建議增大該值,不然建議使用默認值。默認爲2。
- **min_samples_leaf:**葉子節點最少樣本數float類型。若是在某次劃分葉子節點數目小於樣本數,則會和兄弟節點一塊兒剪枝。若是樣本數量過大,建議增大該值,不然建議使用默認值。默認爲1。
- **min_weight_fraction_leaf:**葉子節點最小的樣本權重和,float類型。該參數限制了葉子節點全部樣本權重和的最小值,若是小於該值,則會和兄弟節點一塊兒剪枝。若是樣本有角度的缺失值,或者樣本的分佈誤差較大,則能夠考慮權重問題。默認爲0。
- **max_features:**劃分的最大特徵數,str、int、float類型。max_depth='log2'表示最多考慮$log_2n$個特徵;max_depth={'sqrt','auto'}表示最多考慮$\sqrt\(個特徵;max_depth=int類型,考慮\)|int類型|$個特徵;max_depth=float類型,如0.3,則考慮$0.3n$個特徵,其中$n$爲樣本總特徵數。默認爲None,樣本特徵數不大於50推薦使用默認值。
- **random_state:**隨機數種子,int類型。random_state=None,不一樣時刻產生的隨機數據是不一樣的;random_state=int類型,相同隨機數種子不一樣時刻產生的隨機數是相同的。默認爲None。
- **max_leaf_nodes:**最大葉子節點數,int類型。限制最大葉子節點數,能夠防止樹過深,所以能夠防止過擬合。默認爲None。
- **min_impurity_decrease:**節點減少不純度,float類型。若是某節點劃分會致使不純度的減小大於min_impurity_decrease,則中止該節點劃分。默認爲0。
- **min_impurity_split:**節點劃分最小不純度,float類型。若是某節點的不純度小於min_impurity_split,則中止該節點劃分,即不生成葉子節點。默認爲1e-7(0.0000001)。
- **class_weight:**類別權重,dict類型或str類型。對於二元分類問題可使用class_weight={0:0.9,1:0.1},表示0類別權重爲0.9,1類別權重爲0.1,str類型即爲'balanced',模型將根據訓練集自動修改不一樣類別的權重。默認爲None。
- **presort:**數據是否排序,bool類型。樣本量較小,presort=True,即讓樣本數據排序,節點劃分速度更快;樣本量較大,presort=True,讓樣本排序反而會增長訓練模型的時間。一般使用默認值。默認值爲False。
1.4 屬性
- **classes_:**array類型。樣本的類別標籤列表。
- **max_features_:**int類型。最大的特徵的推斷值。
- **n_classes_:**int類型。fit以後訓練集的類別數量。
- **n_features_:**int類型。fit以後訓練集的特徵數。
- **n_outputs_:**int類型。fit以後訓練集的輸出數量。
- **tree_:**Tree object類型。返回樹結構對象地址。
1.5 方法
- **apply(X[, check_input]):**返回每一個樣本預測的葉子節點索引。
- **decision_path(X[, check_input]):**返回樣本X在樹中的決策路徑。
- **fit(X,y):**把數據放入模型中訓練模型。
- **get_params([deep]):**返回模型的參數,能夠用於Pipeline中。
- **predict(X):**預測樣本X的分類類別。
- **predict_log_proba(X):**返回樣本X在各個類別上對應的對數機率。
- **predict_proba(X):**返回樣本X在各個類別上對應的機率。
- **score(X,y[,sample_weight]):**基於報告決定係數$R^2$評估模型。
- **set_prams(**params):**建立模型參數。
2、DecisionTreeRegressor
DecisionTreeRegressor
即CART迴歸樹,它與DecisionTreeClassifier
模型的區別在於criterion特徵選擇標準與分類樹不一樣,它能夠選擇'mse'和'mae',前者是均方偏差,後者是絕對值偏差,通常而言'mse'比'mae'更準確。數據結構