学习sklearn聚类使用
学习利用sklearn的几个聚类方法:
一.几种聚类方法
1.高斯混合聚类(mixture of gaussians)
2.k均值聚类(kmeans)
3.密度聚类,均值漂移(mean shift)
4.层次聚类或连接聚类(ward最小离差平方和)
二.评估方法
1.完整性:值:0-1,同一个类别所有数据样本是否划分到同一个簇中
2.同质性:值:0-1,每个簇是否只包含同一个类别的样本
3.上面两个的调和均值
4.以上三种在评分时需要用到数据样本的真正标签,但实际很难做到。轮廓系数(1,-1):只使用聚类的数据,它计算的是每个数据样本与同簇数据样本和其它簇数据样本之间的相似度,因为从平均来看,与同簇比较起来,比其它簇更相似。
三.说明
1.kmeans与高斯需要指定簇的数量(n_clusters=2,n_components=2);均值漂移指定带宽(bandwidth=7);层次使用ward链接定义合并代价(距离),终止最大距离max_d。
2.图中可以看出高斯的评估指标最好,其次是均值漂移,k均值与层次较差
四.sklearn聚类
#!/usr/bin/python
# -*- coding: utf-8 -*- import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.cluster import MeanShift
from sklearn.metrics import homogeneity_completeness_v_measure
from sklearn import mixture
from scipy.cluster.hierarchy import linkage
from scipy.cluster.hierarchy import fcluster class ClusterMethod: def __init__(self):
l1=np.zeros(100)
l2=np.ones(100)
self.labels=np.concatenate((l1,l2),) #随机创建两个二维正太分布,形成数据集
def dataProduction(self):
# 随机创建两个二维正太分布,形成数据集
np.random.seed(4711)
c1 = np.random.multivariate_normal([10, 0], [[3, 1], [1, 4]], size=[100, ])
l1 = np.zeros(100)
l2 = np.ones(100)
# 一个100行的服从正态分布的二维数组
c2 = np.random.multivariate_normal([0, 10], [[3, 1], [1, 4]], size=[100, ])
# 加上一些噪音
np.random.seed(1)
noise1x = np.random.normal(0, 2, 100)
noise1y = np.random.normal(0, 8, 100)
noise2 = np.random.normal(0, 8, 100)
c1[:, 0] += noise1x # 第0列加入噪音数据
c1[:, 1] += noise1y
c2[:, 1] += noise2 # 定义绘图
self.fig = plt.figure(figsize=(20, 15))
# 添加子图,返回Axes实例,参数:子图总行数,子图总列数,子图位置
ax = self.fig.add_subplot(111)
# x轴
ax.set_xlabel('x', fontsize=30)
# y轴
ax.set_ylabel('y', fontsize=30)
# 标题
self.fig.suptitle('classes', fontsize=30)
# 连接
labels = np.concatenate((l1, l2), )
X = np.concatenate((c1, c2), )
# 散点图
pp1 = ax.scatter(c1[:, 0], c1[:, 1], cmap='prism', s=50, color='r')
pp2 = ax.scatter(c2[:, 0], c2[:, 1], cmap='prism', s=50, color='g')
ax.legend((pp1, pp2), ('class 1', 'class 2'), fontsize=35)
self.fig.savefig('scatter.png')
return X def clusterMethods(self):
X=self.dataProduction()
self.fig.clf()#reset plt
self.fig,((axis1,axis2),(axis3,axis4))=plt.subplots(2,2,sharex='col',sharey='row')#函数返回一个figure图像和一个子图ax的array列表 #k-means
self.kMeans(X,axis1)
#mean-shift
self.meanShift(X,axis2)
#gaussianMix
self.gaussianMix(X,axis3)
#hierarchicalWard
self.hierarchicalWard(X,axis4) def kMeans(self,X,axis1):
kmeans=KMeans(n_clusters=2)#聚类个数
kmeans.fit(X)#训练
pred_kmeans=kmeans.labels_#每个样本所属的类
print('kmeans:',np.unique(kmeans.labels_))
print('kmeans:',homogeneity_completeness_v_measure(self.labels,pred_kmeans))#评估方法,同质性,完整性,两者的调和平均
#plt.scatter(X[:,0],X[:,1],c=kmeans.labels_,cmap='prism')
axis1.scatter(X[:,0],X[:,1],c=kmeans.labels_,cmap='prism')
axis1.set_ylabel('y',fontsize=40)
axis1.set_title('k-means',fontsize=40)
#plt.show() def meanShift(self,X,axis2):
ms=MeanShift(bandwidth=7)#带宽
ms.fit(X)
pred_ms=ms.labels_
axis2.scatter(X[:,0],X[:,1],c=pred_ms,cmap='prism')
axis2.set_title('mean-shift',fontsize=40)
print('mean-shift:',np.unique(ms.labels_))
print('mean-shift:',homogeneity_completeness_v_measure(self.labels,pred_ms)) def gaussianMix(self,X,axis3):
gmm=mixture.GMM(n_components=2)
gmm.fit(X)
pred_gmm=gmm.predict(X)
axis3.scatter(X[:, 0], X[:, 1], c=pred_gmm, cmap='prism')
axis3.set_xlabel('x', fontsize=40)
axis3.set_ylabel('y', fontsize=40)
axis3.set_title('gaussian mixture', fontsize=40)
print('gmm:',np.unique(pred_gmm))
print('gmm:',homogeneity_completeness_v_measure(self.labels,pred_gmm)) def hierarchicalWard(self,X,axis4):
ward=linkage(X,'ward')#训练
max_d=110#终止层次算法最大的连接距离
pred_h=fcluster(ward,max_d,criterion='distance')#预测属于哪个类
axis4.scatter(X[:,0], X[:,1], c=pred_h, cmap='prism')
axis4.set_xlabel('x',fontsize=40)
axis4.set_title('hierarchical ward',fontsize=40)
print('ward:',np.unique(pred_h))
print('ward:',homogeneity_completeness_v_measure(self.labels,pred_h)) self.fig.set_size_inches(18.5,10.5)
self.fig.savefig('comp_clustering.png',dpi=100)#保存图 if __name__=='__main__':
cluster=ClusterMethod()
cluster.clusterMethods()
五.评估图

