快速入门Python机器学习(28)

简介: 快速入门Python机器学习(28)

1.4 凝聚聚类(agglomerative)


1.4.1原理

凝聚聚类(agglomerative clustering)指的是许多基于相同原则构建的聚类算法,这一原则是:算法首先声明每个点是自己的簇,然后合并两个最相似的簇,直到满足某种停止准则为止

度量相似值,Sklearn有四种选项:linkage : {"ward", "complete", "average", "single"}, optional (默认="ward")

  • ward链接:默认选项,挑选两个簇来合并,是的所有簇中的方差增加最小。这通常会得到大小差不多相等的簇。
  • average链接:也称为均链接,将簇中所有点之间"平均距离" 最小的两个簇合并。
  • complete链接:也称为最大链接,将簇中点之间"最大距离"最小的两个簇合并。
  • single链接:也称单链接,将簇中所有点之间"最小距离"最小的两个簇合并

ward适用于大多数数据集。如果簇中的成员个数非常不同(比如其中一个比其他所有都大得多),那么average或complete可能效果更好。


1.4.2类参数、属性和方法


class sklearn.cluster.AgglomerativeClustering(n_clusters=2, *, affinity='euclidean', memory=None, connectivity=None, compute_full_tree='auto', linkage='ward', distance_threshold=None, compute_distances=False


属性

属性

类别

介绍

n_clusters_

int

算法找到的聚类数。如果距离阈值=无,它将等于给定的n个聚类。

labels_

ndarray of shape (n_samples)

每个点的聚类标签

n_leaves_

int

分层树中的树叶数量

n_connected_components_

int

图中连接组件的估计数量

children_

array-like of shape (n_samples-1, 2)

每个非叶节点的子节点。小于n_samples的值对应于作为原始样本的树叶。大于或等于n_samples的节点I是非叶节点,并且具有子代子代_[i - n_samples]。或者,在第I次迭代中,子[i][0]和子[i][1]被合并以形成节点n_samples + i

distances_

array-like of shape (n_nodes-1,)

children_中相应位置的节点之间的距离。仅当使用距离阈值或计算距离设置为真时才计算。


方法

fit(X[, y, sample_weight])

根据特征或距离矩阵执行DBSCAN聚类。

fit_predict(X[, y, sample_weight])

从要素或距离矩阵执行DBSCAN聚类,并返回聚类标签。

get_params([deep])

获取此估计器的参数。

set_params(**params)

设置此估计器的参数。


1.4.3make_blobs数据进行凝聚聚类算法分析

#凝聚算法
from scipy.cluster.hierarchy import dendrogram,ward    
def agglomerative_algorithm():
    mglearn.plots.plot_agglomerative_algorithm()
    plt.show()
    blobs = make_blobs(random_state=1,centers=1)
    x_blobs = blobs[0]
    #使用连线方式进行可视化
    linkage =ward(x_blobs)
    dendrogram(linkage)
    ax = plt.gca() # gca:Get Current Axes
    #设定横纵轴标签
    plt.xlabel("sample index")
    plt.ylabel("Cluster distance")
    plt.show()


image.png


from sklearn.cluster import AgglomerativeClustering
def AgglomerativeClustering_for_blobs ():
        blobs = make_blobs(random_state=1,centers=1)
        X = blobs[0]
        y = blobs[1]
        #设置簇个数为3
        AC = AgglomerativeClustering(n_clusters=3)
        result = AC.fit_predict(X)
        print("训练集数据集分配簇标签为:\n{}".format(AC.labels_))
        print("对训练集数据集预测结果为:\n{}".format(result))
        #画出聚类后的数据集图像
        mglearn.discrete_scatter(X[:,0], X[:,1],AC.labels_,markers='o')
        plt.show()


输出

训练集数据集分配簇标签为:
[1 1 0 2 1 2 2 1 0 2 1 2 0 0 1 2 2 0 0 0 2 0 2 2 0 1 2 2 1 1 2 0 0 0 2 0 2 0 0 0 2 1 0 0 2 2 2 1 0 0 0 1 2 2 2 2 2 2 2 2 2 2 2 0 0 1 0 0 0 2 2 1 2 2 2 1 2 0 0 0 2 0 2 2 0 1 2 1 2 0 2 0 2 2 2 2 0 2 2 1]
对训练集数据集预测结果为:
[1 1 0 2 1 2 2 1 0 2 1 2 0 0 1 2 2 0 0 0 2 0 2 2 0 1 2 2 1 1 2 0 0 0 2 0 2 0 0 0 2 1 0 0 2 2 2 1 0 0 0 1 2 2 2 2 2 2 2 2 2 2 2 0 0 1 0 0 0 2 2 1 2 2 2 1 2 0 0 0 2 0 2 2 0 1 2 1 2 0 2 0 2 2 2 2 0 2 2 1]

image.png

1.4.4 凝聚聚类分析鸢尾花数据

def AgglomerativeClustering_for_iris():
        myutil = util()
        X,y = datasets.load_iris().data,datasets.load_iris().target
        AC = AgglomerativeClustering(n_clusters=3)
        AC.fit(X)
        result = AC.fit_predict(X)
        title = "鸢尾花"
        myutil.draw_scatter_for_Clustering(X,y,result,title,"凝聚算法")


输出

鸢尾花原始数据集分配簇标签为:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
鸢尾花 凝聚算法 训练簇标签为:
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 2 2 2 0 2 2 2 2 2 2 0 0 2 2 2 2 0 2 0 2 0 2 2 0 0 2 2 2 2 2 0 0 2 2 2 0 2 2 2 0 2 2 2 0 2 2 0]

