无监督学习 之 凝聚聚类算法

Posted 财经高频预测

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无监督学习 之 凝聚聚类算法相关的知识,希望对你有一定的参考价值。

# --- 凝聚层次聚类

# 概念含义: 层次聚类算法结构类似一棵树,分为 自上而下,和自下而上两种;

# 自下而上: 将每个数据点视为一个单独集群,不断合并,直到全部合为一个类

# 自上而下: 自下而上的反向逻辑即可。

#------- 加载必要的库

import numpy as np

import matplotlib.pyplot as plt

from sklearn.cluster import AgglomerativeClustering

from sklearn.neighbors import kneighbors_graph

#------- 定义一个实现凝聚层次聚类的函数

def pf_clustering(x,connectivity,title,num_clusters=3,linkage='ward'):

    plt.figure()

    model=AgglomerativeClustering(linkage=linkage,connectivity=connectivity,n_clusters=num_clusters)  # 建立模型

    model.fit(x)    # 训练样本

    labels=model.labels_  # 获取标记,然后指定不同聚类的图形标记

    markers='.vx'

    color='rgb'

    # 循环作图

    plt.figure()

    for i,marker in zip(labels,markers):

        plt.scatter(x[labels==i,0],x[labels==i,1],marker=marker,color=color,s=5)  # 画出前4群点

    plt.title(title)

#-------对数据增加随机性噪声

def add_noise(x,y,amplitude):

    x=np.concatenate((x,y))   # 接收进来的参数x 和 参数 y 组合成 (x,y)的成对数据

    x+=amplitude*np.random.randn(2,x.shape[1])

    return x.T

    

#------- 生成空间第一组数据

def get_spiral(t,noise_amplitude=0.5):

    r=t

    x=r*np.cos(t)

    y=r*np.sin(t)

    plt.figure()

    plt.scatter(x.T,y.T,s=5)

    return add_noise(x,y,noise_amplitude)


#------- 生成空间第二组数据

def get_rose(t,noise_amplitude=0.02):

    k=5

    r=np.cos(k*t)+0.25

    x=r*np.cos(t)

    y=r*np.sin(t)

    plt.figure()

    plt.scatter(x.T,y.T,s=5)

    return add_noise(x,y,noise_amplitude)

#------ 生成空间第三组数据

def get_hy(t,noise_amplitude=0):

    a,b,h=10.0,2.0,4.0

    x=(a-b)*np.cos(t)+h*np.cos((a-b)/b*t)

    y=(a-b)*np.sin(t)+h*np.sin((a-b)/b*t)

    plt.figure()

    plt.scatter(x.T,y.T,s=5)

    return add_noise(x,y,0)


#------ 定义主函数

if __name__=='__main__':

    # 生成数据

    n_samples=500     # 定义样本量个数

    np.random.seed(2) # 设置随机种子 

    t=2.5*np.pi*(1+2*np.random.rand(1,n_samples)) # 生成t值

    x=get_spiral(t)

    # 不考虑螺旋形的数据连接性

    connectivity=None   

       # 第一组数据情况

    x=get_spiral(t)

生成的数据数据图

    pf_clustering(x,connectivity,'No connectivity')

聚类后类别图:

无监督学习 之 凝聚聚类算法

       # 第二组数据情况

    x=get_rose(t)

生成的数据数据图:

无监督学习 之 凝聚聚类算法

    pf_clustering(x,connectivity,'No connectivity')

分类算法下分类图:

无监督学习 之 凝聚聚类算法

       # 第三组数据情况

    x=get_hy(t)

生成数据数据图:

    pf_clustering(x,connectivity,'No connectivity')

聚类后类别图:

  

    

    

    


以上是关于无监督学习 之 凝聚聚类算法的主要内容,如果未能解决你的问题,请参考以下文章

Python无监督学习的4大聚类算法

简述多种无监督聚类算法的Python实现

用一文简述多种无监督聚类算法的Python实现

无监督学习——K-均值聚类算法对未标注数据分组

干货分享 一文简述多种无监督聚类算法的Python实现

教程 | 一文简述多种无监督聚类算法的Python实现