-동작 순서
(1) 첫 번째 의사결정 트리를 생성 → 위쪽 빨간 원이 3개 있는 곳을 대충 분류시킴
→ 2개의 빨간 원과 1개의 녹색 세모가 잘못 구분됨
(2) 잘못된 2개의 빨간 원과 1개의 녹색 세모에 높은 가중치를 부여하고 맞은 것에는 빨간 원 3개와 녹색 세모 4개는 낮은 가중치 부여
(3) 가중치를 부여한 상태에서 다시 분류 시킴 → 잘못된 3개의 빨간 원에 높은 가중치를 부여하고 맞은 5개의 녹색 세모는 낮은 가중치를 부여
(4) 가중치를 부여한 상태에서 다시 분류 시킴
(5) 진행한 분류들을 결합한다.
-트리의 개수 : n_estimators
-선택할 데이터의 시드 : random_state
-트리의 개수 : n_estimators
-학습률 : learning_rate (높을수록 오차를 많이보정)
-트리의 깊이 : max_depth
-선택할 데이터의 시드 : random_state
-트리의 개수 : n_estimators
-학습률 : learning_rate (높을수록 오차를 많이보정)
-트리의 깊이 : max_depth
-선택할 데이터의 시드 : random_state
from sklearn.ensemble import AdaBoostClassifier
abc = AdaBoostClassifier(n_estimators=45)
abc.fit(X_train, y_train)
prd_abc = abc.predict(X_test)
sub['Survived'] = prd_abc # 예측결과 집어넣기
sub.to_csv('abc_pre.csv', index=False)
cross_val_score(abc, X_train, y_train, cv=5).mean()
abc.feature_importances_
import matplotlib.pyplot as plt
# 특성의 갯수
num_feature = len(X_train.columns)
# 특성의 이름
name_feature = X_train.columns
# 특성 중요도
feature_importance = abc.feature_importances_
import numpy as np
plt.barh(range(num_feature), feature_importance)
plt.yticks(np.arange(num_feature), name_feature)
plt.xlabel('importance')
plt.ylabel('attr')
plt.show()
# 특성의 갯수
num_feature = len(X_train.columns)
# 특성의 이름
name_feature = X_train.columns
# 특성 중요도
feature_importance = rf.feature_importances_
plt.barh(range(num_feature), feature_importance)
plt.yticks(np.arange(num_feature), name_feature)
plt.xlabel('importance')
plt.ylabel('attr')
plt.show()
from sklearn.ensemble import GradientBoostingClassifier
# GradientBoostingClassifier 학습
gbc = GradientBoostingClassifier(n_estimators=50, learning_rate=0.15)
gbc.fit(X_train, y_train)
# GradientBoostingClassifier 평가 → Kaggle 업로드
print(cross_val_score(gbc, X_train, y_train, cv=5).mean())
prd_gbc = gbc.predict(X_test)
# 제출 파일 불러오기
sub = pd.read_csv('./titanic/gender_submission.csv')
sub['Survived'] = prd_gbc # 예측결과 집어넣기
sub.to_csv('gbc_pre.csv', index=False)
# GradientBoostingClassifier 중요도 그래프 그리기
# 특성의 갯수
num_feature = len(X_train.columns)
# 특성의 이름
name_feature = X_train.columns
# 특성 중요도
feature_importance = gbc.feature_importances_
plt.barh(range(num_feature), feature_importance)
plt.yticks(np.arange(num_feature), name_feature)
plt.xlabel('importance')
plt.ylabel('attr')
plt.show()