본문으로 바로가기

텐서플로우를 처음 공부하면서 선형회귀의 예제로 혈중 지방 함량이라는 데이터를 인터넷에서 구해서(^^) 텐서플로우로 신경망을 이용하여 다변수 입력을 가지는 선형회귀 문제를 예제로 다룬적이 있는데요. 그리고 나서 또 동일 데이터를 이용해서 Keras를 공부하면서 케라스를 이용한 다변수 입력 선형 문제를 풀었었죠. 그리고 나서 이 문제는 잊고 있다가, 최근 핸드온 머신러닝이라는 책을 읽게 되었는데요. 정말 좋네요 이 책^^ 아무튼 그러다가, 제가 블로그에서 Scikit-learn을 이용한 학습을 한 적이 없다는 것을 문득 알고는 슬쩍 글 하나 남기는 것입니다.^^. 데이터도 이전에 다룬 것이고, 문제의 해법은 단지 선형회귀를 다룰 뿐인데.. 그러니까.. 그냥 블로그에 글 많이 쓰기 이외의 목적은 없어 보입니다.^^. 한가지 더 있다면 이 글 하나로도 Scikit-learn이 참 간단하구나.. 라고 생각해 볼 수 있는거죠^^. 아무튼 데이터는 이전 글의 데이터인 나이 체중에 대한 혈액함량인데 그건 텐서플로우로 예제를 다루던 글에 있습니다.

import numpy as np
import matplotlib.pyplot as plt
import sklearn.linear_model
%matplotlib inline

raw_data = np.genfromtxt('x09.txt', skip_header=36)

from mpl_toolkits.mplot3d import Axes3D

xs = np.array(raw_data[:,2], dtype=np.float32)
ys = np.array(raw_data[:,3], dtype=np.float32)
zs = np.array(raw_data[:,4], dtype=np.float32)

fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xs, ys, zs)
ax.set_xlabel('Weight')
ax.set_ylabel('Age')
ax.set_zlabel('Blood fat')
ax.view_init(15, 15)

plt.show()

뭐 이전 두 개의 글과 같은 데이터이니 그림도 같죠^^. Scikit-Learn의 버전은 0.19.1입니다.

오랜만에 보니 방갑네요^^.

X = np.array(raw_data[:,2:4], dtype=np.float64)
y = np.array(raw_data[:,4], dtype=np.float64)

model = sklearn.linear_model.LinearRegression()
model.fit(X, y)

print(model)
print('Est [100,40] : ', model.predict([[100,40]]))
print('Est [60,25] : ', model.predict([[60,25]]))

그냥 데이터 읽고~ linear_model 사용하겠다고 하고, 그 안에 LinearRegression을 사용하겠다고 하고, 입출력 데이터로 fit만 하면 됩니다. 과정은 꽤 케라스랑 비슷하죠^^.

이쁘네요^^.

knn = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)
knn.fit(X, y)

print(knn)
print('Est [100,40] : ', knn.predict([[100,40]]))
print('Est [60,25] : ', knn.predict([[60,25]]))

이번에는 회귀문제를 kNN으로 푸는거죠. 뭐 코드는 참~ 하나만 바뀌네요...

ㅎㅎ.. 둘 사이는 차이가 있네요. 또 앞선 두 글과도 차이가 있습니다.

제가 보고 있는 핸드온 머신러닝 책 1장에 엄청 재미난 글이 소개되어 있네요.^^

공짜 점심 없음 이론

경험하기 전에 더 잘 맞을 거라고 보장할 수 있는 모델은 없습니다. 어떤 모델이 최선인지 확실히 아는 유일한 방법은 모든 모델을 평가해보는 것 뿐입니다. 이것이 불가능하기 때문에 실전에서는 데이터에 관해 타당한 가정을 하고 적절한 모델 몇 가지만 평가합니다.

1996. David Wolperts - The Lack of A Priori Distinctions Between Learning Algorithms

댓글을 달아 주세요

  1. BlogIcon 스티마 2018.06.20 09:18 신고

    저도 언젠가 써먹을 날이 있을거라 생각하고, 계속 눈으로만 친근해지기 하고 있습니다. ㅎ

  2. BlogIcon 드래곤포토 2018.06.20 09:51 신고

    오래간만에 보는 C++언어네요
    즐거운 수요일 보내세요

  3. BlogIcon 휴식같은 친구 2018.06.20 10:12 신고

    잘 보고 갑니다.
    즐거운 하루 보내세요~^^

  4. 잘 보고 갑니다~~ ㅎㅎ

  5. BlogIcon 핑구야 날자 2018.06.21 06:51 신고

    어려운 내용이지만 그래도 잘 보고 갑니다 즐거운 하루 보내세요

  6. BlogIcon 즐거운 우리집 2018.06.21 07:38 신고

    맞아요.
    모든 모델에 대한 평가는... 어렵지만 모두 해봐야 알겠죠 ㅎㅎㅎ

  7. BlogIcon 공수래공수거 2018.06.21 08:32 신고

    혈중 지방 함량 정상치 유지하는게 좋습니다 ㅎㅎ

  8. BlogIcon Bliss :) 2018.06.22 06:54 신고

    헉.......다른 글들은 차분차분 읽으면 얼추 주제 파악은 됐는데 이 글은 혈중 지방 함량 이거 빼고..다 모르겠어요 - -;;ㅋㅋㅋ 그나저나 오타와 기회......아쉽습니다. 여행으로라도 언젠가 기회가 닿길요^^ 활기찬 하루 되세요^^

  9. BlogIcon 북두협객 2018.06.22 06:55 신고

    프로그래밍 언어 이제 다 까묵었는데 볼 수록 신기한 코딩의 세계입니다~

  10. BlogIcon kangdante 2018.06.22 08:05 신고

    어렵네요.. ㅋㅋ
    잘 보고 갑니다
    여유로운 주말보내세요.. ^^