python 密度聚类 使用_使用python+sklearn实现归纳聚类

当我们的数据集包含数百万个数据点时,聚类可能会在计算上花费很昂贵。许多聚类算法不是 归纳 的算法,因此如果不重新计算聚类就无法直接应用于新的数据样本,这对于大数据量来说很棘手;相反,我们可以先使用聚类算法然后使用分类器来学习归纳模型,这有几个好处:
  • 它允许聚类扩展并应用于新数据
  • 与将聚类重新分配给新数据不同,它可以确保标记过程随时间推移保持一致
  • 它使我们能够使用分类器的推理能力来描述或解释聚类
本示例实现了元估计器(meta-estimator)的一般实现,该估计器通过从聚类标签中引入分类器来扩展聚类。
421b20d8cc793701dd143eb8d93375cc.png
sphx_glr_plot_inductive_clustering_001
# 作者: Chirag Nagpal#          Christos Aridasprint(__doc__)import numpy as npimport matplotlib.pyplot as pltfrom sklearn.base import BaseEstimator, clonefrom sklearn.cluster import AgglomerativeClusteringfrom sklearn.datasets import make_blobsfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.utils.metaestimators import if_delegate_has_methodN_SAMPLES = 5000RANDOM_STATE = 42class InductiveClusterer(BaseEstimator):    def __init__(self, clusterer, classifier):        self.clusterer = clusterer        self.classifier = classifier    def fit(self, X, y=None):        self.clusterer_ = clone(self.clusterer)        self.classifier_ = clone(self.classifier)        y = self.clusterer_.fit_predict(X)        self.classifier_.fit(X, y)        return self    @if_delegate_has_method(delegate='classifier_')    def predict(self, X):        return self.classifier_.predict(X)    @if_delegate_has_method(delegate='classifier_')    def decision_function(self, X):        return self.classifier_.decision_function(X)def plot_scatter(X,  color, alpha=0.5):    return plt.scatter(X[:, 0],                       X[:, 1],                       c=color,                       alpha=alpha,                       edgecolor='k')# 通过聚类生成训练数据X, y = make_blobs(n_samples=N_SAMPLES,                  cluster_std=[1.0, 1.0, 0.5],                  centers=[(-5, -5), (0, 0), (5, 5)],                  random_state=RANDOM_STATE)# 在训练数据上训练聚类算法并获得聚类标签clusterer = AgglomerativeClustering(n_clusters=3)cluster_labels = clusterer.fit_predict(X)plt.figure(figsize=(12, 4))plt.subplot(131)plot_scatter(X, cluster_labels)plt.title("Ward Linkage")# 生成新样本并将其与原始数据集一起绘制X_new, y_new = make_blobs(n_samples=10,                          centers=[(-7, -1), (-2, 4), (3, 6)],                          random_state=RANDOM_STATE)plt.subplot(132)plot_scatter(X, cluster_labels)plot_scatter(X_new, 'black', 1)plt.title("Unknown instances")# 声明将用于学习归纳模型# 预测未知数据classifier = RandomForestClassifier(random_state=RANDOM_STATE)inductive_learner = InductiveClusterer(clusterer, classifier).fit(X)probable_clusters = inductive_learner.predict(X_new)plt.subplot(133)plot_scatter(X, cluster_labels)plot_scatter(X_new, probable_clusters)# 绘制决策区域x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),                     np.arange(y_min, y_max, 0.1))Z = inductive_learner.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.4)plt.title("Classify unknown instances")plt.show()
脚本的总运行时间:(0分钟2.723秒) 估计的内存使用量: 205 MB c6d3a2c8993c7ebb11a7e6039eeaefd2.png 下载Python源代码: plot_inductive_clustering.py 下载Jupyter notebook源代码: plot_inductive_clustering.ipynb 由Sphinx-Gallery生成的画廊

文壹由“伴编辑器”提供技术支持

☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏 文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:

70313ce7a23d751ad35d5184e4a35084.png

欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)

c82ea3560e0ed0ad7e59b6c31fafbd37.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值