机器学习之支持向量机(SVM)实战

支持向量机

支持向量机(support vector machine),一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最 大化,最终可转化为一个凸二次规划问题的求解。最初SVM被用来解决线性分类问题,但自从90年代中加入了核方法后,它也可以有效解决非线性问题,其优点是能适应“小样本数量,高特征维度”的数据集,即使是特征维度数高于训练样本数据的情况。
下面我们来了解几个SVM的概念:

1超平面

所谓的超平面在一维空间就是一个点,二维空间是一条线,三维空间是一个平面,在更高维空间中只能被称为超平面了。在普通线性可分问题中,符合分类要求的超平面会有无穷个。那怎么找到最优超平面呢?SVM选择最优超平面的依据一般有两条:
1.无法找到其他绘制方法使得两条虚线之间的距离更大。
2.最优超平面到与两种类型距其最近点有相等距离。
综合起来就是使得与超平面距离最小的数据点的距离最大化。线段 x q x_q xq被称为超平面的间隔(Margin)。
请添加图片描述

2.软间隔(Soft Margin)

在很多情况下,训练集中会有噪声数据,或者问题本身带有不确定性,这时坚持使用最优超平面策略会产生过度拟合的问题。SVM中的软间隔的概念就是解决这类问题,它允许计算超平面是训练数据集上存在错误数据,防止出现过度拟合。从而寻找最优超平面就变成了下面两条权衡:1.要尽可能正确地分类训练集。2.间隔(Margin)要尽可能大。
SVM模型中提供了松弛因子超参数C控制间隔。当C参数较大时,超平面趋向于严格分类训练数据,当C参数较小时,趋向于容忍更多训练数据分类错误而是间隔更大。

3.线性不可分问题and核函数

请添加图片描述
线性不可分问题就如左边的数据,无论如何都找不到一个二维超平面能较好分割两类数据。那应该如何找最优超平面呢?通常我们在使用模型训练数据时,都会对数据进行降维处理,但面对这样的数据,我们是否可以不降维,反而增加维度呢,其实时可以的,而且也是SVM的优点,它能适应“小样本数量,高特征维度”的数据集,即使是特征维度数高于训练样本数据的情况。我们将左边的二维数据增加维度后变成了右边的三维数据后,可以发现很容易就能分类数据了。因此也可以这样想象:任何有限维度的非线性问题在更高的维度的空间里总可以变化成线性可分问题。那SVM又是如何升维呢?SVM是使用拉格朗日乘子法实现求解问题升维的。通过拉格朗日乘子法最后将求得超平面参数w的目标转化为用高维中数据点向量两两点积值求解的二次规划问题。(二次规划问题是指一种有约束情况下的求极值问题)这也意味这SVM无需真的将所有数据映射到高维空间,而只需要知道这些数据在高维空间里两两之间的点积就可以了。而这时,核函数就派上用场了。核函数其实就是一种输入两个低维空间向量,返回高维空间点积的函数。我们在使用SVM训练数据时,可以直接就使用一些常用的核函数,也可以自己定义一些核函数。下面我们实践一些常用的核函数。

from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVR
from sklearn.svm import SVR

# 导入数据集
boston = load_boston()
data = boston.data
target = boston.target
# 数据预处理
train_data, test_data, train_target, test_target = train_test_split(data, target, test_size=0.3)
Stand_X = StandardScaler()  # 特征进行标准化
Stand_Y = StandardScaler()  # 标签也是数值,也需要进行标准化
train_data = Stand_X.fit_transform(train_data)
test_data = Stand_X.transform(test_data)
train_target = Stand_Y.fit_transform(train_target.reshape(-1, 1))  # reshape(-1,1)指将它转化为1列,行自动确定
test_target = Stand_Y.transform(test_target.reshape(-1, 1))
#  线性核函数
clf = LinearSVR(C=2)
clf.fit(train_data, train_target)
print("线性核函数:")
print("测试集评分:", clf.score(train_data, train_target))
print("测试数据到超平面的距离(返回前五个)", clf._decision_function(test_data)[:5])
#  高斯核函数
clf = SVR(kernel='rbf', C=10, gamma=0.1, coef0=0.1)
clf.fit(train_data, train_target)
print("高斯核函数:")
print("测试集评分:", clf.score(test_data, test_target))
print("测试数据到超平面的距离(返回前五个)", clf._decision_function(test_data)[:5])
#  sigmoid核函数
clf = SVR(kernel='sigmoid', C=2)
clf.fit(train_data, train_target)
print("sigmoid核函数:")
print("测试集评分:", clf.score(test_data, test_target))
print("测试数据到超平面的距离(返回前五个)", clf._decision_function(test_data)[:5])
#  多项式核函数
clf = SVR(kernel='poly', C=2)
clf.fit(train_data, train_target)
print("多项式核函数:")
print("测试集评分:", clf.score(test_data, test_target))
print("测试数据到超平面的距离(返回前五个)", clf._decision_function(test_data)[:5])



