반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

블로그

[머신러닝] #3 기본 알고리즘 - 1(Linear Regression, K-Nearest Neighbor, Decision Tree, Logistic Regression) 본문

공부/ML

[머신러닝] #3 기본 알고리즘 - 1(Linear Regression, K-Nearest Neighbor, Decision Tree, Logistic Regression)

beenu 2024. 3. 13. 17:07
반응형

1. Linear Regression

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
  • 실젯값과의 오차가 최소가 되는 직선
  • y햇 = w0 +w1x1
    • w0 : 편향
    • w1 : 가중치(회귀 계수)
  • 최선의 회귀모델 : 전체 데이터의 오차 합이 최소가 되는 모델
# 회귀계수 확인
model.coef_
model.intercept_
  • model.coef_ : 모델 가중치(회귀 계수) 확인
  • model.intercept_ : 편향 확인
  • 단순 회귀(Simple Regression)
    • 독립변수 하나가 종속변수에 영향을 미치는 선형회귀
    • x값 하나만으로 y값을 설명할 수 있는 경우
    • 회귀식 : y햇 = w0 + w1x1
    • 독립변수의 최선의 가중치(w1)와 편향(w0)을 찾음
  • 다중 회귀(Multiple Regression)
    • 여러 독립변수가 종속변수에 영향을 미치는 선형 회귀
    • y값을 설명하기 위해 여러 개의 x값이 필요한 경우
    • y햇 = w0 + w1x1 + w2x2 +w3x3 ...

 

2. K-Nearest Neighbor

from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_absolute_error, r2_score
# Decision 모델 사용하는 경우에는 평가지표 confusion_matrix, classification_report
  • K-Nearest Neighbor : K 최근접 이웃(가장 가까운 이웃 K개)
  • 학습용 데이터에서 k개의 최근접 이웃 값을 찾아 그 값들로 새로운 값을 예측하는 알고리즘
  • 회귀와 분류 모두 사용 가능한 비지도 학습 알고리즘
  • 다른 알고리즘에 비해 이해하기 쉽지만, 연산 속도가 느림
  • K가 너무 작으면 overfitting 발생, K가 너무 크면 모델이 너무 단순함
  • fitting : 학습 데이터 메모리에 데이터를 올림
  • predict : 모든 요소에 대해서 거리 계산(fit이 별 의미가 없음)
  • K값의 중요성
    • k 값에 따라 예측 값이 달라지므로 적절한 k 값을 찾는 것이 중요(default값은 5)
    • k를 1로 설정하지 않는 이유 : 이웃 하나로 판단하면 너무 편향된 정보를 얻게될 수 있음
    • k를 홀수로 설정하는 이유 : 짝수인 경우 과반수 이상의 이웃이 나오지 않을 수 있음
    • 검증 데이터로 가장 정확도가 높은 k를 찾아 KNN 알고리즘의 k로 사용
  • 거리 구하기
    • 유클리드 거리(Euclidean Distance)
    • 맨하튼 거리(Manhattan Distance)
    • 맨하튼 거리는 유클리드 거리보다 항상 크거나 같다

출처 : https://thebook.io/080260/0098/

 

 

from sklearn.preprocessing import MinMaxScaler
  • Scailing 필요성 
    • x와 y의 단위가 다르면 실제로는 더 먼 거리임에도 그래프 상에서는 더 가까워보일 수 있음
    • 방법 1 : 정규화(Normalization)
      • X_norm = (x - x_min) / (x_max - x_min)
      • 각 변수의 값이 0과 1 사이 값이 됨
    • 방법 2 : 표준화(Standardization)
      • X_z = (x - x_mean) / x_std
      • 각 변수의 평균이 0, 표준편차가 1이 
    • 평가용 데이터에도 학습용 데이터를 기준으로 스케일링 수행
      • 학습 데이터가 1 ~ 100이면 정규화 했을 때 변수는 0 ~ 1이 됨.
      • 모델이 0.5면 N, 1이면 Y로 예측하도록 학습됐다고 하자.
      • 만약 테스트 데이터가 1 ~ 200인 경우, 테스트 데이터 기준으로 스케일링 해버리면 학습 데이터에서는 1이었던 100이 0.5로 정규화된다. => Y로 예측해야 하는데 N이라고 예측해버리는 문제가 발생함

 

3. Decision Tree

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report
# regression 모델 사용하는 경우에는 평가지표 mean_absolute_error, r2_score
  • 분류와 회귀 모두에 사용되는 지도학습 알고리즘
  • 분석 과정을 실제로 눈으로 확인할 수 있음 → 화이트박스 모델
  • 스케일링 등의 전처리 영향도가 크지 않음
  • 훈련 데이터에 대한 제약 사항이 거의 없는 유연한 모델
  • 과적합으로 모델 성능이 떨어지기 쉬움 → 트리 깊이를 제한하는(=가지치기) 튜닝이 필요
  • 불순도(Impurity)
    • 순도의 반대말 = 불순도
    • 순도가 높을 수록 분류가 잘 된 것임
    • 불순도를 수치화 : 지니 불순도(Gini Impurity), 엔트로피(Entropy)
    • 지니 불순도
      • 지니 불순도 = 1 − (양성 클래스 비율^2 + 음성 클래스 비율^2)
      • 얼마나 잘 분류했는지 평가하는 지표
      • 지니 불순도는 0 ~ 0.5 사이의 값(이진 분류의 경우)
      • 순수하게(완벽하게) 분류되면 → 0  ,   완벽하게 섞이면(50:50) → 0.5
      • 지니 불순도가 낮은 속성(순도가 높은 속성)으로 의사결정 트리 노드 결정
    • 엔트로피(Entropy)
      • 엔트로피 = −음성클래스비율× 𝑙𝑜𝑔2 음성클래스비율 − 양성클래스비율 × 𝑙𝑜𝑔2(양성클래스비율)
      • 엔트로피는 0 ~ 1 사이의 값

 

# 변수 중요도 출력
model.feature_importances_
  • 정보 이득(Information Gain)
    • 정보 이득이 크다 = 분할할 때 불순도가 줄어든다
    • 모든 속성에 대해 분할한 후 정보 이득 계산
    • 정보 이득이 가장 큰 속성부터 분할

 

4. Logistic Rgression

출처 : https://ko.wikipedia.org/wiki/로지스틱_함수

# 이름은 회귀지만 분류 모델이다!
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report

# x_test에 대한 확률값
model.predict_proba(x_test)
  • 로지스틱 함수 = 시그모이드(sigmoid) 함수
  • (-∞,  ∞) 범위를 갖는 선형 판별식 결과로 (0, 1) 범위의 확률 값을 얻음
  • 기본적으로 확률값 0.5를 임계값(Threshold)로 잡고 더 크면 1, 작으면 0으로 분류
  • 함수에서 x에 들어가는 값이 선형 판별식
  • x 데이터마다 선형 회귀식의 가중치, 편향을 구하고 이 값을 사용해서 확률 값을 얻음
728x90
반응형

'공부 > ML' 카테고리의 다른 글

[머신러닝] #6 앙상블(Ensemble)  (2) 2024.03.15
[머신러닝] #5 Hyperparameter 튜닝  (0) 2024.03.14
[머신러닝] #4 K-Fold Cross Validation  (0) 2024.03.14
[머신러닝] #2 성능평가  (0) 2024.03.12
[머신러닝] #1  (0) 2024.03.12