机器学习---聚类问题

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

前言


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


非监督学习


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


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


聚类问题


聚类是指把相似的对象通过静态分类的方法分成不同组别的子集,使得同一子集中的成员都有相似的属性。 聚类算法主要有系统聚类,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


总结:


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

目录
相关文章
|
2月前
|
机器学习/深度学习 数据可视化 算法
机器学习第12天:聚类
机器学习第12天:聚类
|
10天前
|
机器学习/深度学习 数据挖掘
机器学习之聚类——模糊聚类FCM
机器学习之聚类——模糊聚类FCM
20 4
|
8天前
|
机器学习/深度学习 算法 搜索推荐
机器学习中的聚类
**文章摘要:** 本文介绍了聚类算法的基本概念、应用、实现流程和评估方法。聚类是一种无监督学习技术,用于将数据分为相似的组,如K-means、层次聚类、DBSCAN和谱聚类。K-means算法通过迭代优化质心,将数据点分配到最近的簇,直至质心不再变化。模型评估包括误差平方和(SSE)、肘部方法(确定最佳簇数)和轮廓系数法(Silhouette Coefficient),以量化聚类的紧密度和分离度。应用场景涵盖用户画像、广告推荐和图像分割等。在Python的sklearn库中,可以使用KMeans API进行聚类操作。
|
22天前
|
机器学习/深度学习 算法 数据挖掘
机器学习——DBSCAN 聚类算法
【6月更文挑战第8天】DBSCAN是一种基于密度的无监督聚类算法,能处理不规则形状的簇和噪声数据,无需预设簇数量。其优点包括自动发现簇结构和对噪声的鲁棒性。示例代码展示了其基本用法。然而,DBSCAN对参数选择敏感,计算效率受大规模数据影响。为改善这些问题,研究方向包括参数自适应和并行化实现。DBSCAN在图像分析、数据分析等领域有广泛应用,通过持续改进,将在未来保持重要地位。
37 2
|
2天前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
7 0
|
3天前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
|
9天前
|
机器学习/深度学习 算法 搜索推荐
机器学习聚类算法
聚类算法是无监督学习技术,用于发现数据集中的自然群体,如用户画像、广告推荐等。常见的聚类算法包括K-Means,它基于距离分配样本至簇,适合球形分布;层次聚类则通过合并或分裂形成簇,能发现任意形状的簇;DBSCAN依据密度来聚类,对噪声鲁棒。KMeans API中`sklearn.cluster.KMeans(n_clusters=8)`用于指定簇的数量。评估聚类效果可使用轮廓系数、SSE等指标,Elbow方法帮助选择合适的K值。
|
9天前
|
机器学习/深度学习 算法 数据挖掘
机器学习之聚类——MeanShift算法和图像矢量量化
机器学习之聚类——MeanShift算法和图像矢量量化
10 0
|
9天前
|
机器学习/深度学习 算法 数据挖掘
机器学习之聚类——从教授的等式到凸聚类
机器学习之聚类——从教授的等式到凸聚类
9 0
|
9天前
|
机器学习/深度学习 存储 算法
机器学习之聚类——双聚类简介及简单案例
机器学习之聚类——双聚类简介及简单案例
6 0