2012-06-15 71 views
0

這是一個關於考慮到不同參數的數據標準化的問題。標準化[0 -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的提升因子 - 沒有提升。

此外我想考慮每篇文章的票數。一票三星的文章排名要差於平均4票和2.8星的文章。 (助推係數分別爲1.2和1.3)

+1

那麼你的問題是什麼?看起來你已經很好了。繼續下去這個思路,你可能會想出來。 – Tenner

回答

2

如果我正確理解了你的話,你應該使用Sigmoid function,它指的是Logistic function的特殊情況。 Sigmoid和其他邏輯函數經常用於神經網絡來收縮(壓縮或規格化)數據的輸入範圍(例如,到[-1,1]或[0,1]範圍)。

+0

也許也可以使用arctan,但我不會推薦它。 :-) – Mehrdad

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 

這顯然線性增長,這可能不是你要找的是什麼,但只有三個指定的值,這是很難知道您的期望究竟是什麼樣的增長。如果您對線性增長不滿意,並且您希望不好的文章更多的受到更多的懲罰,你可以嘗試提出更多的價值觀併產生指數或對數方程。

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

這種方法讓你有兩個最大和最小負值。例如:

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

注:,你不能讓最大分鐘是相同的值,或快報最大值小於分鐘。並且inValue應該在給定範圍內勝出。

如果您需要更多詳細信息,請填寫評論。

相關問題