2017-11-29 5 views
0

私はLDAモデルといくつかのデータを持っています(現時点で50Kの質問)。モデルを実行すると、トピックが作成され、すべての質問がトピックに追加されます。この例では、20のトピックがあります。トピックに関する質問の分布を比較する(値を行にする)

ほとんどの質問が100%1トピックに適合しないため、各質問ごとにトピックに関する分布を見つけることができます。

私がしたいのは、各質問と他の質問とを比較して類似点を探し、ほぼ同じ質問を選択できるようにすることです。私は他のすべてにそれぞれの質問を比較するためのループを持っている現時点で

words = {'00': [0,0,35,0,0,0,0,0,0,0,],'01': [0,0,20,0,0,0,0,0,0,0,], 
'02': [0,15,0,0,0,0,0,0,0,0,],'03': [0,0,0,0,0,0,5,0,0,0,], 
'04': [0,0,0,0,0,0,28,0,0,0,],'05': [0,0,0,0,97,0,0,0,0,0,], 
'06': [19,0,39,0,0,0,0,0,0,0,],'07': [0,0,0,25,0,0,41,0,56,38,], 
'08': [0,0,0,54,0,0,0,0,0,0,],'09': [0,0,0,0,0,0,0,0,34,0,], 
'10': [0,0,0,16,1,0,0,0,0,0,],'11': [0,0,0,0,0,99,0,0,0,0,], 
'12': [79,0,0,0,0,0,0,35,0,0,],'13': [0,57,0,0,0,0,0,0,0,0,], 
'14': [0,0,0,0,0,0,0,0,0,0,], '15': [0,0,0,0,0,0,0,0,0,0,], 
'16': [0,0,0,0,0,0,0,23,0,54,],'17': [0,21,0,0,0,0,0,36,0,0,], 
'18': [0,0,0,0,0,0,23,0,0,0,],'19': [0,0,0,0,0,0,0,0,0,0,]} 
dfwords = pd.DataFrame.from_dict(words) 

は私が質問し、そこ分布の小さな部分を取ります。それは、すべての他の質問「J」について各質問「I」をループし、各トピック「K」のスコアの差を計算する。それぞれの質問「J」には「K」の違いがあり、スコアが最も低い質問が最もよく似ています。

df4 = pd.DataFrame(np.zeros((len(Question), len(Question)))) 
for i in range(len(Question)): 
    df3 = pd.DataFrame(np.zeros((len(Question), 1))) 
    df3.rename(columns={0:str(i)}, inplace=True) 
    for j in range(len(Question)): 
     indnum = 0 
     for k in range(Topic_num): 
      indnum+=abs((dfwords.iat[j, k]-dfwords.iat[i, k])) 
     df3.iat[j,0]=indnum 
    df4[i] = df3[str(i)] 

それは動作しますが、これは本当に力ずくであり、私はこれを行うには、現時点では、私はそれらを把握することはできませんよりスマートな方法がたくさんあると確信しています。私はそれぞれのトピックについてxy座標を持っているので、それを使って何かをやろうと思っていましたが、どうしたらよいか分かりません。

50k回の50k回の20回の比較を優先し、50k回の50k回のテーブルよりアクセスしやすくすることがよりスマートでなければなりません。

誰でも私にこれを手伝ってもらえますか、多分正しい方向に向いていますか?どんな助けも本当に訴えるでしょう!

答えて

0

私はnumpyに切り替えて、より良いパフォーマンスを得ました。私の作品

例:

pattern = np.random.randint(0,10,size=(20,numCols)) 
for i in range(pattern.shape[0]): 
    for j in range(pattern.shape[0]): 
     differ = sum(abs(pattern[i,:] - pattern [j,:])) 
     if j == 0: 
      tempnp = np.array([[differ]]) 
     else: 
      tempnp = np.append(tempnp,[[differ]],axis=1) 
     sum(abs(pattern[i,:] - pattern [j,:])) 
    if i == 0: 
     finalnp = np.array(tempnp) 
    else: 
     finalnp = np.append(finalnp,tempnp,axis=0) 

しかし、まだ私は、これは多くのことを最適化することができます感じている。..