聚类算法比较

k-means、dbscan、孤立森林、 K-Means 聚类算法有很多种(几十种),K-Means是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快, 但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类,初始质心的选择也是一个问题。 K-means算法的过程: 1.首先输入k的值,即我们希望将数据集经过聚类得到k个分组。 2.从数据集中随机选择k个数据点作为初始大哥(质心,Centroid) 3.对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。 4.这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会, 每一群选出新的大哥(其实是通过算法选出新的质心)。 5.如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大, 趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。 6.如果新大哥和老大哥距离变化很大,需要迭代3~5步骤。 DBSCAN算法的过程: 参考:https://www.cnblogs.com/aijianiula/p/4339960.html DBSCAN的主要优点有: 1.可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。 2.可以在聚类的同时发现异常点,对数据集中的异常点不敏感。 3.聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。 DBSCAN的主要缺点有: 1.如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。 2.如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。 3.调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ, 邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。 孤立森林(Isolation Forest) 现有的异常检测方法主要是通过对正常样本的描述,给出一个正常样本在特征空间中的区域,对于不在这个区域中的样本,视为异常。 这些方法的主要缺点是,异常检测器只会对正常样本的描述做优化,而不会对异常样本的描述做优化,这样就有可能造成大量的误报,或者只检测到少量的异常。 异常的两个特点:异常数据只占很少量、异常数据特征值和正常数据差别很大。孤立森林,不再是描述正常的样本点,而是要孤立异常点 ,由周志华教授等人于2008年在第八届IEEE数据挖掘国际会议上提出。 先了解一下该算法的动机。目前学术界对异常(anomaly detection)的定义有很多种,在孤立森林(iForest)中, 异常被定义为“容易被孤立的离群点 (more likely to be separated)”,可以将其理解为分布稀疏且离密度高的群体较远的点。 在特征空间里,分布稀疏的区域表示事件发生在该区域的概率很低,因而可以认为落在这些区域里的数据是异常的。 孤立森林是一种适用于连续数据(Continuous numerical data)的无监督异常检测方法,即不需要有标记的样本来训练,但特征需要是连续的。 对于如何查找哪些点容易被孤立(isolated),iForest使用了一套非常高效的策略。在孤立森林中,递归地随机分割数据集, 直到所有的样本点都是孤立的。在这种随机分割的策略下,异常点通常具有较短的路径。 直观上来讲,那些密度很高的簇是需要被切很多次才能被孤立,但是那些密度很低的点很容易就可以被孤立。 孤立森林作为孤立树的总体,将具有较短路径长度的点识别为异常点,不同的树扮演不同异常识别的专家。 已经存在的那些异常检测的方法大部分都期望有更多的数据,但是在孤立森林中,小数据集往往能取得更好的效果。 样本数较多会降低孤立森林孤立异常点的能力,因为正常样本会干扰隔离的过程,降低隔离异常的能力。子采样就是在这种情况下被提出的。 swamping和masking是异常检测中比较关键的问题。 swamping指的是错误地将正常样本预测为异常。当正常样本很靠近异常样本时,隔离异常时需要的拆分次数会增加,使得从正常样本中区分出异常样本更加困难。 masking指的是存在大量异常点隐藏了他们的本来面目。当异常簇比较大,并且比较密集时,同样需要更多的拆分才能将他们隔离出来。 上面的这两种情况使得孤立异常点变得更加困难。 造成上面两种情况的原因都与数据量太大有关。孤立树的独有特点使得孤立森林能够通过子采样建立局部模型, 减小swamping和masking对模型效果的影响。 其中的原因是:子采样可以控制每棵孤立树的数据量;每棵孤立树专门用来识别特定的子样本。 iForest用于异常检测 基于iForest的异常检测包括两个步骤:训练阶段,基于训练集的子样本来建立孤立树;测试阶段,用孤立树为每一个测试样本计算异常分数。 算法思路 怎么来切这个数据空间是iForest的设计核心思想,这里仅介绍最基本的方法。由于切割是随机的, 所以需要用ensemble的方法来得到一个收敛值(蒙特卡洛方法),即反复从头开始切,然后平均每次切的结果。i Forest由t个iTree(Isolation Tree)孤立树组成,每个iTree是一个二叉树结构,其实现步骤如下: 1. 从训练数据中随机选择Ψ个点样本点作为子样本,放入树的根节点。 2. 随机指定一个维度,在当前节点数据中随机产生一个切割点p——切割点产生于当前节点数据中指定维度的最大值和最小值之间。 3. 以此切割点生成了一个超平面,然后将当前节点数据空间划分为2 个子空间:把指定维度里小于p的数据放在当前节点的左边,把大于等于p的数据放在当前节点的右边。 4. 在子节点中递归步骤2 和3,不断构造新的子节点,直到子节点中只有一个数据(无法再继续切割)或子节点已到达限定高度。 获得t个iTree之后,iForest训练就结束,然后我们可以用生成的iForest来评估测试数据了。对于一个训练数据x, 我们令其遍历每一棵iTree,然后计算x 最终落在每个树第几层(x在树的高度)。然后我们可以得出x在每棵树的高度平均值。 获得每个测试数据的高度平均值后,我们可以设置一个阈值(边界值),高度平均值低于此阈值的测试数据即为异常。 也就是说异常在这些树中只有很短的平均高度. sklearn中的参数定义:https://www.cnblogs.com/wanghui-garcia/p/11475396.html 参数解释:n_estimators = 构建多少个itree max_samples=采样数,自动是256 contamination=c(n)默认为0.1 max_features=最大特征数 默认为1 bootstrap=构建Tree时,下次是否替换采样,为True为替换,为False为不替换 n_jobs=fit和perdict执行时的并行数 代码示例: from sklearn.ensemble import IsolationForest X = [[-1.1,9], [0.3,23], [0.5,22], [100,99]] clf = IsolationForest(random_state=0,behaviour=“new”,contamination=“auto”).fit(X) print(clf.predict([[0.1,23], [0,21], [90,100]])) import pandas as pd import numpy as np from sklearn.ensemble import IsolationForest #todo:孤立森林建模 #1. 生成训练数据 rng = np.random.RandomState(42) X = 0.3 * rng.randn(100, 2) #生成100 行,2 列 X_train = np.r_[X + 2, X - 2] print(X_train) # 产生一些异常数据 X_outliers = rng.uniform(low=-4, high=4, size=(20, 2)) iForest= IsolationForest(contamination=0.1,behaviour=“new”) iForest = iForest.fit(X_train) #预测 pred = iForest.predict(X_outliers) print(pred) # [-1 1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] #-1 为异常值1 表示正常值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小金子的夏天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值