gpt4 book ai didi

python - Python 中的马尔可夫聚类

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:17 25 4
gpt4 key购买 nike

正如标题所说,我正在尝试让马尔可夫聚类算法在 Python 中工作,即 Python 3.7

不幸的是,它没有做任何事情,而且它让我在试图修复它时遇到困难。

编辑:首先,我对主代码进行了调整,使每列的总和为 100,即使它不是完全平衡的。我将尝试在最终答案中说明这一点。

需要明确的是,最大的问题是数字逐渐失控,变成了 5.56268465e-309 这样容易理解的数字,我不知道如何将其转换成可以理解的数字。

这是目前的代码:

import numpy as np
import math
## How far you'd like your random-walkers to go (bigger number -> more walking)
EXPANSION_POWER = 2
## How tightly clustered you'd like your final picture to be (bigger number -> more clusters)
INFLATION_POWER = 2
ITERATION_COUNT = 10
def normalize(matrix):
return matrix/np.sum(matrix, axis=0)

def expand(matrix, power):
return np.linalg.matrix_power(matrix, power)

def inflate(matrix, power):
for entry in np.nditer(transition_matrix, op_flags=['readwrite']):
entry[...] = math.pow(entry, power)
return matrix

def run(matrix):
#np.fill_diagonal(matrix, 1)
#print(matrix)
matrix = normalize(matrix)
print(matrix)
for _ in range(ITERATION_COUNT):
matrix = normalize(inflate(expand(matrix, EXPANSION_POWER), INFLATION_POWER))
return matrix

transition_matrix = np.array ([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0.5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0.34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0.33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0.33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0.34,0,0,0,0,0,0,0,0,0,0,0,0,0.125,0],
[0,0,0,0.33,0,0,0.5,0,0,0,0,0,0,0,0,0,0.125,1],
[0,0,0,0.33,0,0,0.5,1,1,0,0,0,0,0,0,0,0.125,0],
[0,0,0,0,0.166,0,0,0,0,0,0,0,0,0,0,0,0.125,0],
[0,0,0,0,0.166,0,0,0,0,0.2,0,0,0,0,0,0,0.125,0],
[0,0,0,0,0.167,0,0,0,0,0.2,0.25,0,0,0,0,0,0.125,0],
[0,0,0,0,0.167,0,0,0,0,0.2,0.25,0.5,0,0,0,0,0,0],
[0,0,0,0,0.167,0,0,0,0,0.2,0.25,0.5,0,1,0,0,0.125,0],
[0,0,0,0,0.167,0,0,0,0,0.2,0.25,0,1,0,1,0,0.125,0],
[0,0,0,0,0,0.34,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0.33,0,0,0,0,0,0,0,0,0,0.5,0,0],
[0,0,0,0,0,0.33,0,0,0,0,0,0,0,0,0,0.5,0,0]])
run(transition_matrix)
print(transition_matrix)

这是 uni 作业的一部分 - 我需要对这个数组进行加权和未加权处理(尽管加权部分可以等到我让这该死的东西开始工作)有什么提示或建议吗?

最佳答案

您的转换矩阵无效。

>>> transition_matrix.sum(axis=0)
>>> matrix([[1. , 1. , 0.99, 0.99, 0.96, 0.99, 1. , 1. , 0. , 1. ,
1. , 1. , 1. , 0. , 0. , 1. , 0.88, 1. ]])

不仅有些列的总和不为 1,有些列的总和为 0。

这意味着当您尝试对矩阵进行归一化时,您最终会得到 nan,因为您除以 0。

最后,您使用 Numpy 矩阵而不是仅使用 Numpy 数组(这是此类数据的推荐容器)是否有原因?因为使用 Numpy 数组会简化一些操作,例如将每个条目提高一次幂。此外,Numpy 矩阵和 Numpy 数组之间存在一些差异,这可能会导致细微的错误。

关于python - Python 中的马尔可夫聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52886212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com