开发者社区> 问答> 正文

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

我正在使用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时,它会出现同样的问题吗?

展开
收起
社区小助手 2018-12-05 13:33:41 3341 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

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

    (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

    2019-07-17 23:18:20
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
机器学习介绍与Spark Mllib实践 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载