Redian新闻
>
Spark 和 Tensorflow 线性回归问题
avatar
Spark 和 Tensorflow 线性回归问题# Programming - 葵花宝典
u*4
1
目前在一家软件小公司工作8年多了(非码工,是在公司的咨询部用户端作类似
business analyst的工作),因为绿卡一直没走。前不久终于拿到绿卡了,开始找工作
了,和我目前的工作经历有点交集,薪水和发展前途都不错的理想职位大多要求对SAP
的某些模块有用户端的操作经验或者对整个SAP的implementation比较熟悉,现在公司
做的软件产品其实是和SAP在这些模块领域是竞争关系(简单的说,就是我们公司做的
软件是out of the box, 而且也能接轨嵌入进SAP ERP,但是能够替换SAP的局部模块功
能),所以我对用户的功能需求和用户的日常工作和操作算是有概念,但是我到目前为
止,从未在工作中接触到SAP的平台,对具体的SAP界面啊,还有设置,功能,和专用术
语还有代码没有了解。
我本来打算是想先找书看看的,但是针对相关模块的书没有英语版,只有德语的。N年
前有个人写了本英文版的书,现在也没有卖的。有些SAP综合性的用户指南看目录里倒
是有提及这些局部的模块。 另外, SAP有这些模块的培训课程,3天2000块
(而且今年剩下的几个月只有7月,9月还有11月有培训)。所以我比较纠结到底是
哪个选择能让我短时间内在简历上更有竞争力一些?值不值得花2000去上这个课,
因为最快也得7月底才能写上简历。
希望大家能给点建议。谢谢,
avatar
i*n
2
上个星期六刚开始看房,看了5个,就觉得对其中的一个动了心。这个房子是个
foreclosure的房子,agent说foreclosure的房子现在市面是越来越少了,如果遇见可
心的就赶紧下offer。这个星期二又去看了4个房子,都是和我们感兴趣的相同价位的,
比较下来还是对原来的那个感兴趣,所以今天就给了offer了。可在网上看看大家都用
了那么长时间来看房子,我们总共就看了2次,说实话对市场也好,对房子也好,都没
有太多了解,也就是在这9个房子中觉得这个还不错。现在想想是不是自己太莽撞了,
万一要是这个offer被接受了,是不是会吃亏?不过又觉得foreclosure的房子可能都不
怎么样,如果房屋状况还行,就应该及时出手。很纠结,大家拍拍我吧。另外说一句,
我觉得从我的agent那里得不到什么有用的信息,他是个part-time,个人觉得挺外行的
,所以想听听大家的意见。先谢了
avatar
S*e
3
刚开始看一些Spark ML和Tensorflow的基本东西,看到下便两个程序的结果很糊涂:
为什么这么大的差异?
https://github.com/backstopmedia/tensorflowbook/blob/master/chapters/04_
machine_learning_basics/linear_regression.py
在以上程序加一行 print("w=", W.eval(), "b=", b.eval()), 得到结果是
w= [[ 3.5245235 ]
[ 1.50171268]] b= 1.14499
所以 y=3.5245235x1 + 1.50171268x2 +1.14499
我用同样的数据 (格式附后)
https://github.com/apache/spark/blob/master/examples/src/main/java/org/
apache/spark/examples/ml/JavaLinearRegressionWithElasticNetExample.java
结果是:
Coefficients: [0.3827266230806965,5.1690760222564425] Intercept: 82.
22008153614573
numIterations: 6
objectiveHistory: [0.5,0.41583549697777683,0.15548328325638935,0.
15439025905767773,0.15432368309706285,0.15432368309449543]
所以
y=0.3827266230806965x1+5.1690760222564425x2 + 82.22008153614573
两者差这么大,比较糊涂。请大牛指点迷津。
Spark inputfile 数据格式
354 1:84 2:46
190 1:73 2:20
405 1:65 2:52
263 1:70 2:30
451 1:76 2:57
302 1:69 2:25
288 1:63 2:28
385 1:72 2:36
402 1:79 2:57
365 1:75 2:44
209 1:27 2:24
290 1:89 2:31
346 1:65 2:52
254 1:57 2:23
395 1:59 2:60
434 1:69 2:48
220 1:60 2:34
374 1:79 2:51
308 1:75 2:50
220 1:82 2:34
311 1:59 2:46
181 1:67 2:23
274 1:85 2:37
303 1:55 2:40
244 1:63 2:30
avatar
R*r
4
无所谓时间,我第一次看的房子就是最好的,后来也是你这种心思,错过了

