机器学习笔记(4) —— 支持向量机
分类误差
![]()
边际误差计算
在本选修部分,我们将会计算 SVM 中两个间隔之间的距离。
首先,W=(w1,w2),x=(x1,x2),并且Wx=w1x1+w2x2
请注意,在这里我们有三条线,方程如下:
-
Wx+b=1
-
Wx+b=0
-
Wx+b=−1
由于这三条线为等距平行线,要想确定第一条线和第三条线之间的距离,我们只需要计算前两条线之间的距离,接着将这个数字乘以二。这也就是说我们需要确定图 1 中前两条线之间的距离。
请注意,由于我们只需计算线条之间的距离,因此也可以将线条平移,直到其中一条线与原点相交(图 2)。这时得到的方程如下:
-
Wx=0
-
Wx=1
现在,第一条线的方程为Wx=0,这意味着它与标记为红色的向量(图 3)
W=(w1,w2)垂直。
![]()
![]()
![]()
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)

浙公网安备 33010602011771号