K-Means聚类分析
概述
聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。
聚类旨在发现有用的对象簇,在现实中我们用到很多的簇的类型,使用不同的簇类型划分数据的结果是不同的,关于更多的簇介绍参考《数据挖掘导论》。
K-Means是基于原型的、划分的距离技术,它试图发现用户指定个数的簇。
K-Means算法
算法思想较为简单:
选择K个点作为初始质心
repeat
将每个点指派到距离其最近的质心
重新计算簇的质心
until 簇不发生变化或达到最大迭代次数
k均值算法非常简单且使用广泛,但是其有主要的两个缺陷:
1. K值需要预先给定,属于预先知识,很多情况下K值的估计是非常困难的。
2. K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同
3. K均值算法并不是很所有的数据类型。它不能处理非球形簇、不同尺寸和不同密度的簇。
K-Means算法实验示例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
plt.figure(figsize=(12, 12))
n_samples = 1500
random_state = 170
X,Y = make_blobs(n_samp