[machineLearning]非监督学习unsupervised learning

1.什么是非监督学习

常见的神经网络是一种监督学习,监督学习的主要特征即为根据输入来对输出进行预测,最终会得到一个输出数值.而非监督学习的目的不在于输出,而是在于对读入的数据进行归类,选取特征,打标签,通过对于数据结构的分析来完成这些操作, 很少有最后的输出操作.

从训练数据的角度来说也是有所区别:监督学习的训练数据为(x,y), 即同时具有输入和输出数值,根据这种输入和输出来判断训练的结果是否正确.

但是非监督学习的数据只有输入数据(x),或者说非监督学习就是要处理这些数据,然后随着新的数据加入再不断进行修改,完成对数据特征提取和区分的要求.

把相同的数据进行归类,这就是非监督学习所作的事情.

下面将介绍两种常用的非监督学习算法:聚类分析和异常检测

本文中需要一定的概率论/高中概率的前置知识

2.聚类算法 k-means

(1)什么是聚类分析

俺举个简单点例子,比如说我们有两个维度的特征值x1 x2,这个时候我们根据特征值把数据点描绘在图片上.

可以很明显地看到,因为各自的特征不同和相似,我们最终可以把原本的数据集合分成两个集群聚类(cluster),我们的目的就是通过算法找到这两个聚类究竟有多少成员,有哪些成员

其中一种古老但是经典的早期算法K-means可以用来解决这个问题

(2)K-means算法

在具体解释这个算法之前,要说明一个概念:集群质心 cluster controids,集群质心代表这些集群的一个中心点.

1.Kmeans的算法第一步就是按照人为的需求,随机分配多个集群质心

2.然后将每个点分配给距离自己最近的质心,组成一个集群

3.集群中的点通过特征值平均,算出一个中心点位置,然后把这个集群的质心移动到这个位置

4.重复 2 3 两个步骤,直到最后质心的距离不发生改变,即可视为集群操作完成