【在 i****n 的大作中提到】
: 上个星期六刚开始看房,看了5个,就觉得对其中的一个动了心。这个房子是个
: foreclosure的房子,agent说foreclosure的房子现在市面是越来越少了,如果遇见可
: 心的就赶紧下offer。这个星期二又去看了4个房子,都是和我们感兴趣的相同价位的,
: 比较下来还是对原来的那个感兴趣,所以今天就给了offer了。可在网上看看大家都用
: 了那么长时间来看房子,我们总共就看了2次,说实话对市场也好,对房子也好,都没
: 有太多了解,也就是在这9个房子中觉得这个还不错。现在想想是不是自己太莽撞了,
: 万一要是这个offer被接受了,是不是会吃亏?不过又觉得foreclosure的房子可能都不
: 怎么样,如果房屋状况还行,就应该及时出手。很纠结,大家拍拍我吧。另外说一句,
: 我觉得从我的agent那里得不到什么有用的信息,他是个part-time,个人觉得挺外行的
: ,所以想听听大家的意见。先谢了

avatar
l*m
5
老弟,应该学学ml ABC. 你那个spark的,第一iterations 太少,第二,加iterations
也不会算对,因为你用的是elastic net regularization. 你改应该改的参数了吗。第
三,估计你没normalize data, 会导致收敛不好的

【在 S*******e 的大作中提到】
: 刚开始看一些Spark ML和Tensorflow的基本东西,看到下便两个程序的结果很糊涂:
: 为什么这么大的差异?
: https://github.com/backstopmedia/tensorflowbook/blob/master/chapters/04_
: machine_learning_basics/linear_regression.py
: 在以上程序加一行 print("w=", W.eval(), "b=", b.eval()), 得到结果是
: w= [[ 3.5245235 ]
: [ 1.50171268]] b= 1.14499
: 所以 y=3.5245235x1 + 1.50171268x2 +1.14499
: 我用同样的数据 (格式附后)
: https://github.com/apache/spark/blob/master/examples/src/main/java/org/

avatar
l*m
6
我看了看tf code, 这个作者水平太差,误人子弟! 还thread, 根本没有用 thread,
写法也不好,还旧。而且也没有normalize data。你最好找一些真正专家的code.

iterations

【在 l*******m 的大作中提到】
: 老弟,应该学学ml ABC. 你那个spark的,第一iterations 太少,第二,加iterations
: 也不会算对,因为你用的是elastic net regularization. 你改应该改的参数了吗。第
: 三,估计你没normalize data, 会导致收敛不好的

avatar
w*g
7
笑死 刚刚还有人说小白特别喜欢写教程

【在 l*******m 的大作中提到】
: 我看了看tf code, 这个作者水平太差,误人子弟! 还thread, 根本没有用 thread,
: 写法也不好,还旧。而且也没有normalize data。你最好找一些真正专家的code.
:
: iterations

