基于Bayes、决策树和SVM的图像分类

一、数据集描述

       本实验数据集为一个垃圾分类图片数据集,总共包含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%。
混淆矩阵如下图所示:
                                                               在这里插入图片描述

五、 分类算法对比

对Bayes、决策树、SVM使用精度(Presicion)来进行分类对比,具体数据如下表所示:
在这里插入图片描述
由于分类类别较多,同时数据集的数量有限,各大分类器在分类的效果中并未体现出很高的精准率,特别是在trash的分类中,决策树和Bayes分类的准确率较低。三类算法中,Bayes的速度最快。由数据的精度对比可知,在该项目中,SVM的表现最为出色。

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值