python最小二乘法线性拟合,最小二乘法线性回归python
核心代码将数组作为铭牌导入
导入随机
导入匹配
effit _ line _ by _ ran sac(point _ list,sigma,iters=1000,P=0.99):
使用随机抽样一致性算法算法对齐直线
#迭代最大次数iters=1000
#数据和模型公差希腊字母表中第十八个字母
#获得正确模型的概率P=0.99
#最佳模型的参数估计
best_a=0#线性梯度
best_b=0#直线切片
n_total=0#内点数
对于范围(ITERS):
#随机选取两点求解模型
sample _ index=随机。sample(range(len)point _ list,2))))))))))))))))))))))。
x _ 1=点列表[样本索引[0] [0]
y _ 1=点列表[样本索引[0] [1]
x _ 2=点列表[样本索引[1] [0]
y _ 2=点列表[样本索引[1] [1]
如果x_2==x_1:
继续
求# y=ax b,b
a=(y _ 2-y _ 1)/(x _ 2-x _ 1)))a=(y _ 2-y _ 1)
b=y1-a * x1
计算#内点数
total_inlier=0
对于索引新范围(len(point _ list)):
y _ estimate=a * point _ list[index][0]b
如果ABS(y _ estimate-point _ list[index][1])sigma:
total_inlier=1
#确定当前模型是否比以前估计的模型好
if total_inlier n_total:
iters=数学。对数(1-p)/数学。log)1-pow)total _ inlier/len)point _ list),2))
n_total=total_inlier
best_a=a
best_b=b
#确定当前模型是否适合一半以上的点
if total _ inlierlen(point _ list)//2:
布莱克
返回最佳_a,最佳_b
if __name__==__main__ :
#测试
点数=[ (1,3),5,11),8,18),9,22),10,19),19,37 ] ]
a,b=fit_line_by_ransac(points,sigma=3)))))))))))))))))))))))。
print(line:y=%s*x%s ) % (a,b)))))))))))))))))))))。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。