赞
踩
(1)K均值聚类步骤:1.随机选择k个样本作为初始均值向量;2.计算样本到各均值向量的距离,把它划到距离最小的簇;3.计算新的均值向量;4.迭代,直至均值向量未更新或到达最大次数。缺点:需要输入k,算法速度依赖于初始化的好坏,不能处理非球形簇。
(2)密度聚类步骤:DBSCAN,找到几个由密度可达关系导出的最大的密度相连样本集合。1.找到任意一个核心点,对该核心点进行扩充;2.扩充方法是寻找从该核心点出发的所有密度相连的数据点;3遍历该核心的邻域内所有核心点,寻找与这些数据点密度相连的点。优点:抗噪声,处理任意形状和大小的簇。缺点:数据量大时内存消耗大,需要自定义参数多。优点:不需要确定要划分的聚类个数。
(3)层次聚类步骤:AGNES,1.先将数据集中的每个样本看作一个初始聚类簇;2.找到距离最近的两个聚类簇进行合并。优点:无需目标函数,没有局部极小问题或是选择初始点的问题。缺点:代价大。
下面这些点是分布在样本空间的众多样本,现在我们的目标是把这些在样本空间中距离相近的聚成一类。我们发现A点附近的点密度较大,红色的圆圈根据一定的规则在这里滚啊滚,最终收纳了A附近的5个点,标记为红色也就是定为同一个簇。其它没有被收纳的根据一样的规则成簇。(形象来说,我们可以认为这是系统在众多样本点中随机选中一个,围绕这个被选中的样本点画一个圆,规定这个圆的半径以及圆内最少包含的样本点,如果在指定半径内有足够多的样本点在内,那么这个圆圈的圆心就转移到这个内部样本点,继续去圈附近其它的样本点,类似传销一样,继续去发展下线。等到这个滚来滚去的圈发现所圈住的样本点数量少于预先指定的值,就停止了。那么我们称最开始那个点为核心点,如A,停下来的那个点为边界点,如B、C,没得滚的那个点为离群点,如N)。
基于密度这点有什么好处呢,我们知道kmeans聚类算法只能处理球形的簇,也就是一个聚成实心的团(这是因为算法本身计算平均距离的局限)。但往往现实中还会有各种形状,比如下面两张图,环形和不规则形,这个时候,那些传统的聚类算法显然就悲剧了。于是就思考,样本密度大的成一类,这就是DBSCAN聚类算法。
上面提到了红色圆圈滚啊滚的过程,这个过程就包括了DBSCAN算法的两个参数,这两个参数比较难指定,公认的指定方法简单说一下:
以上虽然是一个可取的方式,但是有时候比较麻烦 ,大部分还是都试一试进行观察,用k距离需要做大量实验来观察,很难一次性把这些值都选准。
!!!
最后还有很多聚类方法,比如谱聚类,密度最小值聚类等等。
实验效果如下,来自我的github ?
引申:对于离群点的检测(异常检测),可以用
1. DBSCAN算法
箱线图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的耐抗性,多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不会影响箱形图的数据形状,箱线图识别异常值的结果比较客观。由此可见,箱线图在识别异常值方面有一定的优越性。
- import pandas as pd
- import numpy as np
- from collections import Counter
- def detect_outliers(df,n, features):
- outlier_indices = []
- for col in features:
- Q1 = np.percentile(df[col], 25)
- Q3 = np.percentile(df[col], 75)
- IQR = Q3 - Q1
- outlier_step = 1.5 * IQR
- outlier_list_col = df[(df[col] < Q1 - outlier_step) | (df[col] > Q3 + outlier_step)].index
- outlier_indices.extend(outlier_list_col)
- outlier_indices = Counter(outlier_indices)
- multiple_outliers = list( k for k, v in outlier_indices.items() if v > n)
- return multiple_outliers
-
- df = pd.read_csv("data.csv")
- Outliers_to_drop = detect_outliers(df, 2 ["Col1", "Col2", "Col3", "Col4"])
- df = df.drop(Outliers_to_drop, axis=0).reset_index(drop=True)
3. iForest 孤立森林是一个基于Ensemble的快速异常检测方法(详细介绍)
参考:
DBSCAN聚类算法——机器学习(理论+图解+python代码(看这里?)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。