[SVM系列之二]线性分类

在上一节中,我们对支持向量机(SVM)有了一个大概的印象,当然,这还远远不够。在深入了解之前,在本节中我们将涉及分类问题。分类的目的是学会一个分类函数或分类模型(或者叫做分类器),该模型能将数据库中的数据项映射到给定类别中的某一个,从而可以用于预测未知类别。分类在机器学习、数据挖掘等领域中得到广泛的应用,可以用来解决各种实际应用问题,因此它的重要性不言而喻。

支持向量机(SVM)算法也是分类方法的一种。

线性二分类模型

分类标准

对于两类分类问题,将数据点用 x x 来表示,这是一个 n 维向量, wT w T 上标中的“ T T ”代表转置,而类别用 y 来表示,可以取 1 1 或者 1,分别代表两个不同的类。一个线性分类器就是要在 n n 维的数据空间中找到一个超平面,其方程可以表示为:

wTx+b=0

这个1或–1的分类标准起源于逻辑回归,下面进行介绍。

逻辑回归

逻辑回归(Logistic Regression)的目的是从特征学习出一个 0/1 0 / 1 分类模型,而这个模型是将特征的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用逻辑函数(或称作Sigmoid函数)将自变量映射到 (0,1) ( 0 , 1 ) 上,映射后的值被认为是属于 y=1 y = 1 的概率。形式化表示就是:假设函数

hθ(x)=g(θTx)(1.1) (1.1) h θ ( x ) = g ( θ T x )

其中 x x n 维特征向量,函数 g g 就是逻辑函数。对于一元变量的情形,g(z)=11+ez 的图像为:



由上图可以看出,函数 g g (,+)映射到了 (0,1) ( 0 , 1 ) ,式 (1.1) ( 1.1 ) 可作为 x x 对应 y=1 的概率:

P{y=1|x;θ}=hθ(x)(1.2) (1.2) P { y = 1 | x ; θ } = h θ ( x )

P{y=0|x;θ}=1hθ(x)(1.3) (1.3) P { y = 0 | x ; θ } = 1 − h θ ( x )

如果要判别一个数据点 x x 属于哪个类时,只需求 hθ(x),若大于 0.5 0.5 就是 y=1 y = 1 的类,反之属于 y=0 y = 0 类,也即自变量 θTx θ T x 若大于 0 0 就是 y=1 的类,否则属于 y=0 y = 0 类。

总结:逻辑回归就是要学习得到 θ θ ,使得正例的特征远大于 0 0 ,负例的特征远小于 0,强调在全部训练实例上达到这个目标。

扩展:分类与回归的区别是什么?
答:区别在于输出变量的类型。
定量输出称为回归,或者说是连续变量预测;
定性输出称为分类,或者说是离散变量预测。
*举个例子:
预测明天的气温是多少度,这是一个回归任务;
预测明天是阴、晴还是雨,就是一个分类任务。*

形式化表示

我们采用结果标签 y=1 y = − 1 y=1 y = 1 ,分别替换在逻辑回归中使用的 y=0 y = 0 y=1 y = 1 。同时将 θ θ 替换成 w w b。以前的 θTx=θ0+θ1x1+θ2x2++θnxn θ T x = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n (其中认为 x0=1 x 0 = 1 )。现在我们替换 θ0 θ 0 b b ,替换后面的 θ1x1+θ2x2++θnxn w1x1+w2x2++wnxn w 1 x 1 + w 2 x 2 + … + w n x n (即 wTx w T x )。这样,我们让 θTx=wTx+b θ T x = w T x + b ,进一步 hθ(x)=g(θTx)=g(wTx+b) h θ ( x ) = g ( θ T x ) = g ( w T x + b ) 。也就是说除了 y y y=0 变为 y=1 y = − 1 ,只是标签表示值不同外,与逻辑回归的形式化表示没有区别。

现在,我们可以把式 (1.1) ( 1.1 ) 重写为:

hw,b(x)=g(wT+b)(1.4) (1.4) h w , b ( x ) = g ( w T + b )

“逻辑回归”部分提到过:只需考虑 θTx θ T x 的正负问题,而不用关心 g(z) g ( z ) ,因此我们这里将 g(z) g ( z ) 做一个简化,将其简单映射到 y=1y=1 y = − 1 和 y = 1 上。映射关系如下:

g(z)={1,1,if z0if z<0(1.5) (1.5) g ( z ) = { 1 , if  z ≥ 0 − 1 , if  z < 0

线性分类举例

还记得上一节桌面上用木棍分开红蓝小球的例子嘛?将其抽象到二维平面上表示为:


二维平面上线性分类问题举例

图中粉红色的线(即木棍)将红蓝色的点(即红蓝小球)分开,这条线也称为超平面(hyperplane),也可以说,在超平面一边的数据点所对应的 y y 全是 1,而在另一边全是 1 1

分类函数(重要:后面会重点讨论)为:

(1.6)f(x)=wTx+b

显然,如果 f(x)=0 f ( x ) = 0 ,那么 x x 是位于超平面上的点。我们不妨要求对于所有满足 f(x)<0 的点,其对应的 y y 等于 1,而 f(x)>0 f ( x ) > 0 则对应 y=1 y = 1 的数据点,见下图。


正样例和负样例

我们先从最简单的情形开始,假设数据都是线性可分的,亦即这样的超平面是存在的。当然,有些时候,或者说大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在(后面会涉及到)。

再实际应用中,我们在进行分类的时候,将数据点 x x 代入 f(x) 中,如果得到的结果小于 0 0 ,则赋予其类别 1,如果大于 0 0 则赋予类别 1。如果 f(x)=0 f ( x ) = 0 ,则会出现问题,它并不属于任何一类。

参考文献

[1]支持向量机通俗导论(理解SVM的三层境界) - July
[2]分类与回归区别是什么? - 走刀口的回答 - 知乎


更多机器学习干货、最新论文解读、AI资讯热点等欢迎关注“AI学院(FAICULTY)”,内容持续更新中……
欢迎加入faiculty机器学习交流qq群:451429116(点此进群)
版权声明:本文不可任意转载,转载请联系作者。


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 支持向量机(Support Vector Machine,SVM)是一种经典的机器学习算法,可以用于多分类问题。在MATLAB中,有多种方法可以实现SVM分类。 一种常见的方法是使用MATLAB中的分类器函数fitcecoc。它基于“一对多”(One-vs-All)方法,将多分类问题转化为多个二分类问题。该函数可以根据训练数据和标签创建一个SVM分类器,并用于预测新的样本。 首先,需要准备训练数据和标签。训练数据应为一个矩阵,每行表示一个样本,每列表示一个特征。标签应为一个向量,表示每个样本对应的类别。 接下来,可以使用fitcecoc函数创建SVM分类器。例如: ``` classifier = fitcecoc(trainingData, trainingLabels); ``` 这将根据训练数据和标签创建一个SVM分类器对象。 创建好分类器后,可以使用predict函数对新的样本进行预测。例如: ``` predictedLabels = predict(classifier, testData); ``` 这将使用创建的分类器对测试数据进行预测,并返回预测的类别标签。 除了fitcecoc函数外,MATLAB还提供了其他用于SVM分类的函数,如fitcecoc、fitcecoc、fitcsvm等。可以根据具体需求选择合适的函数进行多分类任务的实现。 需要注意的是,使用SVM进行多分类时,需要根据数据集的特点选择合适的核函数、惩罚参数等参数,以达到较好的分类效果。此外,还需要进行模型评估和调优,以提高分类器的性能。 总之,MATLAB提供了多种用于SVM分类的函数,可以根据具体需求选择适合的函数进行模型训练和预测。使用SVM进行多分类任务时,需要注意选择合适的参数和进行模型调优,以获得较好的分类效果。 ### 回答2: SVM支持向量机)是一种常用于分类和回归的机器学习算法。在MATLAB中,可以使用SVM工具箱进行多分类任务。 MATLAB中的SVM工具箱提供了一系列函数和工具,用于训练和评估SVM模型。下面是一个使用SVM工具箱进行多分类的基本步骤: 1. 准备数据:将训练数据和测试数据准备好。确保数据集中的每个样本都有一个标签,表示其所属的类别。 2. 特征提取:根据数据的特点,选择合适的特征提取方法。可以使用MATLAB中的特征选择工具箱,如特征选择、主成分分析等。 3. 训练模型:使用svmtrain函数来训练SVM模型。此函数接受训练数据和相应的标签作为输入,并返回一个训练好的模型对象。 4. 优化模型:可以使用crossval函数进行交叉验证,以选择最佳的参数配置或模型。此函数可以帮助我们评估模型的性能,并根据指定的评估度量选择最优的模型。 5. 预测类别:使用svmclassify函数来对新样本进行分类预测。此函数接受一个已训练的模型和待预测的样本作为输入,并返回预测结果。 6. 评估模型:使用一些评估指标,如准确率、召回率和F1得分等,对模型进行评估。可以使用confusionmat函数来计算混淆矩阵,并根据混淆矩阵计算各种评估指标。 以上是使用SVM工具箱进行多分类的基本步骤。在MATLAB中,还可以根据具体的需求和数据特点进行一些定制化的处理和调整。需要注意的是,SVM算法对于大规模的数据集可能需要较长的训练时间,因此,在实际应用中,需要根据实际情况选择合适的算法和参数配置。 ### 回答3: SVM支持向量机)是一种常见的用于分类和回归分析的机器学习算法。在Matlab中,我们可以使用分类器工具箱中的svmtrain函数来实现SVM分类SVM分类是指使用SVM算法将数据分为多个类别。在Matlab中,可以通过设置svmtrain函数中的'kernel_function'参数为'linear'来实现线性核函数。线性核函数假设数据在特征空间中是线性可分的。 首先,我们需要准备用于训练和测试的数据。数据应该由输入特征矩阵X和类别标签向量Y组成。然后,我们可以使用svmtrain函数来训练SVM分类器。 例如,假设我们有一个包含100个样本和3个类别的数据集。我们可以使用以下代码进行训练: X = [训练数据特征矩阵,大小为100xN] Y = [训练数据的类别标签向量,大小为100x1] svmModel = svmtrain(X, Y, 'kernel_function', 'linear'); 在这个示例中,svmtrain函数训练一个使用线性核函数的SVM分类器,并将训练模型保存在svmModel中。 接下来,我们可以使用svmclassify函数来对测试样本进行分类。测试数据应该具有与训练数据相同的特征维度。例如,假设我们有一个包含10个测试样本的数据集。我们可以使用以下代码对测试样本进行分类: testX = [测试数据特征矩阵,大小为10xN] predictedY = svmclassify(svmModel, testX); 在这个示例中,svmclassify函数使用训练好的svmModel对testX中的样本进行分类,并将预测的类别标签保存在predictedY中。 最后,我们可以使用confusionmat函数来计算分类结果的混淆矩阵。混淆矩阵可以显示算法在每个类别中的分类准确性。 C = confusionmat(Y, predictedY); C是一个大小为3x3的矩阵,其中行表示实际类别,列表示预测类别。矩阵的对角线上的元素表示分类准确的样本数。 综上所述,我们可以使用Matlab中的svmtrain函数和svmclassify函数实现SVM分类,并使用confusionmat函数评估分类结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值