2-2. k-Nearest Neighbors 응용하기

2016. 11. 18. 14:19Application Programming/머신러닝

1)Error rate

알고리즘이나 데이터 셋 둘 중 하나라도 다르다면 즉 '모든 조건이 같지 않다'면 분류기의 수행 능력이 달라진다. 각각의 경우에 대해 성능을 수치로 평가하고 싶다면 아주 간단한 방법이 있다.


우리가 이미 답을 알고있는 데이터를 분류기에게는 답을 가린 채 건네준 뒤 예측하게 한다. 분류기가 구해낸 답과 실제 답이 얼마나 다른지를 비율로 계산해 내면 그것이 바로 error rate이며 이 수치로 분류기의 성능을 나타낼 수 있다.


error rate = (분류기가 잘못된 값으로 예상해 낸 경우의 수)/(전체 테스트의 개수)




2)텍스트 파일로부터 데이터 파싱하기

앞의 kNN 포스팅에 이어서 이번에는 좀 더 큰 데이터에 알고리즘을 적용하려고 한다. 실습용 데이터를 찾는 것은 어렵지 않지만 책에서 제공하는 예제를 보고 해보자.


머신러닝 인 액션에서 제공하는 txt 예제 데이터를 이용하기 위해서는 우리가 만든 kNN알고리즘이 받아들일 수 있는 형식의 데이터로 변환해주어야한다.

**이렇게 사용가능한 데이터를 추출하는 일련의 과정을 파싱(Parsing)이라 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def file2mat(filename):
    fr=open(filename)
    numOfLines=len(fr.readlines())
    returnMat=zeros((numOfLines,3))
    classLabelVector=[]
    fr=open(filename)
    index=0
    lines=fr.readlines()
    for line in lines:
        line=line.strip()
        listFromLine=line.split('\t')
        returnMat[index,:]=listFromLine[0:3]
        classLabelVector.append(listFromLine[-1])
        index+=1
    return returnMat,classLabelVector
cs


우선 우리가 파싱하고자 하는 텍스트 파일의 내부는

13711 6.226962 0.287251 smallDoses

...

55783 3.612548 1.551911 didntLike

과 같은 식으로 매 줄마다 실수형 데이터 세 개와 클래스 명으로 되어있다. 각각의 값은 탭으로 구분되어있다.


위의 코드의 각 줄이 수행하는 것은 다음과 같다.


2-3 라인 : 텍스트 파일을 오픈하고 데이터의 개수(텍스트 파일의 줄 수)를 센다.

4-5 라인 : 추출의 결과로 함수 끝에서 반환할 행렬과 라벨벡터의 틀을 만든다.

6   라인 : 위에서 readlines를 한 번 호출해서 파일을 읽어들이는 커서가 맨 끝으로 이동했으므로, 8번 라인에서              다시 readlines를 호출하기 전에 다시 파일을 불러들인다.  

7   라인 : 텍스트 파일을 한 줄 읽을 때마다 증가시킬 변수 index를 선언한다.

8   라인 : readlines()로 텍스트 파일의 모든 내용을 리스트 형식으로 불러온다. 

  readlines의 리턴타입은 [첫째줄,둘째줄...,마지막줄]과 같은 리스트 형식이다.

9-14라인: 한 줄 마다 strip()으로 양끝의 공백을 지운 뒤

  탭을 기준으로 잘라 리스트 형식의 listFromLine에 넣어둔다. 예)[55783, 3.612548, 1.551911,'didntLike'] 

  returnMat의 index번째 줄에 방금 구한 listFromLine의 0,1,2번째 인덱스의 값을 넣어준다.

  classLabelVector에는 listFromLine의 마지막 인덱스의 값을 넣어준다.

  다음 루프에서는 밑에 returnMat의 다음 줄에 값이 입력 될 수 있게 index를 1증가시킨다.

15 라인 : returnMat과 classLabelVector를 반환한다.






3)Matplotlib로 데이터 분포 확인하기

이번 코드를 실행하기 위해서는 matplotlib를 임포트해야한다. 설치는 아래의 링크에서 확인할 수 있다.

http://doongkibangki.tistory.com/15 <--설치방법