机器学习-非监督学习
小白入门整理网课笔记,欢迎交流
聚类算法,异常检测属于无监督学习,就是没有标签。
聚类算法的核心是将相似数据自动归为一类
举例:电商:用户分群与精准营销
这是聚类最常见的应用场景之一,通过分析用户行为数据划分群体,实现差异化运营。
划分用户群体:基于用户的购买频率、消费金额、浏览偏好等数据,将用户分为高价值忠诚客户、价格敏感型客户、新客户等。
定制营销策略:针对高价值客户推送专属优惠或新品,对价格敏感型客户推送优惠券,提升转化率。
介绍一种聚类里面比较常用的一种方法-k均值算法
k均值算法
理论
步骤
- 随机选择两个点作为两个不同聚类的中心位置(聚类中心)
- 遍历每个点,看它更接近哪个聚类中心
- 计算所有红色点的均值,移动红色聚类中心,蓝色也一样
- 重复上面的过程(2-3)如果聚类中心不变,则结束
运行k均值,如果有一类刚开始一个点都没分到,会直接消除没有点被分配到的聚类。

代价函数
这个函数就是我们在实现k均值过程中一直尝试优化降低的函数。

实现
如何选择最开始的聚类中心,以及分为几类是我们需要考虑的。
初始化k均值
- 选择k(聚类中心)小于m(样本数)
- 随机选择k个测试样本作为聚类中心

有时候初始化的位置不那么好,可能陷入局部最小值。
如果你想多次随机初始化以提高找到良好的聚类的几率,你可以多次运行k均值算法(50-1000次是比较常见的),计算代价函数,选择代价函数最小的那个,尝试找到最佳的局部优化器。
选择聚类数量
一种尝试选择k值的方法称为ELBO方法,你用各种k值运行k均值算法,并绘制代价函数或失真函数作为聚类数量的函数

不要选择刚好让函数较小的那个k(比如左图k=3虽然有明显下降但是一般不选),可以选大一点的k(比如右图k=8代价函数趋于稳定)。
异常检测
异常检测也是一种非监督学习算法
异常检测算法会查看一个未标记的正常时间的数据集,并从中学习如何检测或标记异常事件。
例子:使用异常检测来加测可能存在的飞机发动机制造问题。
异常检测算法的核心是从数据中自动识别出不符合正常模式、偏离整体趋势的 “异常数据”,常用于发现故障、欺诈或罕见事件。
进行异常检测的最常见的方法是使用一个称为密度估计的技术

出现在最中间椭圆的概率最大,然后越往外面概率越小。
如果给的test样本出现在某区域的小于(一个很小的数),我们认为这是一个异常值。
理论
为了应用异常检测,我们需要使用高斯分布,也称为正态分布

有一个测试集,里面有m个样本,每个样本x都有n个特征
步骤:
- 选择你认为对判断异常有用的特征
- 计算每个样本特征x的均值和方差
- 给一个新x,计算p(x)
- 如果p(x)小于一个很小的数,那么这个新样本异常。


评估系统
实数评估:意味着如果你能快速以某种方式更改算法,例如更改特征或参数,并且有一种方法计算出一个数字来告诉你算法变好还是变坏,那么你可以较容易判断是否坚持这个算法更改。
- 划分训练集,交叉验证集,测试集
- 在训练集上面训练模型
- 在交叉验证集和测试集上面测试

或者计算:
- 精确率,召回率
- F1分数
与监督学习对比
异常检测(以欺诈为例)
正例(y=1,即异常)数量极少(0-20个);负例(y=0,即正常)数量极多。
异常类型多样,算法很难从有限的正例中学习 “异常长什么样”;未来出现的异常可能和之前见过的完全不同。
核心关注正常数据的概率分布 p(x)。
监督学习(以垃圾邮件为例)
正例和负例数量都较多(例如有 20 个正例用于学习)。
有足够多的正例让算法理解 “正例的特征”,未来的正例大概率和训练集中的相似。
选择使用哪些特征
在监督学习中,如果你的特征不太正确,或者有一些与问题无关的额外特征也没关系,因为算法有足够的标签Y,算法可以自行忽略哪些特征或者重新缩放特征,从而充分利用你提供的特征。
但对于异常检测,它仅从无标签数据中运行或学习,很难自行决定忽略哪些特征。
1.尽量确保数据的分布是高斯分布,如果不是,采用一些手段使其接近高斯分布。

提示:无论你对训练集应用了什么变换,请记住在交叉验证集和测试集上面也做相应的变换。
错误分析:看哪些地方出错,然后利用这些信息来尝试提出改进。
2.在异常检测中,需挑选那些在异常场景下数值会出现异常波动(过大或过小)的特征。或者基础特征的组合。
例如针对计算机系统异常检测,可选择内存使用量、磁盘访问频率、CPU 负载、网络流量等基础特征,还可通过对基础特征进行组合(如 CPU 负载与网络流量的比值、CPU 负载平方与网络流量的比值)来构建更具区分度的特征。
特征选择的依据是正常数据的概率分布 p(x),正常样本的 p(x) 较大,而异常样本的 p(x) 会显著变小。
更多推荐
所有评论(0)