当前位置: 首页 > news >正文

机器学习:eclipse中调用weka的Classifier分类器代码Demo

  weka中实现了很多机器学习算法,不管实验室研究或者公司研发,都会或多或少的要使用weka,我的理解是weka是在本地的SparkML,SparkML是分布式的大数据处理机器学习算法,数据量不是很大的时候,使用weka可以模拟出很好的效果,决定使用哪个模型,然后再继续后续的数据挖掘工作。

  下面总结一个eclipse中调用weka的Classifier分类器代码的Demo,通过这个实例,可以进一步跟踪分类算法的原理,查看weka源码,下一节中,介绍最简单的IB1(1NN)算法源码的具体分析。

  以下是一个调用各种IB1分类器的过程,下一节介绍下IB1算法的源码分析。

package mytest;

import java.io.File;

import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.lazy.IB1;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffLoader;
//import wlsvm.WLSVM;

public class SimpleClassification {//分类器

    public static void main(String[] args) {
        Instances ins = null;
        Classifier cfs = null;
        try {
            File file = new File("E:\\Develop/Weka-3-6/data/contact-lenses.arff");
//            File file = new File("E:\\yuce/data.csv");
            ArffLoader loader = new ArffLoader();
            loader.setFile(file);
            ins = loader.getDataSet();

            // 在使用样本之前一定要首先设置instances的classIndex,否则在使用instances对象是会抛出异常
            ins.setClassIndex(ins.numAttributes() - 1);
            

            cfs = new IB1();

//            参数设置
//            String[] options=weka.core.Utils.splitOptions("-S 0 -K 2 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 40.0 -C 1.0 -E 0.0010 -P 0.1 -B 0");
//            cfs.setOptions(options);
            
            
            Instance testInst;
            Evaluation testingEvaluation = new Evaluation(ins);
            int length = ins.numInstances();
            for (int i = 0; i < length; i++) {
                testInst = ins.instance(i);
                // 通过这个方法来用每个测试样本测试分类器的效果
                double predictValue = testingEvaluation.evaluateModelOnceAndRecordPrediction(cfs,
                        testInst);
                
                System.out.println(testInst.classValue()+"--"+predictValue);
            }

            System.out.println("分类器的正确率:" + (1 - testingEvaluation.errorRate()));

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

 步骤的详细解释:

  1)arff文件中读取数据集,并解析到数据结构Instances 里。

  2) 创建一个分类器 new IB1();

  3)设置参数等操作  splitOptions  并且 设置决策属性,一般是最后一个属性: ins.setClassIndex(ins.numAttributes() - 1);

  4)创建一个评估器new Evaluation(ins)

  5)交叉验证,并输出测试样本的分类结果及评价参数。testingEvaluation.evaluateModelOnceAndRecordPrediction(cfs, testInst);

 

data数据集:

@relation contact-lenses

@attribute age             {young, pre-presbyopic, presbyopic}
@attribute spectacle-prescrip    {myope, hypermetrope}
@attribute astigmatism        {no, yes}
@attribute tear-prod-rate    {reduced, normal}
@attribute contact-lenses    {soft, hard, none}

@data
%
% 24 instances
%
young,myope,no,reduced,none
young,myope,no,normal,soft
young,myope,yes,reduced,none
young,myope,yes,normal,hard
young,hypermetrope,no,reduced,none
young,hypermetrope,no,normal,soft
young,hypermetrope,yes,reduced,none
young,hypermetrope,yes,normal,hard
pre-presbyopic,myope,no,reduced,none
pre-presbyopic,myope,no,normal,soft
pre-presbyopic,myope,yes,reduced,none
pre-presbyopic,myope,yes,normal,hard
pre-presbyopic,hypermetrope,no,reduced,none
pre-presbyopic,hypermetrope,no,normal,soft
pre-presbyopic,hypermetrope,yes,reduced,none
pre-presbyopic,hypermetrope,yes,normal,none
presbyopic,myope,no,reduced,none
presbyopic,myope,no,normal,none
presbyopic,myope,yes,reduced,none
presbyopic,myope,yes,normal,hard
presbyopic,hypermetrope,no,reduced,none
presbyopic,hypermetrope,no,normal,soft
presbyopic,hypermetrope,yes,reduced,none
presbyopic,hypermetrope,yes,normal,none

data详细分析:

  1)@relation contact-lenses  是表名

  2)@attribute age {young, pre-presbyopic, presbyopic} 是属性名和属性类型

  3)@data   是数据集,一个数组的形式。

 

若data是cvs的格式,weka也支持,最好使用weka的tools工具转化为arff格式的数据集。

 

输出结果为:

 

 

转置请注明出处:http://www.cnblogs.com/rongyux/

转载于:https://www.cnblogs.com/rongyux/p/5367191.html

相关文章:

  • 线程同步工具(一)控制并发访问资源
  • Solr schema编写指导
  • Azkaban的Web Server源码探究系列14:创建Project
  • 成都Uber优步司机奖励政策(4月11日)
  • Tomcat6.0数据源配置
  • 同步和Java内存模型(四)有序性
  • git命令的简单使用
  • lintcode:买卖股票的最佳时机 I
  • PHP处理一个5G文件,使用内存512M的,数据为整形,从大到小排序,优化排序算法...
  • c++的this指针
  • CM android的CMUpdater分析(二)
  • Saving HDU hdu
  • activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)
  • Webview组件和HTML的介绍
  • [一句秒懂]高仿QQ底部小红点弹簧效果
  • 【5+】跨webview多页面 触发事件(二)
  • docker-consul
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java面向对象及其三大特征
  • mysql常用命令汇总
  • PHP 的 SAPI 是个什么东西
  • Phpstorm怎样批量删除空行?
  • React-redux的原理以及使用
  • spring学习第二天
  • Web Storage相关
  • webgl (原生)基础入门指南【一】
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 闭包--闭包作用之保存(一)
  • 编写高质量JavaScript代码之并发
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于HAProxy的高性能缓存服务器nuster
  • 每天一个设计模式之命令模式
  • 世界上最简单的无等待算法(getAndIncrement)
  • 温故知新之javascript面向对象
  • 小程序测试方案初探
  • Nginx实现动静分离
  • NLPIR智能语义技术让大数据挖掘更简单
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​iOS实时查看App运行日志
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #define、const、typedef的差别
  • #QT(串口助手-界面)
  • (003)SlickEdit Unity的补全
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740