CCSN_v2文件夹中有Ac,As,Cb,Cc,Ci,Cs,Ct,Cu,Ns,Sc,St十一个文件夹,每个文件夹有不同事物的图片,编写用svm进行分类的python代码,需要绘制混淆矩阵
时间: 2023-09-24 09:02:47 浏览: 112
以下是一个示例代码,演示如何使用sklearn的SVM算法对CCSN_v2文件夹中的图片进行分类,并绘制混淆矩阵:
```python
import os
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, metrics
from sklearn.model_selection import train_test_split
from sklearn.metrics import plot_confusion_matrix
from skimage import io, transform
# 定义图片目录路径
data_dir = 'CCSN_v2/'
# 定义分类标签列表
labels = ['Ac', 'As', 'Cb', 'Cc', 'Ci', 'Cs', 'Ct', 'Cu', 'Ns', 'Sc', 'St']
# 定义特征向量和标签列表
features = []
target = []
# 遍历图片目录,读取图片并将其转换为特征向量
for label in labels:
label_dir = os.path.join(data_dir, label)
for img_name in os.listdir(label_dir):
img_path = os.path.join(label_dir, img_name)
img = io.imread(img_path, as_gray=True)
img = transform.resize(img, (64, 64))
feature = img.flatten()
features.append(feature)
target.append(label)
# 将特征向量和标签列表转换为numpy数组
features = np.array(features)
target = np.array(target)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.3, random_state=42)
# 创建SVM分类器
classifier = svm.SVC(kernel='linear')
# 训练模型
classifier.fit(X_train, y_train)
# 预测测试集
predicted = classifier.predict(X_test)
# 绘制混淆矩阵
disp = plot_confusion_matrix(classifier, X_test, y_test, display_labels=labels, cmap=plt.cm.Blues, normalize=None)
disp.ax_.set_title('Confusion Matrix')
plt.show()
# 输出分类报告
print("Classification report for classifier %s:\n%s\n" % (classifier, metrics.classification_report(y_test, predicted)))
```
在上述示例代码中,我们遍历CCSN_v2文件夹中的所有图片,将其转换为特征向量,并将特征向量和标签列表存储为numpy数组。然后,我们使用train_test_split方法将数据集划分为训练集和测试集,创建SVM分类器,并使用训练集对SVM分类器进行训练。接着,我们使用训练好的模型对测试集进行预测,并绘制混淆矩阵。最后,我们输出分类报告,包括准确率、召回率、F1值等指标。
阅读全文