【发布时间】:2020-07-27 03:37:18
【问题描述】:
我创建了一个矩阵,使用这些问题的答案 - question 1 和 question 2。关于此错误的类似问题无助于解决。
但概率超过 1 - ValueError: probabilities do not sum to 1
请让我知道如何与您分享 df 的一部分以便重现性。
我使用此代码生成了并发矩阵
# Create matrix
my_df = pd.DataFrame(0, columns = words, index = words)
for k,v in frequency_list.items():
my_df.at[k[0],k[1]] = v
这给了我 10000*10000 的矩阵。
然后我转换成频率
row_sums = my_df.values.sum(axis = 1)
row_sums[row_sums == 0] = 1
my_prob = my_df/row_sums.reshape((-1,1))
my_prob
当我打印一个单词时
my_prob.sum().tail(30)
我的概率高于 1。
“thy 0.000000
“till 0.002538
**“to 1.109681**
试图归一化
选择单词 the 并生成一个列表
word_the = my_string_prob['the'].tolist()
尝试归一化概率
sum_of_elements = sum(word_the)
a = 1/sum_of_elements
my_probs_scaled = [e*a for e in word_the]
my_probs_scaled
sum(my_probs_scaled)
### Output 1.000000000000005
这段代码在一个较小的矩阵上工作,在上述问题之一中它不是那么大和复杂。 谢谢!
【问题讨论】:
-
你可以使用
from decimal import Decimal as D来避免浮点错误 -
@ParthShah,谢谢在我的代码中使用它的任何提示?谢谢!
标签: python numpy matrix probability