Weka开发 -ZeroR源代码介绍(入门篇)
来源:互联网 发布:人类起源于非洲 知乎 编辑:程序博客网 时间:2024/05/16 01:20
首先提一下,ZeroR很多人以为是乱猜,实际是如果类别是离散值,就返回最有可能的类别,如果是连续值,则返回类别的平均值。
下面函数的前面两句话哪个分类器都有,就不说了。这个函数简单地让我不知道怎么讲了。m_Counts如果是离散(Nominal)的类别,就把它初始化为一个有类别数大小的一维数组,如果是类别是连续(Numeric)值,那就是一个值。
下面while循环,这种写法是枚举数据集中的每一个样本,如果是离散值,m_Counts相应的类别下标加上这个样本的权重(这里不用太深究到底什么是权重,你可以认为所有的样本权重都是1),如果是连续值,m_Counts加上类别值乘以这个样本的权重。
统计完每一个样本,如果是连续值,那么就用m_Counts除以总权重,其实这就是高中时学的加权平均的计算方法。如果是离散值,那就是类别出现最多(懒得去想weight的事了)的类别作为m_ClassValue。
public void buildClassifier(Instances instances) throws Exception
{
// can classifier handle the data?
getCapabilities().testWithFail(instances);
// remove instances with missing class
instances = new Instances(instances);
instances.deleteWithMissingClass();
double sumOfWeights = 0;
m_Class = instances.classAttribute();
m_ClassValue = 0;
switch (instances.classAttribute().type())
{
case Attribute.NUMERIC:
m_Counts = null;
break;
case Attribute.NOMINAL:
m_Counts = new double[instances.numClasses()];
for (int i = 0; i < m_Counts.length; i++)
{
m_Counts[i] = 1;
}
sumOfWeights = instances.numClasses();
break;
}
Enumeration enu = instances.enumerateInstances();
while (enu.hasMoreElements())
{
Instance instance = (Instance) enu.nextElement();
if (!instance.classIsMissing())
{
if (instances.classAttribute().isNominal())
{
m_Counts[(int) instance.classValue()] += instance.weight();
} else
{
m_ClassValue += instance.weight() * instance.classValue();
}
sumOfWeights += instance.weight();
}
}
if (instances.classAttribute().isNumeric())
{
if (Utils.gr(sumOfWeights, 0))
{
m_ClassValue /= sumOfWeights;
}
} else
{
m_ClassValue = Utils.maxIndex(m_Counts);
Utils.normalize(m_Counts, sumOfWeights);
}
}
分类一个样本,当然就是返回m_ClassValue值了(我希望这么简单的东西,你不至于还不知道是什么吧)
public double classifyInstance(Instance instance)
{
return m_ClassValue;
}
列出这个函数是感觉return (double[]) m_Counts.clone()这种写法的确是很不错,不用那么麻烦。
public double[] distributionForInstance(Instance instance) throws Exception
{
if (m_Counts == null)
{
double[] result = new double[1];
result[0] = m_ClassValue;
return result;
} else
{
return (double[]) m_Counts.clone();
}
}
- Weka开发 -ZeroR源代码介绍(入门篇)
- Weka开发[15]-ZeroR源代码介绍(入门篇)
- Weka开发 -OneR源代码介绍
- Weka开发 -J48源代码介绍
- weka中的zeroR算法
- weka之ZeroR
- Weka开发[14]-AdaBoost源代码介绍
- Weka开发[16]-OneR源代码介绍
- Weka开发[11]—J48源代码介绍
- 在Java中使用weka:ZeroR分类器
- Weka开发-- NBTree源码介绍
- weka入门(转)
- Weka开发——REPTree源代码分析
- Weka开发[8]-ID3源码介绍
- Weka开发 —KMeans源码介绍
- Weka开发 —KMeans源码介绍
- weka入门
- weka入门
- wpa_supplicant 的初始化
- 相同场景 但物体材料不同 但旋转同步
- word转成html
- dede中的php应用
- 改变自己命运的经典名言短语
- Weka开发 -ZeroR源代码介绍(入门篇)
- smartassembly的使用说明
- smartassembly的使用说明
- android wifi 移植记录
- 又在做管理
- 采用org.apache.tools.zip来进行zip包的解压缩,支持目录嵌套和中文名
- 第一个MeeGo Touch程序
- 在oracle中通过字段信息生成xml文件
- Java基础(1)-泛型