如何计算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页中提取:
接受的回答这个问题提供了一个小的多聚合库 ,这将做的正是你需要使用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的向量最小化误差平方和。