无监督学习

目标

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

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

无监督学习最常见的应用场景是聚类降维

  1. 聚类
    • 聚类,就是根据数据的“相似性”将数据分为多类的过程。
    • 相似性评估:计算两个样本间的距离
    • 几个距离公式:
  • 欧式距离:

 d=\sqrt{\sum{(X-Y)^2}}, X=(x_1,x_2,...,x_n),Y=(y_1,y_2,...,y_n)))

 

  • 曼哈顿距离,也称城市街区距离。

d=\sum{|X-Y|}, X=(x_1,x_2,...,x_n),Y=(y_1,y_2,...,y_n)))

  • 马氏距离,表示数据的协方差,是一种尺度无关的度量方式。马氏距离会先将样本的各点的各个属性标准化,在计算样本间的距离。二维的马氏距离公式

d_(_x_i,_y_j_)=\sqrt{(x_i-x_j)^Ts^-^1(x_i-x_j)},   s^-^1是协方差矩阵。

  • 余弦相似度,用空间中两个向量的夹角的余弦值作为衡量两个样本差异的大小,值越接近1,夹角越接近0,越相似。

\cos\theta=\frac{\sum_{k=1}^n{x_{1k}x_{2k}}}{\sqrt{\sum_{k=1}^n{x_{1k}^2}}\sqrt{\sum_{k=1}^n{x_{2k}^2}}}

 

  1. sklearn聚类算法包含在sklearn.cluster这个模块中,K-Means,近邻传播算法,DBSCAN等。不同算法和数据,算法的耗时和结果不同。
  2. 函数调用数据的输入格式:
    1. 标准数据输入格式:[样本个数,特征个数]定义的矩阵形式;
    2. 相似性矩阵输入格式:[样本数目]定义的矩阵形式,矩阵中每个元素为两个样本的相似度,如DBSCAN,AffinityPropagation(近邻传播算法),如果以余弦相似度为例,则对角线元素全为1。矩阵中每个元素的取值范围为[0,1]。
  3. klearn.cluster模块代表函数
