产生分类中的双月问题的数据集

在书”神经网络与机器学习“中,经常要用到一个数据集,就是双月数据集,作者貌似没提供生成这个数据集的代码,网上找了一个matlab版本,生成效果如下

代码如下:

 1 function data=dbmoon(N,d,r,w)
 2 % Usage: data=dbmoon(N,d,r,w)
 3 % doublemoon.m - genereate the double moon data set in Haykin‘s book titled
 4 % "neural networks and learning machine" third edition 2009 Pearson
 5 % Figure 1.8 pp. 61
 6 % The data set contains two regions A and B representing 2 classes
 7 % each region is a half ring with radius r = 10, width = 6, one is upper
 8 % half and the other is lower half
 9 % d: distance between the two regions
10 % will generate region A centered at (0, 0) and region B is a mirror image
11 % of region A (w.r.t. x axis) with a (r, d) shift of origin
12 % N: # of samples each class, default = 1000
13 % d: seperation of two class, negative value means overlapping (default=1)
14 % r: radius (default=10), w: width of ring (default=6)
15 %
16 % (C) 2010 by Yu Hen Hu
17 % Created: Sept. 3, 2010
18
19 % clear all; close all;
20 if nargin<4, w=6; end
21 if nargin<3, r=10; end
22 if nargin<2, d=1; end
23 if nargin < 1, N=1000; end
24
25 % generate region A:
26 % first generate a uniformly random distributed data points from (-r-w/2, 0)
27 % to (r+w/2, r+w/2)
28 N1=10*N;  % generate more points and select those meet criteria
29 w2=w/2;
30 done=0; data=[]; tmp1=[];
31 while ~done,
32     tmp=[2*(r+w2)*(rand(N1,1)-0.5) (r+w2)*rand(N1,1)];
33     % 3rd column of tmp is the magnitude of each data point
34     tmp(:,3)=sqrt(tmp(:,1).*tmp(:,1)+tmp(:,2).*tmp(:,2));
35     idx=find([tmp(:,3)>r-w2] & [tmp(:,3)<r+w2]);
36     tmp1=[tmp1;tmp(idx,1:2)];
37     if length(idx)>= N,
38         done=1;
39     end
40     % if not enough data point, generate more and test
41 end
42 % region A data and class label 0
43 % region B data is region A data flip y coordinate - d, and x coordinate +r
44 data=[tmp1(1:N,:) zeros(N,1);
45     [tmp1(1:N,1)+r -tmp1(1:N,2)-d ones(N,1)]];
46
47  plot(data(1:N,1),data(1:N,2),‘.r‘,data(N+1:end,1),data(N+1:end,2),‘.b‘);
48  title([‘Double moon data set, d = ‘ num2str(d)]),
49  axis([-r-w2 2*r+w2 -r-w2-d r+w2])
50
51 save dbmoon N r w d data;

由于最近使用python,所以使用python翻译了一下matlab版本的代码,自己写了一个python版本

代码如下:

 1 # Usage: data=dbmoon(N,d,r,w)
 2 # dbmoon.py - genereate the double moon data set in Haykin‘s book titled
 3 # "neural networks and learning machine" third edition 2009 Pearson
 4 # Figure 1.8 pp. 61
 5 # The data set contains two regions A and B representing 2 classes
 6 # each region is a half ring with radius r = 10, width = 6, one is upper
 7 # half and the other is lower half
 8 # d: distance between the two regions
 9 # will generate region A centered at (0, 0) and region B is a mirror image
10 # of region A (w.r.t. x axis) with a (r, d) shift of origin
11 # N: # of samples each class, default = 1000
12 # d: seperation of two class, negative value means overlapping (default=1)
13 # r: radius (default=10), w: width of ring (default=6)
14 #
15 # (C) 2015 by Wanqian Luo
16 # Created: Oct. 25, 2010
17
18 import numpy as np
19 def dbmoon(N=1000, d=1, r=10, w=6):
20     N1 = 10*N
21     w2 = w/2
22     done = True
23     data = np.empty(0)
24     while done:
25         tmp_x = 2*(r+w2)*(np.random.random([N1,1])-0.5)
26         tmp_y = (r+w2)*np.random.random([N1,1])
27         tmp = np.concatenate((tmp_x, tmp_y), axis=1)
28         tmp_ds = np.sqrt(tmp_x*tmp_x + tmp_y*tmp_y)
29
30         idx = np.logical_and(tmp_ds>(r-w2), tmp_ds<(r+w2))
31         idx = (idx.nonzero())[0]
32
33         if data.shape[0] == 0:
34             data = tmp.take(idx,axis=0)
35         else:
36             data = np.concatenate((data, tmp.take(idx,axis=0)),axis=0)
37         if data.shape[0] >= N:
38             done = False
39
40     db_moon = data[0:N,:]
41     data_t = np.empty([N,2])
42     data_t[:,0] = data[0:N,0] + r
43     data_t[:,1] = -data[0:N,1] - d
44     db_moon = np.concatenate((db_moon, data_t), axis=0)
45     return db_moon

效果如下:

提供下代码下载,里面包含了如何调用代码的demo:http://pan.baidu.com/s/1bnsNrm3密码:2ekd

