반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 데이터시각화
- tableau
- 컴퓨터비전
- 그로스해킹
- 데이터모델링
- product
- fit
- pmf
- 파인튜닝
- 머신러닝
- omtm
- OKR
- nlp
- dl
- 데이터분석
- Market
- ERD
- DACON
- 태블로
- 언어지능딥러닝
- 시각화
- 인공지능
- 데이콘
- 딥러닝
- Computer Vision
- productmarketfit
- 모델링
- 자연어처리
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)
- 맨하튼 거리는 유클리드 거리보다 항상 크거나 같다
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
# 이름은 회귀지만 분류 모델이다!
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 |