sklearn(十五):Novelty and Outlier Detection

outlier detection和novelty detection的区别

  • outlier detection
    在outlier detection中,training data包含outlier,estimator在拟合时只选training data最集中的数据区进行拟合,而忽略密度较低的数据区(outlier)。
  • novelty detection
    在novelty detection中,training data不包含outlier,estimator根据training data 拟合模型,然后,用这一模型检测一个新的样本是否为novelty sample。

outlier detection function

1、LocalOutlierFactor

  • 核心思想:求:“某样本点的k-领域内样本点所处位置的平均密度” /
    “该样本点所在位置的密度”。比值>1,则该点所在位置的密度<其周围样本所在位置的密度,这个点就越有可能是异常点。
  • 适用于局部稀疏点,不适用于全局稀疏点
  • LocalOutlierFactor可以进行outlier detection,也可以进行novelty detection
    by 调节参数novelty=True。
sklearn.neighbors.LocalOutlierFactor(n_neighbors=20, algorithm=’auto’, leaf_size=30, metric=’minkowski’, p=2, metric_params=None, contamination=’legacy’, novelty=False, n_jobs=None)
#n_neighbors:指定point的第k距离领域中k的值,k指的是点的个数。
#algorithm:{auto,kd_tree,ball_tree,brute},用于搜寻k近邻点的algorithm。
#leaf_size:指ball_tree,kd_tree的叶子结点数,该值的大小会影响k近邻点的搜寻速度。
#metric:使用的距离公式
#p:minkowski距离公式中参数
#metric_params:其它距离公式中的参数
#contamination:用来指示trainingdata的污染程度:the proportion of outlier in training data
#novelty:LocalOutlierFactor is originally used for outlier detection , when novelty=True,it can be used for novelty detection
#n_jobs:并行工作的数量
#return{-1:outlier,1:inlier}

异常检测(三)——Local Outlier Factor(LOF)
闵可夫斯基距离
2、Isolation Forest

  • 核心思想:用叶子节点到根节点的路径长度判断该叶子节点是否为异常点。
  • 通常树的数量越多,算法越稳定。
  • 适用于高维数据,但是如果数据维度特别高,且有noise,则利用有限的random sampling feature可能不能作为区分class的标准,not to mention,这些feature 可能存在noise,影响判断结果。
  • Isolation Forest仅对“全局稀疏点”敏感,不太适合处理“局部稀疏点”。
#outlier detection

sklearn.ensemble.IsolationForest(n_estimators=100, max_samples=’auto’, contamination=’legacy’, max_features=1.0, bootstrap=False, n_jobs=None, behaviour=’old’, random_state=None, verbose=0)
#n_estimators:iTree的数量
#max_sample:iTree的trainingdata size
#contamination:the proportion of outlier in data
#max_feature:用于训练iTree的feature 数量
#bootstrap=True:有放回抽样
#n_jobs:并行工作的个数
#behaviour:behaviour of decision_function。contamination parameter会影响decision_function。
#Return the anomaly score of each sample using the IsolationForest algorithm

Isolation Forest算法原理详解
3、OneClassSVM

  • OneClassSVM对于outlier非常敏感,因此并不是一个很好的outlier detection function。
  • 对于novelty detecton来说(即training data没有被污染的情况),他可以给出training data一个boundary,然后,根据new point是否为在boundary内来判断其是否为novelty。
#Unsupervised Outlier Detection.
#Estimate the support of a high-dimensional distribution.

sklearn.svm.OneClassSVM(kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, tol=0.001, nu=0.5, shrinking=True, cache_size=200, verbose=False, max_iter=-1, random_state=None)
#kernel:{sigmoid,rbf,lib,poly}
#degree:polynomial kernel的参数
#gamma:其它kernel的参数
#coef:sigmoid和poly kernel的常数项
#nu:控制“支持向量机”的数量,即控制inlier data的boundary
#cache_size:kernel cache size
#for a one class model1 or -1 is returned 

4、Robust covariance
robust covariance首先将training data中的inlier提取出来,然后根据inlier求empirical covariance estimation(假设数据服从Guassian,协方差未知,根据最大似然估计求未知协方差),在根据马氏距离求各个inlier sample权重,将所得的empirical covariance根据这些权重reweighting,构成最后的covariance estimation。根据求得的协方差,可知training data Guassian distribution form,里Guassian distribution比较远的point就可以看作是outlier。
note that:可以直接求取各个样本(outlier and inlier)的马氏距离,根据马氏距离的大小判定哪些点是outlier,哪些点是inlier。

#An object for detecting outliers in a Gaussian distributed dataset.

sklearn.covariance.EllipticEnvelope(store_precision=True, assume_centered=False, support_fraction=None, contamination=0.1, random_state=None)
#store_precision:是否estimate precision be stored {True,False}
#assume_centered=Ture,假设数据已经去中心化,适用于data whose mean is significantly equal to zero but is not exactly zero.
#support_fraction:The proportion of points to be included in the support of the raw MCD estimate.
#contamination:the proportion of outlier in data

官方文档:Novelty and Outlier Detection

猜你喜欢

转载自blog.csdn.net/u014765410/article/details/82933701