搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 财经高频预测 > 无监督学习 之 凝聚聚类算法

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

财经高频预测 2018-06-30

# --- 凝聚层次聚类

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

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

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

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

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')

聚类后类别图:

  

    

    

    


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《无监督学习 之 凝聚聚类算法》的版权归原作者「财经高频预测」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注财经高频预测微信公众号

财经高频预测微信公众号:I--python

财经高频预测

手机扫描上方二维码即可关注财经高频预测微信公众号

财经高频预测最新文章

精品公众号随机推荐