我提供了一个数据集,我试图找到一些X和Y数据之间的关系。我希望能够使用sklearn库来绘制数据并预测/绘制方程的曲线。
然而,当我在将多项式回归模型拟合到我的数据集之后尝试绘制我的预测值时,我的代码陷入无限循环。
最终目标是在我预测/绘制曲线之后我希望能够知道曲线的完整方程式。
这是我的代码。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Dataset = pd.DataFrame()
Dataset["X"] = [6377, 6378, 6379, 6380, 6381, 6382, 6383, 6385, 6387, 6392, 6397, 6402]
Dataset["Y"] = [1.225, 1.112, 1.007, 0.9093, 0.8194, 0.7364, 0.6601, 0.5258, 0.4135, 0.1948, 0.08891, 0.04008]
print(Dataset)
X = np.reshape(np.array(Dataset['X']), (1, -1))
Y = np.reshape(np.array(Dataset['Y']), (1, -1))
print(X)
print(Y)
from sklearn.linear_model import LinearRegression
linReg = LinearRegression()
linReg.fit(X, Y)
plt.scatter(X, Y, color='red')
# plt.plot(X,linReg.predict(X), color = 'blue')
from sklearn.preprocessing import PolynomialFeatures
polyREG = PolynomialFeatures(degree=4)
xPoly = polyREG.fit_transform(X)
LinReg2 = LinearRegression()
LinReg2.fit(xPoly, Y)
#
# try:
# xgrid = np.arange(min(X), max(X), .1)
# except Exception as e:
# print(e)
# xgrid = range(6377, 6403, 1)
# xgrid = np.asarray(xgrid)
# print(xgrid.shape)
# xgrid = np.reshape(xgrid, (1,-1))
xgrid = np.reshape(np.arange(6300, 6405, 1), (1,-1))
print(xgrid.shape)
#X = np.reshape(np.array(Dataset['X']), (1, -1))
#plt.plot(xg, 1, color = "blue")
try:
plt.plot(xgrid, LinReg2.predict(polyREG.fit_transform(xgrid)), color='blue')
except Exception as e:
print(e)
plt.show()
答案 0 :(得分:-1)
这不是一个无限循环,它只需要一段时间。当我运行polyREG.fit_transform(xgrid)时,花了大约一分钟。但是当我运行LinReg2.predict(polyREG.fit_transform(xgrid))时,我得到:“形状(1,5563251)和(1820,12)未对齐:5563251(暗淡1)!= 1820(暗淡0)”。
在仔细查看代码之后进行编辑:
据推测,你试图训练一个基本变量的12个观测值,并且你想要将四阶多项式拟合到该变量,给出12个5个派生变量的观测值(x ^ 0,x ^ 1,x ^ 2,x ^ 3,x ^ 4),总共60个x值(12行,5个值)。然后,您想要预测106个新的x基值,总共给出530个x值(106行,每行5个值)。但是,PolynomialFeatures认为您对106个变量进行了1次观察,而不是对1个变量进行了106次观察。由于交叉项,导出变量的数量是基础变量数量的多项式。而不是有106行的5个值,有一行5563251值,这不仅意味着评估这将花费一段时间,而且线性拟合将失败,因为该值的数量训练集行与预测集行中的值数不同。
tl; dr在重塑形状命令中将(1,-1)更改为(-1,1)。