归一化[0 -1]范围内的值

时间:2012-06-15 14:53:00

标签: math normalization

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

我在网站上有一组文章。用户使用评级系统并对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)

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

根据数字和我自己制作的一些数字,我得出了这5分

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

为此计算一个近似linear regression,我得到了公式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

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

答案 2 :(得分:0)

我不打算解决您的评级系统,但这是一种标准化值的一般方法。

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

此方法允许您在max和min上都有负值。例如:

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

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

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