随机森林 - 或其他机器学习 - 具有不同数量的特征

Random Forest - or other Machine Learning - with Different number of features

我正在尝试将一个数字列表与另一个列表列表进行比较,以查看其中有多少非常匹配。但是我的每个数据集都可以有不同的长度。

举个例子,如果我有一个学习时间列表,学生 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 到 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]

对每个向量执行此操作,然后计算每对的均方误差 adding/removing 必要的 0。这应该会给你一个很好的评分机制。如果需要,您还可以将 1.0 拆分为 2 个 0.5 条目。

均方误差

您可以使用以下等式计算均方误差。 其中 n 是每个向量中的元素数,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);
}