从训练结果可以看出,高斯核函数在这个数据集上的得分是最高的,代码decision_function()函数是返回输入数据集于模型超平面之间的距离,用正负关系表示在超平面哪一侧。下面总结下SVM模型的一些参数。

参数解释
c松弛因子,取值范围在0到正无穷。
kernel核函数的类型,可取线性核函数‘linear’,‘poly’多项式核函数等
degree多项式核函数的维度参数
gamma‘poly’,‘rbf’,'sigmoid’三种核函数的超参数
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习实战Python基于支持向量机SVM)是一种强大的分类器算法。SVM是一种监督学习方法,可以用于解决二分类和多分类问题。 SVM的基本思想是找到一个最佳的超平面,将数据分割成不同的类别。超平面被定义为在n维空间中具有n-1维的子空间。这个子空间可以将不同类别的数据点分开,并且尽可能地最大化边界。这就意味着SVM在分类时尽量避免误分类,并且对于新的未知数据具有较好的泛化能力。 在Python中,我们可以使用scikit-learn库中的SVM实现机器学习任务。首先,我们需要导入必要的库和数据集。然后,我们可以对数据集进行预处理,如特征缩放和数据划分。接下来,我们可以创建一个SVM分类器,并使用训练数据进行模型的训练。训练完成后,我们可以使用测试数据进行预测,并评估模型的性能。 SVM还有一些重要的参数需要调节,如C和gamma。C表示惩罚项的权重,用于控制分类器的错误率和边界的平衡。较大的C值会减小错误率,但可能导致边界过拟合。gamma表示径向基函数核的参数,影响分类器的决策边界的灵活性。较大的gamma值会导致边界更加精确地拟合训练数据,但可能导致过拟合。 总的来说,机器学习实战Python基于支持向量机SVM)是一个强大的分类器算法,可以用于解决二分类和多分类问题。在实际应用中,我们需要注意调节参数,使得分类器具有良好的泛化能力。 ### 回答2: 机器学习实战是一本非常实用的书籍,其中详细介绍了如何使用Python编程语言基于支持向量机SVM)进行机器学习实践。 支持向量机是一种强大的监督学习算法,可以用于解决分类和回归问题。该算法通过寻找一个最优的超平面来分割样本空间,使得不同类别的样本尽可能远离超平面。实际上,SVM通过最大化支持向量与超平面的距离,来确保分类的准确性和泛化能力。 在书籍中,作者通过经典的例子和详细的代码示例,展示了如何应用Python编程语言和scikit-learn库来构建和训练SVM模型。读者将学会如何准备数据集,进行特征选择和数据预处理,选择合适的SVM参数以及评估模型的性能。 此外,书中还强调了交叉验证、网格搜索和模型调优等重要概念。这些概念是整个机器学习过程中不可或缺的一部分,能够帮助我们提高模型的准确性和可靠性。 机器学习实战还提供了丰富的示例和应用,涵盖了多个领域,如文本分类、手写数字识别和人脸识别等。通过这些实例,读者可以深入理解SVM在实际问题中的应用。 总而言之,机器学习实战是一本非常实用的书籍,提供了丰富的例子和代码,使读者能够快速上手并应用SVM算法解决实际问题。无论是对于初学者还是有一定机器学习经验的人来说,这本书都是一本值得推荐的学习资料。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值