랜덤 포레스트
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 41번째.
결정 트리 하나는 불안정합니다. 학습 행 몇 개를 바꾸면 질문도 달라집니다. 이 장에서는 여러 개의 결정 트리를 사용해 트리를 안정적으로 만듭니다.
랜덤 포레스트는 여러 트리를 학습시키고 각 트리가 투표하게 합니다. 여기 일곱 개의 트리가 하나의 간헐천에 대해 답합니다:
코드에서는 학습시킬 모델이 하나 더 있습니다:
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(forest.score(X_test, y_test))300일의 간헐천 데이터를 사용하면 이 코드는 0.893을 출력합니다. 단일 트리의 점수는 0.813이었습니다. n_estimators는 트리의 개수입니다.
유권자가 많을수록 실수는 줄어듭니다.
챌린지
중급안내견 학교에서는 어떤 강아지가 자격을 갖추게 될지 미리 알고 싶어 합니다. 시작 코드는 puppies.csv를 분할하고, 트리 하나의 점수를 계산한 뒤 트리 개수를 입력받습니다.
- 그 개수만큼 트리로 구성된 랜덤 포레스트를 학습시키고(
random_state=0), 테스트 정확도를 출력하세요. - 어떤 모델이 얼마나 차이로 이기는지 출력하거나
A tie를 출력하세요.
다른 학교와 50을 사용하면:
Single tree: 0.740
Forest: 0.860
The forest wins by 0.120그런 다음 1을 시도해 보세요. 트리 하나로 구성된 랜덤 포레스트는 놀라울 정도로 성능이 좋지 않습니다. 다음 강의에서 그 이유를 알아봅니다.
직접 해보기
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
# 안내견 훈련소의 강아지들: 차분함, 집중력, 큰 소리에 놀라는 정도 (1~10),
# 몸무게, 양육 가족과 함께 지낸 개월 수, 안내견 자격 취득 여부 (취득 1, 미취득 0)
puppies = pd.read_csv("puppies.csv")
X = puppies[["calmness", "focus", "noise_startle", "weight_kg", "months_with_family"]]
y = puppies["qualified"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())
# 아래 줄은 변경하지 마세요: 성능을 뛰어넘어야 할 단일 트리
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
tree_acc = tree.score(X_test, y_test)
print(f"Single tree: {tree_acc:.3f}")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러