가장 근사한 방정식 구하기
[다항회귀]
- x, y좌표들을 지나는 가장 근사한 방정식 구하기
- 구한 방정식에서 새로운 x를 넣었을 때 y값 추출
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
# x,y좌표를 지나는 가장 근사한 방정식 구하기
# x, y 좌표 리스트
x = np.array([[100], [106], [111], [124], [151], [187], [226], [270], [315], [354], [390], [415], [428], [434], [439]])
y = np.array([[259], [301], [344], [386], [419], [445], [467], [474], [468], [445], [418], [384], [342], [300], [258]])
poly_features = PolynomialFeatures(degree=4, include_bias=True) # degree, 차수를 바꿔가면서 방정식 확인
x_poly = poly_features.fit_transform(x)
# print(x_poly)
lin_reg = LinearRegression()
lin_reg.fit(x_poly, y)
lin_reg.intercept_ , lin_reg.coef_
# 위에서 구한 방정식에서 x좌표를 넣으면 y좌표를 예측해줌
x_new = np.array([[102], [112], [124], [142], [165], [194], [229], [270], [310], [346], [376], [399], [417], [429], [439]])
x_new_poly = poly_features.transform(x_new)
y_new = lin_reg.predict(x_new_poly)
# print(y_new)
plt.plot(x, y, "b.")
plt.plot(x_new2, y_new, "r-", linewidth=2, label="Predictions")
plt.xlabel("$x$", fontsize=16, labelpad=5)
plt.ylabel("$y$", rotation=0, fontsize=16, labelpad=15)
plt.title('KimTaeHee_LandmarkPoint(1~15)')
plt.legend(loc="upper left", fontsize=10)
plt.savefig('./result2.jpg', bbox_inches='tight', pad_inches=0)
plt.show()
- x, y좌표들을 지나는 가장 근사한 방정식 구하기
- 구한 방정식에서 새로운 x를 넣었을 때 y값 추출
from sklearn import linear_model
import matplotlib.pyplot as plt
# [x, y]
Data = [[127, 388], [138, 462], [148, 535], [172, 606], [218, 662], [279, 707], [347, 744], [422, 756],
[498, 746], [566, 708], [625, 660], [669, 602], [693, 530], [703, 456], [713,383]]
x = [Data[0][0], Data[1][0], Data[2][0], Data[3][0], Data[4][0], Data[5][0], Data[6][0], Data[7][0], Data[8][0], Data[9][0], Data[10][0], Data[11][0], Data[12][0], Data[13][0], Data[14][0]]
y = [Data[0][1], Data[1][1], Data[2][1], Data[3][1], Data[4][1], Data[5][1], Data[6][1], Data[7][1], Data[8][1], Data[9][1], Data[10][1], Data[11][1], Data[12][1], Data[13][1], Data[14][1]]
X = [[x[k]**n for n in range(1, 3)] for k in range(len(Data))]
reg = linear_model.LinearRegression()
reg.fit(X, y)
# print(reg.intercept_)
# print(reg.coef_)
#accuracy 값
print(reg.score(X,y))
xp = [k for k in range(800)]
Xp = [[xp[k]**n for n in range(1, 3)] for k in range(800)]
# xp = [75, 79, 86, 92, 107, 137, 177, 221, 270, 319, 363, 402, 430, 446, 452, 459, 462]
# Xp = [[xp[k]**n for n in range(1, 7)] for k in range(17)]
yp = reg.predict(Xp)
# print(yp)
# print('\n')
plt.xlim(50, 800)
plt.ylim(100, 800)
plt.plot(x, y, "x")
plt.plot(xp, yp)
plt.savefig('./test_shape.jpg', bbox_inches='tight', pad_inches=0)
plt.show()
- x, y좌표들을 지나는 가장 근사한 방정식 구하기
- 구한 방정식에서 새로운 x를 넣었을 때 y값 추출
- +) 구한 방정식에서 새로운 y를 넣었을 때 x값 추출
import numpy as np
import matplotlib.pyplot as plt
from sympy import Symbol, solve
from sympy import *
# x,y좌표 리스트
x = [69, 78, 89, 105, 124, 148, 176, 206, 236, 264, 289, 309, 324, 335, 344]
y = [166, 204, 239, 274, 306, 335, 354, 361, 355, 336, 309, 276, 241, 203, 164]
# x,y 좌표를 지나는 가장 근사한 방정식 구하기
fit6 = np.polyfit(x, y, 6) # 6차
#print(fit6)
x1 = [100, 106, 111, 124, 151, 187, 226, 270, 315, 354, 390, 415, 428, 434, 439]
y1 = []
# 방정식에서 x1값을 넣었을 때의 y1값
for i in x1:
y_predit = fit6[0]*(i**6) + fit6[1]*(i**5) + fit6[2]*(i**4) + fit6[3]*(i**3) + fit6[4]*(i**2) + fit6[5]*(i**1) + fit6[6]
y1.append(y_predit)
# print(y1)
# 방정식에서 yy값을 넣었을 때의 x0값 구하기 / 259자리에 y값 넣어주면 됨
x0 = symbols('x0')
eqn = Eq(fit6[0] * (x0 ** 6) + fit6[1] * (x0 ** 5) + fit6[2] * (x0 ** 4) + fit6[3] * (x0 ** 3) + fit6[4] * (x0 ** 2) + fit6[5] * (x0 ** 1) + fit6[6] - 259, 0)
yy = solve(eqn, x0)
print(yy)
fit6_model = np.poly1d(fit6)
# print(fit6_model)
x_s = np.arange(50,450)
plt.scatter(x,y, c='blue', s=20)
plt.plot(x_s, fit6_model(x_s), color='orange')
plt.ylim(150,500)
plt.xlabel("$x$", fontsize=16, labelpad=5)
plt.ylabel("$y$", rotation=0, fontsize=16, labelpad=15)
plt.savefig('./numpy.jpg', bbox_inches='tight', pad_inches=0)
plt.show()
'Python' 카테고리의 다른 글
Blending (0) | 2021.11.26 |
---|---|
Seaborn, Matplotlib (0) | 2020.10.04 |
마크다운 요약 (0) | 2020.09.29 |
Python_우리나라 아기이름 데이터 분석 (1) | 2020.09.15 |
Python_데이터분석2 (0) | 2020.09.15 |