数据流-移动超平面(HyperPlane)构造
转自 Koala++'s blog 感谢原作者
移动超平面是非常好的一种模拟数据流的方法(我感觉它应该是最好的),倒不是它没有缺点,只是别的模拟方法实在是有点差劲。
自己写的程序又一次在硬盘的结束中逝去了,还好找到一个更强大的数据流构造的程序集(不过对于我需要的移动超平面来说,它是相当的弱,以前我写的程序可以产生很多种变化,而且使用非常方便)。下面是链接:
http://www.cs.waikato.ac.nz/~abifet/MOA/software.html(MOA的页面)
http://sourceforge.net/projects/moa-datastream/(下载地址)
它里面实现了Hoeffding树,我也看过VFDT,cVFDT,还有一个改进版本VFDTc,反正我是不喜欢他那种方式,我这次讲的是他其中产生数据流的一个程序:HyperPlaneGenerator(在wDriftGenerators.zip包中),它是VFDT的作者提出的,在Wang那篇经典论文中也用的是这种方法。
我自己写了两行代码,让它先能运行起来:
publicvoid write2File( String path, int N )
{
HashMap<Integer,Instance> map = new HashMap<Integer,Instance>();
generateHeader();
restart();
for( int i = 0; i < N; i++ )
{
map.put( i, nextInstance() );
}
try{
File file = new File( path );
FileWriter filewriter = new FileWriter( file, false );
filewriter.write( streamHeader.toString() );
for( int i = 0; i < N; i++ )
{
filewriter.write( map.get( i ) + "\n" );
}
filewriter.close();
}catch( Exception e )
{
e.printStackTrace();
}
}
public static void main(String[] args) {
HyperplaneGenerator g = new HyperplaneGenerator();
g.write2File(".//data.arff", 10000);
}
你可能会想,我产生一亿条样本,难道我这把这一亿条样本的数据集读到内存里吗?当然不是了,你自己把这一亿个样本拆开分成几个数据集不就行了。另外,自己用数学软件看一下数据漂移的变化规律,在对数据都不了解的情况下,产生10000和1000000000个样本是没有区别的。
下面介绍一下代码:
public void restart() {
this.instanceRandom = new Random(this.instanceRandomSeedOption
.getValue());
this.weights = new double[this.numAttsOption.getValue()];
this.sigma = new int[this.numAttsOption.getValue()];
for (int i = 0; i < this.numAttsOption.getValue(); i++) {
this.weights[i] = this.instanceRandom.nextDouble();
this.sigma[i] = (i < this.numDriftAttsOption.getValue() ? 1 : 0);
}
}
Restart是初始化权重(weights)和概念漂移时权重变大还是变小(sigma,也就是原文说的:specify the total number of demensions whose weights are changing),也许你会奇怪,为什么这个函数不叫init,start,我猜是因为它还可能会在渐变(Gradual)漂移的同时产生突变(Abrupt)漂移,或是什么Recur之类的漂移。
Public Instance nextInstance() {
int numAtts = this.numAttsOption.getValue();
double[] attVals = newdouble[numAtts + 1];
double sum = 0.0;
double sumWeights = 0.0;
for (int I = 0; I < numAtts; i++) {
attVals[i] = this.instanceRandom.nextDouble();
sum += this.weights[i] * attVals[i];
sumWeights += this.weights[i];
}
int classLabel;
if (sum >= sumWeights * 0.5) {
classLabel = 1;
} else {
classLabel = 0;
}
//Add Noise
if ((1 + (this.instanceRandom.nextInt(100))) <=
this.noisePercentageOption.getValue()) {
classLabel = (classLabel == 0 ? 1 : 0);
}
Instance inst = new Instance(1.0, attVals);
inst.setDataset(getHeader());
inst.setClassValue(classLabel);
addDrift();
return inst;
}
这段代码就是产生一个样本,代码非常简单(其实上这一切都很简单),sum是权重向量与样本向量的乘积,sumWeights是权重之和,如论文中所述,大于权重之和1/2就是正例,小于权重1/2就是负例。将样本的类别进行反转的方式产生噪音。最后调用addDrift进行漂移处理。
privatevoid addDrift() {
for (int i = 0; i < this.numDriftAttsOption.getValue(); i++) {
this.weights[i] += (double) ((double) sigma[i])
* ((double) this.magChangeOption.getValue());
if (//this.weights[i] >= 1.0 || this.weights[i] <= 0.0 ||
(1 + (this.instanceRandom.nextInt(100))) <=
this.sigmaPercentageOption
.getValue()) {
this.sigma[i] *= -1;
}
}
}
这里有两个问题,第一,原论文中并没有说明,漂移的维是固定的几个维在漂移,还是一会这一些在漂移,下一次另一些在漂移,这其实也很好理解,固定的几个维能比较真实的模拟现实中的概念漂移,乱漂移的这种我还想不出来现实中什么漂移是这样的。第二,代码中有一行注释,这行注释是很重要的,加与不加区别是很大的,规律也不是很清楚,用数学软件自己看一下就明白了。
数据流-移动超平面(HyperPlane)构造相关推荐
- 论文浅尝 | 基于超平面的时间感知知识图谱嵌入
链接:http://talukdar.net/papers/emnlp2018_HyTE.pdf 本文主要关注 KG embedding 中三元组成立的时间有效性问题,比如三元组(Cristiano ...
- Support Vector Machine学习笔记
学习目标 掌握SVM的基本原理以及推导过程 1.SVM的基本原理: SVM本质上是一种二分类模型,基本模型是定义在特征空间中间隔最大的分类器,它的学习/优化目的就是使得这个间隔最大化. 为什么要使间隔 ...
- 优达学城机器学习之--支持向量机(SVM)
前言 SVM是支持向量机的简称(Support Vector Machine) 文章目录如下: 简述 选择分隔线 核函数(kernel)及其参数c, gamma 过拟合 over-fitting SV ...
- 使用决策树进行个人信用风险评估
决策树方法介绍 决策树简介 决策树(decision tree)是一种基本的分类与回归方法.如下图所示的流程图就是一个决策树,长方形代表判断模块(decision block),椭圆形成代表终止模块( ...
- 机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)
文章目录 系列文章 支持向量机SVM算法 1 SVM算法简介 1.1 引入 1.2 算法定义 2 SVM算法原理 2.1 线性可分支持向量机 2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建 ...
- 机器学习二:支持向量机
支持向量机 1. 介绍 2. 对偶问题 3. 非线性数据 3.1 核函数与核技巧 3.1.1 数学解释 3.1.2 几种常用的核函数 4. SVM 响应离群点 4.1 软间隔 4.2 正则化 4.3 ...
- 机器学习常用术语词汇表
EOF是一个计算机术语,为End Of File的缩写 ,在操作系统中表示资料源无更多的资料可读取. 刚接触机器学习框架 TensorFlow 的新手们,这篇由 Google 官方出品的常用术语词汇表 ...
- Google发布机器学习术语表 (中英对照)
来源 | TensorFlow Google 工程教育团队已经发布了多语种的 Google 机器学习术语表,该术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义.语言版本包括西班 ...
- 超全汇总!机器学习常用术语词汇表
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 刚接触机器学习框架 TensorFlow 的新手们,这篇由 Goo ...
- 支持向量回归_量化投资学习笔记22——回归分析:支持向量机
支持向量机(Support Vector Machine, SVM)是一种基于统计学习的模式识别的分类方法,主要用于模式识别.所谓支持向量指的是在分割区域边缘的训练样本点,机是指算法.就是要找到具有最 ...
最新文章
- git 换行问题_后端必备的 Git 分支开发规范指南
- kail安装和vmtools安装
- vue2 切换路由时 页面滚动到顶部 用游览器返回时 记住上页的位置
- MM--关于STO步骤和配置
- 基于TMS320VC5507的语音识别系统实现
- CSS背景图像的简单响应
- 浅谈Android垃圾回收机制
- 【编译原理】自上而下语法分析(C/C++源码+实验报告)
- 腾讯云账户注销操作教程
- 将自己的数据制作成cityscape格式
- AH快递单打印软件(顺丰申通圆通韵达中通天天EMS) 3.77
- Monash call:概述生物特征识别
- 程序员的岗位路线规划,不止是编程?
- 计算机无法搜索文件夹内容,系统我的电脑中文件夹和搜索选项无法使用的解决方法...
- 什么是 GPU 加速的计算?
- IKVM.NET的妙手偶得
- python爬取网易云音乐评论分析_Python爬取网易云音乐评论(附加密算法)
- Android蓝牙开发之一:打开、关闭蓝牙
- 计算机如何改变原子排列方式,新的原子分组方式预示着新的材料、药物和计算机...
- 【python数据分析】足球运动员的特征分析