【机器学习】使用scikitLearn对数据进行聚类:7种异常和新颖性检测方式

36 篇文章 5 订阅
27 篇文章 3 订阅

无监督学习:
【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估
【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBSCAN
【机器学习】使用scikitLearn对数据进行聚类:高斯聚类GaussianMixture

异常检测及新颖性检测方法:
两者的区别在于,异常检测学习训练集中的中心特征,将部分边缘特征理解为异常值。新颖性检测,则是学习模式,并判断新数据是否属于该模式。新颖性检测的训练集中不含异常/新颖值,异常检测则相反。

1.新颖性检测,单类SVM方法:

class sklearn.svm.OneClassSVM(kernel=’rbf’, degree=3, gamma=’auto’,
coef0=0.0, tol=0.001, nu=0.5, shrinking=True, cache_size=200, verbose=False,
 max_iter=-1, random_state=None)
#predict(X):返回预测值,+1就是正常样本,-1就是异常样本。

使用一个最小化的空间超球体包裹已知数据,新数据如果不在球体内部,则是新颖的。若数据维度很高时,也可以做异常检测。

2.异常检测方法,混合高斯模型,详见【机器学习】使用scikitLearn对数据进行聚类:高斯聚类GaussianMixture

3.PCA降维法进行异常检测:
基于重构误差。直观上说,PCA提取了数据的主要特征,如果一个数据样本不能被重构,则说明这个数据样本的特点和主要数据特征不一样,那么它就是一个异常样本。
新数据先使用训练过的pca进行降维,紧接着重构,计算两者间的均方误超过一定阈值,则判断为异常。
在这里插入图片描述

4.Fast-MCD异常检测(最小协方差决定)
假定正常值是由单个高斯分布生成的,而异常值不属于这个高斯分布。

cov =  EllipticEnvelope().fit(X_all)
##predict(X):返回预测值,+1就是正常样本,-1就是异常样本。
cov_label = cov.predict(X_all)
df['cov_label'] = cov_label
plot(df, label_name = 'cov_label', normal = 1, abnormal = -1)

5.局部离群因子:
它将给定实例周围的实例密度与其相邻实例周围的密度进行比较。异常值通常比k个最近的邻居更孤立。

import numpy as np
from sklearn.neighbors import LocalOutlierFactor as LOF
X = [[-1.1], [0.2], [100.1], [0.3]]
clf = LOF(n_neighbors=2)
#predict(X):返回预测值,+1就是正常样本,-1就是异常样本。
res = clf.fit_predict(X)
print(res)

6.隔离森林
是一种随机森林,相比于正常的数据,异常数据经过更少的步骤,即可与正常数据区隔开。

from sklearn.ensemble import IsolationForest
#contamination表示异常因子的占比,max_samples位每颗树的样本量
#n_estimators为构成森林的树的数量
clf = IsolationForest(max_samples=100, contamination=0.1,n_estimators=100)
clf.fit(X_train)
y_pred_train = clf.predict(X_train)

7.密度聚类

from sklearn.cluster import DBSCAN
import numpy as np
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])
clustering = DBSCAN(eps=3, min_samples=2).fit(X)
#其中-1的点是无法被分类的异常点
clustering.labels_
array([ 0,  0,  0,  1,  1, -1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

颢师傅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值