머신러닝 모델 개략도
KNN분류모델(K-Nearest Neightbors)
K- 최근접 이웃 알고리즘
- 새로운 데이터 포인트와 가장 가까운 훈련 데이터셋의 데이터 포인트를 찾아 예측.
- K 값에 따라 가까운 이웃의 수를 결정
- 분류와 회귀에 모두 사용 가능
특징
- k 값이 작을수록 모델의 복잡도가 상대적으로 증가 => 과대적합 우려
- k 값이 클수록 모델의 복잡도가 낮아짐 => 과소적합 우려
- 100개의 데이터를 학습하고 k를 100개로 설정하여 예측하면 빈도가 가장 많은 클래스 레이블로 분류
민감하다 -> 복합도 높음
데이터 포인트 사이 거리 측정 방법 -> 피타고라스의 정리
주요 매개변수(Hyper parameter)
scikit-learn의 경우
KNeighborsClassifier(n_neighbors=이웃의 수) 이웃의 수 = k값
장단점
- 이해하기가 매우 쉽고 큰 조정 없이도 나쁘지 않은 성능을 발휘하는 기초 모델
- 훈련 데이터 세트의 크기(특성 수, 데이터의 수)가 크면 예측이 느려짐
- 거리를 측정하기 때문에 데이터의 스케일 조정이 필요할 수 있음
- 직접적인 예측에 사용되기 보단 주로 데이터를 파악하기 위한 용도로 가볍게 사용
결정트리모델
≒아키네이터 게임
루트 노드 -> 규칙 노드 -> 리프 노드
- 스무고개 하듯이 예/아니오 질문을 반복하며 학습
- 특정 기준에 따라 데이터를 구분하는 모델
- 분류와 회귀에 모두 사용 가능
- 어떻게 노드를 분할하는지 시각화 가능
범주형(이산형) 데이터 인코딩
=> 범주형을 수치형으로 바꿔주는 것
-
레이블 인코딩
단순 수치값으로 mapping하는 작업
-> 높낮이가 없는데 숫자의 크기가 적용되어버리는 한계점
-
one-hot Encoding
0 or 1의 값을 가진 여러 개의 새로운 특성으로 변경하는 작업
-> 데이터의 양에 따라서 컬럼의 수가 증가함

Pure Node(순수노드)
타겟이 0인것은 과대적합의 우려가 있어, 없애는것이 바람직함
장단점
- 만들어진 모델을 쉽게 시각화할 수 있어 이해하기 쉽다.
- 각 특성이 개별 처리되기 때문에 데이터 스케일에 영향을 받지않아 특성의 정규화나 표준화가 필요 없다.
- 트리 구성시 각 특성의 중요도를 계산하기 때문에 특성선택에 활용될 수 있다.
- 훈련데이터 범위 밖의 포인트는 예측할 수 없다. ex) 시계열 데이터
- 가지치기를 사용함에도 불구하고 과대적합되는 경향이 있어 일반화 성능이 좋지 않다.
- 선형모형에는 적합하지 않음
교차검증(Cross validation)
- 데이터셋을 k개로 나눈다.
- 첫 번째 세트를 제외하고 나머지에 대해 모델을 학습한다. 1번째 (test, train, train, train, train) 2번째 (train, test, train, train, train)
- 2번 과정을 마지막 세트까지 반복한다.
- 각 세트에 대해 구했던 평가 결과의 평균을 구한다.
장단점
- 데이터의 여러 부분을 학습하고 평가해서 일반화 성능을 측정하기 때문에 안정적이고 정확하다.
- 모델이 훈련 데이터에 대해 얼마나 민감한지 파악가능 -> 같은 평균이라도 고점과 저점에 따라 민감도 판단가능
- 데이터 세트 크기가 충분하지 않은 경우에도 유용하게 사용 가능하다.
- 여러 번 학습하고 평가하는 과정을 거치기 때문에 계산량이 많아진다.
Ensemble
: 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법
Decision Tree Ensemble

