我正在尝试将一个数字列表与另一个列表列表进行比较,以查看其中有多少列表匹配得非常紧密。但是,我的每个数据集都可能有不同的长度。
例如,如果我有一份学习时间列表,学生1可能
1 - [ 10.0, 25.0, 15.7, 45.0]
并与
的其他学生名单进行比较2 - [ 9.0, 30.0, 3.0]
3 - [ 26.0, 44.0]
4 - [ 5.0, 70.0, 90.0, 100.0]
5 - [ 9.0, 27.0, 13.7, 42.0, 56.0, 60.0, 75.0]
我希望比较得分高,比较研究1和5,因为有4次得分都很好,即使学生5有额外的时间,学生1没有,我希望它得分对于学生1对3来说相当不错,因为有些数字非常匹配,即使有些数字没有
我刚刚开始使用机器学习,而且我只是熟悉随机森林。您可以使用它们进行此类比较,还是必须具有相同的参数?你能提出一个不同的方法吗?
实际上我正在寻找的是具有松散参数的集合的交集。我想在python中实现它
谢谢!
答案 0 :(得分:0)
首先将0到1范围内的数据标准化。这可以使用以下公式来完成。
Norm(e) = (e - Emin) / (Emax - Emin)
表示每个向量中的每个值e。 (我不知道如何将数学符号放在这里或我想。)
例如,第一个向量将变为......
1 - [ 10.0, 25.0, 15.7, 45.0]
Norm(10.0) = (10.0 - 10.0) / (45.0 - 10.0) = 0.0
1 - [ 0.0, 25.0, 15.7, 45.0]
Norm(25.0) = (25.0 - 10.0) / 35.0 = 15/35 = 3/7 ~= 0.42857142
1 - [ 0.0, 0.42857142, 15.7, 45.0]
...
1 - [ 0.0, 0.42857142, 0.30571428, 1.0]
对每个向量执行此操作,然后计算每对的均方误差 添加/删除必要的0。这应该会给你一个非常好的评分机制。如果需要,您还可以将1.0拆分为2个0.5条目。
您可以使用以下等式计算均方误差。 其中n是每个向量和Y hat中元素的数量,Y是您希望获得MSE的两个向量。
在代码中,函数看起来像......
public long getMSE(long[] v1, long[] v2) {
long returnValue = 0.0L;
for (int i = 0; i < v1.length; i++) {
returnValue += Math.pow(v1[i] - v2[i], 2);
}
return (long) (returnValue / v1.length);
}