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算法详解的更多相关文章
-
EM算法详解
EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...
-
css中em单位详解,说明
em详解 em可以理解成“倍”. em会以父级元素中所设置的字体像素值为基准值进行成倍放大: 字体大小=(父级元素中的字体像素 * em的值) 例: 网页部分代码如下: 1.我现在没有在父级 ...
-
从最大似然函数 到 EM算法详解
极大似然算法 本来打算把别人讲的好的博文放在上面的,但是感觉那个适合看着玩,我看过之后感觉懂了,然后实际应用就不会了.... MLP其实就是用来求模型参数的,核心就是“模型已知,求取参数”,模型的意思 ...
-
javascript 中合并排序算法 详解
javascript 中合并排序算法 详解 我会通过程序的执行过程来给大家合并排序是如何排序的... 合并排序代码如下: <script type="text/javascript& ...
-
SVD在推荐系统中的应用详解以及算法推导
SVD在推荐系统中的应用详解以及算法推导 出处http://blog.csdn.net/zhongkejingwang/article/details/43083603 前面文章SVD原理及推 ...
-
BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
-
kmp算法详解
转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...
-
机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
-
[转] KMP算法详解
转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的K ...
随机推荐
-
[Django]数据批量导入
前言:历经一个月的复习,考试终于结束了.这期间上班的时候有研究了Django网页制作过程中,如何将数据批量导入到数据库中. 这个过程真的是惨不忍睹,犯了很多的低级错误,这会在正文中说到的.再者导入数据 ...
-
VBA常用函数
字符串相关: ①截取字符串: 从字符串左侧开始:Left(string,length) 从字符串右侧开始:Right(string,length) 从字符串中间开始:mid(string,start, ...
-
四大跨平台的APP分析
转载:http://blog.csdn.net/kenkao/article/details/50678269
-
c++设计模式之状态模式
一. 状态模式 定义:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 实现方式1: workstate 状态抽象类 workstate1 状态实现类1 workstate2 ...
-
[Django实战] 第5篇 - 用户认证(修改密码)
上一篇我们实现了用户认证系统的登录模块,这一篇实现修改密码模块. 同样地,我们首先得给修改密码创建表单(forms.py): class ChangepwdForm(forms.Form): oldp ...
-
与webview打交道踩过的坑
随着HTML5被越来越多的用到web APP的开发当中,webview这一个神器便日渐凸显出重要地位.简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码 ...
-
深入浅出Tomcat系列
原本打算一篇文章就发了的,无奈文章太长,阅读压力较大.为了让阅读体验更好一些,还是分多篇吧,大概6篇. 下面是这个主题的目录: 深入浅出Tomcat/1- 来历和配置文件 深入浅出Tomcat/2 - ...
-
java操作数据库:增删改查
不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...
-
Java 8 新特性-菜鸟教程 (6) -Java 8 Optional 类
Java 8 Optional 类 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容 ...
-
【代码笔记】Web-HTML-CSS
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...