gpt4 book ai didi

Python numpy/scipy 特征向量似乎不适合马尔可夫链模型

转载 作者:太空狗 更新时间:2023-10-30 03:00:41 24 4
gpt4 key购买 nike

我有一个很大的 (351,351) numpy 转换矩阵。我想使用 numpy 找到状态向量(我也试过 scipy,它具有完全相同的功能)。

sstate = np.linalg.eig(T)[1][:,0]

所以我相信这应该给我占主导地位的左特征值的特征向量。主左特征值为 1+0j。这在某种程度上是正确的,主要的左特征值应该是 1,我对此有点陌生,所以我不确定如何处理虚数。此外,sstate 向量包含所有复数。现在,尝试检查这是否正确,我执行以下矩阵乘法:

np.dot(sstate,T)

如果操作正确,这应该返回与“sstate”相同的向量。我不确定为什么这不起作用。虚数可能是问题所在吗?另外,这个转移矩阵是否可能不包含稳态向量。我的过渡状态矩阵中的每一行和每一列的总和应该为 1,但是,我发现舍入误差导致每一行和每一列的总和仅为大约 1。

感谢任何帮助!

最佳答案

转移矩阵是对称的吗?如果不是,请考虑检查 T.T(转置),因为您需要确保您正在查看正确的状态转换:您需要随机的 left 特征向量矩阵,但几乎所有开箱即用的科学包(包括 numpy)都默认计算正确的特征向量(这与教科书中的相同原因和你必须预乘行向量而不是通常的东西处理这些东西时矩阵列乘法)。

也许还可以 sstate = sstate/sstate.sum() 以确保概率总和为 1,尽管有舍入。

这是 an example with numpy.

从评论中添加了关于右特征向量与左特征向量的详细信息:

eig 和类似的东西将计算正确的 特征向量,如向量 v 这样 Av = (lambda)v 用于标量 lambda。不过,您需要的是 Aleft 特征向量,所以满足 v.T*A = (lambda)v.T 的东西不仅是右特征向量的转置或共轭。

所以你会想根据 A.T 计算特征向量,但你不会想在稍后检查状态是否时用 A.T 计算矢量确实是静止的。您需要查看 np.dot(sstate, T)(验证 sstate 是行向量,而不是列),并对其进行评估(也可能是关于重新归一化以帮助四舍五入的另一点)。

关于Python numpy/scipy 特征向量似乎不适合马尔可夫链模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491447/

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