支持向量机 (SVM) 简介
支持向量机 (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 解决各种实际问题。
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

