2つのユーザーの行動に基づいてレコード
[
[0、1、4、9]、
[8]、[0,7]、[2]
]
中間記録[4,0.5,5.5,5.5]を検索し、機能を生成し、
[
[0、1、0、1]、
[1、0、1、0]
]
発生特性の確率を計算
[1 / 2,1 / 2,1 / 2,1 / 2]
新旧の動作がベイズ確率同時確率のクラスの動作である機能、より多くの特性確率を生成するために、より多くの真ん中レコードの新しい動作を入力します。
CONST execMathExpress =( 'EXEC-mathexpress'を必要とします)。 // 贝叶斯计算公式 関数execByes(ガー){ CONST ARR1 = [] CONST ARR2 = [] CONSTのObj = {} のための(I = 0せ; I <gArr.length; I ++ ){ arr1.push(「P '+ i)が (arr2.push 'I + +'(1-P)'」) のObj [ 'P' + I] = ガー[I]。 } CONST STR1 = arr1.join( '*' )。 constのSTR2 = arr2.join( '*' ); CONST STR = STR1 + '/(' + 0009 + '+' + STR2 + ')' 。 execMathExpress(STR、のObj).toString(); } クラス人{ コンストラクタ(キー){ この .keys = キー。 この .DATA = [] } {(アイテム)を学ぶ この.data.push(項目)。 } GetFeatureの(アイテム){ CONST ARR = []; constのdenが = この.data.lengthを。 ため(I = 0せ; I < 本 .keys.length; Iを++ ){ PNUMせ = 0 。 用(++ J; J <デンJ = 0を聞かせて、{) CONST Dは = この.DATA [j]を。 もし(項目[I]> D [i])と{ PNUM ++ 。 } } 場合(PNUM> DEN / 2){ [I] = 1 ARR 。 } 他{ ARR [I] = 0 ; } } 戻りARR。 } 考える(){ CONST DEN = この.data.length。 ため(I = 0せ; I < 本 .keys.length; Iを++ ){ PNUMせ = 0 。 用(++ J; J <デンJ = 0を聞かせて、{) CONST Dは = この.DATA [J]。 もし(項目[I]> D [i])と{ PNUM ++ 。 } } 場合(PNUM> DEN / 2){ [I] = 1 ARR 。 } 他{ ARR [I] = 0 ; } } } getOrder(アイテム){ CONST ARR = この .getFeature(項目、この.keys)。 console.log(ARR) はconsole.log(execByes(ARR)) 戻りexecByes(ARR)。 } } constのD = 新ピープル([ 'ショー'、 'クリック'、 ''、 '時間']) 関数randomArr(){ CONST ARR = []; ため(I = 0せ; I <4; I ++ ){ CONST N = 0 | Math.random()* 10 。 arr.push(N) } 戻りARR } CONST RECT = [0、1、4、9 ]、 [ 8、0、7,2 ]、 [ 9,9、1、8 ]、 [ 1、0,6 、7 ]、 [ 1、3、7、5 ]、 [ 5,5、0,9 ]、 [ 7,6、0,4 ]、 [ 5,5、2、9 ]、 [ 6、2、9 、5]、 [ 3、5、3、3 ]。 ため(LET I = 0、I <4; I ++ ){ rect.push(randomArr()) } rect.forEach(関数(アイテム){ d.learn(アイテム) }) にconsole.log(D) d.getOrder( randomArr())。 d.getOrder(randomArr())。 d.getOrder(randomArr())。 d.getOrder(randomArr())。 d.getOrder(randomArr())。 d.getOrder(randomArr())。 d.getOrder(randomArr())。