簡體   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