我剛拿起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個點」。你能提到你爲什麼選擇這個嗎? –