Hello, Weka

2023-05-16

转自http://dreamhead.blogbus.com/logs/16813833.html

Weka,是一个用Java编写的数据挖掘软件。数据挖掘,从字面上来看,它是一个从数据中找寻有用信息的过程,不过,它涉及的内容很多,所以,这里借用“分类”这一面来说事。
分类,从名称上来看,再简单不过了,给你一样东西,给它分个类。你如何知道怎么分类呢?显然,这是基于你已有的经验。对于计算机而言,这种经验从何而来呢?只有让人来告诉它,也就是说,我们要拿一批数据训练计算机,经过训练的计算机,便具备了一定的识别能力,就可以完成一些简单的分类工作。现实中,可以用到分类的机会有很多,比如我之前,曾经参与过的一个项目就是用这种方法来做车辆的识别。
下面便是一段使用Weka完成一段分类程序。
import weka.classifiers.Classifier;
import weka.classifiers.bayes.NaiveBayesMultinomial;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.StringToWordVector;
public class Main {
  private static final String GOOD = "G";
  private static final String BAD = "B";
  private static final String CATEGORY = "category";
  private static final String TEXT = "text";
  private static final int INIT_CAPACITY = 100;
  private static final String[][] TRAINING_DATA = {
    {"Good", GOOD},
    {"Wonderful", GOOD},
    {"Cool", GOOD},
    {"Bad", BAD},
    {"Disaster", BAD},
    {"Terrible", BAD}
  };
  private static final String TEST_DATA = "Good";
  private static Filter filter = new StringToWordVector();
  private static Classifier classifier = new NaiveBayesMultinomial();
  public static void main(String[] args) throws Exception {
    FastVector categories = new FastVector();
    categories.addElement(GOOD);
    categories.addElement(BAD);
    FastVector attributes = new FastVector();
    attributes.addElement(new Attribute(TEXT, (FastVector)null));
    attributes.addElement(new Attribute(CATEGORY, categories));
    Instances instances = new Instances("Weka", attributes, INIT_CAPACITY);
    instances.setClassIndex(instances.numAttributes() - 1);
    for (String[] pair : TRAINING_DATA) {
      String text = pair[0];
      String category = pair[1];
      Instance instance = createInstanceByText(instances, text);
      instance.setClassValue(category);
      instances.add(instance);
    }
    filter.setInputFormat(instances);
    Instances filteredInstances = Filter.useFilter(instances, filter);
    classifier.buildClassifier(filteredInstances);
    // Test
    String testText = TEST_DATA;
    Instance testInstance = createTestInstance(instances.stringFreeStructure(), testText);
    double predicted = classifier.classifyInstance(testInstance);
    String category = instances.classAttribute().value((int)predicted);
    System.out.println(category);
  }
  private static Instance createInstanceByText(Instances data, String text) {
    Attribute textAtt = data.attribute(TEXT);
    int index = textAtt.addStringValue(text);
    Instance instance = new Instance(2);
    instance.setValue(textAtt, index);
    instance.setDataset(data);
    return instance;
  }
  private static Instance createTestInstance(Instances data, String text) throws Exception {
    Instance testInstance = createInstanceByText(data, text);
    filter.input(testInstance);
    return filter.output();
  }
}
这个程序分成两个大部分,前半部分用以训练分类器,后半部分则是测试这个分类器。
训练分类器,我们要做的包括,选择分类算法和准备训练数据。在Weka中,每一种分类算法都是Classifier的一个子类,这样的话,就可以在不改变其它部分的情况下,很容易的修改分类算法。
其实,稍微了解一下这方面的知识的人,都会知道,分类算法固然重要,但真正决定一个分类器本事大小的,是用以训练的数据。想要得到一个好的分类器,少不了不断调整训练数据和不断的训练。这同人类认识问题是一样的,经得多,见得广,才有更好的分辨能力。

在Weka中,用以训练的数据就是Instances,顾名思义,这是Instance的复数,显而易见,单独的一个训练数据就是Instance,而Instances这个类的存在,可以把Instance的一些公共的属性放到一起。在这里,我们可以看到,为了用文本作为训练数据,我们会把文本转换为Instance。同样,测试分类器的时候,我们也会把文本转换为一个Instance,然后再进行分类。
除此之外,这里还有一个Filter的概念,同常见的filter概念类似,它给了我们一个进行正式处理之前,对数据进行处理的机会。在这里,主要是对Instance做一些相关的变换。
当我们得到一个分类器之后,就可以利用这个分类器进行分类了,其中,最关键的代码是
    classifier.classifyInstance(testInstance);
这段代码返回的是根据分类算法计算结果得到的一个相似度,我们可以利用这个值来估计我们测试用的数据应该属于哪个分类。
从代码上来说,这段代码本身并不复杂。正如前面所说,一个好的分类器是需要让数据帮忙的。所以,换几个测试数据,你就会发现,这段代码中实现的分类器一点都不强大。如果希望它强大起来,扩展训练数据是一个必然的结果。不过,对于这篇blog而言,这不重要,因为我们只是要和Weka问个好,进一步的工作,还需要进一步的努力。

