여러 개의 서로다른 모델을 만들고 평균내면 분산이 줄어듦
-> 병렬적
Random Forest
이전 모델의 오차를 다음 모델이 보완
-> 순차적
XGB (Level-wise : 균형적으로 오차 보완), Light GBM (Leaf-wise : leaf에 집중해서 오차 보완), Cat Boost (범주형 변수 처리 능력)
-랜덤포레스트 : 빠르고 간단하고 성능이 무난함
-XGB : 최고 성능을 목표로 할 경우
-Light GBM : 대용량 데이터
-Catboost👍 : 범주형 컬럼이 많을 때
a-> 전부 트리기반 모델. 스케일링을 하지 않아도 됨
※ Cat : category


from xgboost import XGBClassifier
#타겟/피처 분리
y = (df["class"] == ">50K").astype(int) # 1: >50K, 0: <=50K
X = df.drop(columns=["class"])
#One-Hot 인코딩 (XGBoost는 기본적으로 범주형 raw string을 못 받으니 변환)
X_ohe = pd.get_dummies(X, columns=cat_cols, drop_first=True)


from catboost import CatBoostClassifier
#cat_features 지정 (전처리 없이 그대로 사용)
cat_cols = X.select_dtypes(exclude=["number"]).columns.tolist()
cat_idx = [X.columns.get_loc(c) for c in cat_cols]


Cost(= Loss= Error)가 가장 낮은 파라미터 찾기. 최적해 구하기

J: Loss function, theta: 파라미터, alpha: 학습률
쎄타에 대해서 오차를 편미분 -> 기울기 계산
- 쎄타가 바뀌는 것에 따라 오차가 얼마나 바뀌는가
기울이가 양수면, 파라미터는 음의 방향으로 조절.
기울이가 음수면, 파라미터는 양의 방향으로 조절해서 최소점으로 유도
- -> 수식에 '-'가 있는 이유
파라미터는 모델 내부적으로 가지고 있는 파라미터(자동으로 결정 by 경사하강법)이고,
하이퍼파라미터는 사람이 조절하는 파라미터
from sklearn.linear_model import SGDRegressor
파이프라인에서 줄 추가
pipe = Pipeline(...,
"sgd", SGDRegressor(random_state=42))

alpha : 규제강도. max_iter : 반복횟수, 몇 번 학습할지.
나머지 코드는 동일
-max_iter 최대반복횟수
-learning_rate 학습률 전략
-eat0 초기학습률