서문: 랜덤 포레스트는 마케팅부터 의료 보험까지 다양한 응용 분야를 갖춘 매우 유연한 기계 학습 방법입니다. 이는 고객 확보 및 유지를 모델링하거나 환자의 질병 위험 및 민감성을 예측하기 위해 마케팅에 사용될 수 있습니다.
랜덤 포레스트는 분류 및 회귀 문제에 사용할 수 있고, 많은 기능을 처리할 수 있으며, 데이터 모델링에 사용되는 변수의 중요성을 추정하는 데 도움이 될 수 있습니다.
이 글은 Python을 사용하여 Random Forest 모델을 구축하는 방법에 관한 것입니다.
1 랜덤 포레스트란 무엇인가요
랜덤 포레스트는 거의 모든 종류의 예측 문제(비선형 문제 포함)에 사용할 수 있습니다. 어떤 측면에서든 사용할 수 있는 비교적 새로운 머신러닝 전략(1990년대 Bell Labs에서 탄생)입니다. 머신러닝 중 앙상블 학습의 범주에 속합니다.
1.1 앙상블 학습
앙상블 학습은 단일 예측 문제를 해결하기 위해 여러 모델을 조합하는 것입니다. 그 원리는 각각 독립적으로 학습하고 예측하는 여러 분류기 모델을 생성하는 것입니다. 이러한 예측은 최종적으로 결합되어 개별 분류기의 결과보다 좋거나 더 나은 예측을 생성합니다.
랜덤 포레스트는 의사결정 트리의 통합에 의존하기 때문에 앙상블 학습의 한 분야입니다. Python에서 앙상블 학습 구현에 대한 추가 문서: Scikit-Learn 문서.
1.2 Random Decision Tree
Random Forest가 다른 모델을 집계하는 것으로 알고 있는데 구체적으로 어떤 모델인가요? 이름에서도 알 수 있듯이 Random Forest는 분류(또는 회귀) 트리를 집계합니다. 의사결정 트리는 일련의 결정으로 구성되며 데이터 세트의 관찰을 분류하는 데 사용할 수 있습니다.
1.3 Random Forest
에서 도입한 Random Forest 알고리즘은 자동으로 Random Decision Tree 그룹을 생성합니다. 이러한 트리는 무작위로 생성되므로 대부분의 트리(99.9%라도)는 분류 또는 회귀 문제를 해결하는 데 의미가 없습니다.
1.4 투표
그럼 수만 개의 불량 모델을 생성해도 무슨 이점이 있을까요? 글쎄, 정말 그렇지 않습니다. 그러나 유용하게도 소수의 아주 좋은 의사결정 트리가 함께 생성되었습니다.
예측을 하면 새로운 관찰이 의사결정 트리로 내려오고 예측 값이나 라벨이 할당됩니다. 포리스트의 각 트리에 예측 또는 레이블이 지정되면 모든 예측이 함께 합산되고 모든 트리의 투표가 최종 예측으로 반환됩니다.
간단히 말하면 상관관계가 없는 트리에 의한 예측의 99.9%는 모든 상황을 포괄하며 이러한 예측은 서로 상쇄됩니다. 몇몇 우수한 트리의 예측 결과가 눈에 띄어 좋은 예측 결과가 나올 것입니다.
2 왜 사용해야 할까요
랜덤포레스트는 머신러닝 방식의 레더맨(다기능 접이식 칼)입니다. 거의 모든 것을 던질 수 있습니다. 매핑을 추정하고 추론하는 데 특히 효과적이므로 SVM처럼 매개변수 조정이 너무 많이 필요하지 않습니다(시간이 촉박한 친구에게 매우 좋습니다).
2.1 매핑 예
고의적인 수동 데이터 변환 없이도 랜덤 포레스트를 학습할 수 있습니다. 함수 f(x)=log(x)를 예로 들어 보겠습니다.
Yhat의 자체 대화형 환경인 Rodeo에서 Python을 사용하여 분석 데이터를 생성합니다. 여기에서 Rodeo의 Mac, Windows 및 Linux 설치 파일을 다운로드할 수 있습니다.
먼저 데이터를 생성하고 노이즈를 추가해 보겠습니다.
import numpy as np import pylab as pl x = np.random.uniform(1, 100, 1000) y = np.log(x) + np.random.normal(0, .3, 1000) pl.scatter(x, y, s=1, label="log(x) with noise") pl.plot(np.arange(1, 100), np.log(np.arange(1, 100)), c="b", label="log(x) true function") pl.xlabel("x") pl.ylabel("f(x) = log(x)") pl.legend(loc="best") pl.title("A Basic Log Function") pl.show()
다음 결과를 얻습니다.
x를 사용하여 y를 예측하는 기본 선형 모델을 구축하려면 직선을 그려야 합니다. 청두는 log(x) 함수를 양분하는 것으로 간주되어야 합니다. 그리고 랜덤 포레스트 알고리즘을 사용하면 log(x) 곡선을 더 잘 근사화하고 실제 함수처럼 보이게 만들 수 있습니다.
물론 랜덤 포레스트가 log(x) 함수에 약간 과적합되었다고 말할 수도 있습니다. 그럼에도 불구하고 이는 랜덤 포레스트가 선형 문제에만 국한되지 않음을 보여줍니다.
3 사용법
3.1 기능 선택
랜덤 포레스트의 가장 좋은 사용 사례 중 하나는 기능 선택입니다. 많은 의사결정 트리 변수를 시험해 보면 각 트리에서 해당 변수의 성능이 가장 좋은지 아니면 가장 나쁜지 확인할 수 있습니다.
어떤 트리는 변수를 사용하고 다른 트리는 사용하지 않을 때 정보의 손실과 이득을 비교할 수 있습니다. 더 잘 구현된 Random Forest 도구가 이 작업을 수행할 수 있으므로 사용자가 해야 할 일은 해당 메서드나 매개 변수를 살펴보는 것뿐입니다.
다음 예에서는 레드 와인과 화이트 와인을 구별할 때 어떤 변수가 가장 중요한지 알아보려고 합니다.
3.2 분류
랜덤 포레스트도 분류 문제에 매우 능숙합니다. 여러 가능한 대상 클래스에 대한 예측을 수행하는 데 사용할 수 있으며 조정 후 확률을 출력할 수도 있습니다. 주의해야 할 점 중 하나는 과적합(overfitting)입니다.
랜덤 포레스트는 특히 데이터 세트가 상대적으로 작은 경우 과적합되기 쉽습니다. 모델이 테스트 세트에 대해 "너무 좋은" 예측을 한다면 의심해 보세요. 과적합을 방지하는 한 가지 방법은 앞서 언급한 특성 선택을 사용하는 등 모델에서 관련 특성만 사용하는 것입니다.
3.3 回归
随机森林也可以用于回归问题。
我发现,不像其他的方法,随机森林非常擅长于分类变量或分类变量与连续变量混合的情况。
4 一个简单的Python示例
from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier import pandas as pd import numpy as np iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75 df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names) df.head() train, test = df[df['is_train']==True], df[df['is_train']==False] features = df.columns[:4] clf = RandomForestClassifier(n_jobs=2)y, _ = pd.factorize(train['species']) clf.fit(train[features], y) preds = iris.target_names[clf.predict(test[features])] pd.crosstab(test['species'], preds, rownames=['actual'], colnames=['preds'])
下面就是你应该看到的结果了。由于我们随机选择数据,所以实际结果每次都会不一样。
5 结语
随机森林相当起来非常容易。不过和其他任何建模方法一样要注意过拟合问题。如果你有兴趣用R语言使用随机森林,可以查看randomForest包。
以上就是随机森林算法入门(python)的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!