機器學習_ML_ExtraTreesClassifier(極限樹)
Extremely Randomized Trees原文說明
原文API
極限樹是tree的一種,但是跟隨機森林一樣,都是歸類在整體學習(ensemble)中,不同於隨機森林,隨機森林在隨機產生了樹之後,那個樹會以熵為主去做樹,但極限樹,沒有極限,一切隨緣,以此方式來減少變異數(方差)。
instead of looking for the most discriminative thresholds,模型的大小:O(M * N * log (N))
thresholds are drawn at random for each candidate feature
M:樹的數量
N:樣本數量
可以再搭配下列參數來控制
min_samples_split, min_samples_leaf, max_leaf_nodes and max_depth.
IMPORT
from sklearn.ensemble import ExtraTreesClassifier
CLASS
ExtraTreesClassifier(n_estimators=10, criterion=’gini’,
max_depth=None, min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features=’auto’, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
bootstrap=False, oob_score=False, n_jobs=1,
random_state=None, verbose=0, warm_start=False,
class_weight=None)
參數說明
The main parameters to adjust when using these methods is n_estimators and max_features
n_estimators
default 10k值_決策樹樹量
The larger the better(愈大愈好,但跟學習成本是正相關)
criterion
default gini {gini, entropy}entropy_熵
原文特別說明,這個參數是決策樹才有的!
max_depth
default None建議None搭配min_samples_split=1,但會需要大量記憶體
min_samples_split
default=1建議搭配max_depth=None,但會需要大量記憶體
min_samples_leaf
default 1每一節點的最小樣本數
min_weight_fraction_leaf
default 0權重總和的最小加權分數,若未設置則權重相同。
max_features
default autoauto:max_features=sqrt(n_features).
sqrt:max_features=sqrt(n_features).
log2:max_features=log2(n_features).
None:max_features=n_features.
max_features=n_features for regression(極限樹迴歸)
max_features=sqrt(n_features) for classification(極限樹分類)
max_leaf_nodes
default None最大節點數,未設置就是不限制
min_impurity_decrease
default 0似乎是個節點門檻值…需要再研究
原文說明來看是該節點與全樣本的比例如果過低,就刪除該節點?
N_t / N * (impurity - N_t_R / N_t * right_impurity
- N_t_L / N_t * left_impurity)
min_impurity_split
0.19之後不再用,改用min_impurity_decreasebootstrap
default False搭配oob_score=True
oob_score
default False是否用額外樣本來估算廣義精度
搭配bootsrap=True
n_jobs
default 1使用多少CPU核心數
-1代表火力全開
random_state
default None亂數種子
verbose
default 0過程是否顯示
warm_start
default False是否用上次的結果來加入計算,或是重新產生樹。
預設是重新產生樹
class_weight
default Nonebalance:n_samples / (n_classes * np.bincount(y))
balanced_subsample:理論同上,除了根據每棵樹生長的引導樣本計算權重
方法
apply(X)
回傳每個樣本的決策樹索引array([[ 3, 5, 4, ..., 12, 4, 6],
[31, 38, 36, ..., 37, 33, 41],
[34, 40, 40, ..., 37, 33, 42],
...,
[ 3, 6, 4, ..., 14, 4, 6],
[32, 40, 40, ..., 38, 34, 44],
[ 2, 4, 2, ..., 3, 1, 2]], dtype=int64)
decision_path(X)
回傳樹的決策路徑,似乎是個物件。(<105x372 sparse matrix of type '<class 'numpy.int64'>'
with 5753 stored elements in Compressed Sparse Row format>,
array([ 0, 35, 76, 117, 144, 177, 210, 253, 292, 327, 372],
dtype=int32))
fit(X, y[, sample_weight])
適合(訓練)資料集get_params([deep])
取得參數predict(X)
回傳預測分類predict_log_proba(X)
回傳類別概率(機率、或然率)對數predict_proba(X)
回傳類別概率(機率、或然率)可以看到每一筆資料在這個模組中的預測
score(X, y[, sample_weight])
這邊的得分是回傳平均準確率set_params(**params)
設置參數屬性
estimators_
產生的樹的列表,看你設定產生幾棵樹就有多少資料classes_
回傳目標標籤,依範例為[0, 1, 2]n_classes_
回傳目標標籤個數,依範例為3feature_importances_
回傳特徵權重>>> extra_tree.feature_importances_
array([ 0.49439825, 0.50560175])
n_features_
回傳fit的時候用的特徵數,依範例為2n_outputs_
回傳fit的時候的輸出,依範例為1oob_score_
oob_decision_function_
範例
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.ensemble import ExtraTreesClassifier
extra_tree = ExtraTreesClassifier(criterion='entropy',
n_estimators=10,
random_state=1,
n_jobs=-1)
extra_tree.fit(X_train, y_train)
extra_tree.score(X_train, y_train)
extra_tree.feature_importances_ # 特徵權重
沒有留言:
張貼留言