1.一直以来想写下机器学习训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。
2.熟悉、梳理、总结下scikit-learn框架OCSVM模型相关知识体系。
3.欢迎批评指正,欢迎互三,跪谢一键三连!
4.欢迎批评指正,欢迎互三,跪谢一键三连!
5.欢迎批评指正,欢迎互三,跪谢一键三连!
文章目录
-
- 1.环境前置说明
- 1.`OC-SVM`简要总结
- 2.`scikit-learn`中`One-Class SVM`常用方法及参数含义
-
- 2.1 `One-Class SVM`中常用方法
- 2.2 参数含义
- 3.`scikit-learn`中`One-Class SVM`实战测试
-
- 3.1 训练、预测、边界距离计算
- 3.2 训练集数据正常异常点占比分布
- 3.3 测试集上预测
- 3.4 训练集点位分布可视化
- 3.5 测试集点位分布可视化
- 4 奇怪问题
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参数定义了用于计算样本之间
相似度核函数,例如线性核、高斯核等
。
- nu参数控制异常点的比例。它限制在模型中允许存在的异常点的比例。
- 优缺点总结
- [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-learn
中One-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