加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
修改排序
加载中...
学习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
新版本公告
~~空空如也

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

所属专业
上级专业
同级专业
epi.clyce
学者 机友 笔友
文章
345
回复
2156
学术分
21
2007/07/10注册,7个月0天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的