标签: markov

在强化学习中设置gamma和lambda

在使用广义时间差分(例如SARSA,Q学习)的任何标准强化学习算法中,出现的问题是用于特定任务的λ和伽马超参数的值.

我知道lambda与资格痕迹的长度有关,而gamma可以解释为折扣未来的奖励多少,但是我怎么知道我的lambda值对于给定的任务来说太低了,或者我的gamma太高了?

我意识到这些问题没有明确定义的答案,但是知道某些"危险信号"会产生不适当的价值会非常有用.

以标准推车杆或倒立摆任务为例.我应该将gamma设置为高,因为它需要很多步骤来使任务失败,或者因为状态信息完全是Markovian而需要低吗?而且我甚至无法理解lambda值......

artificial-intelligence machine-learning markov reinforcement-learning

4
推荐指数
1
解决办法
3805
查看次数

clojure简单马尔可夫数据转换

如果我有一个单词的向量,例如["john""说"......"john""走了"......]我想制作每个单词的哈希映射和下一个单词的出现次数,例如{"john"{"说"1"走了"1"踢了"3}}

我想出的最好的解决方案是通过索引递归遍历列表并使用assoc来继续更新哈希映射,但这似乎非常混乱.有没有更惯用的方法呢?

clojure hashmap markov

3
推荐指数
2
解决办法
321
查看次数

是否有用于从频率表计算一阶转换矩阵的 R 包?

我有一个由 8 亿条记录聚合而成的频率表,我想知道是否可以使用包从频率表中计算一阶转移矩阵,这是不对称的,因为某些状态再也没有发生过。频率表的一个示例是:

library(data.table)
model.data <- data.table(state1 = c(3, 1, 2, 3), state2 = c(1, 2, 1, 2), Freq = c(1,2,3,4))
Run Code Online (Sandbox Code Playgroud)

model.data 看起来像这样:

状态 1 状态2 n
3 1 1
1 2 2
2 1 3
3 2 4

使用包 pollster,我可以计算比例表:

library(pollster)
crosstab(model.data, state1, state2, Freq)
Run Code Online (Sandbox Code Playgroud)
状态 1 1 2 n
1 0 100 2
2 100 0 3
3 20 80 5

但是,我正在寻找的对称转移矩阵是:

状态 1 1 2 3 n
1 0 100 0 2
2 100 0 0 3 …

transition r matrix markov chain

3
推荐指数
1
解决办法
48
查看次数

马尔可夫转移概率矩阵在 Python 中的实现

我正在尝试计算序列的一步、两步转移概率矩阵,如下所示:

sample = [1,1,2,2,1,3,2,1,2,3,1,2,3,1,2,3,1,2,1,2]
import numpy as np

def onestep_transition_matrix(transitions):
    n = 3 #number of states

    M = [[0]*n for _ in range(n)]

    for (i,j) in zip(transitions,transitions[1:]):
        M[i-1][j-1] += 1

    #now convert to probabilities:
    for row in M:
        s = sum(row)
        if s > 0:
            row[:] = [f/s for f in row]
    return M

one_step_array = np.array(onestep_transition_matrix(sample))
Run Code Online (Sandbox Code Playgroud)

我的问题,我们如何计算两步转移矩阵。因为当我手动计算矩阵时,它如下所示:

two_step_array = array([[1/7,3/7,3/7],
                       [4/7,2/7,1/7],
                       [1/4,3/4,0]])
Run Code Online (Sandbox Code Playgroud)

然而。np.dot(one_step_array,one_step_arrary) 给了我一个不同的结果,如下所示:

array([[0.43080357, 0.23214286, 0.33705357],
   [0.43622449, 0.44897959, 0.11479592],
   [0.20089286, 0.59821429, 0.20089286]])
Run Code Online (Sandbox Code Playgroud)

请让我知道哪个是正确的。

python numpy matrix markov scipy

2
推荐指数
1
解决办法
3050
查看次数

list [-1]在python程序中产生"list index out of range"错误

我正在尝试构建一个马尔可夫生成器,它为字符串链接任意长度作为编程练习,但我发现了一个我似乎无法修复的错误.当我运行markov函数时,我得到列表索引超出范围.

