前面總結了資訊熵,資訊增益和基尼資訊的定義,以及決策樹三大演算法的原理及迭代過程,今天介紹下python中機器學習sklearn庫中決策樹的使用引數
決策樹既可以做分類,也可以做回歸,兩者引數大體相近,下面會先介紹分類,再對回歸不一樣的引數做單獨說明
1、criterion
: 特徵選取方法,可以是gini(基尼係數),entropy(資訊增益),通常選擇gini,即cart演算法,如果選擇後者,則是id3和c4,.5
2、splitter
特徵劃分點選擇方法,可以是best或random,前者是在特徵的全部劃分點中找到最優的劃分點,後者是在隨機選擇的部分劃分點找到區域性最優的劃分點,一般在樣本量不大的時候,選擇best,樣本量過大,可以用random
3、max_depth
: 樹的最大深度,預設可以不輸入,那麼不會限制子樹的深度,一般在樣本少特徵也少的情況下,可以不做限制,但是樣本過多或者特徵過多的情況下,可以設定乙個上限,一般取10~100
4、min_samples_split
:節點再劃分所需最少樣本數,如果節點上的樣本樹已經低於這個值,則不會再尋找最優的劃分點進行劃分,且以結點作為葉子節點,預設是2,如果樣本過多的情況下,可以設定乙個閾值,具體可根據業務需求和資料量來定
5、min_samples_leaf:
葉子節點所需最少樣本數,如果達不到這個閾值,則同一父節點的所有葉子節點均被剪枝,這是乙個防止過擬合的引數,可以輸入乙個具體的值,或小於1的數(會根據樣本量計算百分比)
6、min_weight_fraction_leaf
: 葉子節點所有樣本權重和,如果低於閾值,則會和兄弟節點一起被剪枝,預設是0,就是不考慮權重問題。這個一般在樣本類別偏差較大或有較多缺失值的情況下會考慮
7、max_features
: 劃分考慮最大特徵數,不輸入則預設全部特徵,可以選 log2n,sqrt(n),auto或者是小於1的浮點數(百分比)或整數(具體數量的特徵)。如果特徵特別多時如大於50,可以考慮選擇auto來控制決策樹的生成時間
8、max_leaf_nodes
:最大葉子節點數,防止過擬合,預設不限制,如果設定了閾值,那麼會在閾值範圍內得到最優的決策樹,樣本量過多時可以設定
9、min_impurity_decrease/min_impurity_split
: 劃分最需最小不純度,前者是特徵選擇時低於就不考慮這個特徵,後者是如果選取的最優特徵劃分後達不到這個閾值,則不再劃分,節點變成葉子節點
10、class_weight
: 類別權重,在樣本有較大缺失值或類別偏差較大時可選,防止決策樹向類別過大的樣本傾斜。可設定或者balanced,後者會自動根據樣本的數量分布計算權重,樣本數少則權重高,與min_weight_fraction_leaf對應
11、presort: 是否排序,基本不用管
區別在於以下兩點,其餘與分類一樣
1、criterion
:特徵選取方法,不再是gini或entropy,而是mse或mae,前者是均方差,後者是和均值的差的絕對值之和,一般用前者,因為前者通常更為精準,且方便計算
2、class_weight:
不適合回歸,同樣的min_weight_fraction_leaf 也沒有
# 導入庫
from sklearn.tree import decisiontreeclassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.model_selection import gridsearchcv
from sklearn.tree import decisiontreeregressor
from sklearn import metrics
# 匯入資料集
x = datasets.load_iris(
)# 以全部字典形式返回,有data,target,target_names三個鍵
data = x.data
target = x.target
name = x.target_names
x,y=datasets.load_iris(return_x_y=
true
)# 能一次性取前2個
print
(x.shape,y.shape)
# 資料分為訓練集和測試集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=
0.2,random_state=
100)
# 用gridsearchcv尋找最優引數(字典)
param =
grid = gridsearchcv(decisiontreeclassifier(
),param_grid=param,cv=6)
grid.fit(x_train,y_train)
print
('最優分類器:'
,grid.best_params_,
'最優分數:'
, grid.best_score_)
# 得到最優的引數和分值
# 用gridsearchcv尋找最優引數(列表)
param =[,
,]grid = gridsearchcv(decisiontreeclassifier(
),param_grid=param,cv=6)
grid.fit(x_train,y_train)
print
('最優分類器:'
,grid.best_params_,
'最優分數:'
, grid.best_score_)
# 得到最優的引數和分值
決策樹 分類 回歸
決策樹,主要用來分類和回歸 一 首先看下分類決策樹 載入鳶尾花資料集 from sklearn.datasets import load iris iris load iris x,y iris.data,iris.target features iris.feature names 載入交叉驗證莫...
決策樹(二)決策樹回歸
回歸 決策樹也可以用於執行回歸任務。我們首先用sk learn的decisiontreeregressor類構造一顆回歸決策樹,並在乙個帶雜訊的二次方資料集上進行訓練,指定max depth 2 import numpy as np quadratic training set noise np.r...
回歸決策樹
決策樹是處理分類的常用演算法,但它也可以用來處理回歸問題,其關鍵在於選擇最佳分割點,基本思路是 遍歷所有資料,嘗試每個資料作為分割點,並計算此時左右兩側的資料的離差平方和,並從中找到最小值,然後找到離差平方和最小時對應的資料,它就是最佳分割點。sklearn.tree.decisiontreereg...