比较主题问题的分布(值到行)

2024-10-01 17:41:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个LDAmodel和一些数据(目前有5万个问题)。当我运行模型时,它会生成主题,并将每个问题放入主题中。本例中有20个主题

对于每个问题,我都能找到主题的分布,因为大多数问题不是100%适合一个主题

我想做的是将每个问题与其他问题进行比较,寻找相似性,这样我就可以选择几乎相同的问题

我只回答了一小部分问题,并给出了分布:

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)

目前,我有一个循环,将每个问题与所有其他问题进行比较。它将每个问题“I”循环到所有其他问题“J”上,并计算每个主题“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的表更容易访问

有人能帮我吗,也许给我指出正确的方向?任何帮助都是值得的


Tags: indataframe主题forlennprangepd
1条回答
网友
1楼 · 发布于 2024-10-01 17:41:32

我换成了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)

但我还是觉得这可以优化很多

相关问题 更多 >

    热门问题