学习Clojure中,拿来练手的一个K-Means数据聚类算法
epi.clyce2012/12/14软件综合 IP:上海
仅仅是一个拿来练手的Clojure空间K-Means算法实现

源码地址在这里这里

K-Means算法是一种简单但并不精确的数据分类、聚集算法

空间K-Means是对任意维度的空间点数据进行聚类的方法,大致用途就像这样:

K-Means.gif

对算法的详细介绍在这里
写的很渣,在处理1到15000内所有整数任意组合形成的7500个点的二维点阵的时候溢出了。


(defn rand-sub [coll n] (take n (shuffle coll)))

(defn distance [coll-1 coll-2]
  (apply + (map (fn [x] (#(* % %) (apply - x))) (partition 2 (interleave coll-1 coll-2)))))

(defn get-center [coll]
  (map #(/ % (count coll)) (let [+seq (fn [x y] (map #(apply + %) (partition 2 (interleave x y))))]
                             (reduce +seq coll))))

(defn find-nearest-seed [point seeds]
  (->> (map #(vec [(distance % point) %]) seeds) (apply concat) (apply sorted-map) (first) (last)))

(defn seed-means [seeds coll]
  (->> (group-by last (map #(vec [% (find-nearest-seed % seeds)]) coll))
    (vals)
    (map (partial map first))))

(defn k-means [k coll]
  (loop [seed (rand-sub coll k) old-seed []]
    (let [it-res (seed-means seed coll)]
      (if (= seed old-seed) it-res
        (recur (map get-center it-res) seed)))))


嗯,就这些
来自:计算机科学 / 软件综合
1
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
epi.clyce
学者 机友 笔友
文章
345
回复
2156
学术分
21
2007/07/10注册,3个月19天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}