固定概率,在单词矩阵中不等于1



我创建了一个矩阵,使用这些问题的答案——问题1和问题2。关于这个错误的类似问题并没有帮助解决。

但概率超过1-值错误:概率总和不等于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**

尝试规范

选择单词并生成一个列表

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

这段代码处理的是一个较小的矩阵,在上面的一个问题中,这个矩阵并没有那么大和复杂。谢谢

您可以在python中使用十进制控制浮点数的精度。以以下为例:

from decimal import Decimal as D
from decimal import getcontext
getcontext().prec = 8
word_the = [9, 4, 5, 4]
sum_of_elements = sum(word_the)
a = D(1/sum_of_elements)
my_probs_scaled = [D(e)*a for e in word_the]
print(my_probs_scaled)
print(sum(my_probs_scaled))

输出为:

[Decimal('0.40909091'), Decimal('0.18181818'), Decimal('0.22727273'), Decimal('0.18181818')]
1.0000000

您可以随意调整参数,包括精度。

最新更新