1

これは、さまざまなパラメーターを考慮したデータの正規化に関する質問です。

Web サイトに一連の記事があります。ユーザーは評価システムを使用して、記事を 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 (ブーストなし) を取得します。

さらに、各記事の投票数も考慮に入れたいと思います。1 票で 3 つ星の記事は、4 票で平均 2.8 つ星の記事よりもランクが低くなければなりません。(ブースト係数はそれぞれ 1.2 と 1.3 になります)

4

3 に答える 3

3

私の理解が正しければ、ロジスティック関数の特殊なケースを参照するシグモイド関数を使用する必要があります。シグモイドおよびその他のロジスティック関数は、データの入力範囲を縮小 (圧縮または正規化) するためにニューラル ネットワークでよく使用されます (たとえば、[-1,1] または [0,1] 範囲)。

于 2012-06-15T15:00:36.097 に答える
1

あなたの評価システムを解決するつもりはありませんが、値を正規化する一般的な方法は次のとおりです。

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

注: maxminを同じ値にしたり、max を min より小さくしたりすることはできません。inValueは、指定された範囲内にある必要があります

詳細が必要な場合は、コメントを書いてください。

于 2016-06-04T04:55:28.790 に答える
0

数字に基づいて、私が自分で作成したいくつかの点を次の 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

これは明らかに直線的な増加であり、探しているものではないかもしれませんが、3 つの値しか指定されていないため、予想される増加の種類を正確に知ることは困難です。直線的な成長に満足できず、たとえば悪い記事をより低いブーストで罰したい場合は、いつでもいくつかの値を考え出し、指数関数または対数方程式を生成しようとすることができます。

于 2012-06-15T15:03:01.060 に答える