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 的相关文章

  • 我的2017-搭建个人网站,hello PHP(2)

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

    代码如下 xff1a lt DOCTYPE html gt lt html gt lt head gt lt script src 61 34 https cdn jsdelivr net npm phaser 64 3 15 1 dist
  • [python]输出“hello 姓名”

    print 34 hello tianxinyao 34
  • PX4编译——搭建你的第一个应用(Hello Shy)

    一 编译环境 1 ubuntu20 04 2 px4 V2 二 编写测试程序 下载好px4code之后 xff0c 在src examples px4 simple app里面有cmakelist txt和px4 sample app cp
  • pybind11 的 Hello World

    pybind11是一个轻量级的仅头文件库 xff0c 主要用于创建现有C 43 43 代码的Python绑定 Github地址 xff1a https github com pybind pybind11 官方文档 xff1a https
  • 深入探讨Linux驱动开发:驱动介绍与hello驱动实例

    文章目录 前言一 Linux驱动介绍1 用户态和内核态2 内核功能介绍3 驱动程序介绍 二 驱动程序分类与注意事项1 驱动程序分类2 内核驱动开发注意事项 三 hello驱动开发1 驱动模块2 模块加载和卸载函数3 编写hello模块4 M
  • Weka内置特征选择算法整理

    属性评估方法 CfsSubsetEval 根据属性子集中每一个特征的预测能力以及它们之间的关联性进行评估 ChiSquaredAttributeEval 根据与分类有关的每一个属性的卡方值进行评估 ClassifierSubsetEval
  • 具有非常大矩阵的 K 均值

    我必须在一个非常大的矩阵 大约 300 000x100 000 个值 超过 100Gb 上执行 k 均值聚类 我想知道我是否可以使用 R 软件或 weka 来执行此操作 我的计算机是一台多处理器 具有 8GB 内存和数百 GB 可用空间 我
  • weka 中的 SMO 置信度测量

    我正在使用以下方法编写分类代码smoweka 类 但我还没有找到实例分类的置信度度量 当以下情况时 它总是返回 0 或 1distributionForInstance叫做 我要分为两个类 知道我怎样才能得到这个措施吗 谢谢 好吧 我想出了
  • 当已指定最大堆值时,是否有解决方法来解决“Java 堆空间”内存错误?

    我在配备 8GB RAM 的最新一代 Macbook Pro 中运行 WEKA 分类器 J48 其输入 arff 文件由 3 个字段组成 字段 1 有约 27k 个不同属性 字段 2 有约 500k 个值 我使用以下命令将 java 堆空间
  • 如何在 Weka 中计算聚类评估的准确性

    我们如何使用 Weka 计算集群的准确性 我可以使用这个公式 Accuracy A tp tn Total samples 但我如何知道Weka工具中实验输出的真阳性 假阳性 真阴性和假阴性是什么 Weka中有几种不同的聚类模式 使用训练集
  • Weka 标准化柱

    我有一个包含 14 个数字列的 ARFF 文件 我想分别对每列执行标准化 即将每列的值修改为 actual value min this column max this column min this column 因此 列中的所有值都将在
  • 如何将文本文件转换为ARFF格式?

    我正在使用 WEKA 工具进行文本分类 并且必须将纯文本文件转换为 ARFF 格式 但是 我不知道该怎么做 谁能帮我将文本文件转换为 ARFF 格式 谢谢伦克劳夫的回复 我不明白这些要点 由于像记事本这样的文本编辑器只允许有限数量的列 因此
  • .arff 文件与 scikit-learn 一起使用吗?

    我想用一个属性关系文件格式 http www cs waikato ac nz ml weka arff html用 scikit learn 来做一些 NLP 任务 这可能吗 如何使用 arff文件与scikit learn 我真的推荐利
  • 处理不平衡问题后,数据高度倾斜,准确性下降

    在对数据进行预处理 例如缺失值替换和异常值检测 后 我使用随机化方法对数据进行分区 并使用 WEKA 删除百分比过滤器 我的数据集是一个高度倾斜的数据集 不平衡比为 6 1 对应于负类和正类 如果我使用朴素贝叶斯分类器对数据进行分类 而不处
  • 导入weka.jar文件

    我是佐治亚州亚特兰大当地一所大学的学生 我正在寻找将 Weka jar 文件合并到我的班级项目的 Eclipse 中 我已经多次尝试使用 Eclipse 将 weka 3 4 jar 文件合并到 java 项目中的 java 构建路径中 每
  • 如何使用java获取weka中的最近邻居

    我一直在尝试使用与 weka 机器学习库一起使用的 Ibk 最近邻算法 我知道如何对实例进行分类 但我想实现协同过滤功能 因此我需要实际获取最接近感兴趣对象的实际对象列表 在 weka 中我实际上该如何使用它的 java API 来做到这一
  • 如何使用 MATLAB 从 WEKA 检索类值

    我正在尝试使用 MATLAB 和 WEKA API 从 WEKA 检索类 一切看起来都很好 但类始终为 0 有什么想法吗 我的数据集有 241 个属性 将 WEKA 应用于该数据集我得到了正确的结果 创建第一个训练和测试对象 然后构建分类器
  • WEKA 中监督重采样和无监督重采样有什么区别?

    我想知道有什么区别weka filters supervised instance Resample and weka filters unsupervised instance Resample 在什么情况下我们应该使用每一种 监督重采样
  • 在java中使用朴素贝叶斯(weka)进行简单的文本分类

    我尝试在我的java代码中使用朴素贝叶斯weka库进行文本分类 但我认为分类的结果不正确 我不知道问题是什么 我使用 arff 文件作为输入 这是我的训练数据 relation hamspam attribute text string a

随机推荐