什么是聚类算法?与分类算法有何区别?代码举例讲解

聚类算法和分类算法都是机器学习中的一类算法,用于对数据进行分组。但两者有以下主要区别:

  • 聚类是无监督学习,不需要训练集;分类是有监督学习,需要训练集。
  • 聚类的目标是按照数据之间的相似度将数据分为不同的簇,相同簇中的数据趋于相似;分类的目标是根据训练集对新数据进行正确的类别划分。
  • 聚类得到的结构可以用于发现数据的内在规律或分布,而不需要提前定义数据的类别;分类得到的结果依赖于训练集的类别标签。

常见的聚类算法有:

  • K均值聚类:将数据分为K个簇,使得同一簇内数据保持较高相似度。
  • 层次聚类:依据数据之间的距离将数据从近到远进行合并,形成层次结构。
  • DBSCAN:根据数据的密度将数据分为核心对象、边界对象和噪音对象,从而发现任意形状的簇。

代码示例:

K均值聚类:

python
from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3)  
kmeans.fit(x)
labels = kmeans.labels_

层次聚类:

python
from scipy.cluster.hierarchy import dendrogram, linkage

linkage_matrix = linkage(x, "ward")  
dendrogram(linkage_matrix)

DBSCAN:

python
from sklearn.cluster import DBSCAN

dbscan = DBSCAN(eps=0.3, min_samples=10)  
dbscan.fit(x) 
labels = dbscan.labels_