机器学习之支持向量机SVM的运用(附代码)
作者头像
  • 赵穆熙
  • 2019-11-18 08:15:28 0

数据的读取和预处理

我们有一个名为ex6data1.mat的数据文件,它采用MATLAB的格式,但Python同样支持读取这种格式的数据。我们可以通过以下方式来读取和处理这个文件:

```python import scipy.io as sio

读取mat文件

mat = sio.loadmat('ex6data1.mat') print(mat.keys())

提取我们需要的变量

data = pd.DataFrame(mat.get('X'), columns=['X1', 'X2']) data['y'] = mat.get('y') ```

通过以上步骤,我们得到了两个关键变量:XyX代表样本数据,而y代表样本标签。接下来,我们将数据转换为Pandas DataFrame格式以便于处理。

模型的训练

在开始训练模型之前,我们首先绘制原始数据的分布情况,以便更好地理解数据的结构。代码如下:

```python import matplotlib.pyplot as plt

绘制原始数据的散点图

fig, ax = plt.subplots(figsize=(8, 6)) ax.scatter(data['X1'], data['X2'], s=50, c=data['y'], cmap='Reds') ax.settitle('Raw Data') ax.setxlabel('X1') ax.set_ylabel('X2') plt.show() ```

从图中可以看到,数据基本呈现线性可分的状态,因此我们可以直接使用线性核函数进行训练。以下是训练SVM模型的代码:

```python from sklearn import svm

训练SVM模型

svc1 = svm.SVC(C=10, kernel='linear') svc1.fit(data[['X1', 'X2']], data['y'])

计算训练集准确率

accuracy = svc1.score(data[['X1', 'X2']], data['y']) print("Training Accuracy: ", accuracy) ```

模型的训练准确率为98.04%,说明模型对训练数据具有较高的拟合能力。

决策函数值的展示

接下来,我们利用决策函数值来进一步分析每个样本的分类置信度。代码如下:

```python

获取每个样本的决策函数值

data['SVM1 Confidence'] = svc1.decision_function(data[['X1', 'X2']])

绘制每个样本的决策函数值

fig, ax = plt.subplots(figsize=(8, 6)) ax.scatter(data['X1'], data['X2'], s=50, c=data['SVM1 Confidence'], cmap='RdBu') ax.set_title('SVM (C=1) Decision Confidence') plt.show() ```

通过上图,我们可以直观地看到每个样本的分类置信度,有助于进一步优化模型参数。

分割超平面及支撑超平面的绘制

最后,我们绘制分割超平面和支持向量所在的支持超平面。代码如下:

```python import numpy as np

获取分割超平面的参数

w = svc1.coef[0] b = svc1.intercept[0] w1 = w[0] w2 = w[1] x1 = np.linspace(-5, 5)

绘制分割超平面

x2 = -w1 / w2 * x1 - b / w2 plt.plot(x1, x2, 'k-', label='Decision Boundary')

绘制支持超平面

supportvectors = svc1.supportvectors_ yydown = -(w1 / w2) * x1 + (supportvectors[0][1] - w1 / w2 * supportvectors[0][0]) yyup = -(w1 / w2) * x1 + (supportvectors[-1][1] - w1 / w2 * supportvectors[-1][0])

plt.plot(x1, yydown, 'k--', label='Support Boundary Down') plt.plot(x1, yyup, 'k--', label='Support Boundary Up')

绘制原始数据

plt.scatter(data['X1'], data['X2'], s=50, c=data['y'], cmap='Reds') plt.title('SVM (C=1) with Decision and Support Boundaries') plt.legend() plt.show() ```

以上步骤展示了如何从原始数据读取、预处理、训练模型,到绘制分割超平面和支持超平面的过程。这些步骤不仅有助于理解SVM的工作原理,也为后续的模型优化提供了参考。

    本文来源:图灵汇
责任编辑: : 赵穆熙
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
习之向量运用机器代码支持SVM
    下一篇