튜토리얼

필수 데이터사이언스 방법론 가이드
카테고리는 수준별, 언어별, 분야별, 주제별 순으로 정렬되어 있습니다.

기계학습

작성자
sungkenh
작성일
2017-01-11 17:05
조회
106
카테고리 : [ 초급   |   Python   |   기타   |   분류 ]

1) 제목


2) 작성자


컴퓨터정보통신공학과 홍성은

3) 링크 및 출처


Data Science From Scratch

 

4) 문제 및 개요


5) 데이터


6) 해결방법 및 결과






Muchine Learning

기계학습
muchine learning이란 기계가 data를 통하여 학습하는 것이다
예를 들면 email이 스팸인지 아닌지 판단하는 것이 있다.
기계 학습의 핵심은 표현(representation)과 일반화(generalization)에 있다. 표현이란 데이터의 평가이며, 일반화란 아직 알 수 없는 데이터에 대한 처리이다.
인공지능의 대표적인 방법이었던 전문가 시스템은 사람이 직접 많은 수의 규칙을 집어넣는 것을 전제로 하였다. 이같은 접근 방법은 과학에 기반한 학문들, 예를들어 의학이나 생물 분야에서는 큰 역할을 할 수 있었다. 의사들의 진단을 도와주는 전문가 시스템에 기반한 프로그램을 생각해보면 인간이 지금까지 발견한 의학적인 규칙들을 데이터베이스화 하여 등록시켜주면 되는 것이었다.하지만, 시간이 지남에 따라 세상은 사람조차 스스로 어떻게 하는지 모르는 영역을 요구하기 시작했다. 대표적으로 음성인식을 들 수 있겠다. 애플의 시리 같은 프로그램을 만든다고 생각해보자. 일단 사람이 어떤 문장을 말했는지 소리 → 알파벳으로 알아들을 수 있어야 하며, 알파벳으로 이루어진 그 문장이 어떠한 의미를 갖는지 해석할 수 있어야 한다. 이 같은 시스템은 사람이 하나하나 규칙을 만들어 준다고 형성될 수 있는 것이 아니다. 소리 같은 경우에는 컴퓨터에 PCM의 형태로 전달이 되는데 대체로 이는 1초에 최소 나무위키 항목 하나 분량의 데이터를 포함하고 있다. 절대로 "열이 많이 나고 오한이 있고 구토증상이 있으므로 독감이다"라는 쉬운 조건부로 해결될 문제가 아닌 것이다. 전체적인(오차가 존재하며 거대한) 데이터를 보고 그것이 의미하는 정보들을 명확히 짚어낼 줄 알아야 한다.그리하여 나온 방법이 기계학습이다. 이름에서 알 수 있듯이 기계학습은 기계, 즉 컴퓨터를 인간처럼 학습시켜 스스로 규칙을 형성할 수 있지 않을까 하는 시도에서 비롯되었다. 주로 통계적인 접근 방법을 사용하는데, 위의 독감의 예와 반대로 "독감이 걸린 사람은 대부분 열이 많이 나고 오한이 있고 구토 증상이 있었다"라는 통계에 기반하여 독감을 진단하는 것이다. 예시를 보면 알 수 있듯이 이는 인간이 하는 추론 방식과 유사하고 매우 강력하다.

기계학습의 발전으로 인해 현재의 거의 모든 시스템(인공지능, 검색엔진, 광고, 마케팅, 로봇, 인사활동, 등등)은 기계학습의 방법론 없이는 정상적으로 가동되지 않게 되었다.

(출처: 나무위키)

6.1 Overfitting and Underfitting

overfitting : training data set에대해서는 높은 성능을 보이지만 test data set 에서는 정확도가 떨어지는 문제
underfitting : traing data를 충분히 학습하지 못하여 두 부분다 성능이 낮은 문제
In [79]:

def split_data(data, prob):
"""split data into fractions [prob, 1 - prob]"""
results = [], []
for row in data:
results[0 if random.random() < prob else 1].append(row)
return results

In [80]:

def train_test_split(x, y, test_pct):
data = zip(x, y)
# pair corresponding values
train, test = split_data(data, 1 - test_pct)
# split the data set of pairs
x_train, y_train = zip(*train)
# magical un-zip trick
x_test, y_test = zip(*test)
return x_train, x_test, y_train, y_test

이 밑부분은 예시 코드이다

model = SomeKindOfModel() x_train, x_test, y_train, y_test = train_test_split(xs, ys, 0.33) model.train(x_train, y_train) performance = model.test(x_test, y_test)

만약 모델이 트레이닝 데이터로 오버핏 되었다면 test data에서 형편없이 행해졌을것이다
다르게 말하면 만약 test data에서 성공적이었다면 overfitting 되지않고 fitting 이라고 자신있게 내 놓을 수 있을 것이다.
하지만 문제가 있는데 만약 test와 train data가 일반적인 패턴들이었다면 다른 largest data set들로 일반화 하여 생각할 수 없기 때문에 확신을 가질 수 없다

6.2 correctness

True positive : 이 메시지가 스팸이라면, 우리는 정확하게 스팸으로 예상한다 A
False positive(Type 1 error) : 이 메시지가 스팸이 아니지만, 우리는 스팸으로 예상한다 B
True negative(Type 2 error) : 이 메시지가 스팸이지만, 우리는 스팸이 아닌걸로 예상한다 C
False negative : 이 메시지가 스팸이 아니고, 우리는 정확히 스팸이 아닌걸로 예상한다 D

이를 표로 나타낸다면

spam not spam
predict spam A B
predict not spam C D

이런 형태로 만들 수 있을것이다

만약 에러가 일어난다면 type 1과 type 2가 일어 날 수 있다.
type 1 에러보단 type 2 에러가 나은 상황이다. 왜냐하면 스팸이 아닌 메일을 스팸으로 거르는 것 보단, 스팸을 스팸이 아니라는 판단을 하는것이 서비스 이용자에겐 조금 더 나은 환경이기 때문이다.