【西瓜书】支持向量机(SVM)

  • 支持向量机(Support Vector Machine,简称SVM)。

超平面

  • 分类学习最基本的想法就是基于训练集合D在样本空间中找到一个划分超平面,将不同类别的样本分开。

  • 但能将训练样本分开的划分超平面可能有很多,应该努力去找到哪一个呢?直观上看应该去找位于两类训练样本正中间的划分超平面,因为该划分超平面对训练样本局部扰动的“容忍”性最好。这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强。

  • 西瓜书

  • 在样本空间中划分超平面可通过如下线性方程来描述:
    w T x + b = 0 w^Tx+b=0 wTx+b=0其中: w = ( w 1 ; w 2 ; . . . ; w d ) w=(w_1;w_2;...;w_d) w=(w1;w2;...;wd)为法向量,决定了超平面的方向;
    b b b 为位移项,决定了超平米与原点之间的距离。

  • 划分超平面可以被法向量 w w w 和位移 b b b 确定,记为 ( w , b ) (w, b) (w,b) 。样本空间中人一点 x x x 到超平面 ( w , b ) (w, b) (w,b) 的距离可写为:
    r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ r=\frac{|w^Tx+b|}{||w||} r=∣∣w∣∣wTx+b

### 西瓜第6.2节 支持向量机编程作业实现 #### 实现代码示例 以下是基于Python和支持库`scikit-learn`的支持向量机(SVM)简单实现,这可以作为完成西瓜中提到的SVM编程练习的基础[^1]。 ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC import numpy as np # 加载数据集并划分训练测试集合 iris = datasets.load_iris() X = iris.data[:, [2, 3]] y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 数据标准化处理 sc = StandardScaler() sc.fit(X_train) X_train_std = sc.transform(X_train) X_test_std = sc.transform(X_test) # 训练支持向量分类器模型 svm = SVC(kernel='linear', C=1.0, random_state=1) svm.fit(X_train_std, y_train) # 预测新样本类别 print('预测结果:', svm.predict([[7.1, 2.8]])) ``` 这段代码展示了如何加载Iris数据集的一部分,并利用这些数据来训练一个线性的支持向量机模型。通过调整参数如核函数(`kernel`)和惩罚系数(`C`),可以探索不同配置下的性能表现。 #### 关键概念解释 - **标准缩放**: SVM对于输入特征尺度敏感,因此通常需要先对原始数据做标准化转换,使得各维度具有零均值单位方差。 - **线性核函数**: 这里选择了最简单的线性决策边界;实际应用中可能还需要考虑其他类型的核函数(比如多项式、径向基等),以便更好地拟合复杂的模式分布。 - **超参数调节 (`C`)**: `C`控制着错误项的重要性程度——较小的值意味着更宽泛的间隔以及更高的容忍度对待错分情况;反之,则追求尽可能少的误判代价更大的复杂度提升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风而来的思绪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值