首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python的多项式回归

使用python的多项式回归
EN

Stack Overflow用户
提问于 2015-07-14 20:44:50
回答 3查看 35K关注 0票数 11

据我所知,多项式回归是回归分析的一种特殊类型,它比线性回归更复杂。有没有可以做到这一点的python模块?我在matplotlib、scikit和numpy中查找过,但只能找到线性回归分析。

并且可以计算出非线性直线的相关系数?

EN

回答 3

Stack Overflow用户

发布于 2015-07-14 20:53:22

你有没有看过NumPy的polyfit?参见reference

从他们的例子中:

代码语言:javascript
运行
复制
>>> import numpy as np
>>> x = np.array([0.0, 1.0, 2.0, 3.0,  4.0,  5.0])
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
>>> z = np.polyfit(x, y, 3)
>>> z
[ 0.08703704 -0.81349206  1.69312169 -0.03968254]
票数 16
EN

Stack Overflow用户

发布于 2015-07-14 20:52:13

scikit支持线性和多项式回归。

查看Generalized Linear Models页面上的多项式回归:使用基函数扩展线性模型一节。

示例:

代码语言:javascript
运行
复制
>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.arange(6).reshape(3, 2)
>>> X
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> poly = PolynomialFeatures(degree=2)
>>> poly.fit_transform(X)
array([[ 1,  0,  1,  0,  0,  1],
       [ 1,  2,  3,  4,  6,  9],
       [ 1,  4,  5, 16, 20, 25]])

X的功能已经从[x_1, x_2]转换到[1, x_1, x_2, x_1^2, x_1 x_2, x_2^2],现在可以在任何线性模型中使用。

这类预处理可以使用Pipeline工具来简化。可以创建表示简单多项式回归的单个对象,并按如下方式使用:

代码语言:javascript
运行
复制
>>> from sklearn.preprocessing import PolynomialFeatures
>>> from sklearn.linear_model import LinearRegression
>>> from sklearn.pipeline import Pipeline
>>> model = Pipeline([('poly', PolynomialFeatures(degree=3)),
...                   ('linear', LinearRegression(fit_intercept=False))])
>>> # fit to an order-3 polynomial data
>>> x = np.arange(5)
>>> y = 3 - 2 * x + x ** 2 - x ** 3
>>> model = model.fit(x[:, np.newaxis], y)
>>> model.named_steps['linear'].coef_
array([ 3., -2.,  1., -1.])

基于多项式特征训练的线性模型能够准确地恢复输入的多项式系数。

在某些情况下,没有必要包含任何单一功能的更高能力,而只需要包含所谓的交互功能,这些功能最多可以相乘d个不同的功能。这些可以通过设置interaction_only=TruePolynomialFeatures获取。

票数 13
EN

Stack Overflow用户

发布于 2018-06-18 18:26:09

您可以首先使用sklearn中的PolynomialFeatures创建多项式特征,然后再使用线性模型。

下面的函数可以用于训练模型的预测。

代码语言:javascript
运行
复制
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=2)

lm_polyfeats = linear_model.LinearRegression()
lm_polyfeats.fit(poly.fit_transform(array2D),targetArray)

def LM_polynomialFeatures_2Darray(lm_polyfeats,array2D):
    array2D=poly.fit_transform(array2D)
    return(lm.predict(array2D))

p=LM_polynomialFeatures_2Darray(lm_polyfeats,array2D)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31406975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档