在PostgreSQL中如何生成kmean算法的测试数据

生成Kmeans的测试数据。
例如每10000为界,生成10个种子,每个节点以100内的随机数相加,生成一组测试数据。

postgres=# create table test(id int, rand int);
CREATE TABLE

postgres=# insert into test select id10000,trunc(random()100 + id*10000) from generate_series(1,10) t(id), generate_series(1,100000) t1(rand);
INSERT 0 1000000

postgres=# select id,count(*) from test group by id;
   id   | count
--------+--------
  10000 | 100000
  60000 | 100000
  40000 | 100000
  30000 | 100000
  90000 | 100000
  20000 | 100000
 100000 | 100000
  50000 | 100000
  70000 | 100000
  80000 | 100000
(10 rows)

直接使用kmeans分为10类,不设置种子的话,分得不是很准确。

postgres=# select k,id,count(*) from (select kmeans(array[rand], 10) over () k, id from test) t group by 1,2 order by 1,2;
 k |   id   | count
---+--------+--------
 0 |  10000 | 100000
 0 |  20000 | 100000
 1 |  30000 |  49707
 2 |  30000 |  50293
 3 |  40000 | 100000
 4 |  50000 | 100000
 5 |  60000 | 100000
 6 |  70000 | 100000
 7 |  80000 |  49871
 8 |  80000 |  50129
 9 |  90000 | 100000
 9 | 100000 | 100000
(12 rows)

使用正确的种子后,分类精准。

postgres=# select k,id,count(*) from (select kmeans(array[rand], 10, array[10000,20000,30000,40000,50000,60000,70000,80000,90000,100000]) over () k, id from test) t group by 1,2 order by 1,2;
 k |   id   | count
---+--------+--------
 0 |  10000 | 100000
 1 |  20000 | 100000
 2 |  30000 | 100000
 3 |  40000 | 100000
 4 |  50000 | 100000
 5 |  60000 | 100000
 6 |  70000 | 100000
 7 |  80000 | 100000
 8 |  90000 | 100000
 9 | 100000 | 100000
(10 rows)

参考
http://blog.163.com/digoal@126/blog/static/163877040201571745048121/
http://pgxn.org/dist/kmeans/

时间: 2024-09-29 09:51:24

在PostgreSQL中如何生成kmean算法的测试数据的相关文章

在PostgreSQL中如何生成线性相关的测试数据

生成线性相关的测试数据.同样可以用到generate_series和随机数.例子生成10万条随机数字. select trunc(10000 + 1000000*random()) id from generate_series(1,100000); 根据刚才那组数据,加减5以内的随机数,生成另一组数字. select id, trunc(id + 5-random()*10) from (select trunc(10000 + 1000000*random()) id from genera

旋转门数据压缩算法在PostgreSQL中的实现 - 流式压缩在物联网、监控、传感器等场景的应用

背景 在物联网.监控.传感器.金融等应用领域,数据在时间维度上流式的产生,而且数据量非常庞大. 例如我们经常看到的性能监控视图,就是很多点在时间维度上描绘的曲线. 又比如金融行业的走势数据等等. 我们想象一下,如果每个传感器或指标每100毫秒产生1个点,一天就是864000个点. 而传感器或指标是非常多的,例如有100万个传感器或指标,一天的量就接近一亿的量. 假设我们要描绘一个时间段的图形,这么多的点,渲染估计都要很久. 那么有没有好的压缩算法,即能保证失真度,又能很好的对数据进行压缩呢? 旋

数字图像-c#图像灰度处理中关于生成灰度图像的问题

问题描述 c#图像灰度处理中关于生成灰度图像的问题 我是参照<C#数字图像处理算法典型实例>里面的代码进行处理的,用的是内存法处理打开的图像.但经过灰度处理的图像对象怎么得到呢?我想利用得到的图像进行处理,但处理的还是原来的图像,就算我保存当前的灰度图像,打开进行处理时依然是彩色图像的性质. 代码如下 //打开图片 private void open_Click(object sender, EventArgs e) { OpenFileDialog opnDlg = new OpenFile

在PostgreSQL中实现按拼音、汉字、拼音首字母搜索的例子

在PostgreSQL中实现按拼音.汉字.拼音首字母搜索的例子 作者 digoal 日期 2016-11-09 标签 PostgreSQL , 拼音 , 中文分词 , tsvector , 拼音首字母 , hmm , 词库 背景 PostgreSQL有很多特性是可以提升开发效率,提高生产力的. 在前端页面中,搜索是一个非常常用的功能,例如淘宝首页的搜索. 为了提升用户体验,用户可以按拼音首字母进行搜索,按中文单词搜索,或者按拼音的全部进行搜索. 又比如家里的电视盒子,因为没有实体键盘,按拼音首字

PgSQL · 源码分析 · PG中的无锁算法和原子操作应用一则

原子操作概述 近年来随着服务器上CPU核数的不断增加,无锁算法(Lock Free)越来越广泛的被应用于高并发的系统中.PostgreSQL 做为世界上最高级开源数据库也在9.5时引入了无锁算法.本文先介绍了无锁算法和原子操作在PostgreSQL中的具体实现, 再通过一个Patch来看一下在PostgreSQL中是如何利用它来解决实际的高并发问题的. 无锁算法是利用CPU的原子操作实现的数据结构和算法来解决原来只能用锁才能解决的并发控制问题. 众所周知,在一个并发系统中特别是高并发的场景下,锁

ASP中通过该日历算法实现的具体代码_应用技巧

复制代码 代码如下: <style> td { font-family: "宋体"; font-size:9pt} </style> <body bgcolor="eeeeee"> <table width="180" cellpadding="0" cellspacing="1" bgcolor="dddddd" align=center>

ASP中通过该日历算法实现的具体代码

复制代码 代码如下: <style> td { font-family: "宋体"; font-size:9pt} </style> <body bgcolor="eeeeee"> <table width="180" cellpadding="0" cellspacing="1" bgcolor="dddddd" align=center>

生成学习算法(Generative Learning algorithms)

一.引言      前面我们谈论到的算法都是在给定\(x\)的情况下直接对\(p(y|x;\theta)\)进行建模.例如,逻辑回归利用\(h_\theta(x)=g(\theta^T x)\)对\(p(y|x;\theta)\)建模,这类算法称作判别学习算法.      考虑这样一个分类问题,我们根据一些特征来区别动物是大象\((y=1)\)还是狗\((y=0)\).给定了这样一个训练集,逻辑回归或感知算法要做的就是去找到一个决策边界,将大象和狗的样本分开来.可以换个思路,首先根据大象的特征来

曾国藩的&quot;顺势而为&quot;在PostgreSQL中的价值体现

后人对曾国藩的一些评论:"曾国藩顺势而为 成就一番事业,并一定程度上做了一些推动历史前进的事情". "顺势而为"这个词实在是用得太好了,我们身在数字时代,更加应该懂得顺势而为的道理,比如在金融行业中,不断变化的股价:在物联网的传感器中,不断上报的数字:由数据监测不断画出的曲线等等,这些无不体现着一个字:"势". 我们来看看使用PostgreSQL数据库如何抓住这个"势"呢? 首先贴一个最小二乘法least-squares-fi