sklearn调包侠之K-Means

作者: 罗罗攀 | 来源:发表于2018-07-08 09:48 被阅读43次

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])

相关文章

  • sklearn调包侠之K-Means

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

  • sklearn的基本使用

    前言 于sklearn的使用来说,目前只是想成为一名调包侠,但是调包侠起码也得知道有哪些包可以调,为此找了一些教程...

  • sklearn调包侠之KNN算法

    天下武功,唯快不破。今天就正式讲解如何通过《sklearn小抄》武林秘籍,成为一代宗师调包侠。欲练此功,必先自宫;...

  • sklearn调包侠之线性回归

    线性回归原理 如图所示,这是一组二维的数据,我们先想想如何通过一条直线较好的拟合这些散点了?直白的说:尽量让拟合的...

  • sklearn调包侠之逻辑回归

    算法原理 传送门:机器学习实战之Logistic回归 正则化 这里补充下正则化的知识。当一个模型太复杂时,就容易过...

  • sklearn调包侠之PCA降维

    PCA PCA(主成分分析),它是一种维度约减算法,即把高维度数据在损失最小的情况下转换为低纬度数据的算法。 实战...

  • sklearn调包侠之支持向量机

    算法原理 对于支持向量机原理,可参考该系列博客(https://www.cnblogs.com/pinard/p/...

  • sklearn调包侠之朴素贝叶斯

    文档处理 朴素贝叶斯算法常用于文档的分类问题上,但计算机是不能直接理解文档内容的,怎么把文档内容转换为计算机可以计...

  • sklearn调包侠之决策树算法

    决策树原理 之前我们详细讲解过决策树的原理,详细内容可以参考该链接(https://www.jianshu.com...

  • sklearn调包侠之无敌小抄

    scikit-learn(以下简称为sklearn)是用Python开发的机器学习库,其中包含大量机器学习算法、数...

网友评论

    本文标题:sklearn调包侠之K-Means

    本文链接:https://www.haomeiwen.com/subject/evneuftx.html