python – Spark中的PCA输出与scikit-learn不匹配
发布时间:2020-12-16 22:28:42 所属栏目:Python 来源:网络整理
导读:我在Spark ML中尝试PCA(主成分分析). data = [(Vectors.dense([1.0,1.0]),),(Vectors.dense([1.0,2.0]),(Vectors.dense([4.0,4.0]),(Vectors.dense([5.0,)]df = spark.createDataFrame(data,["features"])pca = PCA(k=1,inputCol="features",outputCol="pcaF
我在Spark ML中尝试PCA(主成分分析).
输出:
当我在scikit上尝试使用相同数据的PCA时 – 如下所示,给出了不同的结果
输出:
如您所见,输出存在差异. 为了验证结果,我在数学上计算了相同数据的PCA.我得到了与scikit-learn相同的结果.下面的片段是第一个数据点(1.0,1.0)的pca变换计算: 你可以看到它与scikit学习结果匹配. 似乎火花ML不从数据矢量X中减去平均矢量MX,即它使用Y = A *(X)代替Y = A *(X-MX). 对于点(1.0,1.0):
这与火花ML得到的结果相同. Spark ML是错误的结果还是我错过了什么? 最佳答案
在Spark中,PCA转换不会自动为您扩展输入数据.在应用该方法之前,您需要自己处理.要标准化数据的平均值,可以通过以下方式使用StandardScaler:
然后可以以与之前相同的方式在scaled_df上应用PCA方法,结果将与scikit-learn给出的结果相匹配. 我建议使用Spark ML管道来简化流程.要将标准化和PCA结合使用,它可能如下所示:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |