- 전체 훈련 세트를 사용해 훈련 합니다.
- Split 할 때 무작위로 feature를 선정 합니다.
- Extra Tree는 random하게 노드를 분할하므로, Random Forest보다 일반적으로 더 많은 결정트리를 필요로 하지만, 더 빠릅니다.
상세코드의 내용을 아래와 같이 설명합니다.
- 데이터를 준비합니다.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
wine = pd.read_csv('https://bit.ly/wine_csv_data')
data = wine[['alcohol', 'sugar', 'pH']].to_numpy()
target = wine['class'].to_numpy()
train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42)
- Extra tree로 Training을 수행합니다.
Random Forest 결과와 유사한 결과를 아래와 같이 얻었습니다.
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.model_selection import cross_validate
et = ExtraTreesClassifier(n_jobs=-1, random_state=42)
scores = cross_validate(et, train_input, train_target, return_train_score=True, n_jobs=-1)
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
0.9974503966084433 0.8887848893166506
alcohol, sugar, pH의 중요도는 아래와 같이 sugar의 중요도가 더 높습니다.
et.fit(train_input, train_target)
print(et.feature_importances_)
[0.20183568 0.52242907 0.27573525]