Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.interpolate.lagrange在某些数据上失败_Python_Machine Learning_Scipy - Fatal编程技术网

Python scipy.interpolate.lagrange在某些数据上失败

Python scipy.interpolate.lagrange在某些数据上失败,python,machine-learning,scipy,Python,Machine Learning,Scipy,我只是拿起python来实现机器学习任务,以便练习我在课堂上学到的知识 我是python新手,所以我刚刚发现了一个库,它提供了一系列非常有用的数学工具,其中包括使用interpolate.Lagrange对一维多项式进行拉格朗日插值 我试着用这个函数得到一个方程,以后我会用到。尽管我得到了以下错误: /usr/lib/python2.7/dist-packages/numpy/lib/polynomy.py:1186: RuntimeWarning:在true_divide返回中遇到被零除 po

我只是拿起python来实现机器学习任务,以便练习我在课堂上学到的知识

我是python新手,所以我刚刚发现了一个库,它提供了一系列非常有用的数学工具,其中包括使用
interpolate.Lagrange
对一维多项式进行拉格朗日插值

我试着用这个函数得到一个方程,以后我会用到。尽管我得到了以下错误:

/usr/lib/python2.7/dist-packages/numpy/lib/polynomy.py:1186: RuntimeWarning:在true_divide返回中遇到被零除 poly1d(自系数/其他) /usr/lib/python2.7/dist-packages/numpy/lib/polynomy.py:681: RuntimeWarning:在双\u标量中遇到无效值


代码:


培训数据集:


到目前为止,我一直在尝试:我知道数据中的某些行会导致零除法。在数据集上使用分治;删除一些行可以使它工作,但我会失去准确性,因为
poly(x)
打印一个不精确的y(f(x))

注意:我仍然没有跟踪触发零除法的行


任何解释都将不胜感激

被零除错误的原因是您有重复的数据点。例如,
x[40]
x[64]
是相同的。由于算法的工作原理,在某个时刻,您最终会做一些事情/(x[40]-x[64])

但是,即使删除了重复项,也存在其他问题。数据集表示函数
f(x)=2*x,如果x<4,则为8
。这不是一个平凡的多项式,插值的尝试将会失败。此外,您的数据点是无序的,这意味着您应该根据数据集的哪个部分预期不同的结果,例如,
x>4
,或者只有
x<4
,或者很可能介于两者之间

最后,但并非最不重要的一点是,即使您按升序对数据点进行排序,函数的状态也表示它在数值上不稳定

警告:此实现在数值上不稳定。即使是最佳选择,也不要期望使用超过20分


“除以零”错误的原因是您有重复的数据点。例如,
x[40]
x[64]
是相同的。由于算法的工作原理,在某个时刻,您最终会做一些事情/(x[40]-x[64])

但是,即使删除了重复项,也存在其他问题。数据集表示函数
f(x)=2*x,如果x<4,则为8
。这不是一个平凡的多项式,插值的尝试将会失败。此外,您的数据点是无序的,这意味着您应该根据数据集的哪个部分预期不同的结果,例如,
x>4
,或者只有
x<4
,或者很可能介于两者之间

最后,但并非最不重要的一点是,即使您按升序对数据点进行排序,函数的状态也表示它在数值上不稳定

警告:此实现在数值上不稳定。即使是最佳选择,也不要期望使用超过20分


您呈现的数据不是有序的,结果看起来像是分段线性函数,而不是使用多项式进行理想插值。此外,拉格朗日插值例程提到“警告:此实现在数值上不稳定。即使选择了最佳值,也不要期望能够使用超过20个点。”。你能说说你为什么选择这个吗?你提供的数据不是有序的,结果看起来像是一个分段线性函数,不是理想的多项式插值。此外,拉格朗日插值例程提到“警告:此实现在数值上不稳定。即使选择了最佳值,也不要期望能够使用超过20个点。”。你能说说你为什么选择这个吗?用肉眼我可以得出结论,对于每一个x>4y=8。你相信在你回答我之前,我把所有的x都记在了R上。用纸和笔,我可以算出,我的f(x)可以取2x,当x4如前所述时。尽管,拉格朗日一直因为你刚才说的而失败。谢谢你的详细解释。我会期待的,先生。用肉眼我也可以得出结论,对于每x>4y=8。你相信在你回答我之前,我把所有的x都记在了R上。用纸和笔,我可以算出,我的f(x)可以取2x,当x4如前所述时。尽管,拉格朗日一直因为你刚才说的而失败。谢谢您的详细解释。我期待着您的光临。
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)
>>> xx, yy = list(zip(*sorted(set(zip(x, y)))))
>>> for k in range(15, 25):
    print(k, interpolate.lagrange(xx[:k], yy[:k])(1))


15 1.99999915221
16 1.99998531246
17 1.99992345466
18 1.99993904792
19 2.00236333472
20 2.01589034207
21 -1.04477498867
22 -20.8148132927
23 -172.983956978
24 4185.90603781