欢迎来到天天文库
浏览记录
ID:59405079
大小:366.00 KB
页数:46页
时间:2020-05-27
《分类算法Java代码分析.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Weak.classifiers包中含有用于分类和数值预测的大部分算法的实现。这个包中最重要的是类是Classifier,它定义了任何用于分类或数值预测的学习方案的通用结构。Classifier含有三个方法,buildClassfier(),classifyInstance(),distributionForInstance().学习算法用Classifier的子类代表,因此,自动继承这三个方法。每种方案都会根据构建分类器以及它对实例进行分类的具体方式对这三个方法进行重新定义。首先先解释一下算法名字,很多人很奇怪为什么叫IB1,IBK,IBInstance-Based的缩写,但按
2、JiaweiHan书上所写,KNN其实是Instance-basedlearning(也被称为Lazinglearning)中一种,他还讲解了基于案例的推理(Case-basedreasoning)。算法其实是KNN,但是作者论文的名字是Instance-basedLearningAlgorithms。 我先介绍一下IB1,IB1就是只找一个邻居。我们还是先看buildClassifier。publicvoidbuildClassifier(Instancesinstances)throwsException{ if(instances.classAttribut
3、e().isNumeric()){ thrownewException("IB1:Classisnumeric!"); }//类别属性是数值型的话,报错。 if(instances.checkForStringAttributes()){ thrownewUnsupportedAttributeTypeException( "IB1:Cannothandlestringattributes!"); }//检查其他属性,如果是字符串String类型,报错:不能处理 //Throwawaytraininginstancesw
4、ithmissingclass缺失类别属性的实例扔掉 m_Train=newInstances(instances,0,instances.numInstances());m_Train.deleteWithMissingClass();//Instance是一个类,Createemptyinstancewiththreeattributevalues m_MinArray=newdouble[m_Train.numAttributes()];//定义一个数组,m_MinArray,数据类型是double型,共有m_Train.numAttributes()个数据。 m_
5、MaxArray=newdouble[m_Train.numAttributes()]; for(inti=0;i6、x((Instance)enu.nextElement());//更新属性的最大最小值 }} 是的,KNN也有buildClassifier,听起来蛮奇怪的。第二个if,IB1不能对字符串属性进行学习,因为这种属性不好定义距离,比如a和ab是0.5还是1呢?然类别缺失的样本抛弃。m_MinArray和m_MaxArray分别保存每一个属性的最小值和最大值。最下面是对样本进行循环,找出最大值,最小值,updataMinMax代码如下:privatevoidupdateMinMax(Instanceinstance){ for(intj=0;j7、mAttributes();j++){//有多少个属性就循环多少次 if((m_Train.attribute(j).isNumeric())&& (!instance.isMissing(j))){//这个属性的第j个值是数值型,并且,实例不缺失这个属性值 if(Double.isNaN(m_MinArray[j])){ m_MinArray[j]=instance.value(j);//value()是要返
6、x((Instance)enu.nextElement());//更新属性的最大最小值 }} 是的,KNN也有buildClassifier,听起来蛮奇怪的。第二个if,IB1不能对字符串属性进行学习,因为这种属性不好定义距离,比如a和ab是0.5还是1呢?然类别缺失的样本抛弃。m_MinArray和m_MaxArray分别保存每一个属性的最小值和最大值。最下面是对样本进行循环,找出最大值,最小值,updataMinMax代码如下:privatevoidupdateMinMax(Instanceinstance){ for(intj=0;j7、mAttributes();j++){//有多少个属性就循环多少次 if((m_Train.attribute(j).isNumeric())&& (!instance.isMissing(j))){//这个属性的第j个值是数值型,并且,实例不缺失这个属性值 if(Double.isNaN(m_MinArray[j])){ m_MinArray[j]=instance.value(j);//value()是要返
7、mAttributes();j++){//有多少个属性就循环多少次 if((m_Train.attribute(j).isNumeric())&& (!instance.isMissing(j))){//这个属性的第j个值是数值型,并且,实例不缺失这个属性值 if(Double.isNaN(m_MinArray[j])){ m_MinArray[j]=instance.value(j);//value()是要返
此文档下载收益归作者所有