提示信息

Python 基于支持向量机(SVM)的图像分类案例研究

假洒脱 已关注

在这份案例研究中,我们将探讨如何使用Python中的支持向量机(SVM)算法进行简单的图像分类任务。我们将利用经典的手写数字识别数据集——MNIST数据集,来实现一个图像分类器。以下是完整的步骤和代码示例:

步骤1:安装必要的库

首先,确保你已经安装了以下库:numpy, scikit-learn, matplotlib, 和 scipy。可以通过以下命令安装:

  1. pip install numpy scikit-learn matplotlib scipy

步骤2:导入库

然后,在Python文件中导入必要的库。

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn import datasets
  4. from sklearn.model_selection import train_test_split
  5. from sklearn.preprocessing import StandardScaler
  6. from sklearn.svm import SVC
  7. from sklearn.metrics import classification_report, confusion_matrix

步骤3:加载数据

使用Scikit-learn提供的MNIST数据集进行实验。

  1. digits = datasets.load_digits()
  2. print(f"Image data shape: {digits.images.shape}")
  3. print(f"Label data shape: {digits.target.shape}")

步骤4:数据预处理

分离数据集为训练集和测试集,并对数据进行缩放。

  1. # Flatten the images
  2. n_samples = len(digits.images)
  3. X = digits.images.reshape((n_samples, -1))
  4. y = digits.target
  5. # Split into training and test set
  6. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  7. # Feature scaling
  8. scaler = StandardScaler()
  9. X_train = scaler.fit_transform(X_train)
  10. X_test = scaler.transform(X_test)

步骤5:训练模型

建立SVM模型并对其进行训练。可选择使用不同的核函数,例如linear, rbf等。

  1. # Create an SVM classifier
  2. svm_classifier = SVC(kernel='rbf', gamma=0.001, C=100)
  3. # Train the classifier
  4. svm_classifier.fit(X_train, y_train)

步骤6:评估模型

使用测试集进行预测,并展示结果。

  1. # Make predictions
  2. y_pred = svm_classifier.predict(X_test)
  3. # Evaluate the model
  4. print("Confusion Matrix:")
  5. print(confusion_matrix(y_test, y_pred))
  6. print("\nClassification Report:")
  7. print(classification_report(y_test, y_pred))

步骤7:可视化结果

随机选择一些样本进行可视化,以查看分类的效果。

  1. def plot_gallery(images, titles, h, w, n_row=3, n_col=4):
  2. """Helper function to plot a gallery of images"""
  3. plt.figure(figsize=(1.8 * n_col, 2.4 * n_row))
  4. plt.subplots_adjust(bottom=0, left=.01, right=.99, top=.90, hspace=.35)
  5. for i in range(n_row * n_col):
  6. plt.subplot(n_row, n_col, i + 1)
  7. plt.imshow(images[i].reshape((h, w)), cmap=plt.cm.gray)
  8. plt.title(titles[i], size=12)
  9. plt.xticks(())
  10. plt.yticks(())
  11. # Create titles for the predicted classes
  12. predicted_titles = [f"pred: {pred}" for pred in y_pred]
  13. # Plot some images
  14. plot_gallery(X_test, predicted_titles, 8, 8)
  15. plt.show()

总结

以上是一个简单的Python SVM图像分类案例,将MNIST手写数字分类为不同的类。通过这个案例,你可以修改不同的参数和不同的数据集,进一步探索SVM在图像分类中的应用。在实际应用中,更复杂的数据集和更多的数据预处理将显著影响模型的效果。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
假洒脱 关注 已关注

最近一次登录:2024-11-20 10:03:47   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图