랜덤 포레스트

3661 단어 courseassignment

Random Forest Classifier 정보:



Random Forest는 주어진 DataSet의 다양한 하위 집합에 대한 여러 결정 트리를 포함하고 해당 데이터 집합의 예측 정확도를 향상시키기 위해 평균을 구하는 분류기입니다. 숙제 #2를 구현하는 동안 RandomForestClassifier 및 ExtraTreesClassifier를 포함한 여러 분류기를 장착하여 이진 응답 변수인 TREG1(사람이 흡연자인지 여부)을 예측했습니다. 연령, 성별, 인종, 알코올 사용 등 데이터 세트의 모든 변수(데이터 세트 참조)를 사용하여 최종 모델을 구축했습니다. 모델을 피팅한 후 이러한 요인은 중요도가 다른 최종 변수에 영향을 미쳤습니다.
이러한 요소를 기능 중요도 목록으로 내림차순으로 계산하고 정렬했습니다.
marever1 0.096374
age 0.083599
DEVIANT1 0.080081
SCHCONN1 0.075221
GPA1 0.074775
DEP1 0.071728
FAMCONCT 0.067389
PARACTV 0.063784
ESTEEM1 0.057945
ALCPROBS1 0.057670
VIOL1 0.048614
ALCEVR1 0.043539
PARPRES 0.039425
WHITE 0.022146
cigavail 0.021671
BLACK 0.018512
BIO_SEX 0.014942
inhever1 0.012832
cocever1 0.012590
PASSIST 0.010221
EXPEL1 0.009777
HISPANIC 0.007991
AMERICAN 0.005332
ASIAN 0.003844

암호:




import pandas as pd
import numpy as np
import matplotlib.pylab as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
%matplotlib inline
RND_STATE = 55324

AH_data = pd.read_csv(“data/tree_addhealth.csv”)
data_clean = AH_data.dropna()
data_clean.dtypes

data_clean.describe()

predictors = data_clean[[‘BIO_SEX’, ‘HISPANIC’, ‘WHITE’, ‘BLACK’, ‘NAMERICAN’, ‘ASIAN’, ‘age’,
‘ALCEVR1’, ‘ALCPROBS1’, ‘marever1’, ‘cocever1’, ‘inhever1’, ‘cigavail’, ‘DEP1’, ‘ESTEEM1’,
‘VIOL1’,
‘PASSIST’, ‘DEVIANT1’, ‘SCHCONN1’, ‘GPA1’, ‘EXPEL1’, ‘FAMCONCT’, ‘PARACTV’, ‘PARPRES’]]

targets = data_clean.TREG1

pred_train, pred_test, tar_train, tar_test = train_test_split(predictors, targets, test_size=.4, random_state=RND_STATE)

print(“Predict train shape: “, pred_train.shape)
print(“Predict test shape: “, pred_test.shape)
print(“Target train shape: “, tar_train.shape)
print(“Target test shape: “, tar_test.shape)

classifier = RandomForestClassifier(n_estimators=25, random_state=RND_STATE)
classifier = classifier.fit(pred_train, tar_train)

predictions = classifier.predict(pred_test)

print(“Confusion matrix:”)
print(confusion_matrix(tar_test, predictions))
print()
print(“Accuracy: “, accuracy_score(tar_test, predictions))

important_features = pd.Series(data=classifier.feature_importances_,index=predictors.columns)
important_features.sort_values(ascending=False,inplace=True)

print(important_features)

model = ExtraTreesClassifier(random_state=RND_STATE)
model.fit(pred_train, tar_train)

print(model.feature_importances_)

trees = range(25)
accuracy = np.zeros(25)
for idx in range(len(trees)):
classifier = RandomForestClassifier(n_estimators=idx + 1, random_state=RND_STATE)
classifier = classifier.fit(pred_train, tar_train)
predictions = classifier.predict(pred_test)
accuracy[idx] = accuracy_score(tar_test, predictions)

plt.cla()
plt.plot(trees, accuracy)
plt.show()



산출:



최종 모델은 테스트 데이터에서 잘 보였고 83,4%의 정확도를 보였습니다! 결과는 다음 플롯으로 나타낼 수 있습니다.



플롯에서 알 수 있듯이 하나의 트리에서도 좋은 수준의 정확도를 보여줍니다. 위에서 주어진 데이터는 하나의 트리로도 설명할 수 있습니다. 그러나 다른 한편으로 트리를 더 추가하면 최종 정확도가 약간 증가하여 모델이 데이터를 더 정확하게 예측할 수 있다는 것이 분명합니다.

좋은 웹페이지 즐겨찾기