支持向量机 (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) 核和 sigmoid 核。
‘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 分类器 − 我们使用 scikit-learn 库中的 svm.SVC 函数创建具有非线性核的 SVM 分类器。
训练 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 来解决各种现实世界的问题。