在机器学习领域,支持向量机(Support Vector Machine,简称SVM)是一种强大的分类和回归算法。它通过找到一个最佳的超平面来将不同类别的数据分开。本文将通过一个简单的案例,手把手教你如何在Python中使用SVM进行实战。
1. SVM简介
SVM的基本思想是找到一个最优的超平面,使得不同类别的数据点在超平面的两侧,并且距离超平面尽可能远。这个最优超平面被称为最大间隔超平面(Maximum Margin Hyperplane)。SVM的核心是寻找一个最优的权重向量(w)和偏置项(b),使得所有数据点到超平面的距离最大化。
2. 准备数据
为了演示SVM的使用,我们首先需要一个简单的数据集。这里我们使用的是著名的鸢尾花(Iris)数据集。
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2] # 只取前两个特征
y = iris.target
3. 划分数据集
将数据集划分为训练集和测试集,以便评估模型的性能。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4. 训练SVM模型
接下来,我们使用sklearn库中的SVC(Support Vector Classification)类来训练SVM模型。
from sklearn.svm import SVC
# 创建SVM模型实例
clf = SVC(kernel='linear')
# 训练模型
clf.fit(X_train, y_train)
5. 预测和评估
使用训练好的模型对测试集进行预测,并评估模型的性能。
from sklearn.metrics import accuracy_score
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率:{accuracy:.2f}")
6. 可视化结果
为了更直观地展示SVM模型的分类效果,我们可以将数据可视化。
import matplotlib.pyplot as plt
import numpy as np
# 创建一个网格来绘制决策边界
h = .02 # 步长
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
# 使用模型进行预测
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 绘制图形
plt.figure()
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('SVM分类结果')
plt.show()
7. 总结
通过以上步骤,我们已经成功地使用Python和SVM对鸢尾花数据集进行了分类。SVM是一种强大的机器学习算法,适用于各种分类和回归任务。希望本文能帮助你轻松上手SVM。