【发布时间】:2016-03-04 02:55:03
【问题描述】:
我在 PySpark 工作,我想找到一种方法来对数据组执行线性回归。具体给出这个数据框
import pandas as pd
pdf = pd.DataFrame({'group_id':[1,1,1,2,2,2,3,3,3,3],
'x':[0,1,2,0,1,5,2,3,4,5],
'y':[2,1,0,0,0.5,2.5,3,4,5,6]})
df = sqlContext.createDataFrame(pdf)
df.show()
# +--------+-+---+
# |group_id|x| y|
# +--------+-+---+
# | 1|0|2.0|
# | 1|1|1.0|
# | 1|2|0.0|
# | 2|0|0.0|
# | 2|1|0.5|
# | 2|5|2.5|
# | 3|2|3.0|
# | 3|3|4.0|
# | 3|4|5.0|
# | 3|5|6.0|
# +--------+-+---+
我现在希望能够为每个 group_id 拟合一个单独的 y ~ ax + b 模型,并输出一个新的数据框,其中包含 a 和 b 列以及每个组的一行。
例如对于1 组我可以这样做:
from sklearn import linear_model
# Regression on group_id = 1
data = df.where(df.group_id == 1).toPandas()
regr = linear_model.LinearRegression()
regr.fit(data.x.values.reshape(len(data),1), data.y.reshape(len(data),1))
a = regr.coef_[0][0]
b = regr.intercept_[0]
print('For group 1, y = {0}*x + {1}'.format(a, b))
# Repeat for group_id=2, group_id=3
但是为每个组执行此操作需要将数据返回给驱动程序,这并没有利用任何 Spark 并行性。
【问题讨论】:
-
你有没有尝试过?如果是这样,你能告诉我们你的努力吗?目前还不清楚这里的输入是什么,如何将其转换为 Spark 数据结构,以及要使用哪种工具来创建模型。
-
什么是
group_id?,哪些是特征,哪些是标签?你想用ML还是MLLib? -
我已编辑以阐明我想要做什么 - 在这种情况下,唯一的功能是
x。很高兴使用ML或MLLib或其他任何可能合适的东西。 -
Pandas 也能做到这一点吗?
标签: python pandas apache-spark pyspark