代码陷入死胡同了 请哪位大佬指点一下_(:з」∠)_

2019-08-29 21:04:33 +08:00
 Doldrums
需求:两列数组 [x0,x1,x2,...x100] & [y0,y1,y2,...y100] ,求解一个系数 k,
使得 |k*x1-y1|+|k*x2-y2|+|k*x3-y3|+...+|k*x100-y100| 最小
即 如何使两列数的差值的绝对值之和最小?
5814 次点击
所在节点    编程
5 条回复
thedrwu
2019-08-29 21:28:23 +08:00
线…性…规…划…消灭 L1-norm ?
thedrwu
2019-08-29 21:58:53 +08:00
需要代码和原理请 Google
linear programming minimize l1 norm
corvofeng
2019-08-29 22:10:21 +08:00
这应该算是一个数学问题, 之前我在网易游戏面试的时候遇到过类似的数学问题.

转变一下思路, 在几何上, 你这个问题应该是求所有点到某条直线上对应点的距离之和最小

假设一条直线是 y=Ax+b, x1 在直线上对应的点坐标是 Ax1+b, 那么|Ax1+b - y1| 就是(x1,y1) 与这条直线上面相同横坐标的点的距离, 然后你应该考虑的是怎么让这个距离之和最短, 我也不太会算这个距离, 这是我找的相关讨论:

https://bbs.csdn.net/topics/210003809

你可以看下这个人的推演:

https://bbs.csdn.net/topics/210003809?list=1887724
momocraft
2019-08-29 22:32:54 +08:00
一个思路不一定对

-----------------

令那个绝对值之和为 z

不失一般性 假设 y1/x1 <= y2/x2 <= ... y100/x100 且所有 x 均不为 0 (如果有 0 则那项是常数)

则 (-无穷, y1/x1] 是 z(k) 的单调区间 (此区间内所有绝对值均有确定符号), [y1/x1, y2/x2] 也是. 以后每个都是.

而且 z(-无穷) 和 z(+无穷) 要么是常数要么是+无穷. 常数 iff 所有 x 都是 0.

所以 for k in y1/x1 , y2/x2 一个个试过去 使得 z 最小的那个 k 就是极值

我好像领悟了为什么人们更喜欢用最小二乘法定义误差
luckyx
2019-08-30 00:06:53 +08:00
企图用 y=kx 去拟合 y=f(x),但要求代价最小

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/596341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX