支持向量机 (SVM) 简介

pythonserver side programmingprogramming

支持向量机 (SVM) 简介

支持向量机 (SVM) 是机器学习领域的一种强大技术,可应用于分类和回归分析。它广泛应用于许多领域,包括生物信息学、文本分类和图片分类。SVM 处理高维数据集和非线性分类问题的能力是其主要优势。本文将介绍 SVM 的概念,并介绍如何在 Python 中使用它。

支持向量机 (SVM)

定义

一种称为支持向量机 (SVM) 的机器学习算法可识别用于对数据进行分类的理想超平面。通过测量超平面与每个类中最近的数据点之间的距离,可以最大化两个类之间的边距。支持向量是与超平面最密切相关的数据点。通过应用核函数将输入数据转换为高维特征空间,其中可以使用线性超平面来划分类别,SVM 可以处理线性和非线性分类问题。

语法

from sklearn import svm
clf = svm.SVC(kernel='linear')
clf.fit(X_train, y_train)

语法说明

  • 'from sklearn import svm' − 此行从 Scikit-Learn 库导入 SVM 模块。

  • 'clf = svm.SVC(kernel='linear') − 此行中使用线性核初始化 SVM 分类器。多项式、径向基函数 (RBF) 和 S 形函数是一些可以使用的核函数。

  • 'clf.fit(X_train, y_train)' − 根据训练数据 (X_train) 和匹配的类标签 (y_train),此行训练 SVM 分类器。

算法

  • 步骤 1:数据预处理 − 通过预处理从提供的数据中删除任何缺失或多余的特征。

  • 步骤 2:特征提取 − 输入数据变成一组特征,可用于通过特征提取过程训练 SVM 分类器。

  • 步骤 3: 训练 SVM 分类器 - 输入数据用于训练 SVM 分类器,以确定对数据进行分类的最佳超平面。

  • 步骤 4:测试 SVM 分类器 - 使用一组验证数据来测试 SVM 分类器并评估其性能。

  • 步骤 5:调整 SVM 分类器 - 通过调整其超参数来调整 SVM 分类器,以提高其在验证数据上的性能。

方法

  • 方法 1 - 显示线性 SVM 的程序

  • 方法 2 - 显示非线性的程序SVM

方法 1:显示线性 SVM 的程序

当输入数据可以通过线性超平面分离时,使用线性 SVM。以下是相同的代码。

示例

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score

iris = load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

clf = svm.SVC(kernel='linear')
clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

输出

Accuracy: 1.0
  • 加载数据集 − 我们可以使用 scikit-learn 库来加载数据集。iris 数据集是一种流行的数据集,可用于分类任务。

  • 将数据集拆分为训练集和测试集 − 使用 scikit-learn 库中的 train_test_split 函数将数据集拆分为训练集和测试集。

  • 创建具有非线性核的 SVM 分类器 − 我们使用 svm.svm 函数创建具有非线性核的 SVM 分类器。svm.svm 函数来自 scikit-learn 库。

  • 训练 SVM 分类器 - 使用 fit 方法在训练数据上训练 SVM 分类器。

  • 测试 SVM 分类器 - 使用 predict 方法在测试数据上测试 SVM 分类器。

方法 2:显示非线性 SVM 的程序

当无法使用线性超平面分离输入数据时,可使用非线性 SVM。在此方法中,使用核技巧将输入数据转换为高维特征空间,以便可以使用线性超平面分离数据。

示例

from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score

X, y = make_circles(n_samples=100, noise=0.1, factor=0.5, random_state=42)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

clf = svm.SVC(kernel='rbf')
clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)
accuracy = accuracy score(y_test, y_pred)
print("Accuracy:",accuracy)

输出

Accuracy: 0.9
  • 加载数据集 −要创建一个包含两个无法通过线性超平面分离的类的玩具数据集,我们可以使用 scikit-learn 库的 make_circles 方法。

  • 从数据集创建训练集和测试集 − scikit-learn 库中的 train_test_split 函数用于将数据集分为训练集和测试集。

  • 将非线性核合并到 SVM 分类器中 −使用 scikit-learn 库中的 svm.SVC 函数,我们构建了一个具有非线性核的 SVM 分类器。在此示例中,使用的是 RBF 核。

  • 训练 SVM 分类器 - 使用 fit 方法在训练数据上训练 SVM 分类器。

  • 测试 SVM 分类器 - 使用 predict 方法使用测试数据测试 SVM 分类器。

结论

SVM 是一种强大的机器学习技术,可以应用于线性和非线性分类应用。它们广泛应用于众多行业,具有多种实际用途。在这篇文章中,我们介绍了 SVM,讨论了它们的定义和语法,并描述了线性 SVM 和非线性 SVM Python 实现方法。此外,我们还提供了将这些方法应用于两个数据集的完整代码,以准确度作为指标来展示其有效性。机器学习专业人员可以通过学习 SVM 以及如何在 Python 中实现它们来拓宽他们的技能组合并使用 SVM 解决各种实际问题。


相关文章


有用资源