数据挖掘与机器学习

十大数据挖掘算法之K-Means

2019-10-13  本文已影响0人  清梦载星河

一、K-Means聚类

1.1 大致概念

K-Means聚类,又称为K均值聚类,是一种常用的聚类算法,且为典型的基于距离的聚类算法,属于无监督学习。其中,K均值是基于原型的、划分的距离技术,它试图发现用户指定个数的簇。其以欧氏距离作为相似度测试。

1.2 主要的聚类过程

  1. 猜测一些簇中心点的位置;
  2. 重复至收敛。

1.3 K-Means聚类的注意事项

1.4 K-Means聚类的优缺点

优点

  1. K-均值算法是解决聚类算法的一种经典算法,算法容易实现,简单而快速;
  2. 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是 O(nkt) ,
    其中 n 是所有对象的数目 k 是簇的数目,t 是迭代的次数。通常 k<<n。这个算法经常以局部
    最优结束。
  3. 算法尝试找出使平方误差函数值最小的 k 个划分。当簇是密集的、球状或团状的,而簇
    与簇之间区别明显时,它的聚类效果很好。

缺点

  1. k-均值只有在簇的平均值被定义的情况下才能使用,不适用于某些应用, 如涉及有
    分类属性的数据不适用。
  2. 要求使用者必须事先给出要生成的簇的数目 k。
  3. 对初值敏感,对于不同的初始值,可能会导致不同的聚类结果。
  4. 不适合于发现非凸面形状的簇,或者大小差别很大的簇。
  5. 对于"噪声"和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

二、Python实现

2.1 Talk is cheap, show me the code.

# 运行于Jupyter Notebook
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 创建数据
from sklearn.datasets.samples_generator import make_blobs
# make_blobs 为聚类数据生成器

#x是一个shape为(300,2)的二维numpy.ndarray
#y_true是shape为(300,)的一维ienumpy.ndarray
x,y_true = make_blobs(n_samples = 300, #生成300条数据
                     centers =4, #四类数据
                     cluster_std=0.5, #方差一致
                     random_state=0)

# 绘制散点图
plt.rcParams['figure.figsize'] = (16,9)
plt.scatter(x[:,0],x[:,1],s=10,alpha=0.8)
plt.grid()

# 创建模型
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)
kmeans.fit(x)
y_kmeans = kmeans.predict(x)

# 画出簇中心点
plt.scatter(x[:,0],x[:,1],c=y_kmeans,s=50,cmap='viridis')

# centers为簇中心点的数据
centers = kmeans.cluster_centers_
plt.scatter(centers[:,0],centers[:,1],c='red',s=200,alpha=0.5)
创建数据 画出簇中心点

三、sklearn.cluster.KMeans

class sklearn.cluster.KMeans(
    n_clusters=8, # 聚类中心的数目,默认为8
    init=’k-means++’, # 聚类的初始化方案,{‘k-means++’, ‘random’ or an ndarray}
    n_init=10, # kmeans随机运行次数
    max_iter=300, # 算法运行的最大迭代次数
    tol=0.0001, # 与inertia属性结合确定收敛条件
    precompute_distances=’auto’, # 是否将数据全部放入内存,{‘auto’, True, False}
    verbose=0, # 是否输出详细信息,int, default 0
    random_state=None, # 用于随机产生中心的随机序列
    copy_x=True, # 是否直接在原矩阵上进行计算。默认为True,会copy一份进行计算。
    n_jobs=None, # 同时进行计算的核数(并发数)
    algorithm=’auto’ # 可选的K-means距离计算算法,{“auto”, “full” or “elkan”, default=”auto”}
    )

3.1 属性

属性名 解释
cluster_centers_ 聚类中心的坐标
labels_ 每个点的分类标签
inertia_ 样本到最近聚类中心的距离平方和
n_iter_ 算法运行时的迭代次数

3.2 方法

方法名 解释
fit() 训练模型
fit_predict()
fit_transform()
get_params() 获得模型的参数
predict()
score() 计算模型误差
set_params()
transform() 转换训练数据为群集距离空间
上一篇 下一篇

猜你喜欢

热点阅读