使用Weka进行数据挖掘(Weka教程六)Weka采样Filter/Resample/SMOTE

数据预处理中,有一个原理很简单但是非常重要的部分:采样。良好的采样可以让数据集变得平衡,会大大的提高预测和分类的效果。
采样是很复杂的一个领域,背后涉及到数据的分布/数据的性质等很多内容。常见的采样有:
Simple Random Sampling(简单随机采样),
OfflineSampling(离线等可能K采样),
Online Sampling(在线等可能K采样),
Ratio-based Sampling(等比例随机采样),
Acceptance-RejectionSampling(接受-拒绝采样),
Importance Sampling(重要性采样),
MCMC(MarkovChain Monte Carlo 马尔科夫蒙特卡罗采样算法)。

  • 简单有放回随机采样

Filter支持多种采样方式,其中有监督的采样比较复杂,因此主要讲解有监督学习采样方法。Filter中的Resample采样就是简单的有放回抽样。
其参数有下面几个:

 -S <num>
  Specify the random number seed (default 1)
  指定随机数种子,随机数种子相同,则采样结果相同。
 -Z <num>
  The size of the output dataset, as a percentage of
  the input dataset (default 100)
  指定采样数据占整个数据的比例。
 -B <num>
  Bias factor towards uniform class distribution.
  0 = distribution in input data -- 1 = uniform distribution.
  (default 0)
  是否按照原来数据类别的分布分层抽样。
 -no-replacement
  Disables replacement of instances
  (default: with replacement)
 -V
  Inverts the selection - only available with '-no-replacement'.

由以上参数可以看出,Weka支持的比例好像最小为1%,其实并不是,你可以使用小数实现更低的采样比。此外,你可以将采样比例设置成大于100%,如果你这样做了,那么你的结果数据集将会出现重复的数据。这样是没有意义的。

使用Resample进行采样是比较简单的,下面是一个例子:

 public static Instances BoostrapSample(Instances data) {
        String[] options = {"-S",1};
        Resample convert = new Resample();
        try {
            convert.setOptions(options);
            convert.setInputFormat(data);
            data = Filter.useFilter(data, convert);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }
  • SMOTE采样
    随机采样比较简单,其实Weka还支持一种附加的采样方法,在Weka3.6版本以下,这个功能嵌入在Weka包里,Weka3.7版本开始,这个功能需要额外的第三方包的支持,这种采样就是SMOTE采样。
    SMOTE算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。 这是一种过采样方法,通过制造更多模拟的少数类样本来实现各个样本之间的平衡。
    下图是其主要思想的形式化表示:
    这里写图片描述
    在Weka3.7版本,你必须先添加第三方包,最简单的方法就是添加一个新的maven依赖:
<dependency>
    <groupId>nz.ac.waikato.cms.weka</groupId>
    <artifactId>SMOTE</artifactId>
    <version>1.0.3</version>
</dependency>

SMOTE采样实现代码如下:

public static Instances SMOTESample(Instances data,int normalElemFlag) {
        SMOTE convert = new SMOTE();
        int seed = (int) (Math.random() * 10);
        String[] options = {"-S", String.valueOf(seed), "-P", "100.0", "-K", "5"};
        Instances SmoteInstances = null;
        try {
            convert.setOptions(options);
            convert.setInputFormat(data);
            SmoteInstances = Filter.useFilter(data, convert);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return SmoteInstances;
    }

需要注意的是,在运行完毕SMOTE采样之后,多数类样本并不会随之减少,因此,如果你想让多数类和少数类样本平衡,就必须再使用简单采样丢弃多余的多数类样本。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据挖掘Weka实验报告 姓名 _ 学号_ 指导教师 开课学期 2015 至 2016 学年 2 学期 完成日期 2015年6月12日 1.实验目的 基于http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+WiscOnsin+%28Ori - ginal%29的数据使用数据挖掘中的分类算法,运用Weka平台的基本功能对数据集进 行分类,对算法结果进行性能比较,画出性能比较图,另外针对不同数量的训练集进行 对比实验,并画出性能比较图训练并测试。 2.实验环境 实验采用Weka平台,数据使用来自http://archive.ics.uci.edu/ml/Datasets/Br- east+Cancer+WiscOnsin+%28Original%29,主要使用其中的Breast Cancer Wisc- onsin (Original) Data Set数据Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使 用Java写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作 平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界 面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集, 并评估由不同的学习方案所得出的结果。 3.实验步骤 3.1数据预处理 本实验是针对威斯康辛州(原始)的乳腺癌数据进行分类,该表含有Sample code number(样本代码),Clump Thickness(丛厚度),Uniformity of Cell Size(均匀的细胞大小), Uniformity of Cell Shape (均匀的细胞形状),Marginal Adhesion(边际粘连),Single Epithelial Cell Size(单一的上皮细胞大小),Bare Nuclei(裸核),Bland Chromatin(平淡的染色质),Normal Nucleoli(正常的核仁), Mitoses(有丝分裂),Class(分类),其中第二项到第十项取值均为1- 10,分类中2代表良性,4代表恶性。 通过实验,希望能找出患乳腺癌客户各指标的分布情况。 该数据数据属性如下: 1. Sample code number(numeric),样本代码; 2. Clump Thickness(numeric),丛厚度; 3.Uniformity of Cell Size(numeric)均匀的细胞大小; 4. Uniformity of Cell Shape(numeric),均匀的细胞形状; 5.Marginal Adhesion(numeric),边际粘连; 6.Single Epithelial Cell Size(numeric),单一的上皮细胞大小; 7.Bare Nuclei(numeric),裸核; 8.Bland Chromatin(numeric),平淡的染色质; 9. Normal Nucleoli(numeric),正常的核仁; 10.Mitoses(numeric),有丝分裂; 11.Class(enum),分类。 3.2数据分析 由http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+WiscOnsin+%28Ori- ginal%29得到一组由逗号隔开的数据,复制粘贴至excel表中,选择数据——分列——下 一步——逗号——完成,该数据是有关乳腺癌数据集,有11个属性,分别为Sample code number(样本代码),Clump Thickness(丛厚度),Uniformity of Cell Size(均匀的细胞大小),Uniformity of Cell Shape (均匀的细胞形状),Marginal Adhesion(边际粘连),Single Epithelial Cell Size(单一的上皮细胞大小),Bare Nuclei(裸核),Bland Chromatin(平淡的染色质),Normal Nucleoli(正常的核仁), Mitoses(有丝分裂),Class(分类),因为复制粘贴过来的数据没有属性,所以手工 添加一行属性名。Weka分类数据需把excel保存为一个csv文件。 3.2.1 .csv -> .arff 将CSV转换为ARFF最迅捷的办法是使用WEKA所带的命令行工具。 打开weka,之后出现GUI界面,如图1所示: (图1) 点击进入"Exploer"模块,要将.csv 格式转换为 .arff格式,点击open file...,打开刚保存的"乳腺癌数据集.csv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值