【scikit-learn009】异常检测系列:单类支持向量机(OC-SVM)实战总结(看这篇就够了,已更新)

本文介绍了单类支持向量机(OC-SVM)在异常检测中的应用,作为scikit-learn框架的一部分。OC-SVM通过仅使用正常数据建模,识别异常点。文章详细讲解了OC-SVM的工作原理、模型参数,如nu和kernel,以及常用方法,如fit和predict。同时,文中提到了PCA和t-SNE在高维数据降维可视化中的作用,并通过实战测试展示了OC-SVM在训练和预测过程中的应用。
摘要由CSDN通过智能技术生成

1.一直以来想写下机器学习训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。
2.熟悉、梳理、总结下scikit-learn框架OCSVM模型相关知识体系。
3.欢迎批评指正,欢迎互三,跪谢一键三连!
4.欢迎批评指正,欢迎互三,跪谢一键三连!
5.欢迎批评指正,欢迎互三,跪谢一键三连!

1.环境前置说明

  • import sklearn
    print( sklearn.__version__ )
    # 0.19.2
    
    !python --version
    # Python 3.7.0
    # 版本过高,部署至生产环境会产生N多问题,暂时不使用过高版本,实战总结为主
    
  • 在这里插入图片描述

1.OC-SVM简要总结

  • OC-SVM(One-Class Support Vector Machine)是一种无监督学习算法,支持向量机(Support Vector Machine,SVM)的变体,广泛应用于异常检测、离群点检测、网络安全、图像处理等领域。它可以帮助识别潜在的异常情况,对于保护系统的安全和发现异常行为具有重要的作用
  • OC-SVM旨在通过仅使用正常数据来建模,识别出与正常模式不同的异常数据点。即仅使用正例样本来学习一个描述正例样本特征的超平面,并尽可能将负例样本远离该超平面(也可以仅使用负样本)。
    • 工作原理及相关术语
      • 数据映射:将正常数据映射到高维特征空间,使得正常数据点能够被一个超平面所包围(决策边界margin)。
      • 寻找最优超平面:通过最大化超平面与正常数据之间的间隔,寻找一个最优的分割超平面,使得异常点尽可能远离该超平面。即决策边界要尽可能远离正常数据点。
      • 异常检测:对于新数据点,通过计算其与超平面的距离,来判断该数据点是否为异常。距离较大的数据点更有可能是异常点。
    • 模型重要参数
      • nu参数控制异常点的比例。它限制在模型中允许存在的异常点的比例。较小的nu值表示更少的异常点,较大的nu值表示更多的异常点。
      • kernel参数定义了用于计算样本之间相似度核函数,例如线性核、高斯核等
    • 优缺点总结
      • [S] 不需要异常数据进行训练,只需要正常数据即可。
      • [S] 对于高维数据和复杂的数据分布具有较好的适应性。
      • [S] 调整模型参数控制异常点的检测灵敏度。
      • [W] 在处理高维数据和大规模数据时,计算复杂度较高
      • [W] 数据分布不均匀或存在噪声的情况,效果可能不理想
      • [W] 需要谨慎选择模型参数,以避免过拟合或欠拟合的情况
  • TSNE
    • t-SNE( t-distributed Stochastic Neighbor Embedding)是目前来说效果最好的数据降维与可视化方法,它能够将高维的数据降维到2维或3维,然后画成图的形式表现出来。目前来看,t-SNE是效果相对比较好,并且实现比较方便的方法。
    • 过于高维一般不使用,当数据维数过高时,两个矩阵的计算量是很大的。所以一般来说,我们会先用 PCA 降维到 10 维左右,再使用 t-SNE 降维到 2 或 3 维空间进行可视化。如果在低维空间中具有可分性,则数据是可分的;如果在高维空间中不具有可分性,可能是数据不可分,也可能仅仅是因为不能投影到低维空间。
    • t-SNE(TSNE)的原理是将数据点之间的相似度转换为概率。原始空间中的相似度由高斯联合概率表示,嵌入空间的相似度由“学生t分布”表示。

2.scikit-learnOne-Class SVM常用方法及参数含义

2.1 One-Class SVM中常用方法

  • fit(X):输入训练样本进行训练。
  • predict(X):返回预测值,+1就是正常样本,-1就是异常样本。
  • decision_function(X):返回各样本点到超平面的函数距离(signed distance),正的为正常样本,负的为异常样本。
  • set_params(**params):设置这个评估器的参数。
  • get_params([deep]):获取这个评估器的参数。
  •  |  Methods defined here:
     |  
     |  decision_function(self, X)
     |      Signed distance to the separating hyperplane.
     |      
     |      Signed distance is positive for an inlier and negative for an outlier.
     |      
     |      Parameters
     |      ----------
     |      X : array-like, shape (n_samples, n_features)
     |      
     |      Returns
     |      -------
     |      X : array-like, shape (n_samples,)
     |          Returns the decision function of the samples.
     |  
     |  fit(self, X, y=None, sample_weight=None, **params)
     |      Detects the soft boundary of the set of samples X.
     |      
     |      Parameters
     |      ----------
     |      X : {
         array-like, sparse matrix}, shape (n_samples, n_features)
     |          Set of samples, where n_samples is the number of samples and
     |          n_features is the number of features.
     |      
     |      sample_weight : array-like, shape (n_samples,)
     |          Per-sample weights. Rescale C per sample. Higher weights
     |          force the classifier to put more emphasis on these points.
     |      
     |      Returns
     |      -------
     |      self : object
     |          Returns self.
     |      
     |      Notes
     |      -----
     |      If X is not a C-ordered contiguous array it is copied.
     |  
     |  predict(self, X)
     |      Perform classification on samples in X.
     |      
     |      For an one-class model, +1 or -1 is returned.
     |      
     |      Parameters
     |      ----------
     |      X : {
         array-like, sparse matrix}, shape (n_samples, n_features)
     |          For kernel="precomputed", the expected shape of X is
     |          [n_samples_test, n_samples_train]
     |      
     |      Returns
     |      -------
     |      y_pred : array, shape (n_samples,)
     |          Class labels for samples in X.
     |  Methods inherited from sklearn.base.BaseEstimator:
     |  
     |  __getstate__(self)
     |  
     |  __repr__(self)
     |      Return repr(self).
     |  
     |  __setstate__(self, state)
     |  
     |  get_params(self, deep=True)
     |      Get parameters for this estimator.
     |      
     |      Parameters
     |      ----------
     |      deep : boolean, optional
     |          If True, will return the parameters for this estimator and
     |          contained subobjects that are estimators.
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xsimah

创作不易,感谢客官的打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值