python机器学习二(无监督学习)

无监督学习

利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习

有监督学习和无监督学习的最大区别在于数据是否有标签

无监督学习最常应用的场景是聚类(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。








           

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容