0

トピック分析を実行するために、tf-idf 入力に対して NMF 分解を実行しています。

def decomp(tfidfm, topic_count):
    model = decomposition.NMF(init="nndsvd", n_components=topic_count,     max_iter=500)
    H = model.fit_transform(tfidfm)
    W = model.components_
    return W, H

これは、トピックから用語への割り当てで構成されるモデル定義であるWと、ドキュメントからトピックへの割り当て行列であるHを返します。

これまでのところ、H を使用して、トピックのリストへの用語頻度による関連性に基づいてドキュメントを分類できます。トピックのリストは、用語頻度との関連性にも基づいています。

後で再適用できるように、トピック用語の関連付けをディスクに保存したいと思います-ここで説明されている方法 [ https://stackoverflow.com/questions/8955448]を採用して、W の疎行列の再表現を保存します.

私が今やりたいことは、同じプロセスを実行し、トピック定義行列 W のみを修正することです.

ドキュメントでは、次の行に沿って呼び出しパラメーターに W を設定できるようです。

def applyModel(tfidfm,W,topic_count):
    model = decomposition.NMF(init="nndsvd", n_components=topic_count, max_iter=500)
    H = model.fit_transform(X=tfidfm, W=W)
    W = model.components_
    return W, H

そして、私はこれを試しましたが、うまくいかないようです。

異なるサイズのボキャブラリを使用して W マトリックスをコンパイルし、それをapplyModel関数に入力することでテストしました。結果のマトリックスの形状は、W モデルによって定義される必要があります (または、それが私が意図していることです)。しかし、そうではありません。

この質問の短いバージョンは、次のとおりです。マトリックス分解から生成されたトピックモデルを保存して、最初に生成したものとは異なるドキュメントセットを分類するために使用できるようにするにはどうすればよいですか?

つまり、V = WHの場合、 VWが与えられた場合、どのようにHを返すことができますか?

4

2 に答える 2

1

初期方程式は:初期方程式で、次のように解きHます: Hの解き方.

ここで、が正則の場合にのみ存在するW の逆数行列 の逆行列を示します。WW

掛け算の順序は、いつものように重要です。があった場合は、逆の順序が変更された場合を掛ける必要があります。ⅤW説明なし

于 2016-10-17T17:47:35.277 に答える
0

applyModel完全を期すために、ForceBru からの回答を考慮して書き直された関数を次に示します (のインポートを使用しますscipy.sparse.linalg) 。

def applyModel(tfidfm,W):
    H = tfidfm * linalg.inv(W)
    return H

これは、事前に生成されたトピック モデルWとtfidf によって生成されたドキュメント特徴行列Vに基づいて、トピックHへのドキュメントのマッピングを返します (ボキャブラリが整列していると仮定) 。

于 2016-10-19T14:33:47.270 に答える