一,介绍

算法主要步骤包括:初始化原型向量;迭代优化,更新原型向量。

流程如下:

具体来说,主要是: 
1、对原型向量初始化,可以选择满足yj=tj,j∈{1,2,…,m}yj=tj,j∈{1,2,…,m}条件的某个样本 xj=(xj1,xj2,…,xjn)xj=(xj1,xj2,…,xjn)作为 qjqj的初始值; 
2、从数据集DD 中任意选择一个样本 xjxj,找到与此样本距离最近的原型向量,假设为qiqi ; 
3、如果xjxj的标记yjyj 与qiqi的标记titi相等,即 yj=ti,yj=ti,则令:

否则:

4、更新原型向量:

5、判断是否达到最大迭代次数或者原型向量更新幅度小于某个阈值。如果是,则停止迭代,输出原型向量;否则,转至步骤2。 
其中步骤3和4的物理意义是:如果xjxj和最近的原型向量qiqi具有同样的类别标记,则令 qiqi向 xjxj的方向靠拢,且:

否则,qiqi 远离 xjxj,且

二,代码实现

import matplotlib.pyplot as plt
import numpy as np
import math
import randomdef loadDataSet(filename):fr = open(filename)numberOfLines = len(fr.readlines())returnMat = np.zeros((numberOfLines, 2))classLabelVector = []fr = open(filename)index = 0for line in fr.readlines():line = line.strip().split(',')returnMat[index, :] = line[0:2]classLabelVector.append(line[-1])index += 1return returnMat, classLabelVector# 欧几里得距离
def edistance(v1, v2):result=0.0for i in range(len(v1)):result +=(v1[i]-v2[i])**2return math.sqrt(result)# 学习向量量化算法
def lvq(dataMat, labelMat,alpha=0.1,times=500):classify = set(labelMat)randinfo = [random.randint(0,14),random.randint(15,30)]clusters = [dataMat[randinfo[i]] for i in range(len(randinfo))]  # 随机选取k个值作为聚类中心while times > 0:              # 迭代次数n = random.randint(0,29)d=np.array([edistance(clusters[i], dataMat[n]) for i in range(len(clusters))],dtype='float') # 获取和各个聚类中心距离index = np.argmin(d)if(labelMat[n]==labelMat[randinfo[index]]):                                                # 同类靠近clusters[index]=clusters[index]+alpha*(dataMat[n]-clusters[index])print("同类:",alpha*(dataMat[n]-clusters[index]))else:                                                                                      # 异类远离clusters[index] = clusters[index] - alpha * (dataMat[n] - clusters[index])print("异类:", alpha * (dataMat[n] - clusters[index]))times-=1print("中心点:%s",(clusters))return clustersdef plot(dataMat, labelMat,clusters):xcord = [];ycord = []sumx1 = 0.0;sumy1 = 0.0;sumx2 = 0.0;sumy2 = 0.0midx = [];midy = []for i in range(len(dataMat)):xcord.append(float(dataMat[i][0]));ycord.append(float(dataMat[i][1]))for i in range(len(labelMat)):if(labelMat[i]=="1"):plt.scatter(xcord[i], ycord[i], color='red')else:plt.scatter(xcord[i], ycord[i], color='black')for c in clusters:plt.scatter(c[0], c[1], marker='+', color='blue')for j in range(len(labelMat)):if (labelMat[j] == "1"):sumx1+=xcord[j]sumy1+=ycord[j]else:sumx2 += xcord[j]sumy2 += ycord[j]midx.append(sumx1 / 17)midx.append(sumx2 / 17)midy.append(sumy1 / 13)midy.append(sumy2 / 13)plt.scatter(midx, midy, marker='*',color='green')plt.show()if __name__=='__main__':dataMat, labelMat = loadDataSet('watermelon4.1.txt')clusters = lvq(dataMat, labelMat)plot(dataMat, labelMat,clusters)

结果如下:

