java分类算法代码,分类算法java代码分析

41528d3028836879cd698677c3999917.gif分类算法java代码分析

Weak.classifiers 包中含有用于分类和数值预测的大部分算法的实现。这个包中最重要的是类是 Classifier,它定义了任何用于分类或数值预测的学习方案的通用结构。Classifier 含有三个方法,buildClassfier(),classifyInstance(),distributionForInstance().学习算法用 Classifier 的子类代表,因此,自动继承这三个方法。每种方案都会根据构建分类器以及它对实例进行分类的具体方式对这三个方法进行重新定义。首先先解释一下算法名字,很多人很奇怪为什么叫 IB1,IBK,IB Instance-Based的缩写,但按 Jiawei Han 书上所写,KNN 其实是 Instance-based learning(也被称为 Lazing learning)中一种,他还讲解了基于案例的推理(Case-based reasoning)。算法其实是 KNN,但是作者论文的名字是 Instance-based Learning Algorithms。 我先介绍一下 IB1,IB1 就是只找一个邻居。我们还是先看buildClassifier。 public void buildClassifier(Instances instances) throws Exception { if (instances.classAttribute().isNumeric()) { throw new Exception(“IB1: Class is numeric!“); } //类别属性是数值型的话,报错。if (instances.checkForStringAttributes()) { throw new UnsupportedAttributeTypeException( “IB1: Cannot handle string attributes!“); } //检查其他属性,如果是字符串 String 类型,报错:不能处理 // Throw away training instances with missing class 缺失类别属性的实例扔掉m_Train = new Instances(instances, 0, instances.numInstances()); m_Train.deleteWithMissingClass(); //Instance 是一个类,Create empty instance with three attribute valuesm_MinArray = new double[m_Train.numAttributes()];//定义一个数组,m_MinArray ,数据类型是 double 型,共有m_Train.numAttributes()个数据。m_MaxArray = new double[m_Train.numAttributes()]; for (int i = 0; i m_MaxArray[j]) { m_MaxArray[j] = instance.value(j); //如果这个属性值大于之前定义的最大属性值,将其值赋给最大属性值。} } } } } } Double.isNaN(m_MinArray[j])判断是不是 m_MinArray 和 m_MaxArray 已经赋值过了,else,如果可以更新 min 和更新 max。 再看一下 classifyInstance 函数: public double classifyInstance(Instance instance) throws Exception { //对待分类实例进行分类的过程。if (m_Train.numInstances() == 0) { throw new Exception(“No training instances!“); //实例数量为0,报错} double distance, minDistance = Double.MAX_VALUE,//声明并且初始化classValue = 0;// classValue():实例的类别属性Returns an instance s class value in internal at updateMinMax(instance); Enumeration enu = m_Train.enumerateInstances(); // enumerateInstances():Returns an enumeration (列举,枚举 )of all the attributes.while (enu.hasMoreElements()) { Instance trainInstance = (Instance) enu.nextElement(); if (!trainInstance.classIsMissing()) { distance = distance(instance, trainInstance); //distance方法在后面有说明if (distance 0) } // Compute the number of attributes that contribute // to each prediction m_NumAttributesUsed = 0.0; for (int i = 0; i 0) } } } 同样很简单,updateMinMax,如果超出窗口大小,循环删除超过窗口大小的第一个样本。 这里注意 IBk 没有实现 classifyInstance,它只实现了 distributionForInstances: public double[] distributionForInstance(Instance instance) throws Exception { if (m_Train.numInstances() == 0) { throw new Exception(“No training instances!“); } if ((m_WindowSize > 0) boolean deletedInstance = false; while (m_Train.numInstances() > m_WindowSize) { m_Train.delete(0); } //rebuild datastructure KDTree currently can t delete if (deletedInstance == true) m_NNSearch.setInstances(m_Train); } // Select k by cross validation if (!m_kNNValid } m_NNSearch.addInstanceInfo(instance); Instances neighbours = m_NNSearch.kNearestNeighbours(instance, m_kNN); double[] distances = m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值