avatar
S*e
8
大牛笑完之后,也要提携我们这些门外汉呀 :-).
我看这书,还觉得不错,觉得一些概念讲得蛮清楚的 (比烙印写的什么Packt
Publishing的书好很多), 没想到也是半瓶水。
还是不懂这个问题啊。在http://stackoverflow.com/questions/41884411/puzzled-by-linear-regression-results-from-spark-ml-and-tensorflow 问了,那儿说SPARK的线性回归模型不是线性回归(这真奇芭),去掉
.setRegParam(0.3)
.setElasticNetParam(0.8);
又 .setMaxIter(1000), 结果1iteration, 结果就出来了,也和原先的结果差不多啊:
Coefficients: [0.4173620987945001,5.21659080879135] Intercept: 77.
98253861487616
numIterations: 1
objectiveHistory: [0.0]

【在 w***g 的大作中提到】
: 笑死 刚刚还有人说小白特别喜欢写教程
avatar
g*t
9
1.
Let x=1,2,3,4,。。。
你自己用方程z=100*x+2
造一列z。
对这组( x,z)用spark试验一下,
算出来是100和2,那就是线性回归,不然就不是呗。
2.
Linear regression就跟个操作系统类似,无数坑。

【在 S*******e 的大作中提到】
: 大牛笑完之后,也要提携我们这些门外汉呀 :-).
: 我看这书,还觉得不错,觉得一些概念讲得蛮清楚的 (比烙印写的什么Packt
: Publishing的书好很多), 没想到也是半瓶水。
: 还是不懂这个问题啊。在http://stackoverflow.com/questions/41884411/puzzled-by-linear-regression-results-from-spark-ml-and-tensorflow 问了,那儿说SPARK的线性回归模型不是线性回归(这真奇芭),去掉
: .setRegParam(0.3)
: .setElasticNetParam(0.8);
: 又 .setMaxIter(1000), 结果1iteration, 结果就出来了,也和原先的结果差不多啊:
: Coefficients: [0.4173620987945001,5.21659080879135] Intercept: 77.
: 98253861487616
: numIterations: 1

avatar
S*e
10
谢谢大牛们的慧眼。结果极可能TensorFlow 的code错了。这儿是一个结果分析:http://tempforum.neas-seminars.com/Attachment4373.aspx 结果和Spark ML 的(改正后)一致 。现在请大牛们看看怎么修改那个TensorFlow的code。谢谢。
avatar
l*m
11
你spark用的是什么solver?这个你要搞清楚。
TF是GD。我昨天说了,这code没有normalize data。这样会出现很多问题。最好的方法
是作normalization。比较形象说,这两维数据还是比较均匀的,主要是bi a s比较大
,learning rate太小,循环太少,它爬不上去
当然,你这个数据很简单。有几个方法都行
- 初始化 b = tf.Variable(80.0)
- 增加iteration
- 加大 learning_rate = 0.001

【在 S*******e 的大作中提到】
: 谢谢大牛们的慧眼。结果极可能TensorFlow 的code错了。这儿是一个结果分析:http://tempforum.neas-seminars.com/Attachment4373.aspx 结果和Spark ML 的(改正后)一致 。现在请大牛们看看怎么修改那个TensorFlow的code。谢谢。
avatar
S*e
12
那个SparkML 例子 的算法是最小二乘法。 看来梯度法比较需要技巧和“deep
understanding”。 试了试这几个方法,还不行。现在知道这个东西坑又多又大(估计
暂时不像有些人说的ML已是大白菜), 不再纠结这个了。
多多感谢。

【在 l*******m 的大作中提到】
: 你spark用的是什么solver?这个你要搞清楚。
: TF是GD。我昨天说了,这code没有normalize data。这样会出现很多问题。最好的方法
: 是作normalization。比较形象说,这两维数据还是比较均匀的,主要是bi a s比较大
: ,learning rate太小,循环太少,它爬不上去
: 当然,你这个数据很简单。有几个方法都行
: - 初始化 b = tf.Variable(80.0)
: - 增加iteration
: - 加大 learning_rate = 0.001

