一、数据集描述
本实验数据集为一个垃圾分类图片数据集,总共包含cardboard、glass、metal、paper、plastic、trash六大类,在文件夹分别将其命名为0、1、2、3、4、5,将数据划分为训练集和测试集。
(1)读取数据集,使用循环依次读取图片,使用cv2.imread()方法打开图片。python代码如下:
X = []
Y = []
# file = 'Garbage_classification'
for i in range(0, 6):
# 遍历文件夹,读取图片
for f in os.listdir("Garbage_classification/%s" % i):
# 打开一张图片并灰度化
Images = cv2.imread("Garbage_classification/%s/%s" % (i, f))
image = cv2.resize(Images, (256, 256), interpolation=cv2.INTER_CUBIC)
hist = cv2.calcHist([image], [0, 1], None, [256, 256], [0.0, 255.0, 0.0, 255.0])
X.append(((hist / 255).flatten()))
Y.append(i)
X = np.array(X)
Y = np.array(Y)
(2)使用train_test_split()方法按照训练集占比70%,测试集占比30%,对数据集进行划分。
# 切分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=1)
二、 使用Bayes进行图像分类
贝叶斯算法(Bayesian algorithm)利用贝叶斯定理对已知数据进行推理,进而进行分类、回归等任务。在分类问题中,贝叶斯算法基于训练数据构建一个模型,该模型能够计算一个给定输入向量属于每个类别的概率。贝叶斯算法的优点在于可以使用先验知识来提高分类准确性,并且在样本数据较少的情况下也能够产生良好的结果。
Python代码实现如下:
# bayes图像分类
clf = BernoulliNB(alpha=6,binarize=0)
clf.fit(X_train, y_train) #训练拟合数据
predictions_labels = clf.predict(X_test) # 得到预测数据
score = clf.score(X_test,y_test) #计算准确率
print('准确率为:{}'.format(score*100))
#计算kappa系数
kappa_value = cohen_kappa_score(y_test, predictions_labels)
print('kappa系数为:{}'.format(kappa_value))
print(u'算法评价:')
print(classification_report(y_test, predictions_labels))
#开始绘画混淆举证
cm = confusion_matrix(y_test,predictions_labels)
cm = pd.DataFrame(cm,columns=["cardboard","glass","metal","paper","plastic","trash"],index=["cardboard","glass","metal","paper","plastic","trash"]) # 指定混淆举证行列的名称
plt.figure(dpi=200, figsize=(5, 5)) # 设置图像尺寸和大小
sns.heatmap(cm,cmap="YlGnBu_r",fmt="d",annot=True) #seaborn画图
使用精度、召回率和F1以及混淆矩阵以及kappa系数以及准确率来评判分类精度,具体数据如下表所示:
kappa系数为:0.404,准确率为:52.04%。
混淆矩阵如下图所示:
三、 使用决策树进行图像分类
决策树算法(Decision Tree algorithm)是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。包含特征选择、决策树的生成和决策树的剪枝过程。
Python代码实现如下:
# 基于决策树的图像分类处理
clf = DecisionTreeClassifier(max_depth=11,max_features=83,min_samples_leaf=2,min_samples_split=12)
clf.fit(X_train, y_train) #训练拟合数据
predictions_labels = clf.predict(X_test) # 得到预测数据
score = clf.score(X_test,y_test) #计算准确率
print('准确率为:{}'.format(score*100))
#计算kappa系数
kappa_value = cohen_kappa_score(y_test, predictions_labels)
print('kappa系数为:{}'.format(kappa_value))
print('算法评价:{}'.format(classification_report(y_test, predictions_labels)))
#开始绘画混淆举证
cm = confusion_matrix(y_test,predictions_labels)
cm = pd.DataFrame(cm,columns=["cardboard","glass","metal","paper","plastic","trash"],index=["cardboard","glass","metal","paper","plastic","trash"]) # 指定混淆举证行列的名称
plt.figure(dpi=200, figsize=(5, 5)) # 设置图像尺寸和大小
sns.heatmap(cm,cmap="YlGnBu_r",fmt="d",annot=True) #seaborn画图
使用精度、召回率和F1以及混淆矩阵以及kappa系数以及准确率来评判分类精度,具体数据如下表所示:
kappa系数为:0.406,准确率为:52.17%。
混淆矩阵如下图所示:
四、 使用SVM进行图像分类
SVM是支持向量机(Support Vector Machine)的缩写,是一种常用的监督学习算法,可用于分类和回归问题。在分类问题中,SVM会将不同类别的样本映射到高维空间中,并且在该空间中找到一个超平面,使得不同类别的样本能够被最大化地分开。SVM算法的优点在于可以处理高维数据,并且可以处理非线性分类问题。SVM算法通过核函数来实现对高维数据的处理,而且可以通过调整核函数的参数来适应不同的数据分布。
Python代码实现如下:
# 基于支持向量机的图像分类处理
from sklearn import svm
clf = svm.SVC()
clf.fit(X_train, y_train) #训练拟合数据
predictions_labels = clf.predict(X_test) # 得到预测数据
score = clf.score(X_test,y_test) #计算准确率
print('准确率为:{}'.format(score*100))
#计算kappa系数
kappa_value = cohen_kappa_score(y_test, predictions_labels)
print('kappa系数为:{}'.format(kappa_value))
print('算法评价:{}'.format(classification_report(y_test, predictions_labels)))
#开始绘画混淆举证
cm = confusion_matrix(y_test,predictions_labels)
cm = pd.DataFrame(cm,columns=["cardboard","glass","metal","paper","plastic","trash"],index=["cardboard","glass","metal","paper","plastic","trash"]) # 指定混淆举证行列的名称
plt.figure(dpi=200, figsize=(5, 5)) # 设置图像尺寸和大小
使用精度、召回率和F1以及混淆矩阵以及kappa系数以及准确率来评判分类精度,具体数据如下表所示:
kappa系数为:0.577,准确率为:66.13%。
混淆矩阵如下图所示:
文章来源:https://www.toymoban.com/news/detail-801664.html
五、 分类算法对比
对Bayes、决策树、SVM使用精度(Presicion)来进行分类对比,具体数据如下表所示:
由于分类类别较多,同时数据集的数量有限,各大分类器在分类的效果中并未体现出很高的精准率,特别是在trash的分类中,决策树和Bayes分类的准确率较低。三类算法中,Bayes的速度最快。由数据的精度对比可知,在该项目中,SVM的表现最为出色。文章来源地址https://www.toymoban.com/news/detail-801664.html
到了这里,关于基于Bayes、决策树和SVM的图像分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!