繁体   English   中英

使用 Sklearn to 和多项式回归来拟合/预测曲线方程。 无限循环错误

[英]Use Sklearn to and Polynomial Regression to fit/predict equation of a curve. Infinite loop error

我提供了一个数据集,我试图找到一些 X 和 Y 数据之间的关系。 我希望能够使用 sklearn 库来绘制数据并预测/plt eqn 的曲线。

但是,当我在将多项式回归模型拟合到我的数据集后尝试绘制我的预测值时,我的代码陷入了无限循环。

最终目标是一旦我预测/绘制了曲线,我希望能够知道曲线的完整方程。

这是我的代码。

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()

这不是无限循环,只是需要一段时间。 当我运行 polyREG.fit_transform(xgrid) 时,大约花了一分钟。 但是当我运行 LinReg2.predict(polyREG.fit_transform(xgrid)) 时,我得到:“形状 (1,5563251) 和 (1820,12) 未对齐:5563251 (dim 1) != 1820 (dim 0)”。

在查看更多代码后进行编辑:

据推测,您正在尝试对一个基本变量的 12 个观测值进行训练,并且您希望将四阶多项式拟合到该变量,从而为您提供 5 个派生变量的 12 个观测值 (x^0,x^1,x^2, x^3,x^4),总共 60 个 x 值(12 行,每行 5 个值)。 然后,您想要预测 x 的 106 个新基值,从而得到 530 个 x 值(106 行,每行 5 个值)。 但是,PolynomialFeatures 认为您有 106 个变量的 1 个观察值,而不是 1 个变量的 106 个观察值。 由于交叉项,派生变量的数量是基变量数量的多项式。 不是 106 行 5 个值,而是 1 行 5563251 个值,这不仅意味着评估这将需要一段时间,而且线性拟合将失败,因为训练集行与预测集行中的值数量不同。

tl;dr 在您的重塑命令中将 (1, -1) 更改为 (-1, 1)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM