0%

svm

在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大

用来解决二分类问题的有监督学习算法

引入了核方法之后SVM也可以用来解决非线性问题

类型

  • 硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。
  • 软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。
  • 非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,主要用于分类和回归问题。SVM的核心思想是通过找到一个超平面(或者更一般地说,一个线性决策边界),将不同类别的数据点尽可能分开,同时最大化支持向量与超平面的距离(即间隔)。在分类问题中,SVM的目标是找到一个最优的超平面,使得不同类别的数据点都尽可能远离这个超平面。

以下是一个使用Python和scikit-learn库实现SVM的示例代码:

首先,确保已安装 scikit-learn 库,可以通过以下命令安装:

1
pip install scikit-learn

接下来,使用下面的代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建SVM分类器
svm_model = SVC(kernel='linear', C=1.0, random_state=42)

# 训练模型
svm_model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = svm_model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("SVM Accuracy:", accuracy)

在上述代码中,我们使用了datasets.load_iris函数加载鸢尾花数据集,并将数据集划分为训练集和测试集。然后,我们创建了一个线性SVM分类器(SVC),使用fit方法训练模型。接着,我们在测试集上进行预测并计算准确率。

您可以通过调整参数(例如核函数、惩罚参数C等)来进一步优化SVM模型的性能。注意,SVM算法不仅适用于二元分类问题,还可以扩展到多类别分类和回归问题。

参考: svm