개별 결정트리의 과대적합되는 단점을 보완하는 모델
결정트리 모델들이 서로 독립적
결정트리 모델들이 무작위 예측을 수행하는 모델보다 성능이 좋을경우
Bagging vs Boosting

Boosting : 이전 데이터를 고려하여. 학습 데이터를 가중치를 변경하면서 여러 번 반복 추출하여 활용
Bagging : 약간씩 다른 독립된 훈련 데이터 세트를 여러 개 생성 -> 과대적합 감소.
RandomForest
-> RandomForestClassifier(n_estimators, max_features, random_state)
여러개의 decision tree로 이루어진 모델
- Hyperparameter
n_estimators : 트리의 개수
max_features : 선택할 특징의 최대 수
과대적합 같으면 숫자 낮추고, 과소적합같으면 숫자 높이기
=> 1로 하면 다양하지가 않아서 dt와 비슷해짐
- 다양한 트리를 만드는 방법
1. 트리를 만들 때 사용하는 데이터 포인트 샘플을 무작위로 선택한다. (행, Realrd)
2. 노드 구성시 기준이 되는 특성을 무작위로 선택하게 한다. (열, 조절가능한 rd)
random_state : 선택할 데이터의 시드
장단점
- 텍스트 데이터와 같은 희소한 데이터에는 잘 동작하지 않는다.
- 큰 데이터 세트에도 잘 동작하지만 훈련과 예측이 상대적으로 느리다.
- 트리 개수가 많아질수록 시간이 더 오래걸린다.
Ada Boost
RF처럼 의사결정 트리 기반의 모델 -> 각각의 트리들이 독립적으로 존재하지 않음
잘못된것에 높은 가중치, 맞춘것에는 낮은 가중치로 부여

GBM
장단점
- 보통 트리의 깊이를 깊게하지 않기 때문에 예측 속도는 비교적 빠르다.
- 이전 트리의 오차를 반영해서 새로운 트리를 만들기 때문에 학습 속도가 느리다.
- 특성의 스케일을 조정하지 않아도 된다.
- 희소한 고차원 데이터에는 잘 동작하지 않는다.
- 머신러닝의 성능을 마지막까지 쥐어짜야할 때 활용
Linear Model
- 입력 특성에 대한 선형 함수를 만들어 예측을 수행
- 다양한 선형 모델이 존재한다
- 분류와 회귀에 모두 사용 가능
y = ax + b
장점
- 결과예측(추론) 속도가 빠르다.
- 대용량 데이터에도 충분히 활용 가능하다.
- 특성이 많은 데이터 세트라면 훌륭한 성능을 낼 수 있다.
단점
- 특성이 적은 저차원 데이터에서는 다른 모델의 일반화 성능이 더 좋을 수 있다 -> 특성확장을 하기도 한다.
- LinearRegression Model은 복잡도를 제어할 방법이 없어 과대적합 되기 쉽다. -> 모델 정규화를 통해 과대적합을 제어한다.
선형 회귀 함수
- 가지고 있는 데이터를 잘 표현할 수 있는 선형함수 찾기
* 모든 데이터를 설명할 수 있는 직선은 없다!
- 데이터를 최대한 잘 설명하는 선형함수 찾기
* 오차(실제값과 예측값의 차이)가 최소가 되는 직선 찾기 -> 가장 좋은 선형 함수 -> 예측 함수로 사용
- 무한개의 선형함수를 계산하지말고 계산할 선형함수의 갯수를 줄여보자 (2가지 방법 존재)
무한개의 선형함수를 줄일수 있는 두가지 방법
- 수학 공식을 이용한 해석적 방법
- 한번에 계산할 공식이 존재
- 단점 : 공식이 완벽하지 않다.
- 장점 : 매우빠르다
- 모델 : LinearRegression, Lasso, Ridge
Lasso, Ridge
LinearRegression : 결과가 나오면 수정이 불가능
-> 이점을 보완하여 모델 정규화를 진행한 모델
모델 정규화 : w와 b에 직접적인 수정을 가하는 것
-
Lasso (L1규제) : w의 모든 원소에 똑같은 힘으로 규제를 적용하는 방법. 특정 계수들은 0이 됨. 특성선택이 자동으로 이루어진다.
특성선택 : 0보다 작은 것도 0 취급하고 0이 된 것들은 사용하지 않는다.
0이 아닌것들은 가중치가 높은 것이기 때문에 중요한 것으로 판단.
특정 특성이 중요할 떄 사용
-
Ridge (L2규제) : w의 모든 원소에 골고루 규제를 적용하여 0에 가깝게 만든다.
모든 가중치는 0이하로 되지 않는다.
특성이 골고루 중요할 때 사용

