E D R , A S I H C RSS

MachineLearning스터디 (rev. 1.12)

Machine Learning스터디

1. 계획

  • 스터디 구성원 : 권영기
  • Coursera의 Machine Learning (Andrew Ng 교수) 강의를 기본으로 공부한다.
  • 강의 사이트
  • 요즘은 Machine Learning in Action 이라는 책을 보고 있음. 영어A 강의 듣기 싫어서 그럼

3. 1장

3.1. 올바른 알고리즘 선정 방법.


  1. 목적을 고려해야 한다.

    만약에 목적 값(target value)을 예측하려고 한다면 지도 학습 방법(Supervised Learning)을 살펴보고, 그렇지 않다면 비지도 학습 방법(Unsupervised Learning)을 살펴보라.

    지도 학습 방법
    목적 값이 이산적인 값인가?
    분류 방법(Classification)
    목적 값이 연속적인 값인가?
    회귀(Regression)

  2. 비지도 학습 방법
    데이터가 이산적인 무리에 알맞은가?
    군집화(Clustering)
    무리에 알맞은 정도를 수치적으로 평가?
    밀도 추정(Density estimation)

  3. 보유하고 있는 데이터를 고려해야만 한다.

    속성이 명목형인가?
    속성이 연속형인가?
    속성내 누락된 값이 존재하는가?
    왜 존재하는가?
  4. 오류 데이터(Outlier)가 존재하는가?

3.2. 기계 학습 응용 프로그램 개발 단계

  1. 데이터 수집
  2. 입력 데이터 준비
  3. 입력 데이터 분석
  4. 알고리즘 훈련
    기계 학습이 이루어지는 부분.
  5. 알고리즘 테스트
    만족스럽지 못하면 1로 돌아간다.
  6. 사용하기.

3.3. NumPy 라이브러리로 시작하기.


4. 2장 k-최근접 이웃 알고리즘(K-Nearest Neighbor Algorithm)

기존에 훈련 집합이었던 예제 데이터 집합이 있다. 모든 데이터는 분류 항복 표시(labels)가 붙어 있으며, 따라서 각각의 데이터가 어떤 분류 항목으로 구분되는지 알 수 있다. 이후 분류 항목 표시가 붙어 있지 않은 새로운 데이터가 주어졌을 때, 기존의 모든 데이터와 새로운 데이터를 비교한다. 그리고 가장 유사한 데이터(가장 근접한 이웃)의 분류 항목 표시를 살펴본다. 이때 분류 항목을 이미 알고 있는 데이터 집합에서 상위 k개의 유사한 데이터를 살펴보게 된다. 마지막으로 k개의 가장 유사한 데이터들 중 다수결을 통해 새로운 데이터의 분류 항목을 결정하게 된다.

4.1. 예제: kNN을 이용하여 데이트 사이트의 만남 주선 개선하기.

4.1.1. 준비: 텍스트 파일의 데이터 구문 분석.

datingTestSet.txt, datingTestSet2.txt 파일 분석.

4.1.2. 분석: 매스플롯라이브러리로 scatter 플롯 생성하기.

4.1.3. 준비: 수치형 값 정규화하기.

단지 값이 크다는 이유만으로 항공 마일지리가 다른 속성보다 중요하다고 할 수 있는 것일까?
그것에 특별히 중요도를 가지지 않는한 이 속성은 다른 속성과 비슷한 중요도를 갖고 있을 것이다.
newValue = (oldValue - min) / (max - min)

4.1.4. 검사: 전체 프로그램으로 분류기 검사하기.

기계 학습에서 한 가지 공통된 작업은 알고리즘의 성능을 평가하는 것이다.
성능을 평가하는 한 가지 방법은 현재 가지고 있는 데이터의 일부분, 즉 90% 정도를 가지고 분류기의 학습에 사용하는 것이다. 그런 다음 나머지 10%의 데이터를 가지고 분류기를 검사하여, 분류기의 성능이 어느 정도인지 알아본다.

10%는 무작위로 선택.
오류율 = 잘못 분류된 데이터 개수 / 검사에 적용한 전체 데이터 개수
0 <= 오류율 <= 1

4.1.5. 사용: 모두에게 유용한 시스템 만들기.

4.2. 예제: 필기체 인식 시스템

4.2.1. 준비: 이미지를 검사 벡터로 변환하기

32 * 32 행렬로 이루어진 바이너리 이미지를 1 * 1024 벡터로 변환.

4.2.2. 필기체 번호에 kNN 적용하기

