本文主要是介绍利用动态规划与Manacher 算法求解最长回文子串,LeetCode链接
动态规划
问题分析
对于最长回文子串的求解可以抽象为一个动态规划的多阶段决策过程。例如,对于对于字符串S”ababa”回文判断,如果我们知道该回文字符串的子串s”bab”为回文字符串的话,那么显然对于字符串S的判断,只需要判断S左右两端字符是否一致即可。若S左右两端的字符相同,则在s为回文串的前提下,S为回文字符串;若两端字符不相同,则S不是回文字符串。
本文主要是介绍如何利用sklearn框架中LatentDirichletAllocation类完成LDA模型的训练。
LDA是一个无监督的学习模型,它假设每个文档包含多个主题,文档中的每个主题都是基于词的概率分布。作为一个基于贝叶斯网络的文档生成模型,LDA刻画的是文档生成的一个概率化过程。
LDA的输入由一组文档D组成的词料库。LDA的输出包括文档主题分布$\theta$和主题中的词语的分布$\phi$。这里的$\theta$和$\phi$都假设服从多项式分布。为让分布更平滑,再假设这两个参数的先验分布服从狄利克雷分布,参数分别为$\alpha$和$\beta$。因为狄利克雷分布是多项式分布的共轭先验分布,所以假设该多项式分布的先验服从狄利克雷分布可以极大简化统计计算的过程。狄利克雷分布中有多个参数,再LDA中利用狄利克雷分布时,大多将参数设为同一个数值,这种设为同一个数值的狄利克雷分布称为对称的狄利克雷分布。以下时LDA模型生成一篇文档的方式。
本文的内容以基于Jaccard Distance的K-Means算法为基础,将原始K-Means算法随机选择初始向量的方法修改为K-Means++的概率选择方法,同样本文K-Means++算法的距离计算同样是基于Jaccard Distance距离的。
原始K-Means算法通过贪心策略,迭代化求解最小平方化误差(K-Means算法的求解过程实际上就是求解最小平方化误差)。但是由于其初始均值向量的选择具有随机性、不确定性,其算法不够稳定,有可能会造成迭代次数较多,算法时间复杂度较高。针对K-Means算法的问题,David Arthur等人提出了K-Means++算法.
K-Means++算法与K-Means算法的主要差异在于初始均值的选取。选取初始均值向量算法如下: