SVM基本概要与sklearn.svm.svc 参数说明

本文介绍了支持向量机(SVM)的基本概念,包括分隔超平面、超平面、间隔、最大间隔和支持向量等核心概念。同时,文章还详细解析了SVM在sklearn中的实现参数,如C、kernel、degree、gamma等。

SVM的基本概念

先介绍一些简单的基本概念:

分隔超平面:将数据集分割开来的直线叫做分隔超平面。

超平面:如果数据集是N维的,那么就需要N-1维的某对象来对数据进行分割。该对象叫做超平面,也就是分类的决策边界。

间隔

一个点到分割面的距离,称为点相对于分割面的距离。

数据集中所有的点到分割面的最小间隔的2倍,称为分类器或数据集的间隔。

最大间隔:SVM分类器是要找最大的数据集间隔。

支持向量:坐落在数据边际的两边超平面上的点被称为支持向量

为什么要求最大间隔
是因为几何间隔与样本的误分次数间存在关系:

误分次数 这里写图片描述

其中的δ是样本集合到分类面的间隔,R=max ||xi|| i=1,…,n,即R是所有样本中(xi是以向量表示的第i个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)

sklearn.svc 参数

sklearn中的SVC函数是基于libsvm实现的,所以在参数设置上有很多相似的地方。(PS: libsvm中的二次规划问题的解决算法是SMO)。

对于SVC函数的参数解释如下:(主要翻译的sklearn 文档)

C: float参数 默认值为1.0

错误项的惩罚系数。C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。

kernel: str参数 默认为‘rbf’

算法中采用的核函数类型,可选参数有:

‘linear’:线性核函数

‘poly’:多项式核函数

‘rbf’:径像核函数/高斯核

‘sigmod’:sigmod核函数

‘precomputed’:核矩阵

precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵。核矩阵为如下形式:
这里写图片描述
还有一点需要说明,除了上面限定的核函数外,还可以给出自己定义的核函数,其实内部就是用你自己定义的核函数来计算核矩阵。

degree: int型参数 默认为3

这个参数只对多项式核函数有用,是指多项式核函数的阶数n

如果给的核函数参数是其他核函数,则会自动忽略该参数。

gamma: float参数 默认为auto

核函数系数,只对‘rbf’,‘poly’,‘sigmod’有效。

如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features.

coef0: float参数 默认为0.0

核函数中的独立项,只有对‘poly’和‘sigmod’核函数有用,是指其中的参数c

probability: bool参数 默认为False

是否启用概率估计。 这必须在调用fit()之前启用,并且会fit()方法速度变慢。

shrinking: bool参数 默认为True

是否采用启发式收缩方式

tol: float参数 默认为1e^-3

svm停止训练的误差精度

cache_size: float参数 默认为200

指定训练所需要的内存,以MB为单位,默认为200MB。

class_weight: 字典类型或者‘balance’字符串。默认为None

给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C.

如果给定参数‘balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。

verbose : bool参数 默认为False

是否启用详细输出。 此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。

max_iter : int参数 默认为-1

最大迭代次数,如果为-1,表示不限制

random_state: int型参数 默认为None

伪随机数发生器的种子,在混洗数据时用于概率估计。

fit() 方法用于训练SVM,具体参数已经在定义SVC对象的时候给出了,这时候只需要给出数据集X和X对应的标签y即可。

predict() 方法: 基于以上的训练,对预测样本T进行类别预测,因此只需要接收一个测试集T,该函数返回一个数组表示个测试样本的类别。

属性有哪些:

svc.n_support_:各类各有多少个支持向量

svc.support_:各类的支持向量在训练样本中的索引

svc.support_vectors_:各类所有的支持向量

<think>首先,用户要求使用中文回答问题。问题似乎是一个关于Python库的列表,包括numpy、matplotlib.pyplot、pandas、sqlite3、IPython.display.display、scipy.stats.entropy、sklearn.naive_bayes.MultinomialNB、sklearn.model_selection.cross_val_score、sklearn.linear_model.LogisticRegression、sklearn.svm.SVCsklearn.preprocessing.normalize。用户没有明确的问题,所以我需要推断这是什么意思。 用户消息是:"numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize"。这看起来像是一个Python导入语句的列表,但没有上下文。用户可能是在问这些库的用途,或者如何一起使用它们。 用户说:"请使用中文回答问题",所以我需要用中文回复。然后,在回答后,我必须提出3-5个相关问题,以"§§相关问题§§"开头,并且不能换行分散。 回顾用户消息:"numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize"。这似乎是用户的问题本身,而不是一个具体的问题。可能用户是在列出一些Python库,并希望我解释或讨论它们。 用户消息的开头是:"请使用中文回答问题\n请在回答完问题后,必须根据用户的问题及你的回答提出3-5个 §§相关问题§§。\n§§相关问题§§ 必须输出在回答的末尾且不可缺少!\n 第一行必须完整且输出 \"§§相关问题§§\"!\n禁止换行分散。\n### 示例格式\n快速排序的基本思想是选择一个基准元素\n```python\ndef quick_sort(arr):\n if len(arr) <= 1:\n return arr\n else:\n # 选择基准值\n pivot = arr[len(arr) // 2]\n # 分别存放比基准小和大的元素\n left = [x for x in arr if x < pivot]\n middle = [x for x in arr if x == pivot]\n right = [x for x in arr if x > pivot]\n # 递归地对左右两边进行快排,并合并结果\n return quick_sort(left) + middle + quick_sort(right)```\n§§相关问题§§\n1. ···\n2. ···\n3. ···\n### 注意\n确保所有内容符合规则,否则回答将被视为无效。\n\numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize" 用户消息的最后部分是:"numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize",这似乎是用户的实际问题或主题。用户可能是在提供一个列表,并希望我解释这些库或如何在一个项目中一起使用它们。 由于用户没有指定一个具体的问题,我将假设用户想知道这些库的基本介绍或它们在机器学习或数据分析中的常见用途。因为这些库都Python相关,尤其是数据科学和机器学习。 我的回答结构: 1. 用中文回答问题。 2. 回答后,提出3-5个相关问题。 3. 以"§§相关问题§§"开头相关问题部分。 4. 相关问题不能换行分散,所以可能用数字列表。 主题:这些Python库的简要介绍。 回答内容: - 解释每个库的作用- 因为列表很长,我可以分组或简要概述。 - 保持简洁,因为用户可能期待一个概述。 库列表: - numpy: 数值计算库。 - matplotlib.pyplot: 绘图库。 - pandas: 数据处理和分析库。 - sqlite3: SQLite数据库接口。 - IPython.display.display: IPython的显示功能。 - scipy.stats.entropy: 计算熵的函数。 - sklearn.naive_bayes.MultinomialNB: scikit-learn中的多项式朴素贝叶斯分类器。 - sklearn.model_selection.cross_val_score: 交叉验证得分计算。 - sklearn.linear_model.LogisticRegression: 逻辑回归分类器。 - sklearn.svm.SVC: 支持向量机分类器。 - sklearn.preprocessing.normalize: 数据归一化函数。 这些库常用于数据科学项目,涉及数据加载、处理、建模、评估和可视化。 我将用中文写一个概述。 然后,提出相关问题。相关问题应该基于我的回答和用户的问题。例如: 1. 如何安装这些库? 2. 如何在一个项目中一起使用它们? 3. 这些库在机器学习工作流中的角色是什么? 等等。 确保相关问题数量为3-5个。 回答格式: - 先回答问题。 - 然后,一行"§§相关问题§§" - 接着,1. 2. 3. ... 列出问题。 禁止换行分散,所以相关问题部分应该连续。 最终输出: [回答内容] §§相关问题§§ 1. ... 2. ... 3. ...</think>以下是您提供的Python库列表的简要中文介绍。这些库在数据科学、机器学习和数据分析中非常常用,它们各自承担不同的角色: - **numpy**: 用于高效的数值计算,提供多维数组对象和数学函数。 - **matplotlib.pyplot**: 用于数据可视化,支持创建各种图表(如折线图、散点图)。 - **pandas**: 用于数据处理和分析,提供DataFrame结构来处理表格数据。 - **sqlite3**: 用于SQLite数据库交互,执行SQL查询和管理本地数据库。 - **IPython.display.display**: 在Jupyter笔记本中显示输出(如图像、HTML)。 - **scipy.stats.entropy**: 计算概率分布的熵(信息熵),常用于信息论和统计。 - **sklearn.naive_bayes.MultinomialNB**: scikit-learn中的多项式朴素贝叶斯分类器,适用于文本分类等任务。 - **sklearn.model_selection.cross_val_score**: 用于交叉验证评估模型性能,计算得分指标。 - **sklearn.linear_model.LogisticRegression**: 逻辑回归分类器,用于二分类或多分类问题。 - **sklearn.svm.SVC**: 支持向量机分类器,适用于分类任务,支持核技巧。 - **sklearn.preprocessing.normalize**: 用于数据归一化,将特征缩放至单位范数,提高模型稳定性。 这些库通常结合使用,例如在机器学习工作流中:pandas加载数据,numpy处理数值,scikit-learn构建模型,matplotlib可视化结果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值