ML 기본 프로세스

Scikit - Learn Package

수집한 Sample 데이터
from sklearn.datasets import fetch_openml
주어진 데이터 분리 : train_test_split
from sklearn.model_selection import train_test_split

내가 사용할 / 피팅할 f 의 스타일 : 어떤 모델을 사용할지?
knn, xgboost 같은 외부의 f 스타일을 가져와서 사용
참고) 파이썬/scikit-learn : 분류 => Classfier, 회귀 => Regressor
==> 사용할 알고리즘 + 목적성(분류/회귀)
from sklearn.neighbors import KNeighborsClassifier
* 매뉴얼 : https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
** 큰 데이터를 다룰 때 컴퓨터 성능이 딸릴 경우
구글 클라우드에서 유료로 컴퓨터를 대여(?) 해서 사용할 수 있음
autoML로 feature 변환+처리+도메인지식..
학습 수행: 주어진 데이터에 맞춰서 내가 세팅한 F에 대한 파라미터 최적화
= Learning
시간이 오래 걸림. k-fold까지 하면 시간 * k배
knn.fit(train_x, train_y)
실제 수행
knn.predict(text_x) -> 모델이 예측한 값들을 반환해줌
test_y -> 정답. 위 예측값과 비교를 통해 모델의 정확도를 알 수 있음
채점
기준은 accuracy라고 하면
accuracy_score( test_y, knn.predict(test_x) )
-> 여기서 얻은 accuracy를 baseline으로 하고,
더 높은 accuracy를 얻을 수 있도록 knn의 구체적인 세팅을 조절하자!
ex / 파라미터 n_neighbors 변화시키기
주로 대회의 경우 이런 과정을 많이 거침,,,,
우연히 1번 잘 나올수 있기 때문에 k-fold CV 사용
1) 직접 조합하기 : gridsearchCV
2) 랜덤하게 샘플링 : random
3)
f를 다양하게 적용하며 실험한다.
근본 모델은 사실 요즘 잘 사용을 안한다. (KNN, SVM, DT의 경우..)
요즘은 여러 모델을 합친 모델을 사용한다.
Bagging : RandomForest
Boosting : xgboost, lightGBM, catBoost etc..
기준에 따라서 split하는 과정을 점진적으로 반복하여 최종 의사결정. -> 이 과정을 알고리즘화 함.
기준에 우선순위 알 수 있다? -> Feature의 중요도를 알 수 있따?

perfect한 split으로 진짜 1개까지 다 분류할 수 있음 -> overfit 문제로 적절한 depth를 조절하여 general한 model 이 되도록 함.
잘 분류가 되는지 기준이 필요함.



Tree base의 모델은 정규성/분포에 대해 영향을 크게 받지 않음.
Many + Diversity
overfit 방지
: Bagging을 가장 심플하게 구현한 것


: 가중치 부여
error를 줄이는 방향으로 학습 -> overfit