본문 바로가기

ML & AI

Introduction to Machine Learning with Python(IMLP): Chap 2 지도학습

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