- 量表所有的值
[0..1]
- 分配給每個值
- 乘以每個換算值與它的重量
- 將第3步的所有值的所有總和的總和的重量/重要性權重
我不知道你正在使用的語言,所以這裏是一些C#代碼:
要素類
public class Feature
{
public double Importance { get; set; }
public double Value { get; set; }
public double LowValue { get; set; }
public double HighValue { get; set; }
public double ScaledValue
{
get
{
// Make sure value is within bounds
double intermediate = Math.Max(Math.Min(LowValue, HighValue),
Math.Min(Math.Max(LowValue, HighValue), Value));
// Scale from 0 to 1 within defined bounds
double scaledValue = (intermediate - LowValue)/(HighValue - LowValue);
return scaledValue;
}
}
}
實施例計算
// low importance (1), values from [20..-10] (less is better)
var f1 = new Feature
{
Importance = 1,
Value = 0,
LowValue = 20,
HighValue = -10
};
// low importance (1), values from [0..10] (more is better)
var f2 = new Feature
{
Importance = 1,
Value = 1,
LowValue = 0,
HighValue = 10
};
// high importance (5), values from [0..49]
var f3 = new Feature
{
Importance = 5,
Value = 25,
LowValue = 0,
HighValue = 49
};
var features = new[] {f1, f2, f3};
var score = features.Sum(f => f.ScaledValue*f.Importance)/features.Sum(f => f.Importance);
Debug.WriteLine(score);
量表所有值到[0..1](這裏如果希望按比例線性或指數等你考慮到)與乘以'權重'併除以權重的總和。例如:(F1 * 4 + F2 * 1 + F3 * 2)/(4 + 1 + 2) - > [0..1] –
但是權重是恆定的。所以如果F1 = 1,F2 = 1,F3 = 30,所有特徵都是重要的。如果我們將使用相同的權重F1 = 1,F2 = 1,F3 = 1,那麼F3將不成比例地不那麼重要。 (或者我的答案是否有問題?) – Thamiar
如果F1 = 1,F2 = 1,F3 = 30,那麼F3比F1(1)和F2(1)更重要(30)。如果您將每個F賦予相同的權重,則如果任何F按特定量更改,則最終結果將相同。如果您將F3的權重設置得高出其他權重,則F3改變時結果將發生更大的變化。 *編輯:*你在混合規模和重量?因爲你需要在**之前對這些值進行縮放**,所以你加權。 –