机器学习-聚类(学习向量量化算法)相关推荐

  1. 机器学习 - [集成学习]Bagging算法的编程实现

    机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...

  2. 机器学习-聚类(混合高斯算法)

    一,介绍 学习混合高斯,先要了解几个概念: 1,协方差: 协方差是对两个随机变量联合分布线性相关程度的一种度量.两个随机变量越线性相关,协方差越大,完全线性无关,协方差为零. 根据数学期望的性质: 推 ...

  3. 机器学习深度学习 常用算法推导

    基础 符号 含义 CCC 特征通道数(此处仅代表含义,不同地方的CCC数值可能不同) NNN 样本数 以下所有"向量"代表列向量 每一个样本点xxx都是一个向量,多个样本组成矩阵X ...

  4. 机器学习--集成学习Stacking算法23

    什么是Stacking 使用多个不同的分类器对训练集进预测,把预测 得到的结果作为一个次级分类器的输入.次级分 类器的输出是整个模型的预测结果. Stacking需要训练两层分类器,第一层的初级分类器 ...

  5. 机器学习新手十大算法

    有一个通用原则是所有用于预测建模的受监督机器学习算法的基础. 机器学习算法被描述为学习目标函数(f),该函数最好将输入变量(X)映射到输出变量(Y):Y = f(X) 这是一个简单的学习任务,我们想在 ...

  6. 聚类和EM算法——K均值聚类

    20211116 数据分析 | 聚类分析--kmean kmeans最优k值的确定方法-手肘法和轮廓系数法 - 简书 python大战机器学习--聚类和EM算法 注:本文中涉及到的公式一律省略(公式不 ...

  7. 机器学习十大经典算法

    本文介绍了机器学习新手需要了解的 10 大算法,包括线性回归.Logistic 回归.朴素贝叶斯.K 近邻算法等. 在机器学习中,有一种叫做「没有免费的午餐」的定理.简而言之,它指出没有任何一种算法对 ...

  8. 炼数成金数据分析课程---17、机器学习聚类算法(后面要重点看)

    炼数成金数据分析课程---17.机器学习聚类算法(后面要重点看) 一.总结 一句话总结: 大纲+实例快速学习法 主要讲解常用聚类算法(比如K-means等)的原理及python代码实现:后面学习聚类的 ...

  9. Python 机器学习/深度学习/算法专栏 - 导读目录

    目录 一.简介 二.机器学习 三.深度学习 四.数据结构与算法 五.日常工具 一.简介 Python 机器学习.深度学习.算法主要是博主从研究生到工作期间接触的一些机器学习.深度学习以及一些算法的实现 ...

最新文章

  1. Google Android向华为“闭源”,华为手机迎来至暗时刻!
  2. laravel允许所有网站进行跨域操作
  3. 《软件需求分析(第二版)》第 10 章——编写需求文档 重点部分总结
  4. linux 显示文件名写到txt,C++获取某个路径下所有文件的文件名,读写TXT文件到新的文件...
  5. 【中文分词】隐马尔可夫模型HMM
  6. vector二维的长度
  7. 基于OpenCV的计算机视觉入门(2)图片几何变换入门
  8. 【c++】指针常量与常量指针
  9. PL2303 Windows8.1驱动的问题
  10. 一次编译安装SENginx 的小经历.....
  11. pyplot中文手册_Matplotlib中文手册 PDF 下载
  12. container-coding-codec
  13. TcaplusDB X 光与夜之恋,来谈一场高沉浸式的恋爱吧
  14. 高一计算机网络技术应用计划,高一信息技术课教学计划
  15. ognl以及令牌以及开头的一点方法
  16. C#中如何调出工具箱
  17. 努力和家境哪个更重要
  18. CC3200 与 CC2530的SPI通信
  19. html ol圆点,HTML ol 标签 type属性
  20. JAVA项目经历的职责

热门文章

  1. Mac上通过pecl安装PHP扩展
  2. windows2003装linux,Win2003服务器系统安装图文教程
  3. 乐高大颗粒作品20:翼龙
  4. 考试自动评分系统C语言改错,谈C语言上机考试的自动评分
  5. 怎样设定锡膏回流温度曲线
  6. 主力吸筹猛攻指标源码_主力吸筹猛攻指标源码
  7. 网络知识点灵魂拷问——前端面试必问
  8. BGP路由器协议排错教程:缺失 BGP 路由的排错
  9. 扩展Detectron2的接口与逻辑
  10. 会覆盖本地_新服务进阶,阿里本地生活开启“三环阵营”