机器学习---聚类问题

简介: 机器学习---聚类问题

前言


之前讲的都是监督学习,今天来说说非监督学习。而其中聚类问题作为非监督学习的代表,更要好好谈谈。


非监督学习


回顾一下,什么是非监督学习。非监督学习是指不受监督的学习,是一种自由的学习方式,没有先验知识的指导。或者通俗一点地说就是不需要为训练集提供对应类别标签的学习方法


非监督学习主要分为两种:聚类和降维 所以下面聊聊几种聚类算法


聚类问题


聚类是指把相似的对象通过静态分类的方法分成不同组别的子集,使得同一子集中的成员都有相似的属性。 聚类算法主要有系统聚类,KMeans(K-均值聚类),密度聚类和Mean Shift聚类


  • 1.系统聚类:分为凝聚和分裂两种,凝聚就是由小的分类簇迭代成大的,而分裂则是大的簇分为小的簇
  • 2.KMeans聚类:把n个点划分到k个簇中,使得每个点都属于离它最近的均值对应的簇
  • 3.密度聚类:聚类结构依据样本分布密度的紧密程度而确定
  • 4.Mean Shift聚类:一般是指先算出当前点的偏移均值,然后以此为新的起始点,继续移动,直到满足一定的结束条件。 主要是一种无参密度估计的算法,Mean Shift是一个向量,它的方向是指向当前点上概率密度梯度的方向


下面主要讲讲最常见的系统聚类和KMeans的例子


对iris和葡萄酒数据集聚类的例子


1.对iris进行系统聚类首先导入数据集,然后使用PCA对数据降维处理,使最后的聚类结果能很好的展现在二维平面上(后面对葡萄酒数据集的处理同理)


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy as sp
from matplotlib import cm
import matplotlib as mpl
from sklearn import cluster,datasets
from sklearn.decomposition import PCA
plt.rcParams['axes.unicode_minus']=False
复制代码
iris=datasets.load_iris()
df=pd.DataFrame(iris.data,columns=iris.feature_names)
df['species']=iris.target
pca=PCA(n_components=3)
newiris=pca.fit_transform(iris.data)
df.head()


image.png

print("方差贡献率:",pca.explained_variance_ratio_)
print("累计方差贡献率:",np.sum(pca.explained_variance_ratio_))
复制代码


image.png


hicl=cluster.AgglomerativeClustering(n_clusters=3,affinity='euclidean',connectivity=None,linkage='ward')
hicl_pre=hicl.fit_predict(newiris)
newiris[iris.target==0,0]
fig=plt.figure(figsize=(12,5))
ax1=fig.add_subplot(121)
ax1.scatter(newiris[iris.target==0,0],newiris[iris.target==0,1],c='r',alpha=1,marker="*")
ax1.scatter(newiris[iris.target==1,0],newiris[iris.target==1,1],c='g',alpha=1,marker="s")
ax1.scatter(newiris[iris.target==2,0],newiris[iris.target==2,1],c='b',alpha=1,marker="d")
ax1.set_xlabel("主成分1")
ax1.set_ylabel("主成分2")
ax1.set_title("未聚类")
ax2=fig.add_subplot(122)
ax2.scatter(newiris[hicl_pre==0,0],newiris[hicl_pre==0,1],c="g",alpha=1,marker="s")
ax2.scatter(newiris[hicl_pre==1,0],newiris[hicl_pre==1,1],c="r",alpha=1,marker="*")
ax2.scatter(newiris[hicl_pre==2,0],newiris[hicl_pre==2,1],c="b",alpha=1,marker="d")
ax2.set_xlabel("主成分1")
ax2.set_ylabel("主成分2")
ax2.set_title("系统聚类")
plt.subplots_adjust(wspace=0.2)
plt.show()
复制代码


image.png


然后绘制一下系统聚类树,可以很好的看出聚类数目和系统聚类树形状数量之间的关系


#绘制系统聚类树
from scipy.cluster.hierarchy import dendrogram,linkage
z=linkage(newiris,method='ward',metric='euclidean')
fig=plt.figure(figsize=(30,12))
irisdn=dendrogram(z)
plt.axhline(y=10,color='k',linestyle='solid',label='three class')
plt.axhline(y=20,color='g',linestyle='dashdot',label='two class')
plt.title("层次聚类树")
plt.xlabel("ID")
plt.ylabel("距离")
plt.legend(loc=1)
plt.show()


image.png

2.对葡萄酒数据集进行KMeans聚类


wine=datasets.load_wine(return_X_y=True)
wineX=wine[0]
pca=PCA(n_components=5)
newwine=pca.fit_transform(wineX)
print("累计方差贡献率:",np.sum(pca.explained_variance_ratio_))
复制代码


image.png


#绘图找出最好的聚类k值
k=np.arange(1,20)
error=[]
for i in k:
    kmeans=cluster.KMeans(n_clusters=i,random_state=1)
    kmeans.fit(newwine)
    error.append(kmeans.inertia_)
