혼자 공부하는 머신러닝 & 딥러닝 03-02

1 minute read

Published:

import numpy as np

perch_length = np.array(
    [8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0,
     21.0, 21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5,
     22.5, 22.7, 23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5,
     27.3, 27.5, 27.5, 27.5, 28.0, 28.7, 30.0, 32.8, 34.5, 35.0,
     36.5, 36.0, 37.0, 37.0, 39.0, 39.0, 39.0, 40.0, 40.0, 40.0,
     40.0, 42.0, 43.0, 43.0, 43.5, 44.0]
     )
perch_weight = np.array(
    [5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0,
     110.0, 115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0,
     130.0, 150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0,
     197.0, 218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0,
     514.0, 556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0,
     820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0,
     1000.0, 1000.0]
     )

from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(
    perch_length, perch_weight, random_state=42
)
train_input = train_input.reshape(-1,1) # 갯수가 몇 개인지 모르겠으나 -1하면 전부!
test_input = test_input.reshape(-1,1)
from sklearn.neighbors import KNeighborsRegressor
knr = KNeighborsRegressor(n_neighbors=3)
knr.fit(train_input, train_target)


KNeighborsRegressor(n_neighbors=3)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
print(knr.predict([[50]]))
[1033.33333333]
import matplotlib.pyplot as plt

distances, indexes = knr.kneighbors([[50]])

plt.scatter(train_input,train_target)
plt.scatter(train_input[indexes], train_target[indexes], marker='D')

plt.scatter(50,1033,marker = '^')


plt.show()

png

print(np.mean(train_target[indexes])) # 가장 가까운 것들 3개의 평균 무게를 구해보면 이렇게 나옴.
1033.3333333333333
distances, indexes = knr.kneighbors([[100]])

plt.scatter(train_input,train_target)
plt.scatter(train_input[indexes], train_target[indexes], marker='D')

plt.scatter(100,1033,marker = '^')


plt.show()

png

이게 최근접의 단점이야!!

다른 방법 없을까?

선형회귀를 해보자.

from sklearn.linear_model import LinearRegression
lr = LinearRegression()

lr.fit(train_input, train_target)
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
print(lr.predict([[50]])) # 이렇게 무게가 크게 잘 나온다!
[1241.83860323]
## 이 객체에서 기울기와 절편도 준다.

print(lr.coef_, lr.intercept_)
[39.01714496] -709.0186449535474
plt.scatter(train_input, train_target)

plt.plot([15,50], [15*lr.coef_+lr.intercept_, 50*lr.coef_+lr.intercept_]) # 이 부분이 이해가 잘 안간다.

plt.scatter(50,1241.8, marker='^')
plt.show()

png

print(lr.score(train_input, train_target))
print(lr.score(test_input, test_target))
0.9398463339976041
0.824750312331356