异常一般是指与标准值(预期值)有偏离的样本点,也就是跟绝大部分数据“长的不一样” 。异常往往是“有价值”的事情,我们对异常的成因感兴趣 。
异常样本点距离特征向量的距离比较远
,对这个距离设置一个阈值,超过此阈值的数据点被视为异常点。聚集程度高、离群点较少
的情况,需要对每个数据点进行计算,因此计算开销大,不适用于数据量大、维度高的数据。 在聚类时,异常点不属于任何一个簇
。该方法将数据点划分为一个个对应的簇,那些不能被归为某一个簇的数据点被视为异常点
。这类算法对簇个数的选择高度敏感,数量选择不当可能造成较多正常值被划为离群点或成小簇的离群点被归为正常。因此对于每一个数据集需要设置特定的参数,才可以保证聚类的效果,在数据集之间的通用性较差。聚类的主要目的通常是为了寻找成簇的数据,而将异常值和噪声一同作为无价值的数据而忽略或丢弃,在专门的异常点检测中使用较少。异常点到其临近的前K个点的距离比正常数据点要大
。k近邻算法的基本思路是对每一个点,计算其与最近k个相邻点的距离,通过距离的大小来判断它是否为离群点。在这里,离群距离大小对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使模型更加稳定,距离值的计算通常使用k个最近邻的平平均距离。异常点周围点的密度较低
。相对于其邻居的局部密度偏差而不是距离来进行度量。它将相邻点之间的距离进一步转化为“邻域”,从而得到邻域中点的数量(即密度),认为密度远低于其邻居的样本为异常值。集成算法是将多个基检测器的输出结合起来
(与bagging类似),一些算法在数据集的某些子集上表现很好,一些算法在其他子集上表现很好,然后集合起来,使得输出更具鲁棒性。
孤立森林:孤立森林是用一个随机超平面切割数据空间(数据集),切一次可以生成两个子空间。然后继续用随机超平面来切割每个子空间并循环,直到每个子空间只有一个数据点为止。直观上来讲,那些具有高密度的簇需要被切很多次才会将其分离,而那些低密度的点很快就被单独分配到一个子空间了
。孤立森林认为这些很快被孤立的点就是异常点。
如上图,d点最早被分割开,所以d点较大概率为异常点。
在有标签
的情况下,可以使用树模型(gbdt,xgboost等)进行分类,缺点是异常检测场景下数据标签是不均衡的,但是利用机器学习算法的好处是可以构造不同特征
#导库
dels.knn import KNN
#generate_data样本生成函数
from pyod.utils.data import generate_data,evaluate_print
from ample import visualize
#准备数据
#contamination异常数据的百分比,n_train训练集的数量,n_test测试集的数量,n_features产生数据的特征数
X_train,y_train,X_test, y_test = generate_data(n_train=500,n_test=100,n_features=2,contamination=0.1)
#KNN检测器
clf_name='KNN'
clf=KNN()#初始化检测器
clf.fit(X_train)#训练检测器模型
#得到训练集的预测标签和异常值得分
y_train_pred=clf.labels_#返回训练集上的分类标签(0为正常值,1为异常值)
y_train_scores=clf.decision_scores_#返回训练数据上的异常值(值越大越异常)
#在测试集上进行训练
y_test_pred = clf.predict(X_test) #返回测试集上的分类标签
y_test_scores = clf.decision_function(X_test)#异常值(值越大越异常)
#使用ROC和Precision @ Rank n评估预测
print("nOn Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
print("nOn Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)
运行结果:
On Training Data:
KNN ROC:0.9974, precision @ rank n:0.98On Test Data:
KNN ROC:1.0, precision @ rank n:1.0
#可视化所有示例
visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,y_test_pred, show_figure=True, save_figure=False)
运行结果:
本文发布于:2024-02-04 19:01:55,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170714269758599.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |