吴恩达机器学习--聚类和异常检测

1.聚类

监督学习中,数据集包括输入x和目标输出y
无监督学习中,得到一个只有输入x的数据集,但没有目标标签y

1.1 K-means聚类

假设黄点是数据,我们需要把黄点用k-means分为两类。
K-means反复做两件事情:1.将点分配给集群质心;2.移动集群质心
第一步是(将点分配给簇质心)随机设置中心位置,然后遍历所有的样本,把每一个黄点分配给最近的中心。红点和蓝点就是我们设置的两个集群中心。
在这里插入图片描述
第二步是(移动簇质心)遍历所有的红点,然后对他们取平均值,并将红叉移动到红点所在的平均位置。蓝×同理。
在这里插入图片描述
重复这两步,直到中心的位置不再变化。这个时候的颜色就是最终的结果。

1.2 算法实现

随机初始化k个簇质心,u1,u2,…,uk

在下图示例中,k=2,红叉为u1,蓝叉为u2。注意:u1,u2与训练样本有相同的维度
重复以下两个步骤
第一步:将点分配给簇质心
对于每个训练样本,将其分配给离它最近的簇质心。
在这里插入图片描述
第二步:移动簇质心
xi为n维向量
uk为分配给该聚类k的点的平均值对应的簇质心位置
在这里插入图片描述

1.3 K-means优化目标

c(i)是簇的索引,是目前训练样本xi所在簇的索引
uk是簇质心的位置
k=c(i)时,uc(i)是样本xi分配到的簇的簇质心
k-means的损失函数就是计算训练数据和中心的平均距离
在这里插入图片描述
在这里插入图片描述
注:第一步意思是:对每个训练样本重新分配簇质心使得代价函数最小
第二步意思是:改变聚类中心的位置,即uk

1.4 初始化K-means

效果最好的一种方法是随机挑选K个训练样本,然后,设定μ1 到μk让它们等于这个K个样本
但是,当初始化 μk的选择不同时,可能会得到不同的结果或者得到局部最优解。
在这里插入图片描述
解决方法:尝试多次随机的初始化,计算代价函数,取代价函数最小的情况。

聚类数相当小,从 2到10之间的任何数的话,做多次的随机初始化,通常能够保证你能有一个较好的局部最优解,保证你能找到更好的聚类数据。
但是如果K非常大的话,如果 K比10大很多,比如成百上千个聚类,那么,多种随机初始化就不太可能会有太大的影响。但是,尽管你有很多聚类数目,随机初始化还是会给K均值方法一个合理的起始点来开始,并找到一个好的聚类结果。
在这里插入图片描述

1.5 选择聚类数量

最常用的方法是可视化,或者看聚类算法的输出结果,或者其他一些东西来手动地决定聚类的数目。
肘部法则::改变K值,然后计算代价函数J并可视化,计算不同的K值时的代价函数J时我们可以用多个随机的初始聚类中心计算。
如下图:在k=3之前,J值下降非常快;然后在3的时候,到达一个肘点,此后J就下降得非常慢。则k=3。
事实上肘部法则,并不那么常用,原因是在某些聚类问题上,可视化结果类似于右边这样,没有一个清晰的肘点。
因此肘部法值得尝试,但是不要抱太多的期待。
在这里插入图片描述
最后,决定聚类数量的更好的办法是:看不同的聚类数量能为后续任务提供多好的结果,比如选择T恤尺寸,是K=3(大中小号)还是K=5(加小,小,中,大,特大号),就看你是出于什么目的,比如想满足更多用户的需求,还是盈利更多,还是…

总结:很多情况下,聚类数目仍然是通过手动、人工输入或观察来决定。一种可以尝试的方法是使用肘部法则,但是不要期望它能表现得好。
因此选择聚类数目的更好方法是按照运行K-均值聚类的目的来选择聚类数量

2 异常检测

给定数据集x(1) , x(2) , …, x(m),我们假使这m个数据集是正常的,则需要一个算法来知道新的数据xtest是否异常?我们要采取的方法是给定无标签的训练集,对数据x的概率分布p(x)建模。
下图中,在蓝色圈内的数据属于正常数据的可能性较高,而越是偏远的数据,其属于正常数据的可能性就越低。这种方法称为密度估计。
在这里插入图片描述
另外两个异常检测的应用例子是

  1. 识别欺骗行为,通过用户多久登陆一次、访问过的页面、发布帖子的数量等建立模型,通过模型来识别那些不符合该模型的用户。
  2. 检测数据中心的使用情况:内存使用、被访问的磁盘数量、CPU负载等

2.1 高斯正态分布

当均值μ相同的时候
方差的平方越大,图形是矮胖的
方差的平方越小,图形是瘦高型的在这里插入图片描述

2.2 异常检测算法

在这里插入图片描述

1.对于无标签的样本选取特征;
2.每个特征根据公式计算出高斯分布中所需要的参数 μ 和 σ^2;
在这里插入图片描述
3.对于新样本,计算概率,判断是否异常
在这里插入图片描述
示例:两个特征的异常检测
选取两个特征,分别计算平均值和方差,并可视化,选取阈值
对于新样本,计算概率,判断是否异常
在这里插入图片描述

2.3 开发和评估异常检测系统

实数评估的重要性:当我们为某个应用开发一个学习算法时,需要进行一系列的选择(比如,选择特征等)。如果我们有某种方法,通过返回一个实数来评估我们的算法,那么对这些选择做出决定往往会更容易的多。
异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量y的值来告诉我们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。
当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
训练集用来训练算法。
交叉验证用来调整阈值
在这里插入图片描述
算法评估
要注意的是对于阈值的选取,我们可以尝试不同的epsilon来观察F1的值,然后选取F1值最大的那个epsilon作为训练的阈值。
在这里插入图片描述

2.4 异常检测与监督学习对比

在这里插入图片描述

2.5 异常检测特征选择

异常检测假设特征符合高斯分布
如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布,例如使用对数函数:x = log(x+c),等方法进行转换。
在这里插入图片描述
一个常见的问题:一些异常的数据可能也会有较高的p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。
我们通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小)。
在这里插入图片描述
数据中心示例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值