基于NBM的图像二分类问题

朴素贝叶斯算法在概率图模型中被划分为判别模型是目前应用最为广泛的分类模型之一。最常见的分布有高斯分布,多项式分布和伯努利分布。这次的文章就实现了这三种算法用于图像分类,由于在sklearn中封装了这三种函数,因此直接调用就好。

首先要读入有标签的图片,代码如下:

X = []
Y = []
for i in range(0, 2):
    #遍历文件夹,读取图片
    for f in os.listdir("G:/Download_Data_bishe/leaf_data/pepper_bellSmall/%s" % i):
        #打开一张图片并灰度化
        Images = cv2.imread("G:/Download_Data_bishe/leaf_data/pepper_bellSmall/%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)

第一层循环是为了读取分类的种类,第二层循环是遍历每个文件,然后读取处理每一张图片,在处理图片时只是进行简单的灰度直方图处理,然后将图像信息和标签分别存放在两个数组中;然后对数据集进行划分,分为训练集和测试集,代码如下:

#切分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=1)

最后直接调用封装好的函数,

#伯努利分布
clf0 = BernoulliNB()
scores = cross_val_score(clf0, X , Y , cv=10)  #cv为迭代次数。
print(scores)  # 打印输出每次迭代的度量值(准确度)
print(scores.mean())
print()
predictions0 = clf0.predict(X_test)
print (classification_report(y_test, predictions0))
endtime = datetime.datetime.now()
print (endtime - starttime)

#多项式分布(模型最好)
clf1 = MultinomialNB(alpha=2.0)
scores = cross_val_score(clf1, X , Y , cv=10)  #cv为迭代次数。
print(scores)  # 打印输出每次迭代的度量值(准确度)
print(scores.mean())
print()
predictions1 = clf1.predict(X_test)
print (classification_report(y_test, predictions1))
endtime = datetime.datetime.now()
print (endtime - starttime)

#高斯朴素贝叶斯
clf2 = GaussianNB()
scores = cross_val_score(clf2, X , Y , cv=10)  #cv为迭代次数。
print(scores)  # 打印输出每次迭代的度量值(准确度)
print(scores.mean())
print()
predictions2 = clf2.predict(X_test)
print (classification_report(y_test, predictions2))
endtime = datetime.datetime.now()
print (endtime - starttime)

最后实验结果表明,多项式分布的分类效果最好。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值