

max_depth=1를 기반으로 여러번 진행한다.



※ 비용함수 : 정답과 출력되는 값 사이에 거리를 나타내는 함수 cost func, lost func, objective func

※ 최적화 : 출력으로 나오는 값이 답에 가까워지는게 목적

np.c_[cancer["data"], cancer["target"]] 배열 합치기 -> 열하나 추가
cancer_df = pd.DataFrame(data = np.c_[cancer["data"], cancer["target"]],
columns = list(cancer["feature_names"]) + ["label"]).astype({"label": "category"})
# 예시
a = [1,2,3,4]
b= [5,6,7,8]
{i:j for i, j in zip(a,b)}
-> zip을 활용하면 이런 식으로 활용 가능하다.
dic = {'a':3,'b':2,'c':1}
sorted(dic.items(), reverse=True)
-> 딕셔너리를 키와 벨류가 함께 튜플로 묶인 리스트 생성한다
앙상블은 개별 모델 개수가 짝수보다 홀수가 좋으므로, 랜덤포레스트의 n-estimators의 값을 홀수로 설정하자!

앙상블의 개별모델은 최소 3개 이상으로 주어야한다.

렌덤포레스트는 부트스트랩 샘플링을 하므로 샘플의 데이터가 100개면 100번 복원 추출한다.
RFC 와 XGBoost 비교
fig, ax = plt.subplots(figsize=(8,3))
ax.bar(train.columns[:-1],
rfc_best.feature_importances_,
color = "tab:blue",
label = "rfc",
alpha = 0.3)
ax.bar(train.columns[:-1],
xgb_best.feature_importances_,
color = "tab:red",
label = "xgb",
alpha = 0.3)
ax.legend()
plt.setp(ax.get_xticklabels(), ha="right", rotation=45);

-> RFC가 XGB에 비해서 몇몇 피처에 몰려있다. 그에 비해서 XGB는 쏠림없이 골고르 분포되어 있다.
나민원 강사님께 질문하여 어려운 부분을 해소할 수 있었다.
def grid_search(params, model, core):
model_grid = GridSearchCV(model,
params,
cv=5,
return_train_score=True,
n_jobs= core
)
model_grid.fit(x_train, y_train)
print('최상의 매개변수 : ', model_grid.best_params_)
print('훈련 데이터의 최고 정확도 : ', model_grid.best_score_)
model_best = model_grid.best_estimator_
pred_best = model_best.predict(x_test)
print('테스트 데이터의 최고 정확도 : ', metrics.accuracy_score(pred_best, y_test))
-> 여기서는 StratifiedKFold를 쓰지 않았다. StratifiedKFold는 데이터를 받았을때 데이터가 정렬되어 있다면 써야하는 함수이다. cv=값을 줘서 실행하면 인덱스 순서별로 짤라서 들어가기때문에, 만약 데이터가 정렬되어 있다면 제대로 된 결과값을 내기 어렵기 때문이다. 위에 코드에 주어진 데이터는 랜덤하게 기입된 데이터를 받았기에 굳이 StratifiedKFold를 주지 않아도 상관없었다. 하지만, 안전을 위해서라면 StratifiedKFold(random=True) 해주자.
-> 지난 시간에 소화못한 공부량을 다시 훑어보면서 발견했는데, 영문을 모르겠어서 나민원 강사님한테 질문해서 알아낼 수 있었다.
RFC는 교차검증이 필요없다. 왜냐하면 OOB score로 샘플링 되지 않은 데이터로 모델을 평가하기 때문이다.
-> gri_search에서 RFC 모델을 적용하는데도 cv값을 주어 의문이 들어 나민원 강사님께 질문하여 알아낼 수 있었다.
모델의 속성을 출력할 때는 마지막에 _ (언더바)를 써준다. sklearn의 규칙이다.
RFC의 원리를 정확하게 이해를 못해서 개념이 헷갈렸었다. 랜덤하게 피처를 뽑아 샘플을 만드는 것을 알았었다. 그런데 RFC는 피처도 랜덤하게 뽑고, 뽑은 피처에서 행의 값도 랜덤하게 뽑는다는 것을 알았다.