sklearn SVM算法库小结

合集下载

scikit-learn用法

scikit-learn用法

scikit-learn用法

一、引言

scikit-learn(简称sklearn)是一个基于Python编程语言的开源机器学习库。它建立在NumPy、Pandas、Matplotlib等库的基础上,为各种机器学习算法提供了简单易用的接口。scikit-learn库包含了大量的数据预处理、模型训练、模型评估等功能,可以帮助用户快速构建和优化机器学习模型。

二、scikit-learn库的主要功能

1.数据预处理:scikit-learn库提供了丰富的数据预处理功能,包括数据清洗、特征选择、特征提取、数据归一化等。这些功能可以帮助用户将原始数据转化为适合机器学习算法处理的格式。

2.分类算法:scikit-learn库包含了多种分类算法,如线性回归、逻辑回归、决策树、随机森林、支持向量机(SVM)等。这些算法可以应用于各种分类问题,如二分类、多分类等。

3.回归算法:scikit-learn库提供了多种回归算法,如线性回归、岭回归、Lasso回归等。这些算法可以帮助用户解决各种回归问题,如预测连续值或离散值。

4.聚类算法:scikit-learn库包含了多种聚类算法,如K-means 聚类、层次聚类等。这些算法可以帮助用户将数据集划分为若干个簇,用于解决无监督学习问题。

5.降维算法:scikit-learn库提供了多种降维算法,如主成分分析(PCA)、线性判别分析(LDA)等。这些算法可以帮助用户降低数据的维度,同时保留关键信息。

6.模型选择和评估:scikit-learn库提供了多种模型选择和评

svm实验报告总结

svm实验报告总结

SVM实验报告

1. 背景

支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,广泛

应用于分类问题,特别是二分类问题。SVM的基本思想是通过找到一个最优超平面,将不同类别的样本分开。该算法在模式识别、图像分割、文本分类等领域都有较好的性能。

2. 分析

2.1 数据集

本次实验使用了鸢尾花数据集(Iris Dataset),该数据集是机器学习中应用非常广泛的数据集之一,包含了三种不同的鸢尾花(Setosa、Versicolor、Virginica)的样本,每类样本50个。

2.2 SVM算法

SVM算法的核心在于寻找一个最优的超平面,使得不同类别的样本点到超平面的距

离最大化。其决策函数可以表示为:

f(x)=sign(w T x+b)

其中,w是超平面的法向量,b是超平面的截距。SVM算法通过构建拉格朗日函数

并求解对偶问题,可以得到超平面的参数。

2.3 实验步骤

本次实验的具体步骤如下:

1.加载数据集:使用机器学习库中的函数加载鸢尾花数据集。

2.数据预处理:对数据进行标准化处理,以便提高模型的训练效果。

3.划分训练集和测试集:将数据集划分为训练集和测试集,用于模型的训练和

评估。

4.训练模型:使用训练集对SVM模型进行训练。

5.模型评估:使用测试集对训练好的模型进行评估。

6.结果分析:根据评估结果对模型进行分析,并提出相应的建议。

3. 结果

经过实验,得到了以下结果:

1.样本标准化前的准确率为82%,样本标准化后的准确率提升到96%。

2.在训练集上的准确率高于测试集,表明模型存在轻微的过拟合。

sklearn中的svm用法

sklearn中的svm用法

sklearn中的svm用法

SVM用于机器学习的模型,是一种有监督的学习算法,可以用于分类和回归问题。在scikit-learn库中,我们可以使用sklearn.svm模块来实现SVM模型。

要使用sklearn中的svm模块,首先需要导入相应的类和函数。下面是一些常用的类和函数:

1. SVC类:用于支持向量分类。可以根据训练数据找到一个最佳的超平面(也称为决策边界),将不同类别的样本分开。

2. SVR类:用于支持向量回归。与SVC类似,但用于解决回归问题,预测连续的目标变量而不是分类。

3. LinearSVC类:用于线性支持向量分类。适用于线性可分的分类问题。

4. NuSVC类:用于支持向量分类。与SVC类似,但使用不同的参数表示支持向量。

除了上述类之外,sklearn.svm模块还提供了一些辅助函数和类,例如:

