Machine Learning in Action ch.2.2 K-NN

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


2.2.1 준비 : 텍스트 파일의 데이터 구문 분석하기

@ 머신 러닝 인 액션에서 첨부 파일로 준 kNN.py 파일을 아나콘다 -> ipython -> Lib 폴더에 넣어야 ipython에서 import kNN을 할 수 있다. 

우선 텍스트 파일에 대해 설명하자면

* 연간 항공 마일리지 수
* 비디오 게임으로 보내는 시간의 비율
* 주당 아이스크림 소비량(L)

로 이루어진 텍스트 파일이다.
이제 numpy 구문 분석 코드에 텍스트 기록하기 코드를 보자

def file2matrix(filename):
    fr = open(filename)
    numberOfLines = len(fr.readlines())         #get the number of lines in the file
    returnMat = zeros((numberOfLines,3))        #prepare matrix to return
    classLabelVector = []                       #prepare labels return   
    fr = open(filename)
    index = 0
    for line in fr.readlines():
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3]
        classLabelVector.append(listFromLine[3]) //원래 책에서는 -1인데 오류나서 바꿈
        index += 1
    return returnMat, classLabelVector
    
이 코드는 파이썬이 텍스트를 처리하는 것이 얼마나 쉬운지를 보여주는 정말 좋은 예라고 책에서 설명한다.

근데 나는 Numpy 라이브러리보다 Pandas 라이브러리가 효율적인거 같은데 분석할 때 둘 다 쓰이는 거 같으니 우선 Numpy로 행렬 다루는 거 연습하는 겸 해야겠다.


위는 datingDataMat과 datingLabels를 출력한 화면이다. 근데 왜 .head() 함수가 안되는지 모르겠다....


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

이제 그래프로 위의 datingLabels와 datingDataMat을 표현하는 코드를 짜보았다.

import kNN
import matplotlib
import matplotlib.pyplot as plt

datingDataMat, datingLabels = kNN.file2matrix('C://Users//llewyn//Desktop//MLiA_SourceCode//machinelearninginaction//Ch02//datingTestSet.txt')

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2])
plt.show()

흠.. import kNN 하는 방법은 내 컴퓨터로 예를 들면 kNN.py를 내 파이썬 IDE인 Pycharm의 Lib 폴더에 넣어 import 하였다.

그리고 kNN의 file2matrix 함수를 불러와 리턴값으로 두 변수를 받아 그래프를 그렸다.

x 값은 비디오 게임으로 보내는 시간의 비율이고
y 값은 주당 아이스크림 소비량이다.

이러한 데이터에서는 어떠한 패턴도 알아보기 어렵다. 하지만 , 우리는 분류 항목 값이라는 추가적인 데이터를 가지고 있다. 만약 그것들을 색상이나 다른 어떤 기로호 좌표에 표현할 수 있다면 이 데이터를 더욱더 잘 이해할 수 있게 될 것이다. 

다시 scatter 함수를 사용해보자..

import kNN
import matplotlib
import matplotlib.pyplot as plt
from numpy import array

datingDataMat, datingLabels = kNN.file2matrix('C://Users//llewyn//Desktop//MLiA_SourceCode//machinelearninginaction//Ch02//datingTestSet2.txt')
datingLabels =list(map(int , datingLabels))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15*array(datingLabels),15*array(datingLabels))
plt.show()

와 개고생했다... 책은 파이썬 2라 실행이 안되서 map 함수를 겨우 찾아서 성공했다.
변경 부분은 강조 표시해두었다. 
파일은 두번째 파일로 바꾸었다. 라벨이 문자형으로 되어있었는데 숫자로 표시한 텍스트 파일이 있길래 더 쉬울 것 같다는 생각 때문이다.

나머지는 전 그래프와 같지만 색이 라벨에 따라 바뀐 그래프이다.
다음 그래프도 보겠다.


위 그래프의 x 값은 연간 항공 마일리지 수이고
y 값은 비디오 게임으로 보내는 시간의 비율이다.

위와 같은 2개의 그래프는 다른 분류 항목들이 놓여 잇는 세 영역을 파악할 수 있다.


다음 글에는 준비 : 수치형 값 정규화하는 과정부터 시작할 것이다.

모르는 함수들

.scatter()  :  
.add_subplot()  :
.figure()  :
map()  :

출처 : 머신 러닝 인 액션 책

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리