Python语言实现支持向量机 (Support Vector Machine, SVM)算法

支持向量机(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()

说明

  1. 数据集: 使用了鸢尾花数据集,并只选取前两个特征进行可视化。
  2. 数据划分: 将数据集划分为训练集和测试集。
  3. 创建模型: 使用线性核创建SVM模型。
  4. 训练模型: 用训练数据拟合模型。
  5. 预测和评估: 对测试数据进行预测,并打印分类报告和混淆矩阵。
  6. 可视化: 可视化训练数据和测试数据,并绘制决策边界。

可以根据需要调整参数和核函数,以适应不同的数据集和任务。

4o

支持向量机(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()

说明

  1. 数据集: 使用了鸢尾花数据集,并只选取前两个特征进行可视化。
  2. 数据划分: 将数据集划分为训练集和测试集。
  3. 创建模型: 使用线性核创建SVM模型。
  4. 训练模型: 用训练数据拟合模型。
  5. 预测和评估: 对测试数据进行预测,并打印分类报告和混淆矩阵。
  6. 可视化: 可视化训练数据和测试数据,并绘制决策边界。

可以根据需要调整参数和核函数,以适应不同的数据集和任务。

4o

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在