java - 如何计算与 Spark 的 Spearman 相关系数?我无法从统计书中复制样本
问题描述
为了训练自己进行Spark
经典统计分析,我正在尝试执行一些书籍中的样本(中性统计书籍:不专门用于计算或 Spark)。
书中的样本提供了计算两位评委给十名运动员做笔记的斯皮尔曼相关系数:
| 法官 1 | 8.3 | 7.6 | 9.1 | 9.5 | 8.4 | 6.9 | 9.2 | 7.8 | 8.6 | 8.2
| 法官 2 | 7.9 | 7.4 | 9.1 | 9.3 | 8.4 | 7.5 | 9.0 | 7.2 | 8.2 | 8.1
创建等级的中间矩阵,
| 法官 1 | 5 | 2 | 8 | 10 | 6 | 1 | 9 | 3 | 7 | 4
| 法官 2 | 4 | 2 | 9 | 10 | 7 | 3 | 8 | 1 | 6 | 5
书中的示例最终以以下结果结束:
r = 0.915
根据 Correlation 的 API 文档,我尝试用Spark
这种方式实现它:
List<Row> data = Arrays.asList(
RowFactory.create(Vectors.dense(8.3, 7.6, 9.1, 9.5, 8.4, 6.9, 9.2, 7.8, 8.6, 8.2)),
RowFactory.create(Vectors.dense(7.9, 7.4, 9.1, 9.3, 8.4, 7.5, 9.0, 7.2, 8.2, 8.1))
);
StructType schema = new StructType(new StructField[]{
new StructField("features", new VectorUDT(), false, Metadata.empty()),
});
Dataset<Row> df = this.session.createDataFrame(data, schema);
Row r2 = Correlation.corr(df, "features", "spearman").head();
System.out.println("Spearman correlation matrix:\n" + r2.get(0).toString());
但它不会给我一个系数。相反,另一个对我来说似乎很奇怪的矩阵:
Spearman correlation matrix:
1.0 0.9999999999999998 NaN ... (10 total)
0.9999999999999998 1.0 NaN ...
NaN NaN 1.0 ...
0.9999999999999998 0.9999999999999998 NaN ...
NaN NaN NaN ...
-0.9999999999999998 -0.9999999999999998 NaN ...
0.9999999999999998 0.9999999999999998 NaN ...
0.9999999999999998 0.9999999999999998 NaN ...
0.9999999999999998 0.9999999999999998 NaN ...
0.9999999999999998 0.9999999999999998 NaN ...
我是新来的MLib
,在统计方面并不那么强。很明显,我做错了事。
我在这里看到了什么,而不是我的预期,
我该如何实现我想要的结果?
解决方案
这个问题的解决方案的一部分是令人羞耻的......
我只是把向量放在错误的一边。而这一点,更正:
List<Row> data = Arrays.asList(
RowFactory.create(Vectors.dense(8.3, 7.9)),
RowFactory.create(Vectors.dense(7.6, 7.4)),
RowFactory.create(Vectors.dense(9.1, 9.1)),
RowFactory.create(Vectors.dense(9.5, 9.3)),
RowFactory.create(Vectors.dense(8.4, 8.4)),
RowFactory.create(Vectors.dense(6.9, 7.5)),
RowFactory.create(Vectors.dense(9.2, 9.0)),
RowFactory.create(Vectors.dense(7.8, 7.2)),
RowFactory.create(Vectors.dense(8.6, 8.2)),
RowFactory.create(Vectors.dense(8.2, 8.1))
);
相关性 entre les notes des deux juges pour les sportifs :
1.0 0.9151515151515153
0.9151515151515153 1.0
推荐阅读
- c# - 我做了一个 OnTriggerEnter2D 无效但不起作用
- algorithm - 是二叉树的高度 log2(n)
- python - LEMMA :: 管道需要包含一个标注器才能使用 Matcher 或 PhraseMatcher
- ruby - 扭曲的部分总和(加到前一个元素)
- javascript - Vue路由器,当我刷新页面时,它带我到主页
- c# - 在 C# 中使用 break 命令进行测试,但出现错误
- cassandra - 将节点添加到集群后,Cassandra 中的数据丢失
- python - 在 seaborn 中使用 Relplot 回归线
- python - Python:通过多个分隔符将字符串分成两列
- jquery - 输入类型编号的增量附加数字而不是递增