基础篇 | 04 K-Means 算法

本文介绍了无监督学习中的K-Means算法,包括聚类和关联分析的基础知识,以及K-Means的实现步骤。通过计算欧拉距离,从txt文件加载数据,实现K-Means算法,并展示了代码实现过程。文章还解释了在Python中处理数组和形状的概念。
摘要由CSDN通过智能技术生成

聚类算法和关联分析算法简述

  • K-Means算法(聚类算法)
    K均值算法,将数据分为某一类,但不会告诉你类的具体名称,需要我们自己指定类的标签。本质上它是计算点与点之间的最小距离,将他们归为一类。
  • Apriori算法(关联分析算法)
    寻找数据之间频繁项集、并做数据推荐的算法。常见Amazon、京东、淘宝等的商品推荐。
  • FP-Growth算法(关联分析算法)
    和Apriori算法功能一样,但性能上做了一些优化,比Apriori快了一个数量级。

监督学习与无监督学习简述

  • 监督学习
    分为两种:分类,回归
    分类:从特征到标签的学习过程。
    比如,我们知道鸟的羽毛颜色、高度、体重等体征(特征),和他们的种类(标签)。我们学习出从体征到种类的映射关系。机器学习的目的就是让用户输入一个鸟的特征,输出鸟的种类。这个过程就是根据鸟的属性分类的过程。
    回归:比如,根据人的身高、体重等体征信息,以及血糖浓度,训练一套从体重信息到血糖浓度的映射模型,当病人再次输入新的体征,我们就能预测出他血糖浓度。这些特征及血糖浓度属于数值,对数值型数据的预测呢,我们称为回归。我们不仅需要提供原始数据的特征,还要提供每个样本的结果。这个结果就是我们的目标。机器学习的目的是从特征到目标之间建立映射关系。这种从特征到目标的映射关系称为监督学习。
  • 无监督学习
    分三种:聚类、降维度、自编码
    降维和自编码在后面神经网络篇在给大家讲解,因为这块可能比较复杂。

今天介绍的这三个算法归到聚类里面和关联分析,都是无监督学习算法。今天讲无监督学习,在这之后,我们会安排三篇文章讲监督学习,主要是分类。先来看无监督学习中的K-Means 算法。

K-Means 算法实现步骤

k-means
1. 获取原始数据;
2. 初始化质点
初始质点的数量和值可以随机指定;
3. 计算数据样本到质点之间的欧拉距离,样本数据距离哪个质点距离最近,就将该样本归为此类;
4. 调参,迭代;计算同一类别中所以的数据的平均值作为新的质点,参与下一轮迭代,即重新分类,重复步骤3;
5. 直到下一次分类的结果与上一次相同,则迭代终止,完成聚类;

K-Means 算法代码演示

代码包结构目录

package table
目录注解
algorithm package:
__init__.py: this is a Python Package identifier .
kmeans.py: implement K-Means algorithm ’s file.
common package:
io package: the data input and output.
tsv.py: (tag separate value) , 标签分割值,用于导入数据。
math.py : 计算欧拉距离的文件,封装了计算欧拉距离的方法。
tree.py and treeplot.py : 复用前一篇文章的二叉树绘制类,可以用于将我们分类的结果以图的形式展示出来,当然,本篇文章暂时用不到。关于如何绘制二叉树,请移步上一篇 Python 入门
kmeansPoints.txt:数据源文件,做k-maens算法需要用到的原始数据集合。
kmeanssample:最终实现K-Means算法的入口文件。

我们来一步步看。

计算欧拉距离

我们先来写一个计算欧拉距离公式的文件:math.py

  • 如何计算两点间的欧拉距离
    euler distance
    如图所示:
    欧拉距离即两点间的直线距离。
    (x1,y1) 点到 (x2,y2)点的距离:x1 减x2 的平方 加上 y1 减y2的平方;再开根号。

math.py 代码
numpy给我们提供的公式计算。

import numpy as np

# 计算欧拉距离:将最短的点归为一类,做聚类操作
def eulerDistance(vA, vB):
    # 计算两点之间的直线距离:两点之间差的平方之和再开根号
    return np.sqrt(np.sum(np.power(vA - vB,2)))

从txt文件载入数据

创建数据载入文件tsv.py,负责数据的载入、分析;处理为我们需要的二维数组数据。

  • kmeansPoints.txt 文件的数据格式
    每一行代表平面上的一个点坐标,前面的数代表x值,后面的数代表y值,数据类型为浮点数。
    如
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值