반응형

ㅁ Linear Classifier

 o 모델을 설정한 뒤에 데이터를 가지고 핏팅한다.
 o 도미널리지(?)가 있으면 삽질을 덜 하니까 항상 동향파악은 해야한다.
 o 가장 좋은 성능을 도출하는 상수 값이 있고. 파라미터(?)라고 한다.
 o 그 수식 앞에 붙어 있는 상수 값을 찾는 것이 이번 장의 목표이다.
 o Decisition Tree에서 했던 내용과 동일하게 진행
 o 이번 장이 딥러닝의 기초가 되는 부분
 o 가장 잘 분류할 수 있는 모델을 어떻게 만들것인가? 내가 만들어내는 수식을 목적함수라고 한다.

 

o 타겟벨류가 동그라미, 세모다. 1차원 배열은 막대기로 나오고 2차원 평면에서 분류하고 싶다.
  - 수학적으로 n차원으로 확장할 수 있고. n차원은 n-1차원에서 분류할 수 있다.
  - 하이퍼플레인 = 초평면은 데이터가 n차원으로 올라가 있다고 보면 된다.
 o 2차원 평면에서 분류하기 위해 1차원의 직선으로 분류할 수 있다.
  - 분류하고나면 나중에 새로운 데이터가 찍혔을때 예측할 수 있게 된다.
 o 파라미터 러닝이라고하면 어려운데, 절편과 기울기를 찾으면 되는 것이다.
 o y = a(x) + b 데이터에서 깔끔하게 2개가 나와야하는데, 사이에 만족하는 값이 아주 많다.
 o 미지수 2개는 식이 2개면 풀 수 있는데, 식이 여러개가 나와서 문제다. 그러면 a와 b를 어떻게 찾아야하나?
  - 그럴땐 임의의 값을 넣고 0 ~ 1사이의 작은 값을 넣고 임의의 직선을 그으면 된다.
 o 선 밑에 계속 동그라미가 있으면 문제가 없으니 계속 선을 유지한다.
 o 이것은 값을 넣을때마다 기울기가 달라진다. 입력 데이터가 들어올때마다 기울기를 자동으로 업데이트하면 좋겠다.
 o 있다면 알고리즘이 있는 것이고 프로그래밍이 가능하다. 데이터가 1억개 여도 학습이 가능하다.
 o 이 개념이 신경망과 딥러닝까지 가는 것이고 찾아 가는 방법이 복잡해지는 것일뿐이다.


 $$ y = ax + b $$

 

ㅁ 선형 분류모델의 예시

 o 사전정보
  - 선형 관계가 존재 한다.  -> 킬로그램 = 파운드 * x 
  - 그리고 선형 관계는 피어슨, 스피어만, 켄달이 정의를 했기 떄문에 디테일한 검증까지는 하지 않는다. 공격하는 것은 피어슨, 스피어만, 켄달의 정의를 공격하는 것이니까. 
 o 실제 예시데이터 
  - Supervised Learing 

파운드 킬로그램
0 0
100 45.359237

 - 임의의 값 0.x 입력한다.
 - 학습은 오차값을 줄여나가는 것을 다시 생각. 

임의의 값 0.3일때
임의의 값이 0.4일때
임의의 값이 0.5 일때

0.4일때 오차가 더 크고 0.5일때 오차를 넘어선다. 그러면 0.4 ~ 0.5사이에 정답이 있는 것을 유추할 수 있음

 

ㅁ 연어와 농어로 해보는 이진 분류 모델

 o 데이터 

무게 길이 어종
25 20 연어
10 50 농어

 

$$ y = ax $$

아니 그림 그리는게 제일 어렵고 시간이 오래 걸리네 어떻게 그림을 편하게 넣을 수 있을까?

처음 기울기 임의의 값을 입력한다 -> a = 0.66
연어와 농어를 잘 구분하지 못하는데, 어떻게 적절한 분류선을 찾을까?

무게가 25이고, 길이가 20인 연어 데이터를 넣어보자.
$$ y = 0.66 * 25 = 16.5 $$
위의 갚은 우리가 만든 모델의 예측값이 된다.

목표는 농어와 연어를 분리하는 것이 목표다.
연어의 무게가 25일때 길이 25를 지나는 선을 생각해보자.
이 선은 농어와 연어를 구분할 수가 있다.

길이 25가 나와야 하는데 오차(E) 발생한다.
오차 = 목표값 - 출력값
$$ 8.5  = 25 - 16.5 $$

오차(E)와 기울기(a)의 관계
선형 분류함수
$$ y=ax $$
목표값
$$ t = (a+△a)x $$
오차(E)와 기울기(a)와의 관계
$$ E = t - y $$ $$ = (a+△a)x -ax $$ $$ ax + △ax - ax $$ $$ = △ax $$ $$ △a = E/x $$

마지막 수식을 통해 계산할 수 있다. 
$$ △a = E/x $$

무게 25, 길이 20인 연어 데이터
$$ △a = E/x = 8.5/25 = 0.34 $$

최종 기울기는 다음과 같이 표현할 수 있다.
$$ t = (a + △a)x = (0.66 + 0.34)x = 1.0x $$

기울기를 구할 수 있으니까 자동화하여 학습할 수 있다.
책에서 탄젠트를 구한다? 탄젠트를 구하라는 이야기는 많이 나올 것이다. 이것은 일반적으로 기울기를 구하라는 이야기와 동일하다고 보면 된다. 
새로운 기울기는 임의의 값에 구한 값을 더하면 되고, 데이터를 구분할때까지 반복하면 된다. 

두번째 데이터를 입력해보자.

무게가 10이고 길이가 50인 농어 데이터
$$ y = 1.0 * 10 = 10.0 $$
위의 식은 우리가 만든 모델의 예측 값이 된다.

길이 50이 나와야 하나 오차(E)가 발생했다.
선이 농어 밑으로 가야하므로 길이가 49로 가정한다
$$ 오차 = 목표값 출력값 $$ $$ 39.0 = 49 - 10.0 $$
$$ △a = E/x = 39.0 / 10 = 3.9 $$ => $$ y = (1.0 + 3.9)x $$ => $$ y = 4.9x $$

결국은 손그림으로 그려버리기~

 

기울기를 업데이트 하는 방법은 마지막 데이터의 영향력이 너무 커지는 문제점이 있다.
따라서 보완하는 방법이 필요한데, 학습률(Learning Rate)를 이용한다.
그리고 학습률은 보통 n(에타)라고 하며 0.05를 주로 쓴다.

$$ t = n(a + △a)x $$

학습률을 0.5로 가정하고, 무게 25, 길이 25인 연어 데이터
$$ y = 0.5 x $$

무게 10, 길이 50인 농어 데이터

$$ y = (0.5 + 1.95)x = 2.45x $$

$$ y = (1.0 + 3.9)x $$ 보다 좀 더 부드럽게 분류가 된다.

 

 

ㅁ 선형분류모델의 약점

 o XOR 문제를 해결할 수가 없다. 나중에 이 문제도 풀긴하겠다만, 선형분류모델은 XOR을 풀수 없음

x 출력 y
0 0 0
0 1 1
1 1 0
1 0 1

이걸 어떻게 선형으로 분류한단 말인가?

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기