image.png

1.4.5 凝聚聚类分析红酒数据

def AgglomerativeClustering_for_wine():
        myutil = util()
        X,y = datasets.load_wine().data,datasets.load_wine().target
        AC = AgglomerativeClustering(n_clusters=3)
        AC.fit(X)
        result = AC.fit_predict(X)
        title = "红酒"
        myutil.draw_scatter_for_Clustering(X,y,result,title,"凝聚算法")


输出

红酒原始数据集分配簇标签为:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
红酒 凝聚算法 训练簇标签为:
[0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 0 0 2 2 0 0 2 0 0 0 0 0 0 2 2 0 0 2 2 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 2 1 1 2 1 1 2 2 2 1 1 0 2 1 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 1 0 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 2 2 1]

image.png


1.4.6 凝聚聚类分析乳腺癌数据

def AgglomerativeClustering_for_breast_cancer():
        myutil = util()
        X,y = datasets.load_breast_cancer().data,datasets.load_breast_cancer().target
        AC = AgglomerativeClustering(n_clusters=2)
        AC.fit(X)
        result = AC.fit_predict(X)
        title = "乳腺癌"
        myutil.draw_scatter_for_Clustering(X,y,result,title,"凝聚算法")


输出

乳腺癌原始数据集分配簇标签为:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 1 1 1 1 1 1 1 0 0 0 0 0 0 1]
乳腺癌 凝聚算法 训练簇标签为:
[1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 1 1 0 1 0]

image.png

1.4.7 凝聚聚类分析两个月亮数据

#两个月亮
def KMeans_for_two_moon():
        myutil = util()
        X, y = datasets.make_moons(n_samples=200,noise=0.05, random_state=0)
        scaler = StandardScaler()
        scaler.fit(X)
        X_scaled = scaler.transform(X)
        # 打印处理后的数据形态
        print("处理后的数据形态:",X_scaled.shape)
        # 处理后的数据形态: (200, 2) 200个样本 2类    
        Kmeans = KMeans(n_clusters=2)
        result=Kmeans.fit_predict(X_scaled)
        title = "两个月亮"
        #绘制簇分配结果
        myutil.draw_scatter_for_Clustering(X,y,result,title,"KMeans")


输出

处理后的数据形态: (200, 2)
两个月亮原始数据集分配簇标签为:
[0 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 1 0 1 1
 0 0 1 1 0 0 1 1 0 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1
 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0
 0 0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1
 0 1 1 1 0 0 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 0 1 1 1
 0 0 1 0 0 0 0 0 0 1 0 1 1 0 1]
两个月亮 凝聚算法 训练簇标签为:
[0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 1 0 0
 0 1 0 0 1 1 0 0 1 0 1 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 0 0 1 1 0 1 1 0 1 0 0
 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 1 1
 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0
 1 0 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 1 1 1 0 1 0 0 0


1 1 0 1 1 1 1 0 0 0 1 0 0 1 0]

image.png

目录
打赏
0
0
0
0
310
分享
相关文章
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
41 1
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
503 12
Scikit-learn:Python机器学习的瑞士军刀
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
171 7
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
188 9
Python与机器学习:使用Scikit-learn进行数据建模
使用LSTM深度学习模型进行温度的时间序列单步和多步预测(二)
使用LSTM深度学习模型进行温度的时间序列单步和多步预测
737 0
使用LSTM深度学习模型进行温度的时间序列单步和多步预测(二)
慢查询日志中出现commit
在慢查询日志中出现commit,就是因为事务提交(commit)的时间过长。
416 0
慢查询日志中出现commit
如何用ChatGPT做项目管理?
ChatGPT可以通过创建和维护跨团队项目协作计划,让员工更容易理解他们的角色和职责。这个协作计划里面会包括每个团队或个人要执行的具体任务,每个任务最后期限和任何事情之间的依赖关系。
利用v$enqueue_lock解决ORA-14450的错误
【背景】一个TEMP表的字段设置短了,开发要进行修改, alter table SALE_TEMP modify CODE VARCHAR2(2000); 就报了一个错误ORA-14450:试图访问已经在使用的事务处理临时表; ...
1530 0

热门文章

最新文章

推荐镜像

更多
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问