我觉得我忽略了一些明显的东西,但我不确定是什么.追溯说错误是在第41行,有words[-1] = nextWords[random.randint(0, len(nextWords)-1)].

完整代码如下,对不起,如果缩进被搞砸了.

#! /usr/bin/python

# To change this template, choose Tools | Templates
# and open the template in the editor.

import random

class Markov(object):
    def __init__(self, open_file):
        self.cache = {}
    self.open_file = open_file
    open_file.seek(0)
    self.wordlist = open_file.read().split()

def get_random_list(self, length):
    i = random.randint(0, len(self.wordlist) - (length - 1))
    result = self.wordlist[i:i + length]
    return result

def find_next_word(self, words):
    candidates = []
    for i in range(len(self.wordlist) - len(words)):
        if self.wordlist[i:i + len(words)] == words …
Run Code Online (Sandbox Code Playgroud)

python markov python-2.x

1
推荐指数
1
解决办法
3640
查看次数

使用HIdden Markov模型进行预测

假设有一系列观察,例如[1,2,3,5,5,5,2,3,2,3, ..., 3, 4].我试图在Scikit中使用HMM的当前实现 - 学习预测该观察序列的下一个值.我有2个问题.

  1. 给定一系列观察,我如何预测下一次观察(如上所述)?

  2. 鉴于n个观察的许多序列和那些序列的n + 1个观察,HMM可以用于预测n个观察的新序列的第(n + 1)个观察吗?如果是这样的话?

我从文档中无法理解这一点.

我发现可能有重复,但没有说明如何在Scikit中使用HMM - 学习预测序列中的下一个值.

machine-learning markov prediction hidden-markov-models scikit-learn

1
推荐指数
1
解决办法
1万
查看次数

(Python) 马尔科夫、切比雪夫、切尔诺夫上界函数

在我的学习路径上,我被一项任务困住了。

对于二项式分布 X?Bp,n,均值为 ?=np 且方差为 ?**2=np(1?p),我们希望为概率设置上限 P(X?c??) for c?1。引入了三个边界:

公式

任务是分别为每个不等式编写三个函数。它们必须 将上述马尔可夫、切比雪夫和切尔诺夫不等式n , p and c 的上界作为输入并返回 P(X?c?np)作为输出。

还有一个IO的例子:

代码:

print Markov(100.,0.2,1.5)

print Chebyshev(100.,0.2,1.5)

print Chernoff(100.,0.2,1.5)

Output

0.6666666666666666

0.16

0.1353352832366127
Run Code Online (Sandbox Code Playgroud)

我完全被困住了。我只是不知道如何将所有这些数学插入到函数中(或者如何在这里进行算法思考)。如果有人可以帮助我,那将是非常有帮助的!

除 math.exp 外,任务条件不允许使用 ps 和所有库

python statistics probability markov data-science

1
推荐指数
1
解决办法
2182
查看次数

Markov C++从文件性能中读取

我有C++类的第二个任务,其中包括马尔可夫链.赋值很简单但是我无法弄清楚从文件中读取字符时最佳实现是什么.

我有一个大约300k的文件.赋值的一个规则是使用Map和Vector类.在Map中(键只是字符串),值将是Vectors.当我从文件中读取时,我需要开始收集密钥对.

例:

File1.txt
1234567890
1234567890
Run Code Online (Sandbox Code Playgroud)

如果选择Markov k = 3,我应该在我的Map中:

key     vector
123  -> 4
456  -> 7
789  -> 0
0/n1 -> 2
234  -> 5
567  -> 8
890  -> /n
/n   -> NULL
Run Code Online (Sandbox Code Playgroud)

教授的建议是用char读取char,所以我的算法如下

while (readchar != EOF){
tempstring += readchar
increment index
if index == Markovlevel {   
       get nextchar if =!EOF
       insert nextchar value in vector
       insert tempstring to Map and assign vector         
       unget char
}

}
Run Code Online (Sandbox Code Playgroud)

我省略了一些其他细节.我的主要问题是,如果我有318,000个字符,我每次都会做有条件的,这会大大减慢我的电脑速度(全新的MAC专业版).教授的示例程序在大约5秒内执行该文件.

我无法弄清楚在C++中从文本文件中读取固定长度单词的最佳方法是什么.

谢谢!

c++ string markov

0
推荐指数
1
解决办法
855
查看次数