1. kernel:用于指定SVM模型中使用的核函数,如线性核(linear)、多项式核(poly)、RBF核(rbf)等。

2. C:用于控制分类器的惩罚参数。较小的C值会生成较大的间隔,但可能会导致分类误差增加。

3. gamma:在使用RBF核函数时,用于控制数据点的影响范围。较高的gamma值会导致训练样本的影响范围更小。

接下来,我们可以使用这些类和函数来构建SVM模型并进行训练和预测。以下是一个使用SVC类的示例:

```python

from sklearn import svm

# 创建一个SVC分类器

clf = svm.SVC(kernel='linear', C=1)

SVM的原理和代码实现

SVM的原理和代码实现

SVM的原理和代码实现

SVM(Support Vector Machine,支持向量机)是一种常用的机器学习算法,用于二分类和回归问题。SVM的核心思想是找到一个最优的超平面,将不同类别的数据样本分开。这个超平面由支持向量(样本)确定,使得支持向量到超平面的距离最大化。本文将介绍SVM的原理及其代码实现。

一、SVM原理:

1.线性可分情况:

对于线性可分的数据集,SVM的目标是找到一个超平面,使得所有正例样本都位于超平面的一侧,负例样本都位于另一侧。超平面的方程可以表示为:w^T*x+b=0,其中w是一个向量,表示法向量,b是偏置。

2.间隔最大化:

SVM的关键是最大化两个不同类别样本之间的几何间隔。间隔是沿着超平面的宽度,因此离分类超平面最近的实例点,即两个最靠近超平面的支持向量(x1和x2),满足w^T*x1+b=1和w^T*x2+b=-1、它们满足

w^T*(x1-x2)=2/(,w,)。因此,SVM的优化问题转化为求解最大化2/(,w,)的最小化问题。也就是求解以下优化问题:

minimize ,w,^2/2,其中y_i*(w^T*x_i + b) >= 1

3.引入松弛变量:

当数据不是完全线性可分时,引入松弛变量xi,使得一些样本可以处于错误的一侧。此时优化问题转化为:

minimize ,w,^2/2 + C*Σξ_i,其中y_i*(w^T*x_i + b) >= 1 - ξ_i,ξ_i >= 0。

C是一个超参数,用于控制错误样本的惩罚程度。当C越大,对错误

样本的惩罚越重;C越小,则对错误样本的惩罚越轻。

机器学习实训课程学习总结使用Python和Scikitlearn进行机器学习的经验分享

机器学习实训课程学习总结使用Python和Scikitlearn进行机器学习的经验分享

机器学习实训课程学习总结使用Python和Scikitlearn进行机器学习的经验分享机器学习实训课程学习总结使用Python和Scikit-learn进行机器学习的经验分享

机器学习作为人工智能领域中的重要分支,在各个行业都得到了广泛的应用。为了提升自己在机器学习领域的技能,我参加了一门机器学习实训课程。在这门课程中,我们主要使用Python语言和Scikit-learn库进行机器学习的实践,获取了宝贵的经验与技巧,下面是我的学习总结与分享。

一、掌握Python编程基础

机器学习的核心工具之一是Python语言,因此首先要掌握Python 编程基础。在实训课程的开始阶段,我们对Python的基本语法和常用库进行了学习和练习,比如NumPy和Pandas等库。通过学习这些基础知识,我能够更高效地进行数据处理和分析,为后续的机器学习任务打下坚实的基础。

二、了解机器学习算法的原理与应用

在学习Python编程基础之后,我们开始逐渐深入机器学习算法的原理与应用。通过学习不同类型的算法,如监督学习、无监督学习和强化学习等,我对机器学习的整体框架有了更清晰的认识。同时,我们也学习了Scikit-learn库中各种机器学习算法的使用方法,如决策树、

支持向量机和神经网络等。通过实践练习,我对这些算法的原理和应

用有了更深入的理解。

三、数据预处理与特征选择

在进行机器学习任务之前,数据预处理和特征选择是非常重要的步骤。在实训课程中,我们学习了数据清洗、数据转换和特征工程等技术。通过对数据进行清洗和转换,我们可以提高数据的质量和准确性;通过选择合适的特征,我们可以降低数据的维度和噪音,提高模型的

SVM简介及sklearn参数

SVM简介及sklearn参数

SVM简介及sklearn参数

1.SVM简介

SVM⽅法建⽴在统计学VC维和结构风险最⼩化原则上,既可以⽤于分类(⼆/多分类)、也可⽤于回归和异常值检测。SVM具有良好的鲁棒性,对未知数据拥有很强的泛化能⼒,特别

是在数据量较少的情况下,相较其他传统机器学习算法具有更优的性能。 

使⽤SVM作为模型时,通常采⽤如下流程:

1. 对样本数据进⾏归⼀化

2. 应⽤核函数对样本进⾏映射(最常采⽤和核函数是RBF和Linear,在样本线性可分时,Linear效果要⽐RBF好)

3. ⽤cross-validation和grid-search对超参数进⾏优选

4. ⽤最优参数训练得到模型

5. 测试

sklearn中⽀持向量分类主要有三种⽅法:SVC、NuSVC、LinearSVC,扩展为三个⽀持向量回归⽅法:SVR、NuSVR、LinearSVR。

SVC和NuSVC⽅法基本⼀致,唯⼀区别就是损失函数的度量⽅式不同(NuSVC中的nu参数和SVC中的C参数);LinearSVC是实现线性核函数的⽀持向量分类,没有kernel参数,也缺

少⼀些⽅法的属性,如support_等。

2. 参数

SVC 

class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-

支持向量机(SVM)算法总结

支持向量机(SVM)算法总结

支持向量机(SVM)算法总结

展开全文

支持向量机算法作为机器学习领域的经典算法,从被提出开始提出后快速发展,在很多场景和领域都取得了非常好的效果,同时兼有数度快,支持数据量级大(相对经典机器学习算法)等特点使其在工程实践中的得到了广泛的应用。但很多算法工程师以外的人对这一算法了解不多。今天我们就聊一聊支持向量机算法。

1间隔最大化

要理解svm我们需要先理解什么是间隔最大化,首先从简单的线性二分类开始开始说起。要想对不用的样本空间分开来,如下如所示,需要找出一条线将不同分类的样本隔离开。

线性分类器就是通过这条线,我们就能将不同类别的样本分离开来,当有新的样本来时,判断在这条线的那个部分就可以得出新的样本的类别。

如下图所示,能将样本分类的分离的线具有很多,如下图的L1,L2,L3。但是如何选择一条最优的线来分割呢?

最大间隔的原理就是通过选择一个离两个样本都尽量远的中间线。也就是下图中的L2。这样的好处就是,因为离两边的样本都比较远。所以误判的情况相对较小。预测的精度更高。

那如何完成这个间隔最大线的选择呢。这部分需要通过利用严谨的数学公式推倒。过程感兴趣的同学可以查看相关资料。这里就直接给出结论。

通过利用最优化的处理方法,可以得出获取这条最优间隔线的方法。

2支持向量

说了这么久的间隔函数,最大间隔的问题,那什么是支持向量呢。如下图所示,由于间隔最大化需要在两个不同的样本类别中找出最大间隔的分割线,因此,举例分割线两边等距离的样本的点至关重要。这些点就是支持向量。

由于选对支持向量就可以得出最大间隔线,所以在算法迭代过程中,只需要在内存中保存和更新些点即可,会大大节省算法占用的内存空间,这对在实际工程中是十分重要的。

机器学习分类实例(sklearn)——SVM

机器学习分类实例(sklearn)——SVM

机器学习分类实例(sklearn)——SVM

机器学习分类实例——SVM

20180423-20180426学习笔记

25去⾸届数字中国会展参观了,没学习。(想偷懒)由于是最后⼀天,感觉展出的东西少了,因为24号闭幕了。。。但是可以去体验区。主要体验了VR,其他展出的东西要么没意思,要么看不懂,马云马化腾他们来的时候,我因为要开会,没去看。失去了找他们要签名的机会,唉。

⼀、⼯作

主要是学习分类器的⼀些理论,通过实践,最终得出了结果,虽然结果没那么完美,到底怎么不完美,下⾯会提到。

1.1学习理论:

因为对这⽅⾯的知识,仅限于本科阶段的“⼈⼯智能”与“数据挖掘”课程中了解⼀些,应付考试⽤。所以真的要运⽤起来,还真是⿇烦。虽说不⽤理解每个公式,每个数字的含义,但是对整个模型“输⼊什么”、“输出什么”、“做什么”、“核⼼思想”等还是需要理解的。

知乎中的⾼票答案⼀答主“简之”,把SVM模型的各个部分进⾏了形象⽣动的⽐喻

再之后,⽆聊的⼤⼈们,把这些球叫做「data」,把棍⼦叫做「classifier」, 最⼤间隙trick 叫做「optimization」,拍桌⼦叫做「kernelling」, 那张纸叫做

「hyperplane」。

通过他的描述,SVM的运⾏机制可以有个⼤体的理解。

⾼票答案⼆答主“靠靠靠谱”,则进⼀步详细地介绍了整个模型。由“苹果⾹蕉”的分类问题,引出SVM的原理,以及其中各个参数的介绍,写得也很好。

知乎链接:

1.2学习实例:

看了理论,还是挺懵的。本次毕设是采⽤scikit-learn v0.19.1。去官⽅查询⽂档,看如何设置参数、调⽤函数、输⼊输出格式等。

kmeans聚类算法总结

kmeans聚类算法总结

kmeans聚类算法总结

kmeans聚类算法是一种常见的无监督机器学习算法,它主要用于将数据分组并将相似的数据点归为同一类别。下面是kmeans聚类算法的总结:

1. kmeans聚类算法通常需要指定类别数量k,在输入数据分类时会将数据分为k个类别,并且每个类别都有一个代表(即聚类中心)。

2. kmeans聚类算法是一种迭代算法,其主要步骤包括初始化聚类中心、分配数据点到最近的聚类中心、更新聚类中心并重复直到收敛。

3. kmeans聚类算法尝试最小化每个数据点到其所属聚类中心的距离平方和(即SSE),这个过程可以通过最小化聚类中心与每个数据点之间的平方欧几里得距离来实现。

4. kmeans聚类算法对数据分布的假设是数据点可以分为均匀大小的凸形小团,这也导致了其对异常值和噪声敏感。

5. kmeans聚类算法在处理大型数据集时可能会面临时间和内存限制的挑战。

6. kmeans聚类算法可以用于各种应用,如图像分割、市场细分、客户分类和信用评级等。

综上所述,kmeans聚类算法是一种经典的、简单但有效的聚类算法。它具有易于解释、易于实现等优点,在处理一些相关应用时表现不俗。但是,它对于数据集的分布假设较为苛刻,对于异常值和噪声敏感,并且处理大型数据集时可能会面临一些挑战。

sklearn学习总结(超全面)

sklearn学习总结(超全面)

sklearn学习总结(超全⾯)

前⾔

sklearn想必不⽤我多介绍了,⼀句话,她是机器学习领域中最知名的python模块之⼀,若想要在机器学习领域有⼀番建树,必绕不开sklearn

⾸先,放上⼀张官⽹上的sklearn的结构图:

⽬录

1. 分类、回归

2. 降维

3. 模型评估与选择

4. 数据预处理

⼤类⼩类适⽤问题实现说明

分类、回归

1.1 ⼴义线性模型 1.1.1 普通最⼩⼆乘法回归 sklearn.linear_model.LinearRegression

注:本节中所有的回归模型皆为线性回归模型 1.1.2 Ridge/岭回归回归 sklearn.linear_model.Ridge 解决两类回归问题:

⼀是样本少于变量个数

⼆是变量间存在共线性

1.1.3 Lasso 回归 sklearn.linear_sso 适合特征较少的数据

1.1.4 Multi-task Lasso 回归 sklearn.linear_model.MultiTaskLasso y值不是⼀元的回归问题

1.1.5 Elastic Net 回归 sklearn.linear_model.ElasticNet 结合了Ridge和Lasso

1.1.6 Multi-task Elastic Net 回归 sklearn.linear_model.MultiTaskElasticNet y值不是⼀元的回归问题

1.1.7 Least Angle Regression(LARS) 回归 sklearn.linear_rs 适合⾼维数据

sklearn库用法

sklearn库用法

sklearn库用法

sklearn(Scikit-learn)是一个用于机器学习的Python库。它是一个简单而高效的工具,能够帮助开发人员构建和部署机器学习模型。在本文中,我将会详细介绍sklearn的用法,包括如何安装、常用的功能和示例代码。

## 安装sklearn

要安装sklearn,首先需要安装Python和pip。然后在终端或命令提示符下运行以下命令:

```

