Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 标准化[0-1]范围内的值_Math_Normalization - Fatal编程技术网

Math 标准化[0-1]范围内的值

Math 标准化[0-1]范围内的值,math,normalization,Math,Normalization,这是一个关于考虑不同参数的数据规范化的问题 我在一个网站上有一组文章。用户使用评级系统,对文章的评级从1到5颗星不等。1星表示不良文章,并将文章标记为“不良”。2颗星给予“平均”评级。3、4和5颗星评级为“良好”、“非常好”和“优秀” 我想将这些评级标准化为[0-2]。标准化的值将表示一个分数,并将用作在文章列表中向上或向下提升文章的因素。具有2颗星或更少星星的文章的分数应在[0-1]范围内,因此此提升因子将产生负面影响。评级为2颗星或2颗星以上的文章应获得[1-2]范围内的分数,因此该提升因子

这是一个关于考虑不同参数的数据规范化的问题

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

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

例如,一篇有3.6颗星的文章会得到1.4的提升系数。这将提升文章列表中的文章。一篇有1.9颗星的文章得0.8分。这个分数将使文章在列表中的排名进一步下降。一篇有两颗星的文章将获得1的提升系数-没有提升


此外,我想考虑每篇文章的投票数。一篇只有3颗星选票的文章的排名必须低于一篇有4颗星选票和平均2.8颗星选票的文章。(增压系数可能分别为1.2和1.3)

如果我理解正确,您应该使用a,它指的是发动机的特殊情况。在神经网络中,Sigmoid和其他逻辑函数通常用于缩小(压缩或规范化)数据的输入范围(例如,缩小到[-1,1]或[0,1]范围)。

基于这些数字,以及我自己编的一些,我得出了这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

这显然是线性增长,这可能不是您想要的,但由于只指定了三个值,很难确切知道您期望的增长类型。如果您对线性增长不满意,并且您希望(例如)坏文章受到较低提振的惩罚,您可以尝试提出更多的值,并生成指数或对数方程。

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

Java方法:

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

public static float normalise(float inValue, float min, float max) {
    return (inValue - min)/(max - min);
}
float normalise(float inValue, float min, float max) {
    return (inValue - min)/(max - min);
}
此方法允许最大值和最小值均为负值。例如:

variable = normalise(-21.9, -33.33, 18.7);
注意:不能让最大值和最小值相同,或者让最大值小于最小值。无效值应为给定范围内的winth


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

那么您的问题是什么?看来你已经在路上了。继续沿着这条思路走下去,你可能会找到答案。也可能使用arctan,但我不推荐它。:-)