无监督学习
利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习
有监督学习和无监督学习的最大区别在于数据是否有标签
无监督学习最常应用的场景是聚类(clustering)和降维(dimension reduction)
聚类
聚类,就是根据数据的“相似性”将数据分为多类的过程
评估俩个不同样本之间的‘相似性’,通常使用的方法就是计算俩个样本之间的“距离”。使用不同的方法计算样本间的距离会关系到聚类结果的好坏。
sklearn.cluster
sklearn.cluster模块提供的各聚类算法函数可以使用不同的数据形式最为输入:
标准数据输入格式:[样本个数,特征个数]定义的矩阵形式
相似性矩阵输入格式:既由[样本数目,样本数目]定义的矩阵形式,矩阵中的每一个元素为两个样本的相似度,如DBSCAN,AffinityPropagation(近邻传播算法)接受这种输入。如果以余弦相似度为例,则对角线元素全为1.矩阵中每个元素的取值范围[0,1]
聚类vs降维
聚类和降维都是无监督学习的典型任务,任务之间存在关联,比如某些高纬数据的聚类可以通过降维处理更好的获得,另外学界研究也表明代表性的聚类算法如k-means与降维算法如NMF之间存在等价性,在此我们就不展开讨论了,有兴趣的同学可以参考我们推荐的阅读内容。
sklearn vs 降维
降维是机器学习领域的一个重要研究内容,有很多被工业界和学术界接受的典型算法,截止到目前sklearn库提供7种降维算法。
降维过程也可以被理解为对数据集的组成成分进行分解(decomposition)的过程,因此sklearn为降维模块命名为decomposition,在对降维算法调用需要使用sklearn.decomposition模块
K-means聚类算法
K-means
算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似性度,而簇间的相似度较低。
其处理过程如下:
1.随机选择k个点作为初始的聚类中心;
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
3.对每个簇,计算所有点的均值作为新的聚类中心
4.重复2、3直到聚类中心不再发生改变
k-means的应用
数据介绍:
现有1999年全国31个省份城镇居民家庭平均每人全年消费性支出的八个主要变量数据,这八个变量分别是:食品、衣着、家庭设备用品及服务、医疗保健、交通和通讯、娱乐教育文化服务、居住以及杂项商品和服务。利用已有数据,对31个省份进行聚类。
实验目的:
通过聚类,了解1999年各个省份的消费水平在国内的情况
技术路线:sklearn.cluster.Kmeans
实验过程:K-means聚类算法
实验过程:
1.建立工程,导入sklearn相关包(import numpy as np、import sklearn.cluster import KMearns)
关于一些相关包的介绍:
numpy是python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
使用sklearn.cluster.KMeans可以调用K-means算法进行聚类
2.加载数据,创建K-means算法实例,并进行训练,获得标签:
3.输出标签,查看结果
将城市按照消费水平n_clusters类,消费水平相近的城市聚集在一类中
expense:聚类中心点的数值加和,也就是平均消费水平
聚类2类:km = KMeans(n_clusters=2)
聚类3类:km = KMeans(n_clusters=3)
聚类4类:km = KMeans(n_clusters=4)
从结果看出消费水平接近的省市聚集在了一类,例如消费最高的“北京”“上海”“广东”聚集在了消费最高的类别。聚4类时,结果可以比较明显的看出消费层级。
DBSCAN密度聚类
DBSCAN算法是一种基于密度的聚类算法
聚类的时候不需要预先指定簇的个数
最终的族个数不定
DBSCAN算法将数据点分为三类
核心点:在半径Eps内含有超过MinPts数目的点
边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的领域内
噪音点:既不是核心点也不是边界点的点
DBSCAN算法流程:
1.将所有点标记为核心点、边界点或噪声点;
2.删除噪声点;
3.为距离在Eps之内的所有核心点之间赋予一条边;
4.每组连通的核心点形成一个簇;
5.将每个边界点指派到一个与之关联的核心点的簇中(哪一个核心点的半径范围之内)
DBSCAN的应用实例
数据介绍:
现有大学校园网的日志数据,290条大学生的校园网使用情况数据,数据包括用户ID,设备的MAC地址,IP地址,开始上网时间,停止上网时间,上网时长,校园网套餐等。利用已有数据,分析学生上网的模式。
实验目的:
通过DBSCAN聚类,分析学生上网时间和上网时长的模式
1.建立工程,导入sklearn相关包(import numpy as np/from sklearn.cluster import DBSCAN)
DBSCAN主要参数:
eps:两个样本被看作邻居节点的最大距离
min_samples:簇的样本数
metric:距离计算方式
例:sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric='euclidean')
无监督学习--降维
PCA方法及其应用
主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,通常用于高纬数据集的探索与可视化,还可以用作数据压缩和预处理等。
PCA可以把具有相关性的高纬变量合成为线性无关的低维变量,称为主成分。主要分能够尽可能保留原始数据的信息。
在介绍PCA的原理之前需要回顾涉及到的相关术语:
方差
协方差
协方差矩阵
特征向量和特征值
sklearn中主成分分析
在sklearn库中,可以使用sklearn.decomposition.PCA加载PCA进行降维,主要参数有:
n_components:指定主成分的个数,即降维后数据的维度
svd_solver:设置特征值分解的方法,默认为‘auto’,其他可选有‘full’,‘arpack’,'randomized'。
NMF方法及实例
非负矩阵分解(NMF)
非负矩阵分解(Non-negative Matrix Factorization,NMF)是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。
基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和H的乘积近似等于矩阵V中的值。
sklearn中非负矩阵分解
在sklearn库中,可以使用sklearn.decomposition.NMF加载NMF算法,主要参数有:
n_components:用于指定分解后矩阵的单个维度k;
init:w矩阵和h矩阵的初始化方式,默认为‘nndsvdar’
基于聚类的“图像分割”实例编写
图像分割
图像分割:利用图像的灰度、颜色、纹理、形状等特征,把图像分成若干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同的区域之间存在明显的差异性。然后就可以将分割的图像中具有独特性质的区域提取出来用于不同的研究。
图像分割技术已在实际生活中得到广泛的应用。例如:在机车检验领域,可以应用到轮毂裂纹图像的分割,及时发现裂纹,保证行车安全;在生物医学工程方面,对肝脏CT图像进行分割,为临床治疗和病理学研究提供帮助。
图像分割常用方法:
1.阀值分割:对图像灰度值进行度量,设置不同类别的阀值,达到分割的目的。
2.边缘分割:对图像边缘进行检测,即检测图像中灰度值发生跳变的地方,则为一片区域的边缘。
3.直方图法:对图像的颜色建立直方图,二直方图的波峰波谷能够表示一块区域的颜色值的范围,来达到分割的目的。
4.特定理论:基于聚类分析、小波变换等理论完成图像分割。
实例描述
目标:利用K-means聚类算法对图像像素点颜色进行聚类实现简单的图像分割
输出:同一聚类中的点使用相同颜色标记,不同聚类颜色不同
技术路线:sklearn.cluster.KMeans
实例数据
"Kmeans实例图片分割"实例编写
实验过程
使用算法:Kmeans
实现步骤:
1.建立工程并导入sklearn包
2.加载图片并进行预处理
3.加载Kmeans聚类算法
4.对像素点进行聚类并输出
实现步骤---1.建立工程并导入sklearn包
创建kmeans.py文件
导入sklearn相关包
import numpy as np
import PIL.Image as image #加载PIL包,用于加载创建图片
from sklearn.cluster import KMeans #加载Kmeans算法
实现步骤---2.加载图片并进行预处理
实现步骤---3.加载Kmeans聚类算法
加载Kmeans聚类算法
km = KMeans(n_clusters=3)
其中n_clusters属性指定了聚类中心的个数为3
实现步骤---4.对像素点进行聚类并输出
实验分析
通过设置不同的k值,能够得到不同的聚类结果。同时,k值的不确定也是kmeans算法的一个缺点。往往为了达到好的实验结果,需要进行多次尝试才能够选取最优的k值。而像层次聚类的算法,就无需指定k值,只要给定限制条件,就能自动地得到类别数k。