python – 具有二次项的线性回归

python – 具有二次项的线性回归,第1张

概述我最近一直在研究机器学习,现在用scikit和线性回归开始我的第一步. 这是我的第一个样本 from sklearn import linear_modelimport numpy as npX = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]]y = [2,4,6,8,10,12,14,16,18,20]clf = linear_model.Li 我最近一直在研究机器学习,现在用scikit和线性回归开始我的第一步.

这是我的第一个样本

from sklearn import linear_modelimport numpy as npX = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]]y = [2,4,6,8,10,12,14,16,18,20]clf = linear_model.linearRegression()clf.fit (X,y)print(clf.predict([11]))==> 22

输出是预期的22(显然scikit出现2x作为假设函数).但是当我用y = [1,9,25,36,49,64,81,100]创建一个稍微复杂的例子时,我的代码只是创建了疯狂的输出.我假设线性回归会产生二次函数(x ^ 2),但我不知道发生了什么. 11的输出现在是:99.所以我想我的代码试图找到某种线性函数来映射所有的例子.

在我做的线性回归教程中,有多项式项的例子,所以我假设scikits实现会得到一个正确的解决方案.我错了吗?如果是这样,我如何教scikit考虑二次,三次等函数?

解决方法 linearRegression使线性模型适合数据.在如上所述的一维X值的情况下,结果是直线(即y = a b * x).在二维值的情况下,结果是平面(即z = a b * x c * y).所以你不能指望线性回归模型能够完美地拟合二次曲线:它没有足够的模型复杂度来做到这一点.

也就是说,您可以巧妙地转换输入数据,以便使用线性回归模型拟合二次曲线.考虑上面的2D案例:

z = a + b*x + c*y

现在让我们做替换y = x ^ 2.也就是说,我们在包含二次项的数据中添加第二维.现在我们有另一个线性模型:

z = a + b*x + c*x^2

结果是一个在x中是二次的模型,但在系数中仍然是线性的!也就是说,我们可以通过线性回归轻松解决它:这是输入数据的基函数扩展的一个例子.这是代码:

import numpy as npfrom sklearn.linear_model import linearRegressionx = np.arange(10)[:,None]y = np.ravel(x) ** 2p = np.array([1,2])model = linearRegression().fit(x ** p,y)model.predict(11 ** p)# [121]

但这有点尴尬,因为模型需要2D输入来预测(),所以你必须手动转换输入.如果您希望自动进行此转换,可以在管道中使用eg.PolynomialFeatures

from sklearn.preprocessing import polynomialFeaturesfrom sklearn.pipeline import make_pipelinemodel = make_pipeline(polynomialFeatures(2),linearRegression())model.fit(x,y).predict(11)# [121]

这是线性模型的美妙之处:使用这样的基函数扩展,它们可以非常灵活,同时保持非常快!您可以考虑使用立方,四次或其他术语添加列,它仍然是线性回归.或者对于周期性模型,您可能会考虑添加正弦,余弦等列.在极端情况下,所谓的“内核技巧”允许您有效地向数据中添加无限数量的新列,并结束一个非常强大的模型 – 但仍然是线性的,因此仍然相对较快!有关此类估算器的示例,请查看scikit-learn的KernelRidge.

总结

以上是内存溢出为你收集整理的python – 具有二次项的线性回归全部内容,希望文章能够帮你解决python – 具有二次项的线性回归所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存