sklearn.tree.DecisionTreeClassifier 決策樹模型參數詳解


決策樹參數如下:

class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, 
min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,
min_impurity_split=None, class_weight=None, presort='deprecated', ccp_alpha=0.0)

可選參數:

  • criterion:分裂節點所用的標准,可選“gini”, “entropy”,默認“gini”
  • splitter:用於在每個節點上選擇拆分的策略。可選“best”, “random”,默認“best”。
  • max_depth:樹的最大深度。如果為None,則將節點展開,直到所有葉子都是純凈的(只有一個類),或者直到所有葉子都包含少於min_samples_split個樣本。默認是None。
  • min_samples_split:拆分內部節點所需的最少樣本數:如果為int,則將min_samples_split視為最小值。如果為float,則min_samples_split是一個分數,而ceil(min_samples_split * n_samples)是每個拆分的最小樣本數。默認是2。
  • min_samples_leaf:在葉節點處需要的最小樣本數。僅在任何深度的分割點在左分支和右分支中的每個分支上至少留下min_samples_leaf個訓練樣本時,才考慮。這可能具有平滑模型的效果,尤其是在回歸中。如果為int,則將min_samples_leaf視為最小值。如果為float,則min_samples_leaf是分數,而ceil(min_samples_leaf * n_samples)是每個節點的最小樣本數。默認是1。
  • min_weight_fraction_leaf:在所有葉節點處(所有輸入樣本)的權重總和中的最小加權分數。如果未提供sample_weight,則樣本的權重相等。
  • max_features:尋找最佳分割時要考慮的特征數量:如果為int,則在每個拆分中考慮max_features個特征。如果為float,則max_features是一個分數,並在每次拆分時考慮int(max_features * n_features)個特征。如果為“auto”,則max_features = sqrt(n_features)。如果為“ sqrt”,則max_features = sqrt(n_features)。如果為“ log2”,則max_features = log2(n_features)。如果為None,則max_features = n_features。注意:在找到至少一個有效的節點樣本分區之前,分割的搜索不會停止,即使它需要有效檢查多個max_features功能也是如此。
  • random_state:隨機種子,負責控制分裂特征的隨機性,為整數。默認是None。
  • max_leaf_nodes:最大葉子節點數,整數,默認為None
  • min_impurity_decrease:如果分裂指標的減少量大於該值,則進行分裂。
  • min_impurity_split:決策樹生長的最小純凈度。默認是0。自版本0.19起不推薦使用:不推薦使用min_impurity_split,而建議使用0.19中的min_impurity_decrease。min_impurity_split的默認值在0.23中已從1e-7更改為0,並將在0.25中刪除。
  • class_weight:每個類的權重,可以用字典的形式傳入{class_label: weight}。如果選擇了“balanced”,則輸入的權重為n_samples / (n_classes * np.bincount(y))。
  • presort:此參數已棄用,並將在v0.24中刪除。
  • ccp_alpha:將選擇成本復雜度最大且小於ccp_alpha的子樹。默認情況下,不執行修剪。

可選函數:

  • classes_:類標簽(單輸出問題)或類標簽數組的列表(多輸出問題)。
  • feature_importances_:特征重要度。
  • max_features_:max_features的推斷值。
  • n_classes_:類數(用於單輸出問題),或包含每個輸出的類數的列表(用於多輸出問題)。
  • n_features_:執行擬合時的特征數量。
  • n_outputs_:執行擬合時的輸出數量。
  • tree_:
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 11 10:12:48 2020

@author: Admin
"""

# 引入數據
from sklearn import datasets
import numpy as np

iris = datasets.load_iris()
X = iris.data[:,[2,3]]
y = iris.target
print("Class labels:",np.unique(y))  #打印分類類別的種類
## 畫出決策邊界圖(只有在2個特征才能畫出來)
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.colors import ListedColormap

def plot_decision_region(X,y,classifier,resolution=0.02):
    markers = ('s','x','o','^','v')
    colors = ('red','blue','lightgreen','gray','cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])

    # plot the decision surface
    x1_min,x1_max = X[:,0].min()-1,X[:,0].max()+1
    x2_min,x2_max = X[:,1].min()-1,X[:,1].max()+1
    xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,resolution),
                         np.arange(x2_min,x2_max,resolution))
    Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1,xx2,Z,alpha=0.3,cmap=cmap)
    plt.xlim(xx1.min(),xx1.max())
    plt.ylim(xx2.min(),xx2.max())

    # plot class samples
    for idx,cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y==cl,0],
                   y = X[y==cl,1],
                   alpha=0.8,
                   c=colors[idx],
                   marker = markers[idx],
                   label=cl,
                   edgecolors='black')
# 切分訓練數據和測試數據
from sklearn.model_selection import train_test_split
## 30%測試數據,70%訓練數據,stratify=y表示訓練數據和測試數據具有相同的類別比例
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()
## 估算訓練數據中的mu和sigma
sc.fit(X_train)
## 使用訓練數據中的mu和sigma對數據進行標准化
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

## 決策樹分類器
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(criterion='gini',max_depth=4,random_state=1)
tree.fit(X_train_std,y_train)
plot_decision_region(X_train_std,y_train,classifier=tree,resolution=0.02)
plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.show()
tree_fit=tree.fit(X_train_std,y_train)
tree_fit.classes_  #array([0, 1, 2])
tree_fit.feature_importances_  #array([0.42708333, 0.57291667])
tree_fit.max_features_  #2
tree_fit.n_classes_  #3
tree_fit.n_features_  #2
tree_fit.n_outputs_  #1
tree_fit.tree_

決策樹可視化:

pydotplus的安裝:在命令行輸入conda install -c conda-forge pydotplus

## 決策樹可視化
from pydotplus import graph_from_dot_data
from sklearn.tree import export_graphviz
dot_data = export_graphviz(tree,filled=True,class_names=['Setosa','Versicolor','Virginica'],
                          feature_names=['petal_length','petal_width'],out_file=None)
graph = graph_from_dot_data(dot_data)
graph.write_png('D:\\Users\\Desktop\\一部二部文件\\tree.png')

 

 


免責聲明!

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



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