支持向量机(SVM)是一种常用的机器学习算法,适用于分类和回归问题。以下是使用Python实现SVM的一个简单示例,使用scikit-learn
库。
安装库
首先,确保你已经安装了scikit-learn
和其他依赖库。你可以使用以下命令安装:
pip install numpy scikit-learn matplotlib
示例代码
下面的代码示例展示了如何使用SVM进行分类:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 只使用前两个特征
y = iris.target
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建SVM分类器
clf = SVC(kernel='linear') # 可以选择不同的核函数,例如 'linear', 'poly', 'rbf', 'sigmoid'
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)
# 打印分类报告和混淆矩阵
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# 可视化
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, s=30, cmap='autumn', label='Train Data')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, s=30, cmap='winter', label='Test Data')
# 绘制决策边界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 100),
np.linspace(ylim[0], ylim[1], 100))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, colors='k', levels=[0], alpha=0.5)
plt.title("SVM Decision Boundary")
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
说明
- 数据集: 使用了鸢尾花数据集,并只选取前两个特征进行可视化。
- 数据划分: 将数据集划分为训练集和测试集。
- 创建模型: 使用线性核创建SVM模型。
- 训练模型: 用训练数据拟合模型。
- 预测和评估: 对测试数据进行预测,并打印分类报告和混淆矩阵。
- 可视化: 可视化训练数据和测试数据,并绘制决策边界。
可以根据需要调整参数和核函数,以适应不同的数据集和任务。
4o