4

私を正しい軌道に戻すための簡単なアドバイスを探しています。sparse.coo_matrix に格納されている非常にまばらな入力行列 (情報の約 25% が埋められ、残りは 0) がある問題の解決策に取り組んでいます。

sparse_matrix = sparse.coo_matrix((value, (rater, blurb))).toarray()

データセットからこの配列を作成し、他のオプションをいじる作業を行った後、現在、NMF モデルフィッター関数を次のように定義しています。

def nmf_model(matrix): 
  model = NMF(init='nndsvd', random_state=0)

  W = model.fit_transform(matrix);
  H = model.components_;
  result = np.dot(W,H)

  return result

さて、問題は私の出力が 0 の値を正しく考慮していないように見えることです。0 だった値は 1 未満の値にぶつかり、既知の値は実際の値からかなり変動します (すべてのデータは 1 から 10 の間の評価です)。誰かが私が間違っていることを見つけることができますか? scikit のドキュメントから、nndsvd の初期化を使用すると、空の値が正しいことを説明できると思いました。出力例:

#Row / Column / New Value
35 18 6.50746917334 #Actual Value is 6
35 19 0.580996641675 #Here down are all "estimates" of my function
35 20 1.26498699492
35 21 0.00194119935464
35 22 0.559623469753
35 23 0.109736902936
35 24 0.181657421405
35 25 0.0137801897011
35 26 0.251979684515
35 27 0.613055371646
35 28 6.17494590041 #Actual values is 5.5

経験豊富な ML コーダーが提供できるアドバイスに感謝します!

4

0 に答える 0