機器學習_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_decreasemin_samples_leaf
default 1每一節點的最小樣本數
min_samples_split
default 2每一層長幾葉,依你的目標資料集設置
min_weight_fraction_leaf
default 0權重總和的最小加權分數,若未設置則權重相同。
presort
default Falserandom_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_
回傳目標標籤個數,依範例為3n_features_
回傳fit的時候用的特徵數,依範例為2n_outputs_
適合時回傳的數量,依範例為1tree_
回傳此樹物件範例
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'])
沒有留言:
張貼留言