一、原理
1.Robust最小二乘法(Robust Least Squares Method)
当数据中存在异常值时,最小二乘法的结果可能会受到较大的影响,导致模型的预测精度下降。为了增强对异常值的鲁棒性,Robust最小二乘法采用了不同的损失函数。传统的最小二乘法使用残差平方和作为损失函数,而Robust最小二乘法则使用对异常值不那么敏感的损失函数,如Huber损失、Tukey损失等。这些损失函数在残差较小时与残差平方和相似,但在残差较大时增长较慢,从而减小了异常值对参数估计的影响。
2.RANSAC方法(Random Sample Consensus,随机采样一致性)
RANSAC方法是一种基于随机采样的迭代算法,主要用于从包含大量噪声和异常值(外点)的数据集中估计数学模型参数。其从数据集中随机选择一组样本点(对于直线拟合,通常需要两个点来确定一条直线),再使用选择的样本点来估计直线模型的参数(斜率和截距),并计算数据集中剩余点到估计直线的距离,将距离小于某个阈值的点视为内点。统计内点的数量,并评估当前模型的质量(通常以内点数量作为评估标准)。重复步骤多次(通常预设一个最大迭代次数),每次迭代都会生成一个新的模型,并选择内点数量最多的模型作为当前最佳模型。当达到最大迭代次数或当前最佳模型的质量不再显著提高时,算法终止,并输出最终的最佳模型。
二、代码
1.Robust最小二乘法
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# robust最小二乘法函数
def robust_least_squares(x, y, degree, iterations, epsilon):
# 初始化参数
theta = np.zeros(degree + 1)
m = len(x)
# 添加偏置项(x^0 = 1)
X = np.column_stack([np.power(x, i) for i in range(degree + 1)])
# 迭代更新参数
for _ in range(iterations):
# 计算预测值
y_pred = np.dot(X, theta)
# 计算残差
residuals = y - y_pred
# 计算权重矩阵
weights = np.diag(1 / (np.abs(residuals) + epsilon))
# 更新参数(使用加权最小二乘法)
theta = np.linalg.inv(X.T @ weights @ X) @ X.T @ weights @ y
return theta
# 读取图像并处理
image = cv2.imread('dot.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, binary = c

最低0.47元/天 解锁文章
3591

被折叠的 条评论
为什么被折叠?



