일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인생책
- 비전공자 코딩
- 멋쟁이사자처럼
- 인터뷰
- 멋쟁이사자처럼 전액국비지원
- 멋사 k 디지털
- 이렇게 그녀를 잃었다
- 민음사
- 추천프로젝트
- 멋사 전액국비지원교육
- AI 코딩
- 영화추천시스템
- 가브리엘마르케스
- 문학동네
- 비전공자 멋쟁이사자처럼
- 멋사 AI 교육
- 멋쟁이사자처럼 k 디지털
- 멋사 AI
- 홍명희 임꺽정
- til
- k 디지털 후기
- k 디지털
- 영화AI추천
- 리뷰
- 멋사 국비지원과정
- 멋쟁이사자처럼 k-digital
- 비전공자 코딩교육
- AI 국비지원
- 인생책짧은글
- 유니오르
- Today
- Total
글쟁이, 코딩한다
0105 / K_digital 20일차 / ML이론기초(지도학습) 본문
0.
머신러닝, 쉽지않음
또다른 공부라는 점에서 흥미롭기는 하다. 입문에 발만 담갔는데도 세상이 또 넓어지는 기분이다.
이해가 온전하지 않았던 수학공식들은 추가 공부를 한 후에 기록한다.
Linear Regression
선형 회귀. 정답 있는 데이터의 추세를 잘 설명하는 선형 함수를 찾아 x에 대한 y를 예측
y=ax+b의 꼴. (a=θ1, b=θ0, θ의 수는 여럿이 되면 y= θ0+ θ1x1 + θ2x2 + ... + θnxn)
결국 θ들(parameter theta)의 값이 정확해야한다
!목표는 가장 적합한 θ들의 set를 찾는 것
어떻게 적합도를 구할까?
MSE
평균Mean 제곱Square(d) 오차Error 함수Function, 모델의 평균 에러값 !당연히 작을수록 좋다
#모든 에러 값에 제곱 (부호 없애기) / 에러 갯수(평균 내기)
Cost Function(비용 함수, Loss F, Error F, J(θ)) : 모델의 효율, 적합도를 판별하는 식
무작정 θ를 바꿔가며 MSE 값을 구한다? => 비효율적 =>
경사하강법(Gradient Descent Algorithm)
- θ 초기값을 임의로 설정
- 미분해 접선의 기울기를 구함(부호 +,-)
- 부호 반대방향(기울기가 떨어지는 방향)으로 θ를 이동
- 접선의 기울기 최소값에 도착
즉, MSE 함수를 기반으로 기울기를 구하며 최솟값을 구한다 => 이를 통해 최적의 함수(모델)를 찾는다
#학습률(Learning Rate, LR, 보폭) / θ가 나아가는 거리 / 사용자가 결정
알파값이 너무 작으면, 학습이 느려지거나 지나치게 오래 걸린다 <-> 알파값이 너무 크면, 에러가 너무 크게 터진다
LR처럼 사용자가 결정해야 하는 모든 것들
Hyper-parameter(초매개변수)
(어떤 모델, 어떤 cost function, 어떤 gradient descent 등등 방대하다) => 이를 Tuning하는 것이 주요 과제
1. 데이터셋 불러오기
sklearn.datasets.load_[data]( )
#DB, excel, json 등 다양한 데이터의 전처리 #feature selection(필요한 열 골라내기)
#행렬(array)의 형태로 바꿔줄 것!
2. training/test set으로 데이터 나누기
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, Y, test_size)
#random_state : 매번 동일한 random 값이 나옴 / random이라는 속성은 가져가되 실험을 재현하도록 해준다 / 뒤에 숫자는 임의지정, fix만 하면 된다
3. 모델 객체 생성하기(모델 클래스를 객체로 불러오기)
model = sklearn.linear_model.LinearRegression(hyper-para)
#모델 이름 찾아 붙이기(Hyper-parameter 튜닝)
4. 모델 학습 시키기(Model fitting)
model.fit(train_x, train_y)
#a값(θ1) : model.coef_ / Coefficients(계수)
#b값(θ0) : model.intercept_
5. 모델로 새로운 데이터 예측하기
model.predict(test) #예측
@MSE 구하기
* np.mean((model.predict(x_train) - y_train) ** 2) #손으로 만든 MSE 코드
sklearn.metrics.mean_squared_error(model.predict(x_train), y_train) #MSE 코드
##training data MSE값과 test data MSE값이 크게 다르다면, Overfitting을 의심해야 한다. 하지만, 그 차이는 주관적.
nq.sqrt(mean_squared_error( ))
#MSE의 제곱근을 벗겨낸다. 평균 에러차이 #결론적으로 선형 회귀는 성능이 그닥 좋지는 않다
Logistic Regression
이진 분류(binary classification) 문제 : 둘 중 하나의 해결 모델 ex) 스팸 메일, 질병 양/음성
Sigmoid function (s자 곡선 그래프 함수)
p(Class(+) | X) = 1 / 1 + e ** ax+b(e ** -0 ** Tx)
#x가 class+일 확률 #e는 자연수 함수(상수) #변수는 a(θ1)와 b(θ0). a는 선의 가파름, b는 x축 대칭이동
정답의 형태
1-정확한 y값을 요청(regression)
2-특정 cutoff 기준 한 쪽의 값(0, 1) #cutoff = decision boundary = threshold = 조정이 가능하다
#적합도 확인
Cross-entropy function(역시 Cost function, 수치가 작아질수록 제대로 분류)
Cross-entropy는 숫자들을 비교해 정답에 대한 확신, 아쉬운 오답 등을 세밀하게 비교한다.
ROC Curve
계단식 그래프 : 모델 분별력의 한계를 선으로 표현한 것 : 완벽한 모델이라면 직각에 가까워진다
#분별이 어려운 두 선 => 그 아래 면적(AUC, AUROC)을 본다 / 0.5와 1 사이 / 0.8이 넘으면 훌륭하다고 본다
진양성율(TPR) : 실제 참인 것 가운데 모델이 참이라고 예측한 비율, 그래프의 y축
위양성율(FPR) : 실제 거짓인 것 가운데 모델이 참이라고 예측한 비율, 그래프의 x축
#Linear Regression을 참고
1. 데이터셋 불러오기
#분류 문제에서는 데이터 세팅을 0과 1로 바꿔보자 #apply, lambda함수를 쓰면 편안
2. training/test set으로 데이터 나누기
3. 모델 객체 생성하기
model = linear_model.LogisticRegression( )
4. 모델 학습 시키기(Model fitting)
5. 모델로 새로운 데이터 예측하기
model.predict_proba(x_test) #한 행이 0일 확률과 1일 확률, 두 개를 뱉는다 #기존 시그모이드 함수는 1일 확률만 계산
#적확도 계산
from sklearn.metrics import accuracy_score
accuracy_score(model.predict(x_test), y_test)
#accuracy_score(적합도)는 나이브한 접근방식
오늘의 (일단) 적어두기
1. Least Squares Estimation
2. 데이터 한 건 : 데이터 1 point : 데이터 1 instances
3. 직선 형태 모델로는 한계가 있다 -> model 대다수는 비선형 -> 딥러닝은 비선형의 최대화(직선을 곡선으로 구부린다)
4. 통계학 기반 예측 지표들을 많이 알아두면, 활용하기 좋다
5. Softmax Algorithm : 다중 클래스 분류 문제를 위한 알고리즘(함수)
#model이 내보낸 score를 각 클래스 소속 확률 값으로 변환 #logistic regression을 변형/발전시킨 방법
'나는 코딩도 한다 > TIL' 카테고리의 다른 글
0107 / k_digital 22일차 / ML이론기초(비지도학습) (0) | 2021.01.07 |
---|---|
0106 / k_digital 21일차 / ML이론기초(지도학습) (2) | 2021.01.07 |
0104/ K_digital 19일차 / SQL, AI 입문 (0) | 2021.01.04 |
1231 / K_digital 18일차 / DB, SQL (3) | 2020.12.31 |
1230 / K_digital 17일차 / 세미프로젝트(마무리) (2) | 2020.12.30 |