线性支持向量分类器(SVC)

线性支持向量分类器(SVC),线性SVC使用一度(线性/直线)边界对数据进行分类。与非线性分类器相比,该分类器的复杂度要低得多,只适用于小型数据集。更复杂的数据集需要一个非线性分类器。

下面是线性SVC机器学习支持向量机的Python例子。

线性SVC(支持向量分类器)的目标是匹配您提供的数据,返回一个“最佳匹配”超平面来划分或分类您的数据。在得到超平面之后,您可以向分类器提供一些特性,以查看“预测”类是什么。这使得这个特定的算法非常适合我们的使用,尽管您可以在许多情况下使用它。让我们开始吧。

首先,我们需要一些基本的依赖关系:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn import svm

这里的Matplotlib并不是线性SVC真正需要的。我们在这里使用它的原因是为了最终的数据可视化。通常情况下,您无法将具有特性的维数可视化,但是,为了理解线性svc是如何工作的,至少需要可视化一次。
除了我们使用的可视化包之外,您只需要从sklearn和numpy导入svm来进行数组转换。
x = [1, 5, 1.5, 8, 1, 9]
y = [2, 8, 1.8, 8, 0.6, 11]
然后我们可以用:

plt.scatter(x,y)
plt.show()

这结果会显示:
线性支持向量分类器(SVC)

现在,当然,我们可以用自己的眼睛看到这些群体应该如何划分,尽管我们应该在哪里划分可能存在争议:
线性支持向量分类器(SVC)

这是两个特征,我们看到这是一个二维图形。如果我们有三个特征,我们就能得到一个三维图形。3D图形对我们来说在视觉上进行分组和划分会更有挑战性,但仍然是可行的。当我们有四个或4000个特征时,问题就出现了。现在你可以开始理解机器学习的力量,看到和分析一些我们无法察觉的维度。

考虑到这一点,我们将继续我们的两个特性示例。现在,为了将数据输入我们的机器学习算法,我们首先需要编译一个特征数组,而不是将它们作为x和y坐标值。

通常,您将看到特性列表存储在大写的X变量中。让我们把上面的x和y坐标转换成一个由x和y坐标编译的数组,其中x是一个特征,y是一个特征。

X = np.array([[1,2],
[5,8],
[1.5,1.8],
[8,8],
[1,0.6],
[9,11]])

现在我们有了这个数组,我们需要将它标记为训练使用。有一种形式的机器学习称为“无监督学习”,其中不使用数据标记,就像集群一样,尽管这个例子是一种监督学习的形式。

对于我们的标签,有时被称为“目标”,我们将使用0或1。
y = [0,1,0,1,0,1]

仅仅通过查看我们的数据集,我们就可以看到我们有“低”数的坐标对和“高”数的坐标对。然后,我们为较低的坐标对赋值0,为较高的特征对赋值1。

让我们继续,我们现在要定义我们的分类器:

clf = svm.SVC(kernel='linear', C = 1.0)

我们将使用SVC(支持向量分类器)SVM(支持向量机)。kernel函数是线性的,C = 1.0。C是什么?现在不用担心,但是,如果您一定要知道,C是对您想要正确分类或适合所有内容的“严重程度”的评估。机器学习领域是一个相对较新的、实验性的领域。对于C的值,以及如何计算C的值,存在很多争论。我们暂时只使用1.0,这是一个很好的默认参数。
接下来,我们调用:

clf.fit(X,y)

接下来,我们可以预测和测试。让我们打印一个预测:

print(clf.predict([0.58,0.76]))

我们希望这个能预测0,因为这是一个“较低”的坐标对。
果然,预测的分类为0。接下来,如果我们这样做:

print(clf.predict([10.58,10.76]))

同样,理论上正确答案是1作为分类。这是一个盲目的预测,尽管它实际上也是一个测试,因为我们知道有希望的目标是什么。祝贺您,您的准确率达到了100% !
现在,为了可视化您的数据:

w = clf.coef_[0]
print(w)

a = -w[0] / w[1]

xx = np.linspace(0,12)
yy = a * xx - clf.intercept_[0] / w[1]

h0 = plt.plot(xx, yy, 'k-', label="non weighted div")

plt.scatter(X[:, 0], X[:, 1], c = y)
plt.legend()
plt.show()

结果是:
线性支持向量分类器(SVC)

赞(3)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    写的很好,但是预测的时候要传2维的
    print(clf.predict([0.58,0.76]))
    print(clf.predict([[0.58,0.76]]))

    Selenium2年前 (2020-07-08)回复