开发者社区> 问答> 正文

PySpark线性回归数据集中具有比数据点更多的特征

社区小助手 2018-12-05 13:33:41 588

我正在使用PySpark开发一个简单的文本挖掘应用程序。目标是将特定文档分类为垃圾邮件或非垃圾邮件。我有大约1000个文件来训练模型(n)。

清理数据(正交误差校正,词干等)后,我使用IDF提取特征向量。默认情况下,此向量化方法的要素维度为2 ^ 18 = 262144,这意味着我将总共有262144个高度稀疏的要素(p)。

考虑到p >> n:

我记得,根据我发现的一些文章和网络文章,在不做任何特征缩减的情况下,不可能对这种类型的数据应用线性回归,否则算法会失败(因为当p> n时,方差将是无穷)。

为了测试这个,我在我的数据上运行了一个线性回归:

...

idf_stage = IDF(inputCol=hashingTF.getOutputCol(), outputCol="features", minDocFreq=1)
lr = LinearRegression(maxIter=10, tol=1E-6)

pipeline = Pipeline(stages=[..., idf_stage, lr])

model = pipeline.fit(train)
results = model.transform(test)
results.select("label", "prediction").show()
我得到了以下结果:

label prediction
1.0 0.8123660495998272
1.0 0.9485273761704205
0.0 0.25039087467730653
1.0 1.2359878831283708
0.0 -0.14295806192187976
...

有几件我无法弄清楚的事情:

问题1:当p> n时,如果说线性回归算法会失败,那么失败的意义是什么?它应该根本不起作用并抛出异常或者它应该运行但是返回不应该考虑的结果吗?

问题2:如果算法应抛出异常,为什么它会运行?Spark是否会在幕后进行任何功能缩减?

问题3:由于使用变量变换可以将Logistic回归转化为线性回归问题,当p> n时,它会出现同样的问题吗?

分布式计算 算法 Spark
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:18:20

    只有在使用封闭形式解决方案时才会出现故障:

    (X T X)-1 X T y

    并应用了额外的验证。

    但是,这不是唯一可以使用的方法,而不是Spark中通常使用的方法。可以使用数值方法,如

    使用pseudoinverse。这是通常在不同包中实现线性的方式。

    迭代优化程序包括梯度下降的不同变体。

    即使(X T X)不可逆或病态也可以使用。当然不能保证这些会产生任何合理的解决方案。

    仅当要素数低于4096(默认值为)时,默认情况下才o.a.s.ml.regression.LinearRegression使用闭合形式解(“普通”求解器LinearRegression.MAX_FEATURES_FOR_NORMAL_SOLVER

    0 0
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题