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

时间:2015-01-16 05:31:32

标签: python-2.7 intersection random-forest

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

例如,如果我有一份学习时间列表,学生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中实现它

谢谢!

1 个答案:

答案 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的两个向量。

Mean squared error

在代码中,函数看起来像......

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);
}