参考:1.Machine.Learning.An.Algorithmic.Perspective.2nd.Edition.
2.Machine Learning for the Web
学习sklearn聚类使用的更多相关文章
- 用scikit-learn学习DBSCAN聚类
在DBSCAN密度聚类算法中,我们对DBSCAN聚类算法的原理做了总结,本文就对如何用scikit-learn来学习DBSCAN聚类做一个总结,重点讲述参数的意义和需要调参的参数. 1. scikit ...
- 用scikit-learn学习K-Means聚类
在K-Means聚类算法原理中,我们对K-Means的原理做了总结,本文我们就来讨论用scikit-learn来学习K-Means聚类.重点讲述如何选择合适的k值. 1. K-Means类概述 在sc ...
- sklearn聚类模型:基于密度的DBSCAN;基于混合高斯模型的GMM
1 sklearn聚类方法详解 2 对比不同聚类算法在不同数据集上的表现 3 用scikit-learn学习K-Means聚类 4 用scikit-learn学习DBSCAN聚类 (基于密度的聚类) ...
- ArcGIS案例学习笔记-聚类点的空间统计特征
ArcGIS案例学习笔记-聚类点的空间统计特征 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于聚集点,根据分组字段case field,计算空间统计特征 ...
- 用scikit-learn学习BIRCH聚类
在BIRCH聚类算法原理中,我们对BIRCH聚类算法的原理做了总结,本文就对scikit-learn中BIRCH算法的使用做一个总结. 1. scikit-learn之BIRCH类 在scikit-l ...
- 用scikit-learn学习谱聚类
在谱聚类(spectral clustering)原理总结中,我们对谱聚类的原理做了总结.这里我们就对scikit-learn中谱聚类的使用做一个总结. 1. scikit-learn谱聚类概述 在s ...
- 机器学习之sklearn——聚类
生成数据集方法:sklearn.datasets.make_blobs(n_samples,n_featurs,centers)可以生成数据集,n_samples表示个数,n_features表示特征 ...
- sklearn聚类评价指标
sklearn中的指标都在sklearn.metric包下,与聚类相关的指标都在sklearn.metric.cluster包下,聚类相关的指标分为两类:有监督指标和无监督指标,这两类指标分别在skl ...
- 零基础学习Kmeans聚类算法的原理与实现过程
内容导入: 聚类是无监督学习的典型例子,聚类也能为企业运营中也发挥者巨大的作用,比如我们可以利用聚类对目标用户进行群体分类,把目标群体划分成几个具有明显特征区别的细分群体,从而可以在运营活动中为这些细 ...
随机推荐
- Spring Boot 五种热部署方式,极速开发就是生产力!
1.模板热部署 在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭 ...
- 比反射更快!使用ASM获取class信息(ClassReader)
比反射更快!使用ASM获取class信息(ClassReader) 通常我们想要在java运行时获取class的信息时,通常使用反射的方式来获取其中的属性,方法,注解等信息.通常是这样的: Class ...
- python面向对象反射-框架原理-动态导入-元类-自定义类-单例模式-项目的生命周期-05
反射 reflect 反射(reflect)其实是反省,自省的意思 反省:指的是一个对象应该具备可以检测.修改.增加自身属性的能力 反射:通过字符串获取对象或者类的属性,进行操作 设计框架时需要通过反 ...
- 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别
GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...
- git bash中不能显示中文
git bash中不能显示中文 问题描述:当使用git log查看提交日志时,中文字符不能正常显示问题 1.首先把git的配置改一下 git config --global core.quotepat ...
- JS基础_强制类型转换-String
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- springboot(十九)-线程池的使用
我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行. 话不多说,编码开始: 1.创建spri ...
- vue中监听数据变化 watch
今天做项目的时候,子组件中数据(原本固定的数据)需要父组件动态传入,如果一开始初始化用到的数据.但当时还没有获取到,初始化结束就不会更新数据了.只有监听这两个属性,再重新执行初始化. 1.watch是 ...
- Hyperledger Fabric(2)共识与交易
Fabric 的网络节点本质上是互相复制的状态机,节点之间需要保持相同的账本状态.为了实现这个目的,各个节点需要通过共识( consensus )过程,对账本状态的变化达成一致性的认同. Fabric ...
- 判断页面是在移动端还是PC端打开的
$(function () { var curWwwPath = window.document.location.href; var pathName = window.document.locat ...