각 이미지를 읽어서 벡터로 변환 시킨 후, kNN을 적용시키면 된다.
여기서 좀 유용하다고 여겼던 처리는 파일명을 처리하는 것.
listdir - 디렉토리 안에 있는 파일의 목록을 리스트로 넘겨주는 함수.
from os import listdir

kNN 자체가 속도가 느리기 때문에 얼마 되지 않는 데이터 양에도 시간이 꽤 걸린다. 여기서는 매 테스트마다 콘솔 출력을 해서 그런 것도 있지만. 성능 개선을 위해서는 'kD-트리'라는 것을 사용하면 된다고 함. 'kD-트리'는 kNN을 변경한 알고리즘이라고 함.

4.3. 요약

kNN은 사례 기반 학습(instance-based learning)의 한 예이다.
이런 알고리즘 수행을 위해서는 주변에서 다루기 쉬운 데이터가 있어야만 함.
그리고 데이터 전체에 대해서 거리를 구해야하므로 메모리가 많이 필요하고, 속도도 느림.
또한 데이터가 어떤 구조를 갖고 있는지 알 수 없음. (왜냐하면 독립적인 각 항목에 대해서 유사한지만 판단하니까)

따라서 '평균', '모범 사례'가 어떤 것인지 알 수가 없음.

5. 3장 의사결정 트리: 한 번에 하나의 속성으로 데이터 집합 분할하기.

의사결정 트리는 데이터에서 지식을 추출하기 위해 많은 작업을 수행한다. 그리고 추출될 지식을 가지고 잘 모르는 데이터 집합을 처리할 수 있으며, 규칙 집합을 추출해 낼 수 있다.

전문가 시스템(expert systems)에서 자주 사용된다.

5.1. 트리 구조

장점: 계산 비용이 적다. 학습된 결과를 사람이 이해하기 쉬우며 누락된 값이 있어도 처리 할 수 있다. 분류와 관련이 없는 속성이 있어도 처리 할 수 있다.
단점: 과적합(overfitting)되기 쉽다.
적용: 수치형 값, 명목형 값.

하나의 최초 의사결정(decision)을 만들어야 한다.
최초 의사결정은 데이터를 분할하는 데 영향을 주는 '속성'으로 결정된다.

 	createBranch() pseudo code

	check if every item in the dataset is in the same class

		if so return the class label

		else

			find the best feature to split the data

			split the dataset

			create a branch node

				for each split

					call createBranch and add the result to the branch node

			return branch node
  • 양자화 : 연속적인 아날로그 데이터를 처리하기 위해 중복되지 않는 여러 개의 구간으로 나누어 처리.
    데이터를 어떻게 분할하고, 데이터 분할을 언제 멈추어야 하는가?
    ID3 Algorithm

5.1.1. 정보 이득

데이터 집합을 분할하기 위한 한 가지 방법을 선정하고 체계적이지 못한 데이터를 체계적으로 만든다.
다루기 어려운 데이터를 조직화하기 위한 방법 중 한 가지는 정보를 측정하는 것. 정보 이론을 사용하면 데이터를 분할하기 전과 후의 정보를 측정할 수 있다.
데이터를 분할하기 전과 후의 변화를 정보 이득(information gain)이라고 한다.
정보 이득이 가장 높은 속성을 가지고 분할하는 것이 가장 좋은 선택이다.

섀넌 엔트로피(Shannon entropy)
http://www.aistudy.com/control/information_theory.htm
http://ko.wikipedia.org/wiki/%EC%A0%95%EB%B3%B4_%EC%97%94%ED%8A%B8%EB%A1%9C%ED%94%BC

정보량이란 그 사상에 대해 모르는 정도에 대한 양이라고 할 수 있다. 이 것을 엔트로피라고 한다.
e.g. 16개의 카드에서 고른 1장의 카드를 알아맞추는 경우

16 -> 8 -> 4 -> 2-> 1
4번의 질문을 통해서 1장의 카드를 알아 맞출수 있다.
=> 질문에 대한 대답이 네번 필요하다. -> 정보가 4개가 필요하다.

이 정보량을 확률적 방식으로 표현함.
데이터 집합을 기반으로 섀넌 엔트로피를 적용시켰을 경우, 몇 번의 질문을 통해서 의사 결정이 가능한지를 알 수 있음.

5.1.2. 데이터 집합 분할하기

엔트로피를 측정하고 데이터 집합을 분할하며, 분할된 집합의 엔트로피를 측정하고 분할이 올바르게 되었는지를 확인해야 한다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:42
Processing time 0.0408 sec