我刚拿起python来实现机器学习任务,以便练习我在课堂上收集的知识。scipy.interpolate.lagrange在某些数据上失败
我是新来的python,因此我刚刚发现了spicy库,它提供了一些非常有用的数学工具,其中一维多项式的拉格朗日插值使用interpolate.lagrange
。
我试图使用该函数有一个方程式,我将在以后使用。虽然我得到了以下错误:
/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py:1186: RuntimeWarning: divide by zero encountered in true_divide return poly1d(self.coeffs/other) /usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py:681: RuntimeWarning: invalid value encountered in double_scalars
代码:
import sys
import math
import os
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x = []
y = []
file = open(os.getcwd()+"/practice/train.txt", "r")
for line in file.read().split():
x.append(float(line.split(',')[0]))
y.append(float(line.split(',')[1]))
poly = interpolate.lagrange(x, y)
print poly(1.5)
训练数据集:https://s3.amazonaws.com/hr-testcases/399/assets/trainingdata.txt
我迄今为止尝试:我理解数据中的某些行会导致i到零分区。在数据集上使用分治法;擦除一些行将使其工作,但我会以一种不正确的y(f(x))打印方式失去准确性。
注:我还没有跟踪触发零分的线。
任何解释将非常赞赏。
,你目前的数据不排序,结果看起来像一个分段线性函数,那不是最理想的是采用多项式插值。 此外,拉格朗日插值例程提到“警告:这种实现在数值上不稳定,即使选择最佳,也不要期望能够使用超过20个点”。你能提到你为什么选择这个吗? –