机器学习笔记(4) —— 支持向量机

分类误差

图片

边际误差计算

在本选修部分,我们将会计算 SVM 中两个间隔之间的距离。

首先,W=(w1​,w2),x=(x1​,x2),并且Wx=w1x1+w2x2

请注意,在这里我们有三条线,方程如下:

  • Wx+b=1

  • Wx+b=0

  • Wx+b=−1

由于这三条线为等距平行线,要想确定第一条线和第三条线之间的距离,我们只需要计算前两条线之间的距离,接着将这个数字乘以二。这也就是说我们需要确定图 1 中前两条线之间的距离。

图片

图 1

请注意,由于我们只需计算线条之间的距离,因此也可以将线条平移,直到其中一条线与原点相交(图 2)。这时得到的方程如下:

  • Wx=0

  • Wx=1

图片

图 2

现在,第一条线的方程为Wx=0,这意味着它与标记为红色的向量(图 3)

W=(w1​,w2)垂直。

图片

图 3

图片

图片

图 4

图片

图片

图 5

图片

图片

图 6

sklearn 中的支持向量机

在此部分,你将使用支持向量机拟合给定样本数据集。

在此之前,我们先了解下构建此模型所需的工具。

对于支持向量机模型,你将使用 scikit-learn 的SVC类。该类提供了定义模型并将模型与数据进行拟合的函数。

fromsklearn.svmimportSVC

model = SVC()

model.fit(x_values, y_values)

在上述示例中,model变量是一个拟合到数据x_values和y_values的支持向量机模型。拟合模型是指寻找拟合训练数据的最佳界线。我们使用模型的predict()函数进行两项预测。

print(model.predict([ [0.2,0.8], [0.5,0.4] ]))

[[0.,1.]]

该模型返回了一个预测结果数组,每个输入数组一个预测结果。第一个输入[0.2, 0.8]的预测结果为0.。第二个输入[0.5, 0.4]的预测结果为1.。

超参数

当我们定义模型时,可以指定超参数。正如在此部分中看到的,最常见的超参数包括:

  • C:C 参数。
  • kernel:内核。最常见的内核为 'linear'、'poly' 和 'rbf'。
  • degree:如果内核是多项式,则此参数为内核中的最大单项式次数。
  • gamma:如果内核是径向基函数,则此参数为 γ 参数。

例如,下面我们定义了一个次数为4、C 参数为 0.1 的多项式内核模型。

model = SVC(kernel='poly', degree=4, C=0.1)

支持向量机练习

在这道练习中,你将处理以下样本数据集,目标是定义一个准确率达到 100% 的模型。

图片

你可以在以下练习的“data.csv”标签页中找到数据文件。它包含三列,前两列由数据点的坐标组成,第三列为标签。

我们将为你加载数据并将数据拆分为特征X和标签y。

你需要完成以下步骤:

1. 构建支持向量机模型*使用 scikit-learn 的SVC创建支持向量机分类模型并将其赋值给变量model。

2. 将模型与数据进行拟合

  • 如果有必要的话,指定一些超参数。目标是在数据集中获得 100% 的准确率。提示:并非所有内核都合适。

3. 使用模型进行预测

  • 预测训练集的标签,并将此列表赋值给变量y_pred。

4. 计算模型的准确率*为此,使用 sklearn 函数accuracy_score

点击测试答案 (Test Run)后,你将能够看到模型的边界区域,这些边界区域可以帮助你调整并获得正确的参数(如果需要的话)。

注意:这道练习要求在训练集上的准确率达到 100%。当然,要小心过拟合!如果参数选择非常大的值,你将很好地拟合训练集,但是可能并不是最好的模型。尝试寻找能够完成任务的最小可能参数,这样过拟合的几率就更小,虽然我们不会对此进行评分。

# Import statements
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import pandas as pd
import numpy as np# Read the data.
data = np.asarray(pd.read_csv('data.csv', header=None))
# Assign the features to the variable X, and the labels to the variable y.
X = data[:,0:2]
y = data[:,2]# TODO: Create the model and assign it to the variable model.
# Find the right parameters for this model to achieve 100% accuracy on the dataset.
model = SVC(kernel='rbf', gamma=27)# TODO: Fit the model.
model.fit(X,y)# TODO: Make predictions. Store them in the variable y_pred.
y_pred = model.predict(X)# TODO: Calculate the accuracy and assign it to the variable acc.
acc = accuracy_score(y, y_pred)
posted @ 2020-06-29 17:51  CQCx64  阅读(201)  评论(0)    收藏  举报