plt.figure(figsize=(10,5))
plt.plot(k,error,"r-o")
plt.xlabel("聚类数目")
plt.ylabel("类内误差平方和")
plt.title("K-Means聚类")
plt.xticks(np.arange(1,20,2))
plt.grid()
plt.show()
复制代码


image.png


#由上图可知分为三类效果最好,所以把k=3
kmean=cluster.KMeans(n_clusters=3,random_state=1)
k_pre=kmean.fit_predict(newwine)
fig=plt.figure(figsize=(6,5))
ax1=fig.add_subplot(111)
ax1.scatter(newwine[k_pre==0,0],newwine[k_pre==0,1],c='r',alpha=1,marker="*")
ax1.scatter(newwine[k_pre==1,0],newwine[k_pre==1,1],c='g',alpha=1,marker="s")
ax1.scatter(newwine[k_pre==2,0],newwine[k_pre==2,1],c='b',alpha=1,marker="d")
ax1.scatter(kmean.cluster_centers_[:,0],kmean.cluster_centers_[:,1],c='white',marker='o',s=80,edgecolor='k')#聚类的中心点,设成白色
ax1.set_xlabel("主成分1")
ax1.set_ylabel("主成分2")
ax1.set_title("KMeans聚类为三类的结果")
plt.show()
复制代码


image.png


总结:


聚类问题在日常生活中还是经常能遇到,毕竟很多东西本来就是没有自带标签的,然后例子中也是使用最普遍的算法,还有相关的其他算法以后会补充。

目录
相关文章
|
1月前
|
机器学习/深度学习 算法 数据可视化
机器学习的核心功能:分类、回归、聚类与降维
机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习。
26 0
|
3月前
|
机器学习/深度学习 数据采集 算法
【机器学习】K-Means聚类的执行过程?优缺点?有哪些改进的模型?
K-Means聚类的执行过程、优缺点,以及改进模型,包括K-Means++和ISODATA算法,旨在解决传统K-Means算法在确定初始K值、收敛到局部最优和对噪声敏感等问题上的局限性。
64 2
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中的距离度量有哪些及公式表示?
聚类算法中常用的距离度量方法及其数学表达式,包括欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等多种距离和相似度计算方式。
281 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】Python详细实现基于欧式Euclidean、切比雪夫Chebyshew、曼哈顿Manhattan距离的Kmeans聚类
文章详细实现了基于不同距离度量(欧氏、切比雪夫、曼哈顿)的Kmeans聚类算法,并提供了Python代码,展示了使用曼哈顿距离计算距离矩阵并输出k=3时的聚类结果和轮廓系数评价指标。
67 1
|
5月前
|
机器学习/深度学习 数据挖掘
机器学习之聚类——模糊聚类FCM
机器学习之聚类——模糊聚类FCM
95 4
|
5月前
|
机器学习/深度学习 算法 搜索推荐
机器学习中的聚类
**文章摘要:** 本文介绍了聚类算法的基本概念、应用、实现流程和评估方法。聚类是一种无监督学习技术,用于将数据分为相似的组,如K-means、层次聚类、DBSCAN和谱聚类。K-means算法通过迭代优化质心,将数据点分配到最近的簇,直至质心不再变化。模型评估包括误差平方和(SSE)、肘部方法(确定最佳簇数)和轮廓系数法(Silhouette Coefficient),以量化聚类的紧密度和分离度。应用场景涵盖用户画像、广告推荐和图像分割等。在Python的sklearn库中,可以使用KMeans API进行聚类操作。
|
5月前
|
机器学习/深度学习 算法 数据挖掘
机器学习——DBSCAN 聚类算法
【6月更文挑战第8天】DBSCAN是一种基于密度的无监督聚类算法,能处理不规则形状的簇和噪声数据,无需预设簇数量。其优点包括自动发现簇结构和对噪声的鲁棒性。示例代码展示了其基本用法。然而,DBSCAN对参数选择敏感,计算效率受大规模数据影响。为改善这些问题,研究方向包括参数自适应和并行化实现。DBSCAN在图像分析、数据分析等领域有广泛应用,通过持续改进,将在未来保持重要地位。
73 2
|
5月前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
57 0
|
5月前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
52 0
|
5月前
|
机器学习/深度学习 算法 搜索推荐
机器学习聚类算法
聚类算法是无监督学习技术,用于发现数据集中的自然群体,如用户画像、广告推荐等。常见的聚类算法包括K-Means,它基于距离分配样本至簇,适合球形分布;层次聚类则通过合并或分裂形成簇,能发现任意形状的簇;DBSCAN依据密度来聚类,对噪声鲁棒。KMeans API中`sklearn.cluster.KMeans(n_clusters=8)`用于指定簇的数量。评估聚类效果可使用轮廓系数、SSE等指标,Elbow方法帮助选择合适的K值。