pip install scikit-learn

```

这将会自动安装sklearn及其依赖库。

##常用的数据集和预处理

```python

from sklearn.datasets import load_iris

iris = load_iris

X, y = iris.data, iris.target

```

```python

from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder

scaler = StandardScaler

X_scaled = scaler.fit_transform(X)

normalizer = MinMaxScaler

X_normalized = normalizer.fit_transform(X)

encoder = OneHotEncoder

y_encoded = encoder.fit_transform(y.reshape(-1, 1)).toarray ```

这些预处理方法可以帮助我们将数据转换为适用于机器学习算法的形式。

scikit-learn线性回归算法库小结

scikit-learn线性回归算法库小结

scikit-learn线性回归算法库⼩结

scikit-learn对于线性回归提供了⽐较多的类库,这些类库都可以⽤来做线性回归分析,本⽂就对这些类库的使⽤做⼀个总结,重点讲述这些线性回归算法库的不同和各⾃的使⽤场景。

线性回归的⽬的是要得到输出向量Y和输⼊特征X之间的线性关系,求出线性回归系数θ,也就是Y=Xθ。其中Y的维度为mx1,X的维度为mxn,⽽θ的维度为nx1。m代表样本个数,n代表样本特征的维度。

为了得到线性回归系数θ,我们需要定义⼀个损失函数,⼀个极⼩化损失函数的优化⽅法,以及⼀个验证算法的⽅法。损失函数的不同,损失函数的优化⽅法的不同,验证⽅法的不同,就形成了不同的线性回归算法。scikit-learn中的线性回归算法库可以从这这三点找出各⾃的不同点。理解了这些不同点,对不同的算法使⽤场景也就好理解了。

1. LinearRegression

损失函数:

LinearRegression类就是我们平时说的最常见普通的线性回归,它的损失函数也是最简单的,如下:

J(θ)=1

2(Xθ−Y)T(Xθ−Y)

损失函数的优化⽅法:

对于这个损失函数,⼀般有梯度下降法和最⼩⼆乘法两种极⼩化损失函数的优化⽅法,⽽scikit中的LinearRegression类⽤的是最⼩⼆乘法。通过最⼩⼆乘法,可以解出线性回归系数θ为:

θ=(X T X)−1X T Y

验证⽅法:

LinearRegression类并没有⽤到交叉验证之类的验证⽅法,需要我们⾃⼰把数据集分成训练集和测试集,然后训练优化。

时间序列分类中的SVM算法

时间序列分类中的SVM算法

时间序列分类中的SVM算法

随着时间序列数据的不断涌现和应用范围的不断扩大,时间序

列分类算法也越来越受到重视。而SVM算法作为一种受欢迎的分

类算法,也被广泛应用于时间序列分类问题。

SVM算法的基本原理

SVM算法在处理分类问题时,会将数据集映射到高维空间中,通过寻找一个最优的超平面来对数据进行分类。具体来说,在特

征空间中,SVM算法会尽可能地找到一个能够将两个不同类别的

数据分开的超平面。而对于非线性分类问题,SVM通过核函数的

转换,将数据集映射到高维空间中,从而实现分类。

SVM算法在时间序列分类中的应用

在时间序列分类中,SVM算法也能够发挥出其优异的分类能力。对于一个时间序列,可以将其表示成一个向量形式。然后,SVM

算法通过核函数的转换,将时间序列映射到高维空间中进行分类。

下面以UCR时间序列分类数据集为例,介绍SVM算法在时间序列分类中的应用。

读取数据

首先,需要将时间序列数据集读取进来。UCR时间序列分类数据集是一个经典的时间序列数据集,包含了许多不同的数据集,每个数据集都对应一个不同的分类问题。

加载数据集的方法可以使用相关的Python库,如下所示:

``` python

