newlisp kmeans算法

kmeans是经典的聚类算法,newlisp提供了函数,同样分为train和query两个阶段。

kmeans的算法目的是将训练数据划分成k个类,按照一定的算法动态的选择k个中心点。下面是个例子,我添加了中文注释:

(set ‘data ‘(
(6.57 4.96 11.91 0.9)
(2.29 4.18 1.06 0.8)
(8.63 2.51 8.11 0.7)
(1.85 1.89 0.11 0.6)
(7.56 7.93 5.06 0.6)
(3.61 7.95 5.11 0.8)
(7.18 3.46 8.7 0.3)
(8.17 6.59 7.49 0.2)
(5.44 5.9 5.57 0.4)
(2.43 2.14 1.59 0.6)
(2.48 2.26 0.19 0.8)
(8.16 3.83 8.93 0.9)
(8.49 5.31 7.47 0.86)
(3.12 3.1 1.4 0.72)
(6.77 6.04 3.76 0.12)
(7.01 4.2 11.9 0.3)
(6.79 8.72 8.62 0.7)
(1.17 4.46 1.02 0.55)
(2.11 2.14 0.85 0.72)
(9.44 2.65 7.37 0.63)))

(println "data length: " (length data))

(kmeans-train data 2 ‘K) ;;划分为两类,训练结果保存在context K中

(println (symbols ‘K)) ;;显示K中的symbols

(println K:labels);;表示每个数据属于那个类的label

(println "K:labels length: " (length K:labels))

(set ‘labeled-data (transpose (push K:labels (transpose data) -1)));;将类的label添加到list中

(println labeled-data)

(exit)

同样,应该是可以支持增量式训练,只要保存context K,就可以不断的训练,因为kmeans-train函数原型最后一个参数是接收已经有的结果

 ./test.lsp
data length: 20
(K:centroids K:clusters K:deviations K:labels)
(2 1 2 1 2 2 2 2 2 1 1 2 2 1 2 2 2 1 1 2)
K:labels length: 20
[email protected]:~/work/gitlab.com/sdf1/ews/code$ ./test.lsp
data length: 20
(K:centroids K:clusters K:deviations K:labels)
(2 1 2 1 2 2 2 2 2 1 1 2 2 1 2 2 2 1 1 2)
K:labels length: 20
((6.57 4.96 11.91 0.9 2) (2.29 4.18 1.06 0.8 1) (8.630000000000001 2.51 8.109999999999999
  0.7 2)
 (1.85 1.89 0.11 0.6 1)
 (7.56 7.93 5.06 0.6 2)
 (3.61 7.95 5.11 0.8 2)
 (7.18 3.46 8.699999999999999 0.3 2)
 (8.17 6.59 7.49 0.2 2)
 (5.44 5.9 5.57 0.4 2)
 (2.43 2.14 1.59 0.6 1)
 (2.48 2.26 0.19 0.8 1)
 (8.16 3.83 8.93 0.9 2)
 (8.49 5.31 7.47 0.86 2)
 (3.12 3.1 1.4 0.72 1)
 (6.77 6.04 3.76 0.12 2)
 (7.01 4.2 11.9 0.3 2)
 (6.79 8.720000000000001 8.619999999999999 0.7 2)
 (1.17 4.46 1.02 0.55 1)
 (2.11 2.14 0.85 0.72 1)
 (9.44 2.65 7.37 0.63 2))
时间: 2024-10-12 02:41:50

newlisp kmeans算法的相关文章

【转】 聚类算法-Kmeans算法的简单实现

1. 聚类与分类的区别: 首先要来了解的一个概念就是聚类,简单地说就是把相似的东西分到一组,同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它"这个东西被分为某某类"这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行"学习",从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做 supervised learning (监督学习),而在聚类的时候,我们并不关心某一类是什么,我们需

EM算法(1):K-means 算法

目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法详解 EM算法(1) : K-means算法 1. 简介 K-means算法是一类无监督的聚类算法,目的是将没有标签的数据分成若干个类,每一个类都是由相似的数据组成.这个类的个数一般是认为给定的. 2. 原理 假设给定一个数据集$\mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2,...,\mathbf{x}_N \}$, 和类的个数K.我们的每个类都用一个中心点$

[数据挖掘] - 聚类算法:K-means算法理解及SparkCore实现

聚类算法是机器学习中的一大重要算法,也是我们掌握机器学习的必须算法,下面对聚类算法中的K-means算法做一个简单的描述: 一.概述 K-means算法属于聚类算法中的直接聚类算法.给定一个对象(或记录)的集合,将这些对象划分为多个组或者“聚簇”,从而使同组内的对象间比较相似而不同组对象间差异比较大:换言之,聚类算法就是将相似的对象放到同一个聚簇中,而将不相似的对象放到不同的聚簇中.由于在聚类过程中不使用到类别标签,所以相似性的概念要基于对象的属性进行定义.应用不同则相似性规则和聚类算法一般不太

Python—kmeans算法学习笔记

一.   什么是聚类 聚类简单的说就是要把一个文档集合根据文档的相似性把文档分成若干类,但是究竟分成多少类,这个要取决于文档集合里文档自身的性质.下面这个图就是一个简单的例子,我们可以把不同的文档聚合为3类.另外聚类是典型的无指导学习,所谓无指导学习是指不需要有人干预,无须人为文档进行标注. 二.聚类算法:from sklearn.cluster import KMeans def __init__(self, n_clusters=8, init='k-means++', n_init=10,

unsupervised learning: K-means 算法

k-means算法是目前最流行的,用得最多的一种clustering算法 K-means算法 如果我们想要将上图中的绿色的点分为两类,首先随机的选取两个cluster centroids(聚类中心),然后迭代(循环)地做两件事:cluster assignment和move centroids(图1) cluster assignment: 然后将训练集中的每个样本,根据是距离红色的cluster centroid近还是蓝色的cluster centroid近来进行分配cluster.(图2)

Java实现Kmeans算法

Kmeans算法的Java实现,源码放在github上,大家有兴趣可以下下来看看, 源码地址: https://github.com/l294265421/algorithm-kmeans 实现该算法主要阅读的书籍是: <Web数据挖掘>第二版,作者:Bing Liu,译者:俞勇 版权声明:本文为博主原创文章,未经博主允许不得转载.

K-means算法简介

K-means 算法是无监督的 聚类算法,算法简单,有效. K-means算法: 输入参数: 指定聚类数目 k,训练集 X 输出 : k 个聚类 算法描述: K-means 算法 是一个 迭代算法,每次迭代分成两个步骤: 1)指定聚类步骤: 计算每个样本到 k 个 聚类中心的 距离,将样本归类到 距离 聚类中心 最小的那个类别 2)移动聚类中心步骤: 根据每个聚类所拥有的样本点,重新计算每个聚类的中心 伪代码描述: 随机初始化 k 个聚类的 中心 u(1), u(2)... u(k) repea

Kmeans算法学习与SparkMlLib Kmeans算法尝试

K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果.该算法接受参数 k :然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小.聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的. 算法描述: 假设要把样本集分为c个类别

K-means算法

K-means算法 输入input:data X 输出output:data(X,S) 解释:输入没有标签的数据data X,经过训练,给每一个数据添上一个标签S{s1,s2,...,sk},对应的聚类中心为U{u1,u2,...,uk}. 效果:将输入数据分为k类,并得到其相应类别的中心点. ======================================================================================== step 1 初始化聚类中