下面将将会使用图片来进行说明,我们一共有三十个数据点,按照特征值划分开

 随机分配两个质心(这里假设我们需要的是划分出两个集群,然后接下来是对每个数据点进行归类,将其分配给某个群(严格来说是和距离自己最近的质心打上同样的标记) 

将多个数据点分配到具体的集群以后,这个时候暂时就先不用到集群质心cluster controids了

对于每一个集群,我们通过各个分量之间计算平均点的方式,计算出这个集群的集群质心应该在什么位置上

然后将集群质心移动到对应的点上

 重复以上两个步骤,最终实现集群质心的固定,到这种程度就可以认为规定数目的集群已经按照要求划分完成

 (3)聚类算法的优化

忘记说明一点,kmeans算法的初始化,随机分配集群质心,一般是直接在已有的数据点中生成,而不是真的凭空捏造一个(hhhh).但是不同的随机选取结果,最终可能会导致不同的集群划分结果,甚至可能造成unconverge不收敛现象.

类似监督学习中的代价函数,这里我们同样是存在代价函数,只不过计算方法有一点点区别

Kmeans的代价函数如下

J=\frac{1}{m}\sum \left \| x^{i}-\mu _{c^{i}}^{} \right \|^2

c^{i}:代表的是第i个数据点所在的群

\mu:代表的是某个群的集群质心

所以这个公式的解释就是:所有点到他们各自所在群的集群质心的距离的二范数(空间距离)的平均值

在比较不同集群算法结果的时候,计算代价函数是比较合理的比较方法

而聚类算法的优化,也是期望代价函数能够降到最低

另外要说的是,不合理无法归一的情况是客观存在的,结局办法有很多,比如重新进行随机点的选取,但是kmeans毕竟还是比较早期的算法.可以选用其他算法或者其他改进模式,这里就不进行赘述了

3.异常检测算法 anomal detect

异常检测算法通常用于一些特殊的情况,  比如一些物体的识别,比如水果,可以按照重量,色泽等等特征来做区分,或者珍珠可以按照半径,色泽等等方式来判断一个珍珠是好是坏.正所谓幸福千篇一律,苦难各有不幸.

我们所遵从的原则是"群体原则",即为服从大多数,大多数具有相同特征的人被称之为正常.

所以因为这样,我们要使用高斯分布这一特性

这个玩意我觉得大多数人应该在高中或者是大学的概率论课程中接触过,在异常检测算法之中,我们会对每一个分量进行高斯分布计算

假设某一批数据有很多特征值

x_{1}^{}=\left ( x_{1}^{(1)},x_{1}^{(2)},....,x_{1}^{(n)} \right )  

x_{2}^{}=\left ( x_{2}^{(1)},x_{2}^{(2)},....,x_{2}^{(n)} \right )

.............................................................

x_{m}^{}=\left ( x_{m}^{(1)},x_{m}^{(2)},....,x_{m}^{(n)} \right )

对于每一个分量,例如这个矩阵的第一列,即每个样本的第一个特征值,对于这些数据我们需要计算出方差和平均值,然后就能构建出一个分量的高斯式子

P(x1)=gauss(x1,\mu 1,\sigma ^{2}1)

然后对于整体的输入数据来说,某个数据xi想要判断是不是"异常",只需要计算这个向量的高斯数值

P(\chi )=P(x1 )*P(x2 )*.....*P(x3 )   (注意一个很有趣的地方,就算这些特征值可能不是独立的,我们这个式子仍然是成立的)

然后通过这样子,判断该数据向量的高斯分布数值是否大于某个阀值,即可直到是不是属于"大多数"

P(\chi )>=\varepsilon ?

(2)注意事项

1.在训练的时候,训练数据必须全是正常的数据,测试集合中需要包含一些

2.有些特征可能并不是高斯分布,需要我们对数据进行适当的方所处理

3.不是二维分布不是二维聚类!二位聚类是根据两种不同的特征值划分出两种截然不同的集群,两个群中的元素则都有各自相同的部分.

而异常检测不一样,异常检测做到的是区分"大多数"和"异端"

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

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

相关文章

第15章 秒杀商品隔离解决方案

mini商城第15章 秒杀商品隔离解决方案 一、课题 商品秒杀-热门数据实时收集 二、回顾 1、掌握热门分析收集方案 2、Lua高级语法 3、Kafka使用 4、Lua垂直日志收集 5、Apache Druid大数据实时处理系统 三、目标 1、MyBatis查询Apache Druid 常规查询 复杂查询 2、热门…

Swagger 的介绍以及使用

文章目录 Swagger一.导语:二.Swagger是什么?它能干什么?框架说明总结:作用 三.SpringBoot集成Swagger3.1初始实现步骤3.2配置Swagger3.3配置扫描接口3.4配置API分组3.5拓展:其他皮肤 四.常用注解 Swagger 一.导语: 相…

Using Multiple RDF Knowledge Graphs for Enriching ChatGPT Responses

本文是LLM系列文章,针对《Using Multiple RDF Knowledge Graphs for Enriching ChatGPT Responses》的翻译。 使用多个RDF知识图来丰富ChatGPT响应 摘要1 引言2 相关工作3 GPT-LODS的过程和用例4 结束语 摘要 最近有一种趋势是使用新型人工智能聊天GPT聊天箱&…

ChatGPT集锦

目录 1. 一条指令让ChatGPT变的更强大2. 对ChatGPT提问时,常见的10种错误描述3. Custom instructions如何设置1. 一条指令让ChatGPT变的更强大 在使用GPT的过程中,如何让AI更清晰地了解你的需求很重要?今天分享一个指令,可以让GPT成为你的好同事,与你一起分析和解决问题,…

Vue 项目开发将数据下载到本地的方法

将数据保存到本地 需求分析 需求 Vue 项目开发时,要求不调用接口下载,而是主动将接口多次调用产生的接口返回值讲过保存保存到本地 分析 需要使用浏览器的File API,本地存储多次接口返回的数据,在这里我使用的Vuex状态管理去存…

linux - 文件利用率快满了 - mongo日志

https://zhuanlan.zhihu.com/p/82430795 查看文件利用率 df -h 文件夹大小 ls -lh 逐级搜索大文件或目录 du -sh * cd .. 返回上一层 ps -ef | grep mongo 启动: .mongodb/bin/mongod -f mongodb/config/configsvr.conf 关闭 .mongodb/bin/mongod -f mong…

C# Winform 简单排期实现(DevExpress TreeList)

排期的需求在很多任务安排的系统中都有相应的需求,原生的Winform控件并未提供相应的控件,一般都是利用DataGridViewTreeView组合完成相应的需求,实现起来比较麻烦。用过DevExpress控件集的开发者应该知道,DevExpress WinForm提供了…

【动态规划刷题 10】等差数列划分 最长湍流子数组

413. 等差数列划分 链接: 413. 等差数列划分 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums ,返回…

9.7黄金是否会继续下跌?后市如何布局

近期有哪些消息面影响黄金走势?今日黄金多空该如何研判? ​黄金消息面解析:周四(9月7日)亚市早盘,现货黄金继续承压,金价目前交投在1917美元附近。美国强劲PMI数据令金价承压,在美国数据走强和美联储发出鹰…

Git 备忘单

Git 是一个去中心化的版本管理软件。通过这个备忘单,您将可以快速访问最常见的 git 命令。 配置 设置全局配置 git config --global user.name "[name]" git config --global user.email "[email]"开始使用 创建 git 存储库 git init克隆现…

Java面试题:线程的run()和start()有什么区别?

线程的 run() 方法和 start() 方法是 Java 多线程中的两个重 要方法。 1. run() 方法是线程的执行体,线程启动后会执行 run() 方法中的代码,当 run() 方法执行完毕后,线程便终止了。 2. start() 方法用于启动一个新线程,它会…

【linux字符设备驱动-01】创建一个字符设备驱动

目录 一、创建字符设备1、申请设备号方法一方法二 2、创建类方法一方法二 3、创建设备 二、创建字符设备驱动1、初始化:cdev_init2、添加到内核:cdev_add 三、一个完整的字符设备驱动程序1、驱动源码2、测试demo 一、创建字符设备 1、申请设备号 方法一…

腾讯汤道生:超千亿参数 超2万亿tokens 腾讯混元大模型向行业全面开放

9月7日,2023腾讯全球数字生态大会在深圳宝安举行。腾讯集团高级执行副总裁、云与智慧产业事业群CEO汤道生表示,腾讯将迈入“全面拥抱大模型”时代:“以大模型生成技术为核心,人工智能正在成为下一轮数字化发展的关键动力&#xff…

stable diffusion实践操作-SD原理

系列文章目录 本文专门开一节写SD原理相关的内容,在看之前,可以同步关注: stable diffusion实践操作 文章目录 系列文章目录前言一、原理说明1.1、出图原理1.1.1 AI画画不是和人一样,从0开始,而是一个去噪点的过程&am…

华为云云服务器评测|详解 Nacos 安装部署

环境配置 服务器云耀云服务器L操作系统CentOS 7.9 64bit | 公共镜像JDK64 bit JDK 1.8MavenMaven 3.2.xnacos-server2.2.3 下载地址 官方githubRelease 2.2.3 (May 25th, 2023) alibaba/nacos GitHub百度网盘链接:https://pan.baidu.com/s/1K8UE6iJL2ZnosUY83b…

金鸣识别名片识别模块 ,名片扫描仪的神仙“伴侣”

名片扫描仪是现代办公中常见的设备,其作用是将纸质名片转换为电子格式并进行识别。在实现这一功能方面,使用自带OCR功能和金鸣识别两种方式均具有各自的优势。 一方面,自带OCR功能的名片扫描仪具有便捷性和即时性的优势。通过设备内置的OCR技…

Qt Creator使用Clang Format方法

Qt Creator使用Clang Format 习惯性的想格式化代码,发现Qt Creator默认居然是没有代码格式化的,只有一个缩进。 Qt Creater中有个插件:beautifier,在"帮助->关于"插件中,开启“Beautifier”即可&#xf…

CSS内联样式与外联样式

第一种内联样式 通过HTML元素的style属性来设置CSS样式&#xff0c;语法如下: style"css属性:css属性值;"示例代码: <!DOCTYPE html> <html><head><title>01_第一种使用方式.html</title></head><body><!-- style&q…

[PHP]empty一直返回true

class Post {public function __get($key){return true;} }$post new Post(); var_dump(empty($post->a));// bool(true) PHP: 重载 - Manual 读取不可访问&#xff08;protected 或 private&#xff09;或不存在的属性的值时&#xff0c;__get() 会被调用。 当对不可访…

开源库网格算法比较

对于Mesh&#xff0c;我们通常分为结构化网格和非结构化网格。理解很简单&#xff0c;除了四边形和六面体是结构化网格&#xff0c;其它都是非结构化网格 最近在学习网格算法&#xff0c;本人关心的主要是3D网格相关的算法&#xff0c;总结了一下主要包括&#xff1a;网格生成…