avatar
w*g
13
这么快就放弃了? 你那个tensorflow的例子我已經调通了。
实在错的太离谱了。这种垃圾repository竟然有81个星我也是醉了。
想听的发包子过来,半个钟头后我给你们分析。
Update:
这个竟然是一本书的配套代码,书要卖$23。突然我就觉得
job security暴涨了。这种书卖越多越好。大家不要给它
提交补丁,最好初学者都死在这书上,我们老司机就安全了。

【在 S*******e 的大作中提到】
: 那个SparkML 例子 的算法是最小二乘法。 看来梯度法比较需要技巧和“deep
: understanding”。 试了试这几个方法,还不行。现在知道这个东西坑又多又大(估计
: 暂时不像有些人说的ML已是大白菜), 不再纠结这个了。
: 多多感谢。

avatar
l*m
14
我看看这本书的排行榜,估计人家一年能卖500-1000本。一年也能小一万刀

【在 w***g 的大作中提到】
: 这么快就放弃了? 你那个tensorflow的例子我已經调通了。
: 实在错的太离谱了。这种垃圾repository竟然有81个星我也是醉了。
: 想听的发包子过来,半个钟头后我给你们分析。
: Update:
: 这个竟然是一本书的配套代码,书要卖$23。突然我就觉得
: job security暴涨了。这种书卖越多越好。大家不要给它
: 提交补丁,最好初学者都死在这书上,我们老司机就安全了。

avatar
S*e
15
我很穷,就只转一个吧。 多谢大牛

【在 w***g 的大作中提到】
: 这么快就放弃了? 你那个tensorflow的例子我已經调通了。
: 实在错的太离谱了。这种垃圾repository竟然有81个星我也是醉了。
: 想听的发包子过来,半个钟头后我给你们分析。
: Update:
: 这个竟然是一本书的配套代码,书要卖$23。突然我就觉得
: job security暴涨了。这种书卖越多越好。大家不要给它
: 提交补丁,最好初学者都死在这书上,我们老司机就安全了。

avatar
w*g
16
只有你发了,我估计别人没有真的去看代码。我给你一些提示,
你再改改看。
1. 注意Y和Y_predicted的形状。如果Y和Y_predicted的
形状不一样,tf.squared_difference会发生什么?
2. 为什么傻逼作者要把learning_rate設得这么异乎寻常
地低? 如果设成0.01会发生什么问题?
把learning_rate降低是正确的fix吗? 还能怎么解决
这个问题?
(再提示:Spark的loss function有啥区别?)
还有一些罗嗦的错就不说了, 不影响这个程序运行。
书的作者对tensorflow完全没有概念。这书的tensorflow
代码最好完全不要看。
我其实也调了一个钟头。虽然自己写代码没问题,
要找别人代码里的坑还是很难。

【在 S*******e 的大作中提到】
: 我很穷,就只转一个吧。 多谢大牛
avatar
d*g
17
这个现象最好的例子:谭浩强 :)

【在 w***g 的大作中提到】
: 这么快就放弃了? 你那个tensorflow的例子我已經调通了。
: 实在错的太离谱了。这种垃圾repository竟然有81个星我也是醉了。
: 想听的发包子过来,半个钟头后我给你们分析。
: Update:
: 这个竟然是一本书的配套代码,书要卖$23。突然我就觉得
: job security暴涨了。这种书卖越多越好。大家不要给它
: 提交补丁,最好初学者都死在这书上,我们老司机就安全了。

avatar
l*m
18
看来支持广播的ops都是坑。
所以什么事物都是又两面性的,TF比较抽象,不好学。这本是个缺点,但是又是机会。
比如keras都要进TF的repo了。keras一些high-level APIs有错误很久了(不是bug),
直到最近才fix。那个作者也是自以为是SB一个.