时间: 2024-08-08 01:05:15

产生分类中的双月问题的数据集的相关文章

mysql “group by ”与&quot;order by&quot;的研究--分类中最新的内容

这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况这种需求,我想很多人都遇到过.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下明显.这不是我想要的数据,原因是msyql已经的执行顺序是 引用 写的顺序:select ... from... where.... group by... having... order by..执行顺序:

分类中数据不平衡问题的解决经验

问题:研究表明,在某些应用下,1∶35的比例就会使某些分类方法无效,甚至1∶10的比例也会使某些分类方法无效. (1)少数类所包含的信息就会很有限,从而难以确定少数类数据的分布,即在其内部难以发现规律,进而造成少数类的识别率低 (2)数据碎片.很多分类算法采用分治法,样本空间的逐渐划分会导致数据碎片问题,这样只能在各个独立的子空间中寻找数据的规律,对于少数类来说每个子空间中包含了很少的数据信息,一些跨空间的数据规律就不能被挖掘出来. (3)不恰当的归纳偏置.许多归纳推理系统在存在不确定时往往倾向

黄聪:WordPress 多站点建站教程(六):使用WP_Query、switch_to_blog函数实现获取子站点分类中的文章

首先在你使用主题的funtions.php里面添加下代码: //根据时间显示最新的分类文章内容,每个站点显示一篇内容 //$blog_id 子站点ID //$catid 分类ID wp_reset_query(); switch_to_blog($blog_id); global $post;?> $my_query2 = new WP_Query('showposts=1&order=desc&orderby=date&cat='.$catid); while ($my_q

第26条:勿在分类中声明属性

属性是封装数据的方式(参见第6条). 属性只是定义实例变量及相关存取方法所用的“语法糖”,所以也应遵循同实例变量一样的规则. 分类机制,应该将其理解为一种手段,目标在于扩展类的功能,而非封装数据. 尽管从技术上说,分类里也可以声明属性,但这种做法应该尽量避免. 原因是:除了“class-continuation分类”(参见第27条)之外,其他分类都无法向类中新增实例变量,因此,它们无法把实现属性所需的实例变量合成出来. 所以开发者需要在分类中为该属性实现存取方法. 1)此时可以把方法声明为@dy

无限极分类中,查找子孙树

<?php // 无限级分类中,查找子树树 $area = array( 0=>array('cat_id'=>1,'cat_name'=>'北京市','parent_id'=>0), 1=>array('cat_id'=>2,'cat_name'=>'馆陶县','parent_id'=>5), 2=>array('cat_id'=>3,'cat_name'=>'海淀区','parent_id'=>1), 3=>array

iOS OC 避免在分类中声明属性

一 描述      尽管从技术上来说,分类里可以声明属性,但是这种做法还是要尽量避免,原因在于,除了 class-continuation 分类(延展)之外,其他分类都无法向类中新增实例变量,因此,他们无法把实现属性所需的实例变量合成出来. 正确做法是把所有属性都定义在主接口中,这是唯一能够定义实例变量的地方.而属性只是定义实例变量及相关存取方法所用的"语法糖",所有也应遵循同实例变量一样的规则. 至于分类机制,则应该将其理解为一种手段,目标在于扩展类的功能,而非封装数据 二 总结  

学习IOS开问题篇--视图的模型控件属性写在私有分类中的原因

在说原型模式之前,我们先来看java里面的深复制和浅复制: 1. 浅复制:被复制的对象的所有变量都持有和原来对象的变量相同的值,而所有的对其他对象的引用都指向原来的对象. 2. 深复制:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他变量的对象.那些引用其他对象的变量将指向被复制过来的新对象,而不是原来那些被引用的对象.深复制需要把要复制的对象的所有引用都复制一遍. 这两者的区别就是关于引用对象的处理,浅复制是不考虑引用对象,而深复制需要考虑引用对象的问题. 对java中的clon

iOS在一个分类中添加属性

有时候,我们会想在别人的类中添加一个属性.这个属性只会在自己的模块用到,在其它地方无用.那么现在就用两个方案: 1,直接在原类中添加一个属性 2,写一个分类,在分类中将这个属性加进去. 这两种方案实现的异同: 同:都能达到在已有的类中添加一个属性的需求. 异: 第一种方案优点:实现简单.缺点:破坏了已有的类的封装,会给后续开发者带来疑惑.结论:笨方法 第二种方案有点:能与已有类完全分开,保持了模块化的独立性.貌似没有缺点,如果一定要找出一个缺点,那就是一个字"难",因为要用到个高大上的

python用K近邻(KNN)算法分类MNIST数据集和Fashion MNIST数据集

一.KNN算法的介绍 K最近邻(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法之一,理论上比较成熟.KNN算法首先将待分类样本表达成和训练样本一致的特征向量:然后根据距离计算待测试样本和每个训练样本的距离,选择距离最小的K个样本作为近邻样本:最后根据K个近邻样本判断待分类样本的类别.KNN算法的正确选取是分类正确的关键因素之一,而近邻样本是通过计算测试样本与每个训练集样本的距离来选定的,故定义合适的距离是KNN正确分类的前提. 本文中在上述研究的基础上,将特征属性值