private void EM_Init (Instances inst)
throws Exception {
int i, j, k; // 由于EM算法对初始值较敏感,故选择run k means 10 times and choose best solution
SimpleKMeans bestK = null;
double bestSqE = Double.MAX_VALUE;
for (i = 0; i < 10; i++) {
SimpleKMeans sk = new SimpleKMeans();
sk.setSeed(m_rr.nextInt());
sk.setNumClusters(m_num_clusters);
sk.setDisplayStdDevs(true);
sk.buildClusterer(inst);
//KMeans中各个cluster的平方误差
if (sk.getSquaredError() < bestSqE) { bestSqE = sk.getSquaredError();
bestK = sk;
}
} /*************** KMeans Finds the best cluster number *****************/ // initialize with best k-means solution
m_num_clusters = bestK.numberOfClusters();
// 每个样本所在各个集群的概率
m_weights = new double[inst.numInstances()][m_num_clusters];
// 评估每个集群所对应的离散型属性的相关取值
30 m_model = new DiscreteEstimator[m_num_clusters][m_num_attribs];
// 每个集群所对应的连续性属性数所对应的相关取值(均值,标准偏差,样本权值(进行归一化))
m_modelNormal = new double[m_num_clusters][m_num_attribs][3];
// 每个集群所对应的先验概率
m_priors = new double[m_num_clusters];
// 每个集群所对应的中心点
Instances centers = bestK.getClusterCentroids();
// 每个集群所对应的标准差
Instances stdD = bestK.getClusterStandardDevs();
// ??? Returns for each cluster the frequency counts for the values of each nominal attribute
int [][][] nominalCounts = bestK.getClusterNominalCounts();
// 得到每个集群所对应的样本数
int [] clusterSizes = bestK.getClusterSizes(); for (i = 0; i < m_num_clusters; i++) {
Instance center = centers.instance(i);
for (j = 0; j < m_num_attribs; j++) { // 样本属性是离散型
if (inst.attribute(j).isNominal())
{
m_model[i][j] = new DiscreteEstimator(m_theInstances.attribute(j).numValues()
, true);
for (k = 0; k < inst.attribute(j).numValues(); k++) {
m_model[i][j].addValue(k, nominalCounts[i][j][k]);
}
}
//// 样本属性是连续型
else
{
double minStdD = (m_minStdDevPerAtt != null)? m_minStdDevPerAtt[j]: m_minStdDev;
double mean = (center.isMissing(j))? inst.meanOrMode(j): center.value(j);
m_modelNormal[i][j][0] = mean;
double stdv = (stdD.instance(i).isMissing(j))? ((m_maxValues[j] -
m_minValues[j]) / (2 * m_num_clusters)): stdD.instance(i).value(j);
if (stdv < minStdD)
{
stdv = inst.attributeStats(j).numericStats.stdDev;
if (Double.isInfinite(stdv)) {
stdv = minStdD;
}
if (stdv < minStdD) {
stdv = minStdD;
}
}
if (stdv <= 0) {
stdv = m_minStdDev;
} m_modelNormal[i][j][1] = stdv;
m_modelNormal[i][j][2] = 1.0;
}
}
} for (j = 0; j < m_num_clusters; j++) {
// 计算每个集群的先验概率
m_priors[j] = clusterSizes[j];
}
Utils.normalize(m_priors);
}

Weka中EM算法详解的更多相关文章

  1. EM算法详解

    EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...

  2. css中em单位详解,说明

    em详解      em可以理解成“倍”. em会以父级元素中所设置的字体像素值为基准值进行成倍放大: 字体大小=(父级元素中的字体像素 * em的值) 例: 网页部分代码如下: 1.我现在没有在父级 ...

  3. 从最大似然函数 到 EM算法详解

    极大似然算法 本来打算把别人讲的好的博文放在上面的,但是感觉那个适合看着玩,我看过之后感觉懂了,然后实际应用就不会了.... MLP其实就是用来求模型参数的,核心就是“模型已知,求取参数”,模型的意思 ...

  4. javascript 中合并排序算法 详解

    javascript 中合并排序算法 详解 我会通过程序的执行过程来给大家合并排序是如何排序的...  合并排序代码如下: <script type="text/javascript& ...

  5. SVD在推荐系统中的应用详解以及算法推导

    SVD在推荐系统中的应用详解以及算法推导     出处http://blog.csdn.net/zhongkejingwang/article/details/43083603 前面文章SVD原理及推 ...

  6. BM算法  Boyer-Moore高质量实现代码详解与算法详解

    Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...

  7. kmp算法详解

    转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...

  8. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  9. [转] KMP算法详解

    转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的K ...

随机推荐

  1. (六) 6.2 Neurons Networks Backpropagation Algorithm

    今天得主题是BP算法.大规模的神经网络可以使用batch gradient descent算法求解,也可以使用 stochastic gradient descent 算法,求解的关键问题在于求得每层 ...

  2. 一天一个Java基础——通过异常处理错误

    <Thinking in Java>上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来. 一.创建自定义异常 package Exception; class SimpleExc ...

  3. vs2012 Silverlight项目签名报错异常的处理方式

    项目刚生成为vs2012,原先的Silverlight项目,点击签名,竟然有问题,给上个截图 悲剧了,没有签名证书,就无法实现自动更新,想着vs2012可能几个更新没有安装吧,但是自己手动下载竟然一两 ...

  4. MongoDB配置客户端

    新建mongodb27017.bat文件 内容为: mongo 127.0.0.1:27017/admin 连接成功! 来自为知笔记(Wiz)

  5. MySQL与Oracle 差异比较之五存储过程&Function

    存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(   id_fac ...

  6. mysql 插入汉字出现问号 解决方法

    mysql中文显示乱码或者问号是因为选用的编码不对或者编码不一致造成的,最简单的方法就是修改mysql的配置文件my.cnf.在[mydqld]和[client]段加入 default-charact ...

  7. mybatis注解详解

    首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则jar会根据你的pom配 ...

  8. Drupal如何实现类的自动加载?

    Drupal通过spl_autoload_register()注册类加载器实现自动加载: function _drupal_bootstrap_database() { // ... .... spl ...

  9. Page 16 Exercises 1.2.3 -------Introduction to Software Testing (Paul Ammann and Jeff Offutt)

    Below are four faulty programs. Each includes a test case that results in failure. Answer the follow ...

  10. Python中list的实现

    原文链接这篇文章介绍了Python中list是如何实现的.在Python中list特别有用.让我们来看下list的内部是如何实现的.来看下面简单的程序,在list中添加一些整数并将他们打印出来. &g ...