Python hmmlearn 异常中的混淆矩阵是怎么表示的

preface:做着最近的任务对数据处理,做些简单的提特征用机器学习算法跑下程序得出结果,看看哪些特征的组合较好这一系列流程必然要用到很多函数,故将自己常用函数记录上应该说这些函数基本上都会用到,像是数据预处理处理完了后特征提取、降维、训练预测、通过混淆矩阵看分类效果,得絀报告

从数据集开始,提取特征转化为有标签的数据集转为向量。拆分成训练集和测试集这里不多讲,在上一篇博客中谈到用StratifiedKFold()函数即可在训练集中有data和target开始。

主要使用sklearn的preprocessing函数中的normalize()函数默认参数为l2范式,对特征列进行正则处理即每一个样例,处理标签每行的平方和为1.

使用sklearn的函数中SelectKBest()函数和chi2()函数,若是用词袋提取了很多维的稀疏特征有必要使用卡方选取前k个有效的特征。

主要用来观察前多少个特征是主要特征并且画图。看看前多少个特征占据主要部分

可用多种机器学习算法,如SVM, LR, RF, GBDT等等很多其中像SVM需要调参数的,有专门调试参數的函数如StratifiedKFold()(见前几篇博客)以达到最优。

主要是针对预测出来的结果和原来的结果对比,算出混淆矩阵不必自己计算。其对每个類别的混淆矩阵都计算出来了并且labels参数默认是排序了的。

主要通过sklearn.metrics函数中的classification_report()函数针对每个类别给出详细的准确率、召回率和F-值这三个參数和宏平均值,用来评价算法好坏另外ROC曲线的话,需要是对二分类才可以多类别似乎不行。

}

原创如转载请注明出处

HMM隐式马爾可夫,在语音识别里面有着很重要的应用在视频识别里,也有很多人效仿使用之

虽然少,但是还是有的我们把目光投向scikit-learn库,scikit-learn是一個很好用的机器学习的第三方库

但是里面的HMM模块是存在问题的,而且也被遗弃很久有网上别处的原文如下:

比如我想用fit函数去训练一個HMM模型

我在这里特意给出一个不连续的观察状态 0,1,2,3,9

我在这里对以上的代码做一些说明:

HMM训练时候的这个fit训练函数传入的是一个list,即一组观察序列也就说不能写成 fit(X,n_iter=100)。

我们写成下面的样子即可

一切都按预想的编写,但是在运行时候则会出现这样的控制台信息:

即HMM要求所输入的input必须是连续的整数才行而我们在训练HMM的时候知道,某一个观察序列并不一定会出现所有的预设的状态。

还好这个世界上有很多的大牛他们不断完善代码,

再次运行上面的代码不再发生错误,能够训练并得到估计的结果:

对结果进行简要说明-6.3344是得到的评估的值,是LOG嘚结果所以是负的,越接近0表示越符合当前的HMM模型。

另外一个需要注意的地方就是在这个hmm模型的ctor(读see-tor,表示constructor构造函数)里面没有预留n_symbols这个参数写代码的时候建议在训练 fit 函数执行前单独给出。如果不给出的话则需要保证input里面的整数是连续的,即X2这种(X1不行,因为9與01,23不构成连续),但是如果在训练前给出了n_symbols的值之后(model.n_symbols=10)X1也变成了合法的输入。当然啦上面这句话成立的前提就是,你已经按替换了HMM的代码即 fix 过的代码。如果用原来的库里面的HMM代码的话写了 n_symbols 也是徒劳,即必须严格保证连续(而那不是我们想要的)

}
#labels表示你不同类别的代号比如这裏的demo中有13个类别
}

我要回帖

更多关于 hmmlearn 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信