机器学习应用——无监督学习(实例:31省市居民家庭消费调查&学生上网时间分布聚类&鸢尾花数据&人脸数据特征提取)

前言

机器学习应用博客中,将核心介绍三大类学习,即:无监督学习、监督学习、强化学习。

本篇将简要介绍:
1.无监督学习概念(最常应用场景:聚类(clustering)和降维(Dimension Reduction))
2.聚类——kmeans方法(居民家庭消费调查)、DBSCAN方法(学生上网时间分布)
3.降维——PCA方法(鸢尾花数据)、NMF方法(人脸数据特征提取)

一、无监督学习简要介绍

1.目标&定义

(1)无监督学习:利用无标签的数据,学习数据的分布或数据与数据之间的关系被称作无监督学习
(2)有监督学习和无监督学习的最大区别在于数据是否有标签
(3)无监督学习最常应用的场景是聚类(clustering)和降维(Dimension Reduction)

2.聚类(clustering)

(1)聚类:根据数据的“相似性”将数据分为多类的过程
(2)评估两个不同样本之间的“相似性”,通常使用的方法就是计算两个样本之间的“距离”
(3)使用不同的方法计算样本间的距离会关系到聚类结果的好坏

(4)常用距离计算方法

①欧氏距离:最常用的一种距离度量方法,源于欧式空间中两点的距离
在这里插入图片描述

该图为二维空间中欧式距离的计算

②曼哈顿距离:称作“城市街区距离”,类似于在城市之中驾车行驶,从一个十字路口到另外一个十字楼口的距离。
在这里插入图片描述

该图为二维空间中曼哈顿距离的计算

③马氏距离:表示数据的协方差距离,是一种尺度无关的度量方式。也就是说马氏距离会先将样本点的各个属性标准化,再计算样本间的距离。
在这里插入图片描述
在这里插入图片描述

其中,s是协方差矩阵

④余弦相似度:用向量空间中两个向量夹角的余弦值作为衡量两个样本差异的大小。余弦值越接近1,说明两个向量夹角越接近0度,表明两个向量越相似。
在这里插入图片描述

3.sklearn.cluster

(1)scikit-learn库(简称sklearn库)提供的常用聚类算法函数包含在sklearn.cluster这个模块中,如:K-Means,近邻传播算法,DBSCAN,等。
(2)注:以同样的数据集应用于不同的算法,可能会得到不同的结果,算法所耗费的时间也不尽相同,这是由算法的特性决定的。

(3)sklearn.cluster模块提供的各聚类算法函数可以使用不同的数据形式作为输入
①相似性矩阵输人格式:即由[样本数目]定义的矩阵形式,矩阵中的每一个元素为两个样本的相似度,如DBSCAN,AffinityPropagation(近邻传播算法)接受这种输人。
② 如果以余弦相似度为例,则对角线元素全为1。矩阵中每个元素的取值范围为[0,1]。

4.降维

(1)定义:在保证数据所具有的代表性特性或者分布的情况下,将高维数据转化为低维数据的过程。
(2)作用
①数据的可视化
②精简数据

(3)分类vs.降维
①聚类和分类都是无监督学习的典型任务,任务之间存在关联
②比如某些高纬数据的分类可以通过降维处理更好的获得
③另外学界研究也表明代表性的分类算法如k-means与降维算法如NMF之间存在等价性

(4)sklearn vs.降维
①降维是机器学习领域的一个重要研究内容,有很多被工业界和学术界接受的典型算法,截止到目前sklearn库提供7种降维算法。
②降维过程也可以被理解为对数据集的组成成份进行分解(decomposition)的过程,因此sklearn为降维模块命名为decomposition,在对降维算法调用需要使用sklearn.decomposition模块。
③几个常用降维算法
在这里插入图片描述

(5)在后续中将通过实例展示如何利用sklearn库提供的分类和降维算法解决具体问题
①31省市居民家庭消费调查
②学生月上网时间分布调查
③人脸图像特征抽取
④图像分割

二、聚类

1.K-means方法

(1)k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。

(2)主要处理过程
①随机选择k个点作为初始的聚类中心。
②对于剩下的点,根据其与聚类中心的距离,将其归人最近的簇。
③对每个簇,计算所有点的均值作为新的聚类中心。
④重复2、3直到聚类中心不再发生改变。

(3)举例
①在5个点中随机选取两个聚类中心
在这里插入图片描述

②计算距离后,归入簇
在这里插入图片描述

③重新计算聚类中心,重新计算距离,将点归入簇
在这里插入图片描述

④直到簇的组成稳定
在这里插入图片描述

2.K-means应用

(1)问题分析

①数据介绍:现有1999年全国31个省份城镇居民家庭平均每人全年消费性支出的八个主要变量数据,这八个变量分别是:食品、衣着、家庭设备用品及服务、医疗保健、交通和通讯、娱乐教育文化服务、居住以及杂项商品和服务。利用已有数据,对31个省份进行聚类。
②实验目的:通过聚类,了解1999年各个省份的消费水平在国内的情况。
③技术路线:sklearn.cluster.Kmeans
④数据实例
在这里插入图片描述

(2)过程

①使用算法:K-means聚类算法

②实现过程
1)建立过程,导入sklearn相关包

 import numpy as np
        from sklearn.cluster import KMeans

2)加载数据,创建K-means算法实例,并进行训练,获得标签

注1:调用K-Means方法所需参数
1)n_cluster:用于指定聚类中心的个数
2)init:初始聚类中心的初始化方法
3)max_iter:最大的迭代次数
4)一般调用时只给出n_clusters即可,init默认是k-means++,max_iter默认是300

注2:其他参数
1)data:加载的数据
2)label:聚类后数据所属的标签
3)fit_predict():计算簇中心以及为簇分配序号

③输出标签,查看结果
1)将城市按照消费水平n clusters类,消费水平相近的城市聚集在一类中。

import numpy as np
from scipy.sparse import data
from sklearn.cluster import KMeans


def loadData(filePath):
    fr = open(filePath, 'r+')  # 读写打开一个文本文件
    lines = fr.readline()  # 一次读取整个文件
    retData = []  #存储城市的各项消费信息
    retCityName = []  #用于存储城市名称
    for line in lines:
        items = line.strip().split(",")
        retCityName.append(items[0])
        retData.append([float(items[i])
                        for i in range(1, len(items))])
        for i in range(1,len(items)):
            return retData, retCityName  # 返回城市名称及各项消费信息


# 加载数据,创建K-means算法实例,并进行训练,获得标签
if __name__ == '__main__':
    data.cityName = loadData('city.txt') #利用loadData方法读取数据,此处文件需自行准备
    km = KMeans(n_clusters=3)  # 创建实例
    lable = km.fit_predict(data)  # 调用Kmeans() fit_predict()进行聚类计算
    expenses = np.num(km.cluster_centers_,axis=1)  #expenses:聚类中心的数值加和,即平均消费水平
    # print
    CityCluster = [[],[],[]]  # 将城市按lable分成设定的簇
    for i in range(len(cityName)):
        CityCluster[lable[i]].append(data.cityName
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬茶@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值