社区
数据结构与算法
帖子详情
数据拟合直线
npuhuxl
2009-12-26 12:33:18
有一组数据要拟合一条直线
定义一个新距离函数
h(d)=d*d/2 d<=C
h(d)=C*(c-d/2) d>C
其中d是数据点与直线的距离(欧式距离),C是常数
d(x,y)=abs(a*x+b*y+c)/sqrt(a*a+b*b);
求直线a*x+b*y+c=0;使得sum(d)最小
应该用什么方法?
...全文
173
10
打赏
收藏
数据拟合直线
有一组数据要拟合一条直线 定义一个新距离函数 h(d)=d*d/2 dC 其中d是数据点与直线的距离(欧式距离),C是常数 d(x,y)=abs(a*x+b*y+c)/sqrt(a*a+b*b); 求直线a*x+b*y+c=0;使得sum(d)最小 应该用什么方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yymt168
2009-12-30
打赏
举报
回复
1 把方程改写成 y=kx+d形式
2 写出sum(d)的公式(此时可以根据数据进行分段处理),然后sum(d)分别对k,b进行求导并令其分别等于0
联立两个方程,可以解出两个未知数,k,d
3 把k,d转换成a,b,c即可
4 总结:此问题只是最小二乘问题的灵活运用..
绿色夹克衫
2009-12-28
打赏
举报
回复
迭代的方法恐怕有些问题,因为有3个数不确定,迭代的复杂度太高了,
另外不知道会不会出现局部极点的情况,另外如果点散的比较远,以1000划分,恐怕精度也有些问题。
如果是迭代,建议迭代角度和C,做2重迭代,第一重是角度,然后对该线在一定范围内做平移,找出最小值,
这部分,开始的精度可以不那么准,迭代出一定范围之后,在这个范围内用更高的精度再次迭代,
直到达到很高的精度。此方法同样适用于角度的迭代。
[Quote=引用 8 楼 npuhuxl 的回复:]
楼上的意思是不是通过迭代直到sum(h(d))最小(或大致不再变化),求出参数的解?
想法非常好!谢谢你!
同时希望还有人提出其他方法!
[/Quote]
npuhuxl
2009-12-28
打赏
举报
回复
楼上的意思是不是通过迭代直到sum(h(d))最小(或大致不再变化),求出参数的解?
想法非常好!谢谢你!
同时希望还有人提出其他方法!
donkey301
2009-12-28
打赏
举报
回复
(1)我觉得距离是什么形式没有关系,sum(h(d))必然是一个关于a,b,c的函数
f(a,b,c)
那么想要f(a,b,c)最小,只需要让f对a,b,c分别求偏导数等于零就行了,这样就得到三个方程组成的非线性方程组,含有三个未知数,用matlab或者自己写程序迭代求解。
(2)难的是求导数会遇到两个分段函数h(d)和abs(a*x+b*y+c),无法确定参数属于哪段,所以最好有一种方法可以预估d和a*x+b*y+c的范围。可以先用最小二乘法求出a0,b0,c0的值
(3)可以求出d和a0*x+b0*y+c0的范围,从而知道两个分段函数h(d)和abs(a*x+b*y+c)应该取哪段,用(1)的方法求出a,b,c.然后作一个验证,看看d和a*x+b*y+c的范围是不是和你一开始估计的一样。
<1>如果一样,就停止,取a,b,c
<2>如果不一样,那么用a,b,c作为a0,b0,c0重复(3)。我猜测总有一次判断成<1>的。
得到的不一定是最优解,但应该差不多,因为最小二乘法的判据和sum(h(d))都是随d的增加而增加的。
p.s.,实际上没必要三个参数的,直接设a=1好了。
还有一种比较暴力的方法,先用最小二乘法求出a,b,c,最优解应该在这个值的附近,譬如你可以假设不超过10%的范围内,那么把[a-a/10,a+a/10]分成1000等分,[b-b/10,b+b/10]分成1000等分,[c-c/10,c+c/10]分成1000等分,遍历1000*1000*1000个(a,b,c)的组合,求出sum(h(d))的最小值对应的a,b,c
npuhuxl
2009-12-27
打赏
举报
回复
就是要让所有数据点的h和最小!
sum(h(d))最小
bigc2000
2009-12-27
打赏
举报
回复
楼上的,楼上的楼上,都不对,
最小方差,不是距离之和 最小,是距离平方和最小,这两个不是同一概念
h(d)是啥?哪里用到?
cudars
2009-12-27
打赏
举报
回复
用最小二乘法应该可以。
rapo
2009-12-27
打赏
举报
回复
Least Square method should do the trick for you
绿色夹克衫
2009-12-26
打赏
举报
回复
d=2C时,h(d) = 0?
npuhuxl
2009-12-26
打赏
举报
回复
不好意思写错了,应该是:
h(d)=d*d/2 d <=C
h(d)=C*(d-C/2) d>C
三维
数据
拟合
直线
-fit_line.m
三维
数据
拟合
直线
-fit_line.m 现有一组三维
数据
,要求
拟合
成一条
直线
,并求出
直线
的方程。
数据
存放在一个txt的文件里。请高手帮忙
直线
拟合
经典算法c语言
如果你有一些
数据
点,他们是离散的。你要从中找到这些点的规律,就做一条
直线
,穿过尽可能多的点,使得这些
数据
和
直线
上所的估计的点的方差最小。找到的这条
直线
就是
拟合
直线
。它代表了
数据
之间的线性规律
MATLAB
数据
拟合
结合MATLAB曲线
拟合
工具箱介绍
数据
拟合
,内容包括
数据
预处理、参数
拟合
和非参数
拟合
等。 所在套餐:MATLAB核心知识点系列课程-CSDN程序员研修院,不断更新和增加课程。
matlab.zip_matlab 阶次_实验
数据
处理_
数据
拟合
_
数据
拟合
matlab_
直线
拟合
处理实验
数据
绘制图形时,进行进行
数据
的
拟合
,可以修改
拟合
阶次。一阶
拟合
就是
直线
最小二乘法
直线
拟合
程序(VB6.0代码编写)
最小二乘法
直线
拟合
程序(VB6.0代码编写),本程序用于实验
数据
的
直线
拟合
(Y =a+bx)R为
直线
度,可以输入6-10组
数据
,按
拟合
出
直线
。并以图形显示。
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章