生成转移矩阵的算法
转移概率是这样定义的:
举个例子,对于一个产品,当当前价格是高的时候,下一个周期价格也是高的概率是0.3,而价格变低的概率是0.7。
我想问的是,对于两个独立的产品,转移概率该怎么计算?
我希望能得到像下面这样的结果表:
比如说,假设产品1和产品2的当前价格都是高(H),那么产品1变成低(L)而产品2保持高(H)的概率是0.7乘以0.3,结果是0.21。
我现在使用的代码如下:
from sklearn.utils.extmath import cartesian
pr = np.array([[0.3,0.7],[0.6,0.4]])
P = np.zeros((4,4))
count = 0
for i in range(2):
for j in range(2):
P[count] = cartesian((pr[i],pr[j])).prod(1)
count += 1
P
这个代码对于两个产品来说效果很好,但如果产品数量更多,就会变得很复杂。比如说,对于四个独立的产品,转移矩阵会是16乘16的:对于每一个当前状态(比如说HHHH),将会有16种可能的未来状态,比如(HHHH, HHHL, HHLH, HHLL, HLHH,等等)。
有没有简单明了的方法来处理这个问题呢?
1 个回答
0
你正在生成一个简单的马尔可夫转移模型,对吧?
现在你想知道在有两个产品的情况下,另一个产品的转移概率是多少?我理解得对吗?如果是这样的话,你只需要再次从数据中学习,不过这次要关注每一对数据的出现,把它们当作一个n-gram来处理。
你的矩阵确实会变得很大,但这一开始并不应该成为问题。
如果你想回顾很长一段时间的数据,那么你可能需要考虑另一种更适合处理时间序列的技术。