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

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

时间:2024-06-01 23:58:55浏览次数:16  
标签:SVM 单类 异常 self scikit 超平面 samples 数据

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

标签:SVM,单类,异常,self,scikit,超平面,samples,数据
From: https://blog.csdn.net/qq_24452475/article/details/139306872

相关文章