from sklearn.datasets import load_

X_train, y_train, X_test, y_test = load_('GunPoint')

```

其中,'GunPoint'是UCR数据集中的一个数据集名称,X_train 和y_train表示训练集数据和标签,X_test和y_test表示测试集数据和标签。

机器学习基础:SVM算法总结

机器学习基础:SVM算法总结

机器学习基础:SVM算法总结

机器学习基础:SVM算法总结

CONTENTS

1. 函数间隔与⼏何间隔

在分离超平⾯固定为\(w^Tx+b=0\)的时候,\(|w^Tx+b|\)表⽰点x到超平⾯的相对距离。通过观察\(w^Tx+b\)和\(y\)是否同号,判断分类是否正确,引⼊函数间隔的概念,定义函数间隔\(γ′\)为:

\[γ′=y(w^Tx+b) \]

可以看到,它就是感知机模型⾥⾯的误分类点到超平⾯距离的分⼦。对于训练集中m个样本点对应的m个函数间隔的最⼩值,就是整个训练集的函数间隔。

函数间隔并不能正常反应点到超平⾯的距离,在感知机模型⾥我们也提到,当分⼦成⽐例的增长时,分母也是成倍增长。为了统⼀度量,我们需要对法向量w加上约束条件,这样我们就得到了⼏何间隔\(γ\),定义为:

\[γ=\frac{y(w^Tx+b)}{||w||_2}=\frac{γ′}{||w||_2} \]

⼏何间隔才是点到超平⾯的真正距离,感知机模型⾥⽤到的距离就是⼏何距离。

2. ⽀持向量

在感知机模型中,我们可以找到多个可以分类的超平⾯将数据分开,并且优化时希望所有的点都被准确分类。但是实际上离超平⾯很远的点已经被正确分类,它对超平⾯的位置没有影响。我们最关⼼是那些离超平⾯很近的点,这些点很容易被误分类。如果我们可以让离超平⾯⽐较近的点尽可能的远离超平⾯,最⼤化⼏何间隔,那么我们的分类效果会更好⼀些。SVM的思想起源正起于此。

如下图所⽰,分离超平⾯为\(w^Tx+b=0\),如果所有的样本不光可以被超平⾯分开,还和超平⾯保持⼀定的函数距离(下图函数距离为1),那么这样的分类超平⾯是⽐感知机的分类超平⾯优的。可以证明,这样的超平⾯只有⼀个。和超平⾯平⾏的保持⼀定的函数距离的这两个超平⾯对应的向量,我们定义为⽀持向量,如下图虚线所⽰。

校园植物识别实验报告

校园植物识别实验报告

校园植物识别实验报告

校园植物识别实验报告

植物是我们生活中不可或缺的一部分。在校园里,各种植物伴随着我们的学习生活,为我们带来美丽与清新。我们对于这些植物的了解却有限。本次实验旨在通过使用机器学习算法构建一个校园植物识别模型,以提升我们对于校园植物的认识与了解。

一、实验原理

1. 数据集准备

本次实验使用的数据集包含了校园内常见的20种植物,每种植物拍摄了100张左右的照片。数据集共2000多张图片,数据来源于网络与实地采集。

2. 特征提取

在机器学习中,特征提取是非常关键的一个环节。在这一环节中我们需要将原始数据转化为可供机器学习算法处理的数值型数据,这个过程叫做提取特征。在本实验中,我们使用了深度学习算法中的卷积神经网络来提取图片的特征。这种方法比较适合图片分类任务。

3. 建立模型

在特征提取之后,我们需要将提取出来的特征输入到机器学习算法中进行分类。在这里,我们选用了支持向量机(SVM)算法来对提取出来的特征进行分类。SVM是一种非常常用的分类算法,它的分类效果非常好。

二、实验步骤

1. 数据集准备

为了构建一个准确的识别模型,我们需要准备一个充分的数据集。在本实验中,我们使用爬虫技术从网上爬取了一些植物图片,同时也对校园内一些常见的植物进行了拍摄。最终我们得到了一个包含20种常见校园植物的数据集,每种植物大约有100张照片。

2. 卷积神经网络特征提取

在本实验中,我们使用了深度学习中的卷积神经网络来提取图片的特征。我们使用了VGG-16模型来进行特征提取。这是一个非常著名的卷积神经网络模型,可以提取出一张图片的4096个特征。

异常点检测算法小结

异常点检测算法小结

异常点检测算法⼩结

异常点检测,有时也叫离群点检测,英⽂⼀般叫做Novelty Detection或者Outlier Detection,是⽐较常见的⼀类⾮监督学习算法,这⾥就对异常点检测算法做⼀个总结。

1. 异常点检测算法使⽤场景

什么时候我们需要异常点检测算法呢?常见的有三种情况。⼀是在做特征⼯程的时候需要对异常的数据做过滤,防⽌对归⼀化等处理的结果产⽣影响。⼆是对没有标记输出的特征数据做筛选,找出异常的数据。三是对有标记输出的特征数据做⼆分类时,由于某些类别的训练样本⾮常少,类别严重不平衡,此时也可以考虑⽤⾮监督的异常点检测算法来做。

2. 异常点检测算法常见类别

异常点检测的⽬的是找出数据集中和⼤多数数据不同的数据,常⽤的异常点检测算法⼀般分为三类。

第⼀类是基于统计学的⽅法来处理异常数据,这种⽅法⼀般会构建⼀个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。⽐如特征⼯程中的⽅法,在做数据特征值缩放的时候,它会利⽤数据特征的分位数分布,将数据根据分位数划分为多段,只取中间段来做缩放,⽐如只取25%分位数到75%分位数的数据做缩放。这样减⼩了异常数据的影响。

第⼆类是基于聚类的⽅法来做异常点检测。这个很好理解,由于⼤部分聚类算法是基于数据特征的分布来做的,通常如果我们聚类后发现某些聚类簇的数据样本量⽐其他簇少很多,⽽且这个簇⾥数据的特征均值分布之类的值和其他簇也差异很⼤,这些簇⾥的样本点⼤部分时候都是异常点。⽐如我之前讲到的和都可以在聚类的同时做异常点的检测。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

scikit-learn 支持向量机算法库使用小结

之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践

的角度对scikit-learn SVM算法库的使用做一个小结。scikit-learn SVM算法库封装了libsvm 和liblinear 的实现,仅仅重写了算法了接口部分。

1. scikit-learn SVM算法库使用概述

scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类。另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类。相关的类都包

裹在sklearn.svm模块之中。

对于SVC, NuSVC,和LinearSVC 3个分类的类,SVC和 NuSVC差不多,区别仅仅在于对

损失的度量方式不同,而LinearSVC从名字就可以看出,他是线性分类,也就是不支持各种低维

到高维的核函数,仅仅支持线性核函数,对线性不可分的数据不能使用。

同样的,对于SVR, NuSVR,和LinearSVR 3个回归的类, SVR和NuSVR差不多,区别也仅仅在于对损失的度量方式不同。LinearSVR是线性回归,只能使用线性核函数。

我们使用这些类的时候,如果有经验知道数据是线性可以拟合的,那么使用LinearSVC

去分类或者LinearSVR去回归,它们不需要我们去慢慢的调参去选择各种核函数以及对应参数,

速度也快。如果我们对数据分布没有什么经验,一般使用SVC去分类或者SVR去回归,这就需要

我们选择核函数以及对核函数调参了。

什么特殊场景需要使用NuSVC分类和 NuSVR 回归呢?如果我们对训练集训练的错误率或者说支持向量的百分比有要求的时候,可以选择NuSVC分类和 NuSVR 。它们有一个参数来控制这个百分比。

这些类的详细使用方法我们在下面再详细讲述。

2. 回顾SVM分类算法和回归算法

我们先简要回顾下SVM分类算法和回归算法,因为这里面有些参数对应于算法库的参数,如果不先复习下,下面对参数的讲述可能会有些难以理解。

对于SVM分类算法,其原始形式是:

min12||w||22+C∑i=1mξi min12||w||22+C∑i=1mξi

s.t.yi(w∙ϕ(xi)+b)≥1−ξi(i=1,2,...m)s.t.yi(w∙ϕ(xi)+b)≥1−ξi(i=1,2,...m)

ξi≥0(i=1,2,...m)ξi≥0(i=1,2,...m)

其中m为样本个数,我们的样本为(x1,y1),(x2,y2),...,(xm,ym)(x1,y1),(x2,y2),...,(xm,ym) 。w,b w,b 是我们的分离超平面的w∙ϕ(xi)+b=0w∙ϕ(xi)+b=0 系数, ξiξi 为第i个样本的松弛系数, C为惩罚系数。ϕ(xi)ϕ(xi) 为低维到高维的映射函数。

通过拉格朗日函数以及对偶化后的形式为:

min α12∑i=1,j=1mαiαjyiyjK(xi,xj)−∑i=1mαi min⏟α12∑i=1,j=1mαiαjyiyjK(xi,xj)−∑i=1mαi

s.t.∑i=1mαiyi=0s.t.∑i=1mαiyi=0

0≤αi≤C0≤αi≤C

其中和原始形式不同的αα 为拉格朗日系数向量。K(xi,xj)K(xi,xj) 为我们要使用的核函数。

对于SVM回归算法,其原始形式是:

min12||w||22+C∑i=1m(ξ∨i+ξ∧i)min12||w||22+C∑i=1m(ξi∨+ξi∧)

s.t.−ϵ−ξ∨i≤yi−w∙ϕ(xi)−b≤ϵ+ξ∧i s.t.−ϵ−ξi∨≤yi−w∙ϕ(xi)−b≤ϵ+ξi∧

ξ∨i≥0,ξ∧i≥0(i=1,2,...,m)ξi∨≥0,ξi∧≥0(i=1,2,...,m)

其中m为样本个数,我们的样本为(x1,y1),(x2,y2),...,(xm,ym)(x1,y1),(x2,y2),...,(xm,ym) 。w,b w,b 是我们的回归超平面的w∙xi+b=0w∙xi+b=0 系数, ξ∨i,ξ∧iξi∨,ξi∧为第i个样本的松弛系数,C为惩罚系数,ϵϵ为损失边界,到超平面距离小于ϵϵ的训练集的点没有损失。ϕ(xi)ϕ(xi) 为低维到高维的映射函数。

通过拉格朗日函数以及对偶化后的形式为:

min α∨,α∧12∑i=1,j=1m(α∧i−α∨i)(α∧j−α∨j)K(xi,xj)−∑i=1m(ϵ−yi)α∧i+(ϵ+yi)α∨i min⏟α∨,α∧12∑i=1,j=1m(αi∧−αi∨)(αj∧−αj∨)K(xi,xj)−∑i=1m(ϵ−yi)αi∧+(ϵ+yi)αi∨

s.t.∑i=1m(α∧i−α∨i)=0s.t.∑i=1m(αi∧−αi∨)=0

0<α∨i

0<α∧i

其中和原始形式不同的α∨,α∧α∨,α∧为拉格朗日系数向量。K(xi,xj)K(xi,xj) 为我们要使

用的核函数。

3. SVM核函数概述

在scikit-learn中,内置的核函数一共有4种,当然如果你认为线性核函数不算核函数的话,那就只有三种。

1)线性核函数(Linear Kernel)表达式为:K(x,z)=x∙z K(x,z)=x∙z ,就是普通的内积,LinearSVC 和 LinearSVR 只能使用它。

2) 多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:K(x,z)=(γx∙z+r)d K(x,z)=(γx∙z+r)d ,其中,γ,r,dγ,r,d 都需要自己调参定义,比较麻烦。

3)高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是libsvm默认的核函数,当然也是scikit-learn默认的核函数。表达式为:

K(x,z)=exp(−γ||x−z||2)K(x,z)=exp(−γ||x−z||2) ,其中,γγ 大于0,需要自己调参定义。

4)Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为:K(x,z)=tanh(γx∙z+r)K(x,z)=tanh(γx∙z+r) ,其中,γ,rγ,r 都需要自己调参定义。

一般情况下,对非线性数据使用默认的高斯核函数会有比较好的效果,如果你不是SVM

调参高手的话,建议使用高斯核来做数据分析。

4. SVM分类算法库参数小结

这里我们对SVM分类算法库的重要参数做一个详细的解释,重点讲述调参的一些注意点。

相关文档
最新文档