tucky算子实现一组点拟合成直线
时间: 2024-02-12 11:06:09 浏览: 24
Tuckey算法是一种用于拟合数据的鲁棒性回归算法。它的优点在于可以排除异常值的影响,使得拟合结果更加准确。下面是使用 Tuckey 算法实现一组点拟合成直线的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成一组随机数据
np.random.seed(0)
x = np.linspace(-5, 5, 20)
y = -0.5*x + 2 + 0.5*np.random.randn(20)
# 添加一些异常值
y[3] = y[3] + 10
y[18] = y[18] - 10
# 拟合数据
X = np.vstack((x, np.ones(len(x)))).T
Y = np.vstack((y, np.ones(len(y)))).T
w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y)
residuals = Y - X.dot(w)
residuals = np.abs(residuals[:,0])
median = np.median(residuals)
MAD = np.median(np.abs(residuals - median))
k = 1.4826
s = k*MAD
good_points = residuals <= s
X = X[good_points, :]
Y = Y[good_points, :]
w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y)
# 绘制拟合结果
plt.scatter(x, y)
plt.plot(x, w[0,0]*x + w[1,0], c='r')
plt.show()
```
这段代码会生成一组带有异常值的随机数据,并且使用 Tuckey 算法拟合出其中的一条直线。在算法中,我们首先使用最小二乘法拟合出一条直线,然后计算残差,排除掉那些残差过大的数据点,再重新拟合直线。这样可以排除异常值的影响,得到更加准确的拟合结果。最后,我们将拟合结果绘制出来,可以看到拟合结果很好地适应了数据。