K-Means算法

k-均值算法(K-Means算法)是一种典型的无监督机器学习算法,用来解决聚类问题。

算法流程

K-Means聚类首先随机确定 K 个初始点作为质心(这也是K-Means聚类的一个问题,这个K值的不合理选择会使得模型不适应和解释性差)。然后将数据集中的每个点分配到一个簇中, 具体来讲,就是为每个点找到距其最近的质心(这里算的为欧式距离,当然也可以使用其他距离), 并将其分配该质心所对应的簇;这一步完成之后,每个簇的质心更新为该簇所有点的平均值;重复上述过程直到数据集中的所有点都距离它所对应的质心最近时结束。

算法伪代码

创建 k 个点作为起始质心(随机选择)

当任意一个点的簇分配结果发生改变时(不改变时算法结束)

对数据集中的每个数据点

对每个质心

计算质心与数据点之间的距离

将数据点分配到距其最近的簇

对每一个簇, 计算簇中所有点的均值并将均值作为质心

实战

构造数据

首先,我们用make_blobs创建数据集,如图所示。

%matplotlib inline

import matplotlib.pyplot as plt

import numpy as np

from sklearn.datasets import make_blobs

X, y = make_blobs(n_samples=200,

n_features=2,

centers=4,

cluster_std=1,

center_box=(-10.0, 10.0),

shuffle=True,

random_state=1)

plt.figure(figsize=(6,4), dpi=144)

plt.xticks(())

plt.yticks(())

plt.scatter(X[:, 0], X[:, 1], s=20, marker='o')

训练模型与评估

该算法使用 sklearn.cluster 模块中的KMeans函数。

from sklearn.cluster import KMeans

n_clusters = 3

kmean = KMeans(n_clusters=n_clusters)

kmean.fit(X);

print("kmean: k={}, cost={}".format(n_clusters, int(kmean.score(X))))

# result

# kmean: k=3, cost=-668

绘制聚类结果

最后,我们通过matplotlib绘制聚类的结果,如图所示:

labels = kmean.labels_

centers = kmean.cluster_centers_

markers = ['o', '^', '*']

colors = ['r', 'b', 'y']

plt.figure(figsize=(6,4), dpi=144)

plt.xticks(())

plt.yticks(())

# 画样本

for c in range(n_clusters):

cluster = X[labels == c]

plt.scatter(cluster[:, 0], cluster[:, 1],

marker=markers[c], s=20, c=colors[c])

# 画出中心点

plt.scatter(centers[:, 0], centers[:, 1],

marker='o', c="white", alpha=0.9, s=300)

for i, c in enumerate(centers):

plt.scatter(c[0], c[1], marker='$%d$' % i, s=50, c=colors[i])

python调包侠_sklearn调包侠之K-Means相关推荐

  1. python调包侠_sklearn调包侠之决策树算法

    决策树原理 改进算法 但使用信息增益作为特征选择指标(ID3算法)容易造成过拟合.举一个简单例子,每个类别如果都有一个唯一ID,通过ID这个特征就可以简单分类,但这并不是有效的.为了解决这个问题,有了 ...

  2. R语言使用caret包对GBM模型参数调优(自定义调优的评估指标,例如ROC指标):抽取预测标签及类概率、抽样ROC的指标并绘制密度图

    R语言使用caret包对GBM模型参数调优(自定义调优的评估指标,例如ROC指标):抽取预测标签及类概率.抽样ROC的指标并绘制密度图 目录 R语言使用caret包对GBM模型参数调优(自定义调优的评 ...

  3. Python-sklearn包中自动调参方法-网格搜索GridSearchCV

    sklearn包中自动调参方法-网格搜索GridSearchCV 一.GridSearchCV主要作用及函数参数 GridSearchCV:作用是在指定的范围内可以自动调参,只需将参数输入即可得到最优 ...

  4. Python之网络编程(粘包、粘包解决方案)

    文章目录 tcp粘包 第一种粘包 第二种粘包 udp粘包 解决粘包现象 粘包现象是指发送方发送的若干数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.粘包现象只会在tcp ...

  5. python笔记6 模块与包 程序开发规范 包 re sys time os模块

    模块与包 python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. python文件分为:执行文件(解释器运行的文件),被引用文件(import) 模块引用一共发生了3件事: 1.他 ...

  6. python 解压缩 tar 包 或 tar.gz包

    python 解压缩 tar 包 或 tar.gz包 # pip install rarfile import tarfile def decompression_tar(tar_path, file ...

  7. python第三方库中函数调用_Python学习笔记(2)——Python的函数、模块、包和库...

    初识Python,对于没有接触过编程的我,恐怕只能听懂什么是函数,这里介绍一下几个概念,并给出Python在调用方面的独特之处. 函数 理解为数学上的函数就可以了.下载安装完python后,并不是所有 ...

  8. python正确的赋值语句-Python 赋值语句技巧之序列解包

    python赋值语句技巧之序列解包sequence unpacking,是python语言赋值语句的一种技巧方法,在给多个python 变量命名同时赋值时是很有效率的一种方法. 赋值语句序列解包概念 ...

  9. python包pip安装_python包管理之Pip安装及使用

    Python有两个著名的包管理工具easy_install.py和pip.在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装. pip可以运行在Uni ...

最新文章

  1. The Third Revolution in Sequencing Technology
  2. 控制文字长度,多出的文字用省略号代替
  3. android 蓝牙传输分包,彻底掌握Android多分包技术(一)
  4. 关于《蜗居》的一点想法
  5. Linux网络新技术基石 |​eBPF and XDP
  6. CF--思维练习--CodeForces - 220C Little Elephant and Shifts (STL模拟)
  7. 1-3移动均线交叉策略2
  8. Qt|设计模式工作笔记-对单例模式进一步的理解(静态加单例实现专门收发UDP对象)
  9. oracle 循环继续,oracle – 是否可以继续从异常循环?
  10. python map什么意思_Python中map是什么意思
  11. shopnum1商城系统
  12. 如何让jpa 持久化时不校验指定字段
  13. 怎么使用oracle的加权平均数_加权平均数与算术平均数的区别,实例比较。
  14. 用python祝男朋友生日快乐_祝男朋友生日快乐的说说50句
  15. 推荐一款适合苹果电脑小白使用的BT下载器
  16. namesilo如何使用BTC支付:
  17. 电影影视网站对接微信公众号 日引流500+的实例教学
  18. css实现网页对联广告
  19. Paper:《The Illustrated Word2vec》翻译与解读
  20. Mysql.cnf配置详解

热门文章

  1. 20、在Linux中实现类似windows中获取配置文件的函数GetProfileString
  2. ubuntu下安装MySQL8.0
  3. JAVA中properties基本用法
  4. 模型集成01-Bagging/Boosting/Stacking
  5. 稳定土厂拌设备控制系统-基本介绍(图)
  6. 【详解】消息队列和线程关系
  7. 生成验证码的一段源代码
  8. 推荐免费的Windows Mobile截屏软件
  9. MFC Radio Button笔记
  10. windows API 菜鸟学习之路(二)