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