skimage.measure.LineModelND的意外行为

时间:2017-11-22 09:39:17

标签: python scikit-image data-fitting

我使用skimage.measure LineModelND得到了一个非常意外的结果。它并不接近最小二乘解决方案。

这是一个显示问题的代码示例:

import skimage.measure
import numpy as np
import matplotlib.pyplot as plt

#create some data
x = np.arange(0,100,0.5)
y = 5 * x + 20
yNoise = y + np.random.uniform(low=-30.0, high=30, size=y.shape)
#Add some really bad data points
numOfBadData = 50
badDataIdx = np.random.choice(np.arange(y.shape[0]), numOfBadData)
yNoise[badDataIdx] = 0

data = np.vstack((x,yNoise)).T

#least square
p = np.polyfit(data[:,0], data[:,1], 1) #p = np.polyfit(x, yNoise, 1)
lineX=[np.min(x), np.max(x)]
yLeastSq = np.polyval(p, lineX)

#fit using LineModelND
model = skimage.measure.LineModelND()
model.estimate(data)
modelPredictY = model.predict_y(lineX)

plt.figure('Data compare')
plt.clf()
plt.plot(x, yNoise, '.g', label='data points')
plt.plot(lineX, yLeastSq, color='red', label='least square solution')
plt.plot(lineX, modelPredictY, '-', color='blue', label='LineModelND')
plt.legend()
plt.show()

,并提供: OutputImage

据我所知,多项式拟合取平行于y轴的距离,这与使用lineModelND中的垂直距离不同。从来没有像我期望的那样接近这个例子。

知道为什么这两种方法会产生截然不同的结果吗?

0 个答案:

没有答案