sklearn.cluster模块代表函数
算法名称参数可扩展性相似性度量
K-means聚类个数大规模数据点距离
DBSCAN邻域大小大规模数据点距离
Gaussion.Mixtures聚类个数即其他超参复杂度高,不适合大规模数据马氏距离
Birch分子因子,阈值等其他超参大规模数据两点间欧氏距离

 

  1.  降维
    1. 就是在保证数据所具有的代表性特征或者分布的情况下,将高维数据转化为低维度数据的过程。
    2. 可以实现数据的可视化。
    3. 精简数据。
    4. 高位数据的分类通过降维处理可以得到分类,如分类算法k-means与降维算法NMF之间存在等价性。
    5. 降维,其实可以理解为对数据的组成成分进行分解(decomposition) 。
      sklearn.decomposition
      算法名称参数可扩展性使用任务
      PCA所降维度及其他超参数大规模数据信号处理
      FastICA所降维度及其他超参数超大规模数据图形图像特征提取
      NMF所降维度及其他超参数大规模数据图形图像特征提取
      LDA所降维度及其他超参数大规模数据文本数据,主题挖掘
  2. K-means聚类算法:
    1. 算法以k为参数,把对象分为k簇,簇内相似度高,簇间相似度低。
    2. 随机选择k个点作为初始聚类中心。
    3. 然后根据距离公式计算其他点。
  3. import numpy as np
    from sklearn.cluster import KMeansdef loadData(filePath):fr=open(filePath,'r+')lines=fr.readlines()                        #读取整个文件retData=[]                                  #城市各项消费信息retCityName=[]                              #城市名称print(lines)for line in lines:items=line.strip().split(",")           #返回城市名称,各项消费信息print(items)for item in items:it=item.strip().split(",")retCityName.append(it[0])retData.append([float(it[i]) for i in range(1,len(it))])return retData,retCityNameif __name__=="__main__":data,cityName=loadData("E:\\python\data.txt")'''所需参数:n_clusters:指定聚类中心的个数init:初始聚类中心的初始化方法max_iter: 最大迭代次数'''km=KMeans(n_clusters=4,max_iter=1000)label=km.fit_predict(data)                  #计算簇中心,以及为簇分配序号expenses=np.sum(km.cluster_centers_,axis=1) #每个簇求和print(expenses)CityCluster=([],[],[],[])                       #将城市按label分成设定的簇for i in range(len(cityName)):CityCluster[label[i]].append(cityName[i])   #将每个簇的城市输出for j in range(len(CityCluster)):print("第%d类:"%(j+1))print(CityCluster[j])print("平均花费Expenses:%.2f\n"%expenses[j])  #每个簇的平均花费输出'''
    expense:聚类中心点的数值加和,即平均消费水平拓展和改进计算两条数据相似性时,skleande k-Means默认用的欧式距离。虽然还有余弦距离,马氏距离等多种方法,但没有设定距离方法的参数。可以更改源代码:建议使用scipy.apatial.distance.cdistscipy.apatial.distance.cdist(A,B,metric="cosine")使用余弦距离'''
    

读出的数据:

拆分数据:

聚类结果:

 

 

  1. 实践思考:
    1. loadData("E:\\python\data.txt"),程序中需要读入数据,注意路径格式的写法。
    2. readlines()加载了所有数据,['北京,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64','...'...],第一次采用items=line.strip().split(",") 拆分为出''北京,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64'', 第二次it=item.strip().split(",")拆分出城市名称和相关数据。

 

 

 

 

 

      

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重磅!三星宣布3nm成功流片!

来源:世界先进制造技术论坛(AMT)编辑:小艾 6月29日,据外媒最新报道,三星宣布,3nm制程技术已经正式流片! 据悉,三星的3nm制程采用的是GAA架构,性能上完胜台积电的3nm FinFET架构!据报导&#xff…

前端实战:仿写小米官网第一天

前端实战的第一天 小米官网 目前效果: 实现功能: 导航栏,首页切换,无淡入淡出效果的轮播图,搜索功能,产品展示栏下滑 代码(便于记录,将js、css和html糅合在了一起)&…

ubuntuxu双系统安装+git/g++/vim+pytorch+opencv+yolo+sitl相关学习

multirotor The first day ——12.10 1.install vmware-workstation and ubuntu swap sources and 换输入法 2.learn git github关联远程仓库 3.install and use Typora Git codemeaningmkdir test创建目录cd test进入目录git init初始化仓库ls ;ls -ah查看目…

MySQL日志详细说明

这片博文我们会详细说明MySQL本身的日志,不包含重做日志和undo日志(这两个日志是innodb存储引擎的日志)。 MySQL本身的日志有以下几种(MySQL5.7版本): 错误日志慢查询日志通用日志二进制日志错误日志 默认情…

python-DBSCAN密度聚类

1.DBSCAN 算法是一种基于密度的聚类算法: 聚类的时候不需要预先指定簇的个数。最终的簇的个数不定。 2.DBSCAN 算法将数据点分为三类: 核心点:在半径Eps内含有超过MinPts数目的点边界点:在半径Eps内点的数量小于MinPts&#xff…

院士报告 | 李德仁:基于数字孪生的智慧城市(PPT)

来源:转自智慧城市大讲堂,微信编辑:邱峰、罗兵,张钦煜微信审核:张祥、吴斌、数字理政研究院、中通协大数据分会本文为首届川渝住房城乡建设博览会——川渝数智城市BIM/CIM高峰论坛上,中国科学院院士、中国工…

Hanlp的安装和配置

Hanlp简介 HanLP 是由一系列模型与算法组成的 Java 工具包,目标是普及自然语言处理在生产环境中的应用。 HanLP 具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 HanLP 提供下列功能: 中文分词最短路分词N-最短路分词CRF分词索引分词极…

python-主成分分析-降维-PCA

PCA算法及其应用 主成分分析(PCA) 主城成分分析(PCA):常见的降维方法,用于高维数据集的探索与可视化,还可以用作数据压缩和预处理。 PCA 可以把具有相关性的高维变量合成为线性无关的低维变量,成为主成分&…

5个基本概念,从统计学到机器学习

来源:CSDN作者:George Seif本文讲述了数据分析师应当了解的五个统计基本概念:统计特征、概率分布、降维、过采样/欠采样、贝叶斯统计方法。从高的角度来看,统计学是一种利用数学理论来进行数据分析的技术。象柱状图这种基本的可视…

Ubuntu安装与配置(简要)

学校的实验课任务,一看没有写过Ubuntu的安装,现在顺便上传上来;

python-非负矩阵分解-NMF

非负矩阵分解 非负矩阵分解是矩阵中所有元素均为非负数约束条件下的矩阵分解,其基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和矩阵H的乘积近似等于矩阵V中的值。 矩阵:被称为基础…

OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大

来源:AI科技评论作者:琰琰、青暮比GPT-3更强大!昨日,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot,这款工具基于GitHub及其他网站的源代码,可根据上文提示为程序员自动编写下文代码!Git…

Hanlp之理解用户自定义词典(java版本)

首先说明,由于本人水平有限,文章纰漏以及不妥之处还请指出,不胜感激; 理解hanlp中用户自定义词典(java) 什么是hanlp用户自定义字典?为什么要有用户自定义词典? 在Hanlp分词中&…

python-聚类图像分割

K-Means聚类图像分割 图像分割: 利用图像的灰度,颜色,纹理,形状等特征,把图像分成若干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同区域之间存在明显的差异性。然后&#xff0c…

科学家揭秘大脑靠“旋转”区分过去和现在,还给了个AI架构设计新思路 | Nature子刊...

来源:量子位 过去和现在的边界,到底在哪里?人类,又是如何在时间混沌中区分出过往与当下的?注意,这不是一个哲学问题。(手动狗头)而是科学家们的最新研究。两个普林斯顿的神经学家&am…

Hanlp中自定义词典的配置、引用以及问题解决

文章目录如何阅读本文?Hanlp用户自定义词典引用简介操作步骤环境创建编辑词典文件将用户自定义词典路径加入配置文件删除缓存文件如何阅读本文? 首先我们对Hanlp用户词典进行简介,推荐首先阅读链接文章,它是本文的第一来源&#…

有监督学习

有监督学习 利用一组带有标签的数据,学习从输入到输出的映射,然后将这种映射关系应用到未知数据上,达到分类或回归的目的。 分类:当输出为离散的,学习任务为分类任务。回归:当输出为连续的,学习…

深度学习助力网络科学:基于深度学习的社区发现最新综述

来源:AMiner科技论文题目:A Comprehensive Survey on Community Detection with Deep Learning论文网址:https://arxiv.org/pdf/2105.12584.pdf近日,澳大利亚麦考瑞大学计算机学院人工智能与数据科学实验室联合中科院数学与系统科…

Neo4j 图创建1 以BiliBili粉丝UP主之间的关系为例

基本关系图如下,不给出细节 其中所有粉丝名为杜撰,如有雷同纯属巧合 UP主对应关系为方便建库进行了主观处理,不代表真实情况 无商业用途,学习使用

CentOS7开放端口号

查看所有开放的端口号 firewall-cmd --zonepublic --list-ports 或者 firewall-cmd --permanent --list-ports(--permanent表示永久生效) 查询指定端口号是否开发 firewall-cmd --permanent --query-port8080/tcp 删除一个已经开放的端口号 firewall-cm…