Python--K-mean-algorithm进行样本点的分类

在模式识别中,K均值算法主要用于分类数目已知的聚类,实现较为简单,算法目的清晰,属于较为简单的动态聚类算法之一。

算法中通过迭代判断前后两次算法的聚类中心是否一致,从而决定是否继续迭代(前后一致则退出算法,完成分类)。

下面的K均值算法的简单示例:

#K-均值算法聚类分析

from numpy import*
from math import sqrt
#要求编写程序对下列数据进行聚类分析,取K为2
x=array([
        [0,0],[1,0],[0,1],[1,1],[2,1],
        [1,2],[2,2],[3,2],[6,6],[7,6],
        [8,6],[6,7],[7,7],[8,7],[9,7],
        [7,8],[8,8],[9,8],[8,9],[9,9]])

#求样本点与聚类中心的距离
def dis(a,b):
    return sqrt((a[0]-b[0])**2+(a[1]-b[1])**2)

#对样本分类
def distribution(x,z_1,z_2,n1,n2):
    for i in range(0,len(x)):
        if (dis(x[i],z_1) < dis(x[i],z_2)):
            n1.append(i)
        else:
            n2.append(i)

#建立新的聚类中心
def new_dis_center(x,z_1,z_2,n1,n2):
    z_1_1=[0,0]
    z_2_1=[0,0]
    for i in range(0,(len(n1))):
        z_1_1=z_1_1+x[n1[i]]/len(n1)

    for i in range(0,(len(n2))):
        z_2_1=z_2_1+x[n2[i]]/len(n2)
    return z_1_1,z_2_1

#迭代函数 输入数据以及初始聚类中心
def iteration_fun(x,z_1,z_2):
    #初始化迭代聚类中心中间量
    z_1_1=[0,0]
    z_2_1=[0,0]
    n1=[]
    n2=[]

    distribution(x,z_1,z_2,n1,n2)
    (z_1_1,z_2_1)=new_dis_center(x,z_1,z_2,n1,n2)

    #迭代判断
    if (z_1_1 == z_1).all() or (z_2_1==z_2).all():
        print("The Clustering Center after iteration:")
        print("Clustering center one: ")
        print(z_1)
        print("Clustering center two: ")
        print(z_2)
    else:
        z_1=z_1_1
        z_2=z_2_1
        iteration_fun(x,z_1,z_2)

#初始化聚类中心(包括备用迭代聚类中心)  聚类样本集
z_1=x[0]
z_2=x[1]

iteration_fun(x,z_1,z_2)
时间: 2024-08-25 14:03:31

Python--K-mean-algorithm进行样本点的分类的相关文章

python用K近邻(KNN)算法分类MNIST数据集和Fashion MNIST数据集

一.KNN算法的介绍 K最近邻(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法之一,理论上比较成熟.KNN算法首先将待分类样本表达成和训练样本一致的特征向量:然后根据距离计算待测试样本和每个训练样本的距离,选择距离最小的K个样本作为近邻样本:最后根据K个近邻样本判断待分类样本的类别.KNN算法的正确选取是分类正确的关键因素之一,而近邻样本是通过计算测试样本与每个训练集样本的距离来选定的,故定义合适的距离是KNN正确分类的前提. 本文中在上述研究的基础上,将特征属性值

机器学习---K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法 1.K最近邻(k-Nearest Neighbour,KNN) K最近邻(k-Nearest Neighbour,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实

【机器学习算法-python实现】K-means无监督学习实现分类

1.背景 无监督学习的定义就不多说了,不懂得可以google.因为项目需要,需要进行无监督的分类学习. K-means里面的K指的是将数据分成的份数,基本上用的就是算距离的方法. 大致的思路就是给定一个矩阵,假设K的值是2,也就是分成两个部分,那么我们首先确定两个质心.一开始是找矩阵每一列的最大值max,最小值min,算出range=max-min,然后设质心就是min+range*random.之后在逐渐递归跟进,其实要想明白还是要跟一遍代码,自己每一步都输出一下看看跟自己想象的是否一样. (

后端程序员之路 12、K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法,是最简单的机器学习算法之一.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合.该算法的功能有:从目标区域抽样计算欧式或马氏距离:在交叉验证后的RMSE基础上选择启发式最优的K邻域:计算多元k-最近邻居的距离倒数加权平均. 机器学习(一)——K-近邻(KNN)算法 - oYabea - 博客园http://www.cnblo

机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用

摘要: 朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类.总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型:当各特征相关性较小时,朴素贝叶斯分类性能最为良好.另外朴素贝叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算.本文详述了朴素贝叶斯分类的统计学

机器学习之路: python k近邻分类器 鸢尾花分类预测

使用python语言 学习k近邻分类器的api 欢迎来到我的git查看源代码: https://github.com/linyi0604/kaggle 1 from sklearn.datasets import load_iris 2 from sklearn.cross_validation import train_test_split 3 from sklearn.preprocessing import StandardScaler 4 from sklearn.neighbors i

python实现HOG+SVM对CIFAR-10数据集分类(上)

本博客只用于学习,如果有错误的地方,恳请指正,如需转载请注明出处. 看机器学习也是有一段时间了,这两天终于勇敢地踏出了第一步,实现了HOG+SVM对图片分类,具体代码可以在github上下载,https://github.com/subicWang/HOG-SVM-classifer.大家都说HOG+SVM是在行人检测中很合拍的一对.至于为啥,我也讲不清楚.我猜想这么合拍的一对应用在图片分类上效果应该也不错吧,事实证明确实还行,速度挺快,分类正确率还行.我用的数据集是http://www.cs.

用Python开始机器学习(2:决策树分类算法)

http://blog.csdn.net/lsldd/article/details/41223147 从这一章开始进入正式的算法学习. 首先我们学习经典而有效的分类算法:决策树分类算法. 1.决策树算法 决策树用树形结构对样本的属性进行分类,是最直观的分类算法,而且也可以用于回归.不过对于一些特殊的逻辑分类会有困难.典型的如异或(XOR)逻辑,决策树并不擅长解决此类问题. 决策树的构建不是唯一的,遗憾的是最优决策树的构建属于NP问题.因此如何构建一棵好的决策树是研究的重点. J. Ross Q

PYTHON之计算机语言基础知识 —— 编程语言的分类

一.计算机语言分类 低级语言.高级语言.专用语言.脚本语言 1.低级语言:机器语言.汇编语言和符号语言.机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令(机器码)的合集,他是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能:汇编语言(亦称符号语言)用助记符代替机器指令的操作码,汇编语言源程序必须经过汇编生成目标文件,然后执行. 2.高级语言:主要是相对汇编语言而言,它更接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序,编写的程序称为源程序