多变量(多项式)在python最佳拟合曲线?(Multivariate (polynomial) b

2019-06-26 21:01发布

如何计算Python中的最佳拟合线,然后绘制它在matplotlib散点图?

我本人使用普通最小二乘回归如下计算线性最佳拟合线:

from sklearn import linear_model
clf = linear_model.LinearRegression()
x = [[t.x1,t.x2,t.x3,t.x4,t.x5] for t in self.trainingTexts]
y = [t.human_rating for t in self.trainingTexts]
clf.fit(x,y)
regress_coefs = clf.coef_
regress_intercept = clf.intercept_      

这是多元(存在用于每种情况下许多的x值)。 因此,X是列表的列表,而y是一个单独的列表。 例如:

x = [[1,2,3,4,5], [2,2,4,4,5], [2,2,4,4,1]] 
y = [1,2,3,4,5]

但我怎么用较高阶多项式函数做到这一点。 例如,不只是直链(x到M的功率= 1),但二项式(x到M的功率= 2),二次方程式(x的M = 4的功率),依此类推。 例如,如何将我从以下最佳拟合曲线?

从克里斯托弗主教的“模式识别和机器学习”,第7页中提取:

Answer 1:

接受的回答这个问题提供了一个小的多聚合库 ,这将做的正是你需要使用numpy的东西,你可以将结果插入绘图,因为我已经概述如下。

你只需通过在X和Y点和契合你需要进入的程度(订单)的阵列multipolyfit 。 这将返回系数,然后您可以使用使用numpy的的polyval绘图。

注意:下面的代码已经被修正,以做多因素配合,但情节图像是较早的,非多元答案的一部分。

import numpy
import matplotlib.pyplot as plt
import multipolyfit as mpf

data = [[1,1],[4,3],[8,3],[11,4],[10,7],[15,11],[16,12]]
x, y = zip(*data)
plt.plot(x, y, 'kx')

stacked_x = numpy.array([x,x+1,x-1])
coeffs = mpf(stacked_x, y, deg) 
x2 = numpy.arange(min(x)-1, max(x)+1, .01) #use more points for a smoother plot
y2 = numpy.polyval(coeffs, x2) #Evaluates the polynomial for each x2 value
plt.plot(x2, y2, label="deg=3")


注:这是答案的一部分早些时候,如果没有多元数据仍然是相关的。 代替coeffs = mpf(... ,使用coeffs = numpy.polyfit(x,y,3)

对于非多元数据集,要做到这一点最简单的方法是可能与numpy的的polyfit

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

最小二乘多项式拟合。

适合的多项式p(x) = p[0] * x**deg + ... + p[deg]度的deg来分(x, y) 返回系数p的向量最小化误差平方和。



文章来源: Multivariate (polynomial) best fit curve in python?