본문 바로가기

Theory/DataScience

[SKLearn] 다변수 입력을 가지는 회귀 문제에 대한, Scikit-learn 선형회귀와 kNN 회귀 문제

텐서플로우를 처음 공부하면서 선형회귀의 예제로 혈중 지방 함량이라는 데이터를 인터넷에서 구해서(^^) 텐서플로우로 신경망을 이용하여 다변수 입력을 가지는 선형회귀 문제를 예제로 다룬적이 있는데요. 그리고 나서 또 동일 데이터를 이용해서 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
반응형