MarkovKit 0.6.1

MarkovKit 0.6.1

测试已测试
语言语言 SwiftSwift
许可 MIT
发布上次发布2016年8月
SPM支持 SPM

Sam Williams维护。



MarkovKit 0.6.1

  • 作者:
  • Sam Williams

MarkovKit

Swift中处理概率和马尔科夫模型的简单工具。

  • ProbabilityVector:将项目映射到概率的映射(总和为1)
  • ProbabilityMatrix:输入状态到输出状态的转换表
  • MarkovModel:输入和输出状态相同的ProbabilityMatrix。可以生成链。
  • HiddenMarkovModel:实现维特比算法以从观察序列中获得可能的隐藏状态序列

安装

在Podfile中

pod 'MarkovKit', '~> 0.6.0'

概率向量

感谢DictionaryLiteralConvertible,初始化向量化很简单

let vector: ProbabilityVector<String> = ["red": 0.25, "blue": 0.5, "green": 0.25]
let item = vector.randomItem()  // should return "blue" about 50% of the time

概率矩阵

概率矩阵是将输入状态映射到描述可能的输出状态的概率向量的映射。同样,它们可以使用字典字面量轻松初始化

let matrix: ProbabilityMatrix<Int, String> = [
    1: ["output1": 1]
    2: ["output2": 0.5, "output3": 0.5]
]

马尔科夫链

let model: MarkovModel<String> = [
    "x": ["y": 1],
    "y": ["x": 1],
]
let chain = model.generateChain(from: "x", maximumLength: 5)
// always returns ["x", "y", "x", "y", "x"]

要启动不带初始状态的链,必须给定初始概率

model.initialProbabilities = ["x": 1]
let newChain = model.generateChain(maximumLength: 5)

隐藏马尔科夫模型

let states = ["healthy", "sick"]
let initialProbabilities:ProbabilityVector<String> = ["healthy": 0.6, "sick": 0.4]

let transitionProbabilities:MarkovModel<String> = [
    "healthy":  ["healthy": 0.7, "sick": 0.3],
    "sick":     ["healthy": 0.4, "sick": 0.6],
]

// Note that the emission type isn't necessarily the same as the state type.
let emissionProbabilities: ProbabilityMatrix<String, String> = [
    "healthy":  ["normal": 0.5, "cold": 0.4, "dizzy": 0.1],
    "sick":     ["normal": 0.1, "cold": 0.3, "dizzy": 0.6],
]

let hmm = HiddenMarkovModel(states:states, 
    initialProbabilities: initialProbabilities, 
    transitionProbabilities: transitionProbabilities, 
    emissionProbabilities: emissionProbabilities)

let observations = ["normal", "cold", "dizzy"]
let prediction = hmm.calculateStates(observations)

// ["healthy", "healthy", "sick"]