[파이데사] ML 2
2023. 4. 26. 12:35ㆍ2022/파이썬을이용한데이터사이언스
반응형
Supervised learning
- 정답이 존재한 상태로 학습을 시키는 방식
- 비지도학습보다 성능이 더 좋으나 y값(labels)를 얻는 것이 쉽지 않음
- y값이 연속형이라면 선형회귀 이용
- y값이 이산형이라면 classification 이용
- Regression
- 과거의 점수를 분석함으로써 학생들의 중간고사 점수를 예측할 때
- X: past scores of another students
- y: their midterm scores
- 중고차의 특징을 분석함으로써 가격 예측하기
- X: characteristics of cars already sold
- y: their prices
- 과거의 점수를 분석함으로써 학생들의 중간고사 점수를 예측할 때
- Classification
- 과거의 점수들을 분석하여 학생들의 성적 예측하기
- X: past scores of students
- y: their grades(A, B, C)
- 중고차의 특징을 분석함으로써 가격의 범위를 예측하기
- X: characteristics of cars already sold
- y: their price ranges(high, medium, low)
- 과거의 점수들을 분석하여 학생들의 성적 예측하기
- 일반적으로 회귀문제는 해결하는데 훨씬 어려움
- 회귀문제를 분류 문제로 바꿔 연속형 종속 값들을 카테고라이징 함
- regression은 많은 정보들을 제공함
- classification에서는 grey areas가 존재
Classification evaluation
- classification evaluation
- 좋은 classifier는 무엇일까?
- c.f. regression
- 실제 값과 예측값 사이의 오차를 최소화
- c.f. regression
- 모르는 데이터의 카테고리를 정확하게 예측해라
- 좋은 classifier는 무엇일까?
- 일반적인 평가 방식
- 지도학습에서의 트레이닝과 평가 과정
- evaluation metrics
- regression : RMSE, MAE, MAPE
- data split
- training set : tr, 머신러닝 모델을 훈련시키기 위한 데이터셋
- test set : te, 모델의 성능을 평가하기 위한 데이터셋
- validation set : 하이퍼파라미터를 조절하기 위한 데이터
- 비율(8:2, 7:3)대로 랜덤하게 데이터를 나눔
- k-fold cross validation
- 10-fold cv : 10개로 쪼개서 돌아가며 이용
- time dependent split
# k-fold split import random import math from sklearn import datasets wine = datasets.load_wine() r, c = wine.data.shape X = wine.data y = wine.target # random split 1 tr_ratio = 0.8 tr_idx = random.sample(range(r), int(math.floor(r*tr_ratio))) te_idx = [x for x in range(r) if x not in tr_idx] X_tr, y_tr, X_te, y_te = X[tr_idx, :], y[tr_idx], X[te_idx, :], y[te_idx] print(tr_idx, te_idx) # random split 2 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # k-fold from sklearn.model_selection import KFold kf = KFold(n_splits=10) for train_idx, test_idx, in kf.split(X): X_train, X_test, y_train, y_test = X[train_idx], X[test_idx], y[train_idx], y[test_idx] print(train_idx, test_idx)
- data split
- classification : accuracy, F1 score, recall, precision
- accuracy
- 완벽하게 예측된 instances의 비율
- 주어진 데이터셋이 불균형하다면?
- classifier를 만들고 accuracy를 계산
- true positive + true negative / total population
- recall, precision
- recall
- true positive / false negative + true positive
- precision
- true positive / true positive + false positive
- recall
- accuracy
- regression : RMSE, MAE, MAPE
from sklearn import metrics
from sklearn.metrics import confusion_matrix
y_te = [1, 0, 1, 1, 0]
pred = [1, 1, 1, 1, 1]
print(confusion_matrix(y_te, pred))
print(metrics.accuracy_score(y_te, pred))
print(metrics.recall_score(y_te, pred))
print(metrics.precision_score(y_te, pred))
print(metrics.f1_score(y_te, pred))
Classification models
- KNN algorithm
- K-nearest neighbor
- aka case-based learning (CBR)
- intuition
- 유사한 트레이닝 예시들을 찾고 그것들과 같은 클래스를 예측
- characteristics
- 트레이닝 X
- 단순하지만 강함
- 비선형
- 느림
- K 값에 달려있음
- 주로 3이나 5를 이용
- characteristics
- 유사한 트레이닝 예시들을 찾고 그것들과 같은 클래스를 예측
- decision tree
- intuition
- root node를 기준으로 단계적으로 의사결정을 진행
- characteristic
- 이해하고 설명하기 쉬움
- overfitting → 깊이를 알아내야 함
- 연속형 features와는 문제가 생길 수 있음
- high-level 노드에서의 실수는 결정적임
- intuition
- SVM (Soft Vector Machine)
- intuition
- 데이터 포인트들 사이의 가장 큰 간격을 제공하는 선을 찾아냄
- 최적화 문제
- characteristic
- 일반적이고 억셈.. 굳셈..?
- 빠름
- 성능이 좋은 편임 (최고는 X)
- 이해는… 불가
from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split, cross_val_score from sklearn import svm, tree from sklearn.metrics import accuracy_score, confusion_matrix wine = load_wine() X = wine.data y = wine.target X_tr, X_te, y_tr, y_te = train_test_split(X, y, train_size=0.8) trained_svm = svm.SVC(kernel='linear').fit(X_tr, y_tr) y_pred = trained_svm.predict(X_te) print(confusion_matrix(y_te, y_pred)) print(accuracy_score(y_te, y_pred)) dt_clf = tree.DecisionTreeClassifier() acc_dt = cross_val_score(dt_clf, X, y, cv=10) print(acc_dt) print(acc_dt.mean())
- intuition
- kernel method
- kernel trick
- 고차원의 feature 공간과 input 공간을 받는 함수
- 유사도의 척도
- kernel trick
Deep learning
- find a suitable model for my problem
- problem definition
- y: continuous, categorical
- feature type
- continuous (연속형 데이터)
- discrete (이산형 데이터)
- sequential (시계열 데이터)
- heterogeneous → 이상 데이터..?
- data quality
- noise
- scale → normalization
- problem definition
반응형
'2022 > 파이썬을이용한데이터사이언스' 카테고리의 다른 글
[파이데사] ML 1 (0) | 2023.04.26 |
---|