无监督学习 — — 聚类方法分类

Posted 码猿小菜鸡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无监督学习 — — 聚类方法分类相关的知识,希望对你有一定的参考价值。

无监督学习 — — 聚类方法分类

0. 聚类

clustering 是将数据集划分成组的任务,这些组叫做簇,其目标是划分数据,使得一个簇内的数据点非常相似,不通簇内的数据点又非常不同。

1. K均值聚类

K均值算法试图找到代表数据特定区域的簇中心,交替执行以下两个步骤:
1.将每个数据点分配给最近的簇中心,
2.每个簇中心设置为所分配的所有数据点的平均值,如果簇的分配不再发生变化,算法结束

(1). K均值聚类存在问题:
  1. 要求指定寻找簇的个数
  2. k均值只能找到相对简单的形状
  3. k均值仅考虑到最近簇中心的距离
  4. 算法的输出依赖于随机种子

(2). K均值聚类实现代码:
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

# 加载数据
X,y = make_blobs(random_state=1)
plt.scatter(X[:,0],X[:,1])

# 开始训练
Kmeans = KMeans(n_clusters=3)
Kmeans.fit(X)
# print(Kmeans.labels_)

# 开始预测
y_pred = Kmeans.predict(X)
plt.scatter(X[:,0],X[:,1],c=y_pred) # c=y_pred 表示颜色序列
plt.scatter(Kmeans.cluster_centers_[:,0],Kmeans.cluster_centers_[:,1],marker='^',linewidths=6,cmap=plt.cm.get_cmap('RdYlBu')) # 绘制中心点

plt.show()

2. 凝聚聚类

凝聚聚类:许多基于相同原则构建的聚类算法︰
1.首先每个点都是自己的簇,然后合并两个最相似的簇,直到满足某种停止准则为止,比如停止准则是簇的个数,因此相似的簇被合并,直到剩下指定个数的簇

2.用迭代的方式合并两个最近的簇,“最佳”的意思是簇的方差之和最小


(1). 凝聚聚类实现代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from sklearn.datasets import make_blobs
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans
# 凝聚聚类
from sklearn.cluster import AgglomerativeClustering
X,y = make_blobs(random_state=1)
X_m,y_m = make_moons(n_samples=200,noise=0.05,random_state=1)

agg = AgglomerativeClustering(n_clusters=2)
ass = agg.fit_predict(X)
ass_m = agg.fit_predict(X_m) # 月亮形状数据

# plt.scatter(X[:,0],X[:,1],c = ass)
plt.scatter(X_m[:,0],X_m[:,1],c = ass_m)

3. DBSCAN 聚类

DBSCAN原理:识别特征空间的“拥挤”区域的点
1.增大eps从左到右,更多的点会被包含在一个簇中,
2.增大min_samples,核心点会变得更少,更多的点被标记为噪声
2.用迭代的方式合并两个最近的簇,“最佳”的意思是簇的方差之和最小

(1). DBSCAN 聚类实现代码:
from sklearn.cluster import DBSCAN
from sklearn.cluster import AgglomerativeClustering

# 加载数据
X,y = make_blobs(random_state=1)
X_m,y_m = make_moons(n_samples=200,noise=0.05,random_state=1)

# 训练并预测 DBSCAN 模型
dbscan = DBSCAN(eps=0.2) # 不同数据需要使用不同 eps,eps的调整极为重要

clusters_m = dbscan.fit_predict(X_m)

plt.scatter(X_m[:,0],X_m[:,1],c = clusters_m)

以上是关于无监督学习 — — 聚类方法分类的主要内容,如果未能解决你的问题,请参考以下文章

聚类算法初探

资源|常用聚类算法学习推荐

11.理解分类与监督学习聚类与无监督学习。

11.理解分类与监督学习聚类与无监督学习。

5种聚类算法!数据分析师必须要掌握

无监督学习 之 凝聚聚类算法