1

这是一个关于考虑不同参数的数据标准化的问题。

我在一个网站上有一组文章。用户使用评分系统对文章进行评分,从 1 星到 5 星。1 星表示不好的文章,并将文章标记为“不好”。2 星给出“平均”评级。3,4 和 5 星评价“好”、“非常好”和“优秀”。

我想在 [0 - 2] 范围内标准化这些评级。标准化值将代表一个分数,并将用作在文章列表中向上或向下提升文章的因素。具有 2 星或更少星的文章应获得 [0-1] 范围内的分数,因此此提升因子将产生负面影响。评分为 2 星或更多星的文章应获得 [1-2] 范围内的分数,因此该提升因子将具有正提升。

例如,一篇拥有 3.6 星的文章将获得 1.4 的提升因子。这将在文章列表中提升文章。一篇 1.9 星的文章将获得 0.8 分。这个分数将使文章在列表中进一步下降。一篇有 2 星的文章将获得 1 的提升因子 - 没有提升。

此外,我想考虑每篇文章的投票数。一篇单票 3 星的文章排名必须低于 4 票和 2.8 星的平均排名。(升压因子可以分别为 1.2 和 1.3)

4

3 回答 3

3

如果我理解正确,您应该使用Sigmoid 函数,它指的是Logistic 函数的特例。神经网络中经常使用 Sigmoid 和其他逻辑函数来缩小(压缩或标准化)数据的输入范围(例如,缩小到 [-1,1] 或 [0,1] 范围)。

于 2012-06-15T15:00:36.097 回答
1

我不会解决你的评级系统,但标准化值的一般方法是这样的。

Java方法:

public static float normalise(float inValue, float min, float max) {
    return (inValue - min)/(max - min);
}

C函数:

float normalise(float inValue, float min, float max) {
    return (inValue - min)/(max - min);
}

这种方法让您在最大值和最小值上都有负值。例如:

variable = normalise(-21.9, -33.33, 18.7);

注意:你不能让maxmin是相同的值,或者让 max 小于 min。并且inValue应该是给定范围内的 winth。

如果您需要更多详细信息,请写评论。

于 2016-06-04T04:55:28.790 回答
0

根据数字和我自己编造的一些数字,我得出了这 5 点

Rating     Boost
1.0        0.5
1.9        0.8
2.0        1.0
3.6        1.4
5.0        2.0

为此计算近似线性回归,我得到了公式y=0.3x+0.34

所以,你可以创建一个转换函数

float ratingToBoost(float rating) {
    return 0.3 * rating + 0.34;
}

使用它,您将获得大致符合您要求的输出。样本数据:

Rating     Boost
1.0        0.64
2.0        0.94
3.0        1.24
4.0        1.54
5.0        1.84

这显然具有线性增长,这可能不是您想要的,但仅指定了三个值,很难确切知道您期望什么样的增长。如果您对线性增长不满意,并且您希望通过较低的提升来更多地惩罚不良文章,您总是可以尝试提出更多的值并生成指数或对数方程。

于 2012-06-15T15:03:01.060 回答