【在 w***g 的大作中提到】
: 只有你发了,我估计别人没有真的去看代码。我给你一些提示,
: 你再改改看。
: 1. 注意Y和Y_predicted的形状。如果Y和Y_predicted的
: 形状不一样,tf.squared_difference会发生什么?
: 2. 为什么傻逼作者要把learning_rate設得这么异乎寻常
: 地低? 如果设成0.01会发生什么问题?
: 把learning_rate降低是正确的fix吗? 还能怎么解决
: 这个问题?
: (再提示:Spark的loss function有啥区别?)
: 还有一些罗嗦的错就不说了, 不影响这个程序运行。

avatar
S*e
19
多谢大牛。 是的, Y 是Tensor("ToFloat_1:0", shape=(25,), dtype=float32)。
Y_predicted 是Tensor("add:0", shape=(25, 1), dtype=float32)。 我用
Y_predicted = tf.reshape(Y_predicted, [25])
好像loss overflow了。不知怎么改Cost 函数
我刚看这些东西, Java比较熟。 Python仅初级水平。

【在 w***g 的大作中提到】
: 只有你发了,我估计别人没有真的去看代码。我给你一些提示,
: 你再改改看。
: 1. 注意Y和Y_predicted的形状。如果Y和Y_predicted的
: 形状不一样,tf.squared_difference会发生什么?
: 2. 为什么傻逼作者要把learning_rate設得这么异乎寻常
: 地低? 如果设成0.01会发生什么问题?
: 把learning_rate降低是正确的fix吗? 还能怎么解决
: 这个问题?
: (再提示:Spark的loss function有啥区别?)
: 还有一些罗嗦的错就不说了, 不影响这个程序运行。

avatar
w*g
20
1. reduce_sum vs reduce_mean:
reduce_sum会导致你的gradient和minibatch size相关,以至于
需要根据不同的minibatch size调整learning_rate。
用reduce_mean没这个问题。
2. mean(sqr(error)) vs sqrt(mean(sqr(error)))
和上面的相似,前者的问题是需要根据error绝对值调整learning_rate。
error太大甚至会溢出。
上面这两个都是数学上等价,但是实现上的坑。
你把这两个改了, 用learning_rate = 0.01,隔1000个
iteration打印状态,就能看到正常收敛了。

【在 S*******e 的大作中提到】
: 多谢大牛。 是的, Y 是Tensor("ToFloat_1:0", shape=(25,), dtype=float32)。
: Y_predicted 是Tensor("add:0", shape=(25, 1), dtype=float32)。 我用
: Y_predicted = tf.reshape(Y_predicted, [25])
: 好像loss overflow了。不知怎么改Cost 函数
: 我刚看这些东西, Java比较熟。 Python仅初级水平。

avatar
S*e
21
Getting closer:
def loss(X, Y):
Y_predicted = inference(X)
print(Y_predicted)
Y_predicted = tf.reshape(Y_predicted, [25])
print(Y)
print(Y_predicted)
print (Y-Y_predicted)
return tf.sqrt(tf.reduce_mean(tf.squared_difference(Y, Y_predicted)))
training_steps = 100000
结果是:
w= [[ 0.40486234]
[ 5.21126223]] b= 79.0806
我还得仔细琢磨一下这是怎么“数学等价”的。 还有一点觉得糊涂,这怎么需要这么
多steps 啊。
不过, 我觉得自己当时只是好奇看看Spark ML能不能很好地做线性回归。结果这一试
, 学了好多。多谢大牛们。。。你们真的很厉害。

【在 w***g 的大作中提到】
: 1. reduce_sum vs reduce_mean:
: reduce_sum会导致你的gradient和minibatch size相关,以至于
: 需要根据不同的minibatch size调整learning_rate。
: 用reduce_mean没这个问题。
: 2. mean(sqr(error)) vs sqrt(mean(sqr(error)))
: 和上面的相似,前者的问题是需要根据error绝对值调整learning_rate。
: error太大甚至会溢出。
: 上面这两个都是数学上等价,但是实现上的坑。
: 你把这两个改了, 用learning_rate = 0.01,隔1000个
: iteration打印状态,就能看到正常收敛了。

