【问题标题】:Polynomial regression in Python using sklearn, numpy and matplotlib使用 sklearn、numpy 和 matplotlib 在 Python 中进行多项式回归
【发布时间】:2018-03-05 00:20:47
【问题描述】:

我正在尝试制作一个小程序,该程序将绘制具有最佳拟合线的图形,并根据输入的 SIZE 值预测 COST 值。

老是报这个错误,不知道是什么意思:

DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
No handles with labels found to put in legend.

这是我得到的图表(红色),我认为这条曲线应该看起来像我绘制的绿色曲线。

最后,程序仅在我退出图表时进行预测。 我究竟做错了什么? 这是代码:

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt

size=[[1],[2],[3],[4],[5],[7],[9],[10],[11],[13]]
cost=[[10],[22],[35],[48],[60],[80],[92],[111],[118],[133]]

def predict(size,cost,x):

    dates=np.reshape(size,(len(size),1))

    svr_poly=SVR(kernel="poly",C=1e3, degree=2)
    svr_poly.fit(size,cost)

    plt.scatter(size,cost, color="blue")
    plt.plot(cost, svr_poly.predict(cost), color="red")

    plt.xlabel("Size")
    plt.ylabel("Cost")
    plt.title("prediction")
    plt.legend()

    plt.show()

predictedcost=predict(size,cost,7)

print(predictedcost)

【问题讨论】:

  • 这不是错误,只是警告。您当前的y(成本)的形状是(10,1),应该是(10,)。这可以通过在拟合之前使用cost = np.array(cost).ravel() 来实现。
  • 好的,非常感谢。那线呢。我没有合适的身材?线应该看起来像绿线,而不是像红线,对吧?另外,我应该怎么做才能立即获得预测值,而不是在我退出图表时?
  • 你能解释更多吗?我也无法得到像你这样的情节
  • 看起来您可能在这里使用了错误的工具来完成这项工作,我认为多项式内核和多项式特征之间可能存在一些混淆。我建议阅读this tutorial
  • 我读过这个,但我不明白代码。我认为我的代码与您发送给我的链接上的代码之间存在很大差异。您可能知道如何解决我遇到的问题吗?我做了同样的程序,但我使用了线性回归,它工作得很好,但我使用了不同的工具。问题是,我不知道如何使用我用于线性回归的工具进行多项式回归。 (pastebin.com/tkNn6C7T)

标签: python matplotlib scikit-learn


【解决方案1】:

在这里,我找到了这个问题的答案。所以有兴趣的可以去看看

import numpy as np
import matplotlib.pyplot as plt
import math

X = np.array([1,2,3,5,6,7,4,7,8,9,5,10,11,7,6,6,10,11,11,12,13,13,14])
Y=np.array([2,3,5,8,11,14,9,19,15,19,15,16,14,7,13,13,14,13,23,25,26,27,33])

koeficienti_polinom = np.polyfit(X, Y, 2)

a=koeficienti_polinom[0]
b=koeficienti_polinom[1]
c=koeficienti_polinom[2]

xval=np.linspace(np.min(X), np.max(X))   

regression=a * xval**2 + b*xval + c 

predX = float(input("Enter: "))      
predY = a * predX**2 + b*predX + c   

plt.scatter(X,Y, s=20, color="blue" )      
plt.scatter(predX, predY, color="red")    
plt.plot(xval, regression, color="black", linewidth=1)      

print("Kvadratno predvidjanje: ",round(predY,2))

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 2015-10-03
    • 2016-04-28
    • 1970-01-01
    • 2020-01-10
    • 2019-07-20
    • 2011-02-17
    • 2019-06-07
    • 2020-01-14
    相关资源
    最近更新 更多