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


    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.
       
  • 相关阅读:
    Abbkine AbFluor 488 细胞凋亡检测试剂盒特点及实验建议
    elasticsearch api 调用
    Jenkins 安装BlueOcean
    初阶牛之牛客网刷题集(1)
    Introducing Language Guidance in Prompt-based Continual Learning
    如何用Python3+requests+unittest实现接口自动化测试实战
    NCT 全国青少年编程图形化编程(Scratch)等级考试(一级)模拟测试H
    【ROS进阶篇】第十讲 基于Gazebo的URDF集成仿真流程及实例
    分布式事务解决方案汇总
    SQL SELECT TOP, LIMIT, ROWNUM
  • 原文地址:https://blog.csdn.net/qq_24452475/article/details/139306872