avatar
w*g
22
我用gnuplot拟合出来就差不多是这个结果。spark那个应该是因为非标准扩展导致结果
有点偏差。
数学等价就是一个的最优解也是另一个的最优解。

【在 S*******e 的大作中提到】
: Getting closer:
: def loss(X, Y):
: Y_predicted = inference(X)
: print(Y_predicted)
: Y_predicted = tf.reshape(Y_predicted, [25])
: print(Y)
: print(Y_predicted)
: print (Y-Y_predicted)
: return tf.sqrt(tf.reduce_mean(tf.squared_difference(Y, Y_predicted)))
: training_steps = 100000

avatar
g*t
23
应该就是一个是精确的最小二乘法。另一个是梯度或者别的办法近似求解?
精确的最小二乘法不应该有什么大问题。前面就是叠加。最后一步
3*3矩阵求逆那步用一下cholesky就够了。他的数很少。
若是近似方法,这个作者给的数据集太小。估计iid什么的也没测。
所以可能会对参数敏感。


: 这么快就放弃了? 你那个tensorflow的例子我已經调通了。

: 实在错的太离谱了。这种垃圾repository竟然有81个星我也是醉了。

: 想听的发包子过来,半个钟头后我给你们分析。

: Update:

: 这个竟然是一本书的配套代码,书要卖$23。突然我就觉得

: job security暴涨了。这种书卖越多越好。大家不要给它

: 提交补丁,最好初学者都死在这书上,我们老司机就安全了。



【在 w***g 的大作中提到】
: 我用gnuplot拟合出来就差不多是这个结果。spark那个应该是因为非标准扩展导致结果
: 有点偏差。
: 数学等价就是一个的最优解也是另一个的最优解。

avatar
w*g
24
spark那个加了elastic net regularization,就是精确解数值上也会不一样.
而且有可能是sgd. 可能还没收敛。

【在 g****t 的大作中提到】
: 应该就是一个是精确的最小二乘法。另一个是梯度或者别的办法近似求解?
: 精确的最小二乘法不应该有什么大问题。前面就是叠加。最后一步
: 3*3矩阵求逆那步用一下cholesky就够了。他的数很少。
: 若是近似方法,这个作者给的数据集太小。估计iid什么的也没测。
: 所以可能会对参数敏感。
:
:
: 这么快就放弃了? 你那个tensorflow的例子我已經调通了。
:
: 实在错的太离谱了。这种垃圾repository竟然有81个星我也是醉了。
:
: 想听的发包子过来,半个钟头后我给你们分析。
:
: Update:

avatar
d*c
25
我觉得github的星就是fashion而已,多少人是真的看过code试过之后再加星,又有多
少人是看了两眼就加星?
还有fork,有多少fork的实际从来没碰过?
应该写个程序统计一下

【在 w***g 的大作中提到】
: 这么快就放弃了? 你那个tensorflow的例子我已經调通了。
: 实在错的太离谱了。这种垃圾repository竟然有81个星我也是醉了。
: 想听的发包子过来,半个钟头后我给你们分析。
: Update:
: 这个竟然是一本书的配套代码,书要卖$23。突然我就觉得
: job security暴涨了。这种书卖越多越好。大家不要给它
: 提交补丁,最好初学者都死在这书上,我们老司机就安全了。

avatar
S*e
26
我变了learing_rate=.0001, 又增加了train_steps 到100000, 结果还是有较大的误
差(w= [[ 0.39436]
[ 5.20597]] b= 80.0349)(比较SparkML和Excel的一个包)。
我又试了AdamOptimizer (原来是GDOptimizer), 结果和上面的SparkML(最小二乘法
,我没试它的GD法)和Excel的一致w= [[ 0.41736]
[ 5.2165]] b= 79.98。这么看来, GD方法是不是对这个问题不太好?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。