转载于:https://www.cnblogs.com/ysjxw/archive/2008/05/12/1193735.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hello, Weka 的相关文章

  • linux C++ hello world

    我是Java程序员 xff0c 没怎么写过C 43 43 以前在windows下使用vs写过hello world 最近有个程序需要使用C 43 43 实现 我想在linux下写 xff0c 记录一下过程 安装gcc 查看gcc版本 gcc
  • 我的2017-搭建个人网站,hello PHP(2)

    学习一门语言 xff0c 例行惯例 xff0c 先来个 hello world 搭建好了php环境 xff0c 然后就可以运行php了 xff0c 首先用一种最简单的方法 xff0c 在wamp安装位置 xff08 相应的文件夹 xff09
  • 出现insmod: can't insert 'kernel_hello.ko': invalid module format解决方法

    出现insmod can 39 t insert 39 kernel hello ko 39 invalid module format解决方法 xff1a 问题 xff1a gt ls info proc tmp apps init ro
  • 写出C语言的第一个程序“Hello World”

    这里写自定义目录标题 写出C语言的第一个程序 Hello World 写出C语言的第一个程序 Hello World 下面展示一些 内联代码片 span class token comment A code block span span
  • pybind11 的 Hello World

    pybind11是一个轻量级的仅头文件库 xff0c 主要用于创建现有C 43 43 代码的Python绑定 Github地址 xff1a https github com pybind pybind11 官方文档 xff1a https
  • 树莓派linux驱动学习之hello world

    http blog csdn net hcx25909 article details 16860055 最近想学习一下linux驱动 xff0c 看了一些书和教学视频 xff0c 大概了解了一下 xff0c 不过要想深入 xff0c 肯定
  • 03 SCons 自动构建工具编译hello.c

    安装mingw 我的电脑已经安装过 xff0c 下面主要说下配置环境 我们将mingw的路径和scons的虚拟环境路径添加到临时的环境变量 这样做的好处是使用的时候添加 xff0c 不与其它版本的全局的环境变量冲突 后期我编译ARM程序时把
  • 我的2017-搭建个人网站,hello PHP(2)

    学习一门语言 xff0c 例行惯例 xff0c 先来个 hello world 搭建好了php环境 xff0c 然后就可以运行php了 xff0c 首先用一种最简单的方法 xff0c 在wamp安装位置 xff08 相应的文件夹 xff09
  • ICE C++ Hello World

    ICE C 43 43 Hello World实例教程 1 概述 本文演示了如何编写一个最简单的C 43 43 ICE Internet Communications Engine 应用程序 xff0c 包括必要环境的安装 该应用程序包含客
  • Linux静态库与动态库示例之hello world

    Linux静态库与动态库示例之hello world 1 Linux动态库与静态库的基本概念 linux下有两种库 动态库和静态库 共享库 xff0c 二者的不同点在于代码被载入的时刻不同 静态库的代码在编译过程中已经被载入可执行程序 因此
  • STM32 汇编程序——串口输出 Hello world

    STM32 汇编程序 串口输出 Hello world 一 USART介绍二 Keil项目 xff08 一 xff09 新建项目 xff08 二 xff09 Hello s代码 xff08 三 xff09 编译生成hex文件 三 电路接法四
  • Linux:Hello World 模块

    前言 Linux 系统为应用程序提供了功能强大且容易扩展的 API xff0c 但在某些情况下 xff0c 这还远远不够 与硬件交互或进行需要访问系统中特权信息的操作时 xff0c 就需要一个内核模块 下面从 Hello World 模块来
  • Quinlan C4.5算法中如何计算数值属性的阈值?

    我试图找出 C4 5 算法如何确定数字属性的阈值 我研究过但无法理解 在大多数地方我都找到了这些信息 首先根据所考虑的属性 Y 的值对训练样本进行排序 这些值的数量有限 因此让我们按排序顺序将它们表示为 v1 v2 vm vi 和 vi 1
  • 如何在 weka 中使用 JSON 文件

    I have a JSON file and want to open the data in weka but when I do I get the following error 环顾四周邮件列表 有一些关于 JSON 的问题 但是
  • 具有非常大矩阵的 K 均值

    我必须在一个非常大的矩阵 大约 300 000x100 000 个值 超过 100Gb 上执行 k 均值聚类 我想知道我是否可以使用 R 软件或 weka 来执行此操作 我的计算机是一台多处理器 具有 8GB 内存和数百 GB 可用空间 我
  • Weka中的堆叠算法是什么?它实际上是如何运作的?

    基础分类器的结果是由投票系统选择的 然后元分类器在输入时实际上得到了什么 整个分类器还是只是错误分类的分类器 如果可以用像这个链接这样的简单示例来解释整个机制 那将会很有帮助Weka classifiers meta vote 中的多数投票
  • WEKA 生成的模型似乎无法预测给定属性索引的类别和分布

    Overview 我正在使用 WEKA API 3 7 10 开发者版本 来使用我预制的 model files 我制作了 25 个模型 五种算法的五个结果变量 J48决策树 http weka sourceforge net doc de
  • 如何在 weka 中表示用于分类的文本?

    您能告诉我如何在 weka 中表示文本分类的属性或类吗 我可以使用什么属性进行分类 词频还是仅词 ARFF 格式的可能结构是什么 你能给我几行该结构的例子吗 预先非常感谢您 最简单的替代方法之一是从 ARFF 文件开始解决二类问题 例如 r
  • 如何在java中使用StringToWordVector(weka)?

    这是我的arff文件 relation hamspam attribute text string attribute class ham spam data good ham very good ham bad spam very bad
  • 如何在weka中连接mysql数据库?

    我想在 weka 中使用我的 mysql 数据库来分析数据 我下载 mysql connector java 5 0 8 bin jar 并将其放入程序文件文件夹中的 weka 文件夹中 并将此路径添加到系统变量路径中 但是当我打开 wek

随机推荐