一.聚类概述及基本使用
目的:对于样本空间中的不同样本希望在经过聚类后得到分类的效果
例:一个坐标轴中有多个点,每个点都有对应的坐标,样本空间表示为[[x1,y1],[x2,y2],[x3,y3]]一个二维向量
过程:样本空间 -->f()函数中(可以指定分成几类) -->聚类结果
import matplotlib.pyplot as plt
from sklearn import datasets
#产生样本点 :5000样本点,内外圆环间的比例,噪声系数
x,y = datasets.make_circles(n_samples=5000,factor=0.5,noise=0.05)
#其中 x是生成的样本点,y是样本点的标注如array([0, 1, 1, ..., 0, 1, 0])
plt.figure(figsize=(5,5))
plt.scatter(x[:,0],x[:,1],marker='o',c=y) #c=y:根据y来设置颜色
#K-means聚类
from sklearn.cluster import KMeans
y_pred = KMeans(n_clusters=2,random_state=2021).fit_predict(x)
plt.figure(figsize=(5,5))
plt.scatter(x[:,0],x[:,1],c=y_pred)
plt.title("K-means")
#DBSCAN聚类
from sklearn.cluster import DBSCAN
y_pred =DBSCAN(eps=0.1,min_samples=10).fit_predict(x) #eps半径,min_samples邻居10个点
plt.figure(figsize=(5,5))
plt.scatter(x[:,0],x[:,1],c=y_pred)
plt.title("DBSGAN")
二.算法理解及解释
1.K-Means算法(划分聚类)
聚类算法理论篇(K-means,DBSCAN原理)_visualizing k-means clustering-CSDN博客
可以参考这个博客
理解:简单来说这个算法先是根据我们输入的经验类别K来随便放置K个点,对这K个点分区然后计算3(K)个区中的3(K)个中心点,中心点的位置就是一个聚类区中所有向量的均值,而中心点作为新一轮的点位重新分区再计算新的中心点,直到点位不再发生改变,在数学公式上就对于所有点位分区的后各个区的点到中心点欧式距离之和的值最小。
优点:原理简单,实现容易,可解释性强,对于凸数据集聚类效果好
缺点:需要指定K类,这需要观察和经验,对非凸数据集效果差,容易受到噪声,边缘点,孤立点影响
2.DBSCAN算法(密度聚类)
Question:
1.如何判断高密度的对象点?
2.如何判断离群/噪声点?
3.如何发现簇,如何分类?
簇的定义:数据空间中被低密度区域(噪声)分隔开的稠密对象区域,发现并划分任意形状含有噪声的样本空间中的高