由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Spark 和 Tensorflow 线性回归问题
相关主题
Theano, Spark ML, Microsoft’s CNTK, and Google’s TensorFlow一个C++的概念问题
[bssd]有本书请教一个microarray问题
CNN 能对输入的image做patch normalization么?intel icc hash_map 求救!
pytorch技术上先进一些?STL感觉实在太变态了
h2o好像突然火了[菜鸟问题]类模板问题
a newbie java question (转载)c++ iterator 弱问
spark 到底牛在什么地方?c++ template question:
coltzhao的公司还在用mongo吗?请问Linux底下有没有最简易的show 2D x-y curve的工具
相关话题的讨论汇总
话题: spark话题: tensorflow话题: predicted话题: 结果话题: 线性
进入Programming版参与讨论
1 (共1页)
S*******e
发帖数: 525
1
刚开始看一些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
l*******m
发帖数: 1096
2
老弟,应该学学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/

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

iterations

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

w***g
发帖数: 5958
4
笑死 刚刚还有人说小白特别喜欢写教程

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

S*******e
发帖数: 525
5
大牛笑完之后,也要提携我们这些门外汉呀 :-).
我看这书,还觉得不错,觉得一些概念讲得蛮清楚的 (比烙印写的什么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 的大作中提到】
: 笑死 刚刚还有人说小白特别喜欢写教程
g****t
发帖数: 31659
6
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

S*******e
发帖数: 525
7
谢谢大牛们的慧眼。结果极可能TensorFlow 的code错了。这儿是一个结果分析:http://tempforum.neas-seminars.com/Attachment4373.aspx 结果和Spark ML 的(改正后)一致 。现在请大牛们看看怎么修改那个TensorFlow的code。谢谢。
l*******m
发帖数: 1096
8
你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。谢谢。
S*******e
发帖数: 525
9
那个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

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

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

相关主题
a newbie java question (转载)一个C++的概念问题
spark 到底牛在什么地方?请教一个microarray问题
coltzhao的公司还在用mongo吗?intel icc hash_map 求救!
进入Programming版参与讨论
l*******m
发帖数: 1096
11
我看看这本书的排行榜,估计人家一年能卖500-1000本。一年也能小一万刀

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

S*******e
发帖数: 525
12
我很穷,就只转一个吧。 多谢大牛

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

w***g
发帖数: 5958
13
只有你发了,我估计别人没有真的去看代码。我给你一些提示,
你再改改看。
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 的大作中提到】
: 我很穷,就只转一个吧。 多谢大牛
d********g
发帖数: 10550
14
这个现象最好的例子:谭浩强 :)

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

l*******m
发帖数: 1096
15
看来支持广播的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有啥区别?)
: 还有一些罗嗦的错就不说了, 不影响这个程序运行。

S*******e
发帖数: 525
16
多谢大牛。 是的, 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有啥区别?)
: 还有一些罗嗦的错就不说了, 不影响这个程序运行。

w***g
发帖数: 5958
17
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仅初级水平。

S*******e
发帖数: 525
18
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打印状态,就能看到正常收敛了。

w***g
发帖数: 5958
19
我用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

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


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

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

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

: Update:

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

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

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



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

相关主题
STL感觉实在太变态了c++ template question:
[菜鸟问题]类模板问题请问Linux底下有没有最简易的show 2D x-y curve的工具
c++ iterator 弱问用那个design pattern好?
进入Programming版参与讨论
w***g
发帖数: 5958
21
spark那个加了elastic net regularization,就是精确解数值上也会不一样.
而且有可能是sgd. 可能还没收敛。

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

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

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

S*******e
发帖数: 525
23
我变了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方法是不是对这个问题不太好?
1 (共1页)
进入Programming版参与讨论
相关主题
请问Linux底下有没有最简易的show 2D x-y curve的工具h2o好像突然火了
用那个design pattern好?a newbie java question (转载)
关于inserterspark 到底牛在什么地方?
binary_search只要求forward_iterator?coltzhao的公司还在用mongo吗?
Theano, Spark ML, Microsoft’s CNTK, and Google’s TensorFlow一个C++的概念问题
[bssd]有本书请教一个microarray问题
CNN 能对输入的image做patch normalization么?intel icc hash_map 求救!
pytorch技术上先进一些?STL感觉实在太变态了
相关话题的讨论汇总
话题: spark话题: tensorflow话题: predicted话题: 结果话题: 线性