机器学习——支持向量机(svm)

一、 SVM概念

支持向量机是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。支持向量机的学习算法是求解凸二次规划的最优化算法。

基础的SVM算法是一个二分类算法,至于多分类任务,可以通过多次使用SVM进行解决。

1.线性可分支持向量机

对于一个数据集合可以画一条直线将两组数据点分开,这样的数据成为线性可分(linearly separable),如下图所示:

 分割超平面:将上述数据集分隔开来的直线成为分隔超平面。对于二维平面来说,分隔超平面就是一条直线。对于三维及三维以上的数据来说,分隔数据的是个平面,称为超平面,也就是分类的决策边界。
间隔:点到分割面的距离,称为点相对于分割面的间隔。数据集所有点到分隔面的最小间隔的2倍,称为分类器或数据集的间隔。论文中提到的间隔多指这个间隔。SVM分类器就是要找最大的数据集间隔。
支持向量:离分隔超平面最近的那些点。

2.最大间隔

对于线性可分的数据集D = ( x i , y i ) ,分类正确的超平面 w^{T}x+b=0

在SVM中,上式被称为样本点到超平面的函数间隔,同时等价于

 在数据集中众多的样本点中,距离超平面最近的这几个训练样本点使等号成立,即支持向量会使等号成立,那么两个异类支持向量到超平面的距离之和为 

最大化间隔也就是寻找参数w ww和b bb , 使得γ \gammaγ最大,即:

显然,我们可以转化为

上式就是求解最大间隔超平面的最终表达式。

3.核函数

 (1)在前面的讨论中,我们假设样本是线性可分的,即存在一个划分的超平面将样本正确划分,然而在实际生活中,原始的样本空间可能并不存在一个能划分正确的超平面,例如“异或问题”,如下图左图所示。

对于这样的问题,一般的,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间中线性可分,如上图右图所示,将二位空间合理的映射到一个三维空间,就能找到一个合适的划分超平面。如果原始空间是有限维,南无那么一定存在一个高维特征空间使样本可分。
 令ϕ ( x )表示将x 映射后的特征向量,那么,在特征空间中划分超平面的模型可以表示为


其中w 和 b 是模型参数。 
那么目标函数就转化为:

其对偶问题就变为:

求解得到:

(2)几种常见的核函数:

4.向量机对偶算法

第一步:引入拉格朗日乘子\alpha _{i}≥ 0得到拉格朗日函数

第二步:令L(w,b,\alpha )wb的偏导为零:

 第三步:wb回代到第一步:

二、实现(鸢尾花分类预测)

1.数据集介绍

Iris 鸢尾花数据集是一个经典数据集,在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于(iris-setosa, iris-versicolour, iris-virginica)三种中的哪一品种。

数据:

     sepal_len  sepal_wid  petal_len  petal_wid  label
0          5.1        3.5        1.4        0.2      0
1          4.9        3.0        1.4        0.2      0
2          4.7        3.2        1.3        0.2      0
3          4.6        3.1        1.5        0.2      0
4          5.0        3.6        1.4        0.2      0
..         ...        ...        ...        ...    ...
145        6.7        3.0        5.2        2.3      2
146        6.3        2.5        5.0        1.9      2
147        6.5        3.0        5.2        2.0      2
148        6.2        3.4        5.4        2.3      2
149        5.9        3.0        5.1        1.8      2
2.代码实现

基于sklearn的代码实现:

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
 
 
def create_data():
    iris = load_iris()
    df = pd.DataFrame(iris.data, columns=iris.feature_names)
    df['label'] = iris.target
    df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
    data = np.array(df.iloc[:100, [0, 1, -1]])
    for i in range(len(data)):
        if data[i,-1] == 0:
            data[i,-1] = -1
    return data[:,:2], data[:,-1]
 
 
X, y = create_data()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
 
 
plt.scatter(X[:50,0],X[:50,1], label='0')
plt.scatter(X[50:,0],X[50:,1], label='1')
plt.show()
 
 
model = SVC()
model.fit(X_train, y_train)
 
SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape='ovr', degree=3, gamma='scale', kernel='rbf',
    max_iter=-1, probability=False, random_state=None, shrinking=True,
    tol=0.001, verbose=False)
 
 
print('train accuracy: ' + str(model.score(X_train, y_train)))
print('test accuracy: ' + str(model.score(X_test, y_test)))
3.运行结果
(1)数据分布展示:

 (2)训练集和测试集上的准确性

train accuracy: 1.0
test accuracy: 0.96

三、总结

1.SVM的优缺点

(1)优点

高效的处理高维特征空间:SVM通过将数据映射到高维空间中,可以处理高维特征,并在低维空间中进行计算,从而有效地处理高维数据。

适用于小样本数据集:SVM是一种基于边界的算法,它依赖于少数支持向量,因此对于小样本数据集具有较好的泛化能力。

可以处理非线性问题:SVM使用核函数将输入数据映射到高维空间,从而可以解决非线性问题。常用的核函数包括线性核、多项式核和径向基函数(RBF)核。

避免局部最优解:SVM的优化目标是最大化间隔,而不是仅仅最小化误分类点。这使得SVM在解决复杂问题时能够避免陷入局部最优解。

对于噪声数据的鲁棒性:SVM通过使用支持向量来定义决策边界,这使得它对于噪声数据具有一定的鲁棒性。
 

(2)缺点

对大规模数据集的计算开销较大:SVM的计算复杂度随着样本数量的增加而增加,特别是在大规模数据集上的训练时间较长。

对于非线性问题选择合适的核函数和参数较为困难:在处理非线性问题时,选择适当的核函数和相应的参数需要一定的经验和领域知识。

对缺失数据敏感:SVM在处理含有缺失数据的情况下表现不佳,因为它依赖于支持向量的定义。

难以解释模型结果:SVM生成的模型通常是黑盒模型,难以直观地解释模型的决策过程和结果。
 

2.SVM的应用场景

SVM在许多其他领域也有广泛的应用,特别是在分类和回归问题中。它的灵活性和强大的泛化能力使其成为机器学习中的重要工具之一。主要应用场景有文本分类如垃圾邮件分类、情感分析和文档分类、图像识别、信用评分、风险评估和股票市场预测等金融任务、医学诊断、视频分类等


 

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
情感识别系统是一种可以自动判断和分类文本或语音中所表达的情感的算法支持向量机(SVM)是一种常用的机器学习方法,在情感识别中也广泛应用。 SVM基于对数据进行特征映射,将数据从低维空间转化为高维空间,以便更好地进行分类。在情感识别中,我们可以将文本或语音数据转化为特征向量表示,然后使用SVM进行分类。通常选择常用的特征表示方法如词袋模型或者TF-IDF进行特征提取。 下面给出一个用Matlab实现情感识别系统的示例代码: ```matlab % 导入情感数据集 data = importdata('emotion_data.txt'); % 划分训练集和测试集 trainRatio = 0.8; trainSize = int32(length(data) * trainRatio); trainData = data(1:trainSize,:); testData = data(trainSize+1:end,:); % 提取特征和标签 trainFeatures = trainData(:,1:end-1); trainLabels = trainData(:,end); testFeatures = testData(:,1:end-1); testLabels = testData(:,end); % 创建SVM模型 svmModel = fitcsvm(trainFeatures, trainLabels); % 在测试集上进行预测 predictedLabels = predict(svmModel, testFeatures); % 计算准确率 accuracy = sum(predictedLabels == testLabels) / length(testLabels); disp(['准确率:' num2str(accuracy*100) '%']); ``` 以上代码中,我们首先导入情感数据集,然后将数据划分为训练集和测试集。接着我们提取特征和标签,即将文本数据转化为特征向量表示。 然后我们使用fitcsvm函数来创建SVM模型,并通过predict函数在测试集上进行预测。最后我们计算准确率来评估模型的性能。 这是一个简单的情感识别系统的实现示例,实际情感识别会有更多的特征提取方法和模型调参等工作。希望这个回答能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值