固定概率,在单词矩阵中总和不为 1
Fixing probabilities, which do not sum to 1 in the matrix of words
我使用这些问题的答案创建了一个矩阵 - and 。关于这个错误的类似问题没有帮助解决。
但概率超过 1 - ValueError:概率之和不等于 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
这段代码适用于一个较小的矩阵,在上面的一个问题中它不是那么大和复杂。
谢谢!
您可以在 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
您可以调整参数,包括精度。
我使用这些问题的答案创建了一个矩阵 -
但概率超过 1 - ValueError:概率之和不等于 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
这段代码适用于一个较小的矩阵,在上面的一个问题中它不是那么大和复杂。 谢谢!
您可以在 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
您可以调整参数,包括精度。