apache-spark - 对 Spark ML 和 Tensorflow 的线性回归结果感到困惑

标签 apache-spark machine-learning tensorflow linear-regression

我运行了这个程序:https://github.com/backstopmedia/tensorflowbook/blob/master/chapters/04_machine_learning_basics/linear_regression.py

我在上面程序的第 55 行之后添加了“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 结果是:

系数:[0.3827266230806965,5.1690760222564425] 截距:82.22008153614573 迭代次数:6 目标历史记录:[0.5,0.41583549697777683,0.15548328325638935,0.15439025905767773,0.15432368309706285,0.15432368309449543]

所以 y=0.3827266230806965x1+5.1690760222564425x2 + 82.22008153614573。

我很困惑为什么同一个问题的结果如此不同?我使用的Spark程序的数据格式是:



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


最佳答案

答案很简单,Spark 模型不是线性回归。

线性回归最小化|| y - 宽x ||_2^2

Spark 模型是弹性网,它最小化 || y - 宽x ||_2^2 + a1 || W ||_2^2 + a2 || W ||_1

如果您希望此 Spark 代码成为线性回归删除正则化项:

  .setRegParam(0.3)
  .setElasticNetParam(0.8);

并增加迭代次数以确保其收敛。

关于apache-spark - 对 Spark ML 和 Tensorflow 的线性回归结果感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41884411/

相关文章:

scala - 按 RDD 值从 Cassandra 表中过滤

r - 如何调整随机森林代码以进行质量预测

machine-learning - 直接将输入提供给 tf.contrib.learn 估计器

python - 为什么要使用 tensorflow gfile? (对于文件 I/O)

python - tensorflow 错误 : No Variables to optimize

scala - 有没有办法将默认大小写值作为参数传递

scala - Spark SQL 窗口函数前瞻和复函数

python - 让 TensorFlow 做一些琐碎的事情时遇到困难

java - 调用目标异常。无法将类 X 转换为类 X。通过 Spark-Submit 在 Scala Imain 中调用时

Python sklearn OneVsRestClassifier : Score function gives ValueError