딥러닝의 이해
지도학습(x:원인, y:결과)
예측: y값을 예측
분류: y값이 어떤곳에 속해있는지를 선택(분류)
둘중하나(이항분류: 생존1,사망0) 결과값은 0또는 1의 값으로만 출력되어야만함
네이버 영화평 긍정1,부정0
학습할떄는 y값으로 0또는 1값을 학습하지만
분류값으로 머신러닝이나 딥러닝한값은 0~1사이값이 출력이 되도록함,
0.5(임계값)보다 크면 1, 그렇지 않으면 0으로 최종값이 되게끔 계산
기본식은 x*w+b
대표적인 회귀분석 머신러닝f(x) 계산하는 방법이 고정이어서 오차계산 없음
이미 오차가 최소화되는 최소제곱법에 의해서 w,b가 계산이됨
딥러닝은 w,b를 무작위로 만들어서 계산한뒤(w*x+b), 오차계산하고 최소화 될 수 있게 경사하강(미분), 이과정 반복(사용자가 에포크지정한 횟수만큼)
x | y | f(x)=yhat | 오차 = y-yhat 제곱 |
1 | 10 | 5 | (10-5) = 25 |
2 | 5 | 6 | (5-6) =1 |
3 | 5 | 2 | (5-2)=9 |
4 | 5 | 2 | (5-2)=9 |
mse(제곱평균루트) |
오차를 최소화 시키는것
비지도학습 (x:원인)
예측, 분류
ex) 클러스터링,생성
훈련데이터 (w,b값에 관여하는데이터)
검증데이터(테스트데이터호 사용하기도함)
=>훈련데이터의 w,b값이 잘되어 있는지 확인하는 데이터셋
고전적인 머신러닝은 이미공식이 만들어져 있기때문에 검증데이터 없어도 됨
이미 만들어진 공식은 변경 불가능, 훈련데이터를 이용해서 w,b만 fit(계산)이 w,b좋은 값인지를 테스트데이터로 확인만(오차가 작은지, 일치확률) -모델검증 ---------------> 오차검증표
==> 좋은결과이면 이 모델 확정해서 새로운 데이터에 연동
딥러닝은 무작위로 w,b를 훈련에 넣음, 오차를 계산, 그 오차값을 0으로 만들기위한 경사하강(오차역전파)을 해서 무조건 훈련데이터는 오차가 작아지게 됨, 그럼 이 w,b가 좋은값이냐 확인용으로 검증데이터를 그때그때 넣어서 w,b를 넣어서 계산하고 y값의 오차를 확인함
====> 좋은케이스: 훈련데이터의 오차도 작아지고, 검증데이터의 오차도 점점줄어드는 상황이 좋음
====> 중단해야하는 경우(과적합): 훈련데이터의 오차는 작아지는데, 검증데이터의 오차는 커지는 지점
weight bias는 중간중간 저장하는게 좋음 -> 최종만 남기떄문
최종작업이 다끝나면 w,b가 생성이된 모델이 작성되면 이 모델을 테스트 데이터에 넣어서 모델검증 ------------->오차검증표
==> 좋은결과이면 이 모델 확정해서 새로운 데이터에 연동
**훈련데이터는 fit하지만, 테스트데이터는 fit하지 않는다!**
예시
max(5),min(1) | max(5),min(1) | |||
훈련 | 훈련.fit_min_max() | 테스트.Fit하지않음 계산만함 fit값은 훈련값으로 함 | 8(8-훈련데이터의min)/(훈련데이터max-훈련데이터의min) | |
2 | 0.25 | 8 | ||
3 | 0.5 | 7 | ||
1 | 6 | |||
5 |
사이킷런 패키지의 이해 - 타이타닉 승객 생존여부 예측모델생성
필요한 패키지 import해주고, 데이터를 로드시켜줍니다
머신러닝에 들어가는 x데이터는 문자데이터는 안됨
벡터데이터야함
성별은 male은 0 Female은 1은 1
embarked를 0,1,2,3,....4 로 줬을때 이 값이 순서대로 값의 크기가 의미가 있는가를 고민
문자를 단순하게 숫자 0,1,2,3,..로 작성을 하지 않음. --> 원핫인코딩작업을 실행
x데이터는 더미변수화, y변수는 원핫인코딩
로 컬럼들을 살펴보면
Index(['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked'], dtype='object')
OneHotEncoder(): 범주형 변수를 원-핫 인코딩 방식으로 변환합니다.
원-핫 인코딩은 범주형 변수의 각 범주를 새로운 더미(dummy) 변수로 변환하는 방식으로, 각 범주는 고유한 더미 변수에 해당하며 해당 범주에 속하는 관측치는 1, 그렇지 않은 경우는 0의 값을 갖습니다.
.fit(x_train): 변환기를 훈련 데이터셋 x_train에 맞게 적합시킵니다.
이 단계에서는 각 범주형 변수에 대한 원-핫 인코딩을 위한 매핑(어떤 범주가 있는지, 각 범주에 대한 더미 변수 인덱스 등)을 학습합니다.
여기서 17, 12와 같은 수는 나이,요금 같은 원핫인코딩을 시키지 않아서 나온값이다.
로지스틱회귀분석을 이용하여 모델을 생성
로지스틱 회귀분석이란?
데이터가 어떤 범주에 속할 확률을 0에서 1사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도 학습 알고리즘이다.
스펨 메일 분류기 같은 예시를 생각하면 쉬운데, 어떤 메일을 받았을 때 그 메일이 스팸일 확률이 0.5이상이면 스팸으로 분류하고, 메일이 스팸일 확률이 0.5보다 낮으면 일반 메일로 분류하는 것이다. 이렇게 데이터가 2개의 범주 중 하나에 속하도록 결정하는 것을 Binary Classification (2진 분류)라고 한다.
model.predict(x_test) # 위에있는 77%는 이 결과값의 1,0,0 값하고 y_train값하고의 일치율이 77%이다.
출력 화면
array([1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0,
0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0,
1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1,
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1,
1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1,
1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1,
1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0,
1, 0, 1, 1, 0])
newx_test로 새로운 변수를 지정
결과값이 생존 0.867532641303584로 나왔다.