답변:
(1 레벨) 의사 결정 트리를 훈련시키는 일반적인 방법은 가장 순수한 분리를 제공하는 그러한 속성을 찾는 것입니다. 즉, 데이터 집합을 두 개의 하위 집합으로 나누면 이러한 하위 집합 내의 레이블이 최대한 균일해야합니다. 따라서 각 속성에 대한 트리 인 많은 트리를 만든 다음 최상의 분할을 생성하는 트리를 선택하는 것으로 볼 수도 있습니다.
경우에 따라 속성의 하위 집합을 선택한 다음 하위 집합에서 트리를 학습하는 것이 좋습니다. 예를 들어, 이것은 임의의 포리스트에서 개별 트리 간의 상관 관계를 줄이기 위해 사용됩니다.
그러나 AdaBoost와 관련하여 일반적으로 기본 분류 기가 계량 된 데이터 포인트에 대해 학습 할 수 있고 충분 한 기능 선택이 덜 중요합니다. 의사 결정 트리는 가중치를 처리 할 수 있습니다 (예 : here 또는 here 참조 ). 전체 서브 세트 불순물에 대한 각 데이터 포인트의 기여를 가중함으로써 수행 될 수있다.
참고로 나는 또한 NumPy와 및 사용하여 파이썬에서 내 에이다 부스트 구현을 추가 할 것입니다 sklearn의를DecisionTreeClassifier
가진 max_depth=1
:
# input: dataset X and labels y (in {+1, -1})
hypotheses = []
hypothesis_weights = []
N, _ = X.shape
d = np.ones(N) / N
for t in range(num_iterations):
h = DecisionTreeClassifier(max_depth=1)
h.fit(X, y, sample_weight=d)
pred = h.predict(X)
eps = d.dot(pred != y)
alpha = (np.log(1 - eps) - np.log(eps)) / 2
d = d * np.exp(- alpha * y * pred)
d = d / d.sum()
hypotheses.append(h)
hypothesis_weights.append(alpha)
라벨을 예측하는 경우 :
# X input, y output
y = np.zeros(N)
for (h, alpha) in zip(hypotheses, hypotheses_weight):
y = y + alpha * h.predict(X)
y = np.sign(y)