- 경사하강법(Gradient Descent Algorithm)
- 점진적으로 정답을 찾아간다.
- 단점 : 속도가 느리다
- 장점 : 값이 잘못됐을 때 고칠 수 있다.
- 모델 : SGDRegressor

SGDRegressor(max_iter,eta0)
- 가중이 업데이트 횟수 : max_iter
- 학습률 : eta0 0~1 사이
결론
1. 가지고 있는 데이터를 최대한 잘 설명할 직선찾기
2. 오차(실제값과 예측값 차이들의 합)를 계산해서 오차가 가장 작은 직선 찾기
3. 무한개의 직선을 계산하지 않고 특정 갯수의 직선만 계산
3을 만족하는 2를 만족하는 1을 찾아야 함.
오차 = 예측값에서 원데이터를 뺀 값인데 거리의 값이니까 주로 절대값 또는 제곱 값을 사용
제곱 값으로하면 작은것은 작고 큰 것은 확 커지기 때문에 확연하게 알기 위해서 오차의 제곱 값을 주로 사용
평균제곱오차 (MSE : Mean Squared Error)
오차만으로 비교 X, 데이터 값까지 포함해서 바라봐야함.
-> MSE 값만보고 모델을 판단하기 애매함
평균제곱근오차 (RMSE : Root Mean Squared Error)
회귀평가지표
- R2 Score
: MSE는 데이터의 범위를 봐야 제대로 된 판단이 가능
: R2 Score는 데이터의 범위를 안봐도 모델 성능 판단이 가능하게 만들자.
-> 0 ~ 1 까지 값이 출력되게 하자
정확도처럼 해석
분모는 고정, 분자는 달라짐

Linear Model - Classification
분류용 선형 모델
Logistic Regression (Regression 단어가 붙지만 분류용 모델)
- Sigmoid 함수(곡선의 형태)
- 모든 값을 0 ~ 1 범위의 값이 됨
-> 직선으로 구분할 수 없는 문제 해결
-> 독립변수와 종속변수가 비선형 관계인 경우


주요 매개변수(Hyperparameter)
LogisticRegression(C, max_iter)
- 규제 강도의 역수 : C -> 값이 작을수록 규제가 강해짐
- 최대 반복 횟수 : max_iter -> 값을 크게 잡아 주어야 학습이 제대로 됨
- 기본적으로 L2규제 사용, 중요한 특성이 몇개 없다면 L1규제를 사용해도 무방
Linear Support Vector Machine


- 서포트 벡터 : 결정경계에 가장 가깝게 위치한 데이터
- 마진 : 결정경계와 서포트벡터 사이의 거리
결정경계는 마진끼리의 값이 비슷하게 만들면서 마진의 거리가 최대로 되게하는 선을 구한다.
- 초평면(결정경계)을 사용하여 데이터를 나눈다
주요 매개변수(Hyperparameter)
LinearSVC(C)
- 규제 강도 : C -> 값이 작을수록 규제가 강해짐
- 기본적으로 L2규제 사용, 중요한 특성이 몇개 없다면 L1규제를 사용해도 무방