1회독 기간 : 22.06.26 ~ 22.07.06.
2회독 기간 : 22.07.10 ~
3회독 기간 :
2회독 째에는, 책의 흐름을 보다 이해를 깊게 하기 위해 단원별로 대략적인 내용과 코드를 정리해서 블로그에 올려보고자 한다. (내가 잘 모르는 내용 중심으로)
지도학습
KNN
- KNN 분류기 : 가장 간단한 알고리즘.
from sklearn.neighbors import KNeighborsClassifier
clf = kneighborsclassifier(n_neighbors = 3)
# 인자는 neighbors 수 / 거리 재는 방법(euclidian으로 하자)
clf.fit(X_train, y_train)
- 이웃 수를 늘릴수록 less flexible
- KNN 회귀 : neighbors의 평균으로 값 추측
from sklearn.neighbors import KNeighborsRegressor
reg = kneighborsclassifier(n_neighbors = 3)
# 인자는 neighbors 수 / 거리 재는 방법(euclidian으로 하자)
reg.fit(X_train, y_train)
- 회귀의 score 메서드는 R-squared 값을 산출.
KNN의 장단점
- 쉽고 좋은 성능, 좋은 시작점,
- 훈련세트가 크면 예측이 느림, 데이터 전처리 작업 중요, 특성이 많거나 값 대부분이 0인 데이터셋에 부적절.
- 현업에서 잘 쓰지 않는다.
이러한 단점이 없는 모델이 선형모델임.
Linear Model
일반 선형회귀 : overfitting 제어가 안됨. -> ridge, lasso로 회귀계수 shrinking.
ridge, lasso
#ridge
from sklearn.linear_model import Ridge
ridge = Ridge(alpha = 10).fit(X_train, y_train)
#lasso
from sklearn.linear_model import Lasso
lasso = Lasso(alpha = 10).fit(X_train, y_train)
- 일반 선형회귀에 규제(regularization)을 가한 것.
- ridge는 L2, lasso는 L1 규제를 사용함. -> lasso는 계수를 정말 0으로 shrink가능.
- alpha 는 shrinkage 정도를 나타내는 pararmeter
- 일반적으로 ridge 선호. but feature selection이 고려되는 경우 lasso도 좋은방법이다.
- L1, L2가 모두 적용되는 것이 elastic net : 최적 성능 발휘.
* 선형함수를 이용한 분류는 ? Logistic regression / Support vector machine.
선형 분류기
- SVM 과 Logistic에서의 규제 항은 C임.
- C가 증가 -> 규제가 감소 ~ more flexible. 이 때 C는, 어느 한 포인트를 잘못 분류했을 때에 비용함수에 추가될 가중치라고 봄.
- Default C값은 1이다.
- C나 alpha는 로그 스케일로 최적치를 결정한다.
- solver = 'sag' 로 두면 확률적 경사 하강법(stochastic average gradient descent)를 이용한다. 이는 대용량 데이터셋에서 잘 작동한다.
- 선형 모델은 학습속도가 빠르고 예측도 빠르다. 매우 크거나 희소한 데이터셋에서도 잘 작동함.
- (단점) : 저차원에서는 다른 모델의 일반화 성능이 더 좋다.
Logistic Regression
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(solver = 'liblinear', penalty= 'l1', max_iter = 5000)
logreg.fit(X_train, y_train)
# solver = 풀이 알고리즘, # penalty : l1, l2 중 선택 가능, max_iter : 최대 연산 횟수
Naive Bayes
- 선형분류기와 유사.
- 훈련속도가 빠른편이나, 그에 따라 성능이 조금 뒤짐
- 각 특성을 독립적으로 취급
- 선형분류기로도 시간이 오래 걸리는 데이터셋에 시도해볼만 하다.'
ensemble
RandomForest
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators = 100, n_features = 5, random_state =0,
n_jobs = -1, max_depth = 2)
# n_estimators = 생성트리 개수
# n_features : 선택 특성 수
# n_jobs = -1 : 모든 코어 사용
# max_depth : 가지 깊이
- 고차원, 희소데이터에 잘 작동하지 않음.
- 메모리, 시간 비용이 크다.
- 성능이 매우 좋고, 가장 널리쓰이는 모델 중 하나.
'ML & AI' 카테고리의 다른 글
InvalidArgumentError : Graph execution error (0) | 2022.08.15 |
---|---|
NMF (비음수 행렬분해) (0) | 2022.07.13 |
대표적인 데이터 스케일링 방법들. (0) | 2022.07.03 |
Random Forest vs Extra Trees (0) | 2022.06.30 |
RandomForest 의 장단점 (0) | 2022.06.30 |