2017年8月25日 星期五

機器學習_ML_DecisionTreeClassifier(決策樹)

機器學習_ML_DecisionTreeClassifier(決策樹)

使用決策樹的時候需要注意過適的問題,並且使用決策樹的話特徵是不需要先做正規化。
關於熵的觀念很簡單,可以參考『資料科學於商業應用』的說明,個人覺得簡單又易懂!
簡單說明就是判斷這個節點能分割的多漂亮,畢竟最完美的就是一刀兩斷。
gini系數的話,原始是拿來判斷收入平均與否,介於0-1,接近1就是代表絕對的不平均,而接近0就代表絕對的平均。

IMPORT

from sklearn.tree import DecisionTreeClassifier

CLASS

DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
            max_features=None, max_leaf_nodes=None,
            min_impurity_split=1e-07, min_samples_leaf=1,
            min_samples_split=2, min_weight_fraction_leaf=0.0,
            presort=False, random_state=None, splitter='best')

參數說明

criterion

default gini {gini, entropy}
entropy_熵

max_depth

default None
樹的最大深度,若無設置會一直全部展開到完全分類,或是一直到min_samples_split的設置!

class_weight

default balance
各目標標籤權重,無設置的話則為相同。

max_features

default auto
最大特徵數
auto:max_features = sqrt(n_features) # sqrt為取正平方根
sqrt:max_features = sqrt(n_features)
log2:max_features=log2(n_features)
None:max_features=n_features

max_leaf_nodes

default None
最大節點數,未設置就是不限制

min_impurity_split

0.19之後不再用,改用min_impurity_decrease

min_samples_leaf

default 1
每一節點的最小樣本數

min_samples_split

default 2
每一層長幾葉,依你的目標資料集設置

min_weight_fraction_leaf

default 0
權重總和的最小加權分數,若未設置則權重相同。

presort

default False

random_state

default None
亂數種子

splitter

default best {best, random}
節點選擇的策略是取最佳或是隨機

方法

apply(X)

回傳每個樣本的決策樹索引

decision_path(X)

回傳樹的決策路徑,似乎是個物件。

fit(X, y[, sample_weight, check_input, …])

適合(訓練)資料集

get_params([deep])

取得參數

predict(X[, check_input])

回傳預測分類

predict_log_proba(X)

回傳類別概率(機率、或然率)對數

predict_proba(X[, check_input])

回傳類別概率(機率、或然率)

score(X, y[, sample_weight])

這邊的得分是回傳平均準確率
Returns the mean accuracy

set_params(**params)

設置參數

屬性

classes_

回傳目標標籤,依範例為[0, 1, 2]

feature_importances_

回傳特徵權重

max_features_

不大明白!回傳最大特徵推斷值?

n_classes_

回傳目標標籤個數,依範例為3

n_features_

回傳fit的時候用的特徵數,依範例為2

n_outputs_

適合時回傳的數量,依範例為1

tree_

回傳此樹物件

範例

from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
X = iris.data[:, [2, 3]]
y = iris.target

#  如果是2.0版的話,from sklearn.model_selection import train_test_split
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test =  train_test_split(
X, y, test_size=0.3, random_state=0)

from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(criterion='entropy',
                              max_depth=3,
                              random_state=0)
tree.fit(X_train, y_train)


延伸應用

透過export_grapviz來導出dot檔,並且透過GraphViz來讀取!
GraphViz
from sklearn.tree import export_graphviz
export_graphviz(tree, out_file='tree.dot',feature_name=['petal length', 'petal width'])

沒有留言:

張貼留言