在PostgreSQL中如何生成kmean算法的测试数据-阿里云开发者社区

开发者社区> 阿里云数据库> 正文
登录阅读全文

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

简介:

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

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

postgres=# insert into test select id*10000,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/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云数据库
使用钉钉扫一扫加入圈子
+ 订阅

帮用户承担一切数据库风险,给您何止是安心!

官方博客
最新文章
相关文章
链接