解决AttributeError: ‘Sequential‘ object has no attribute ‘predict_classes‘

@TOC

问题原因:在Sequential的网络架构中并没有predict_classes方法

解决

虽然没有给出predict_classes方法,但在Sequential中有predict方法,我们可以得到对于不同类别分类的概率

prediction = network.predict(x_test)

在这里插入图片描述

network是我们构建的Sequential网络,x_test是测试集的数据部分
在这里我们得到的prediction实际上是一个二维矩阵,它的维度是(len(x_test), 类别数)
我们希望将所有预测的结果放在prediction中(单个预测结果指的是对应最大概率中的类别)
(1)对于二分类问题,以0.5为界(IMDB数据集分类)
假设对应概率大于0.5为正例,否则为负例
这里二分类得到的是列数为1的矩阵在这里插入图片描述

我们首先将prediction转换为一个数组,prediction[i]表示第i个样本对应的分类
为了方便区分,我们用results表示得到的一维数组

results = []
for i in range(len(prediction)):
	if prediction[i][0] > 0.5:
		p = 1
	else: 
		p = 0
	results.append(p)

上面的代码也可以用列表解析来实现

results = [(int)((prediction[i][0] + 0.5) / 1) for i in range(len(prediction))]

将数据转换为向量

results = np.asarray(predictions).astype('float32')

画出二元分类的混淆矩阵
用测试集的标签和得到的结果对比

import pandas as pd
pd.crosstab(test_labels, results, rownames = ['labels'], colnames = ['predicts'])

y_test是将测试标签进行向量化得到的结果

在这里插入图片描述
查看对应的查准率、查全率、F1-score

from sklearn.metrics import classification_report
print(classification_report(y_test, prediction))

在这里插入图片描述

2、reuters新闻分类也可以使用这种方法
与二分类不同,我们需要获取的是最大概率对应的类别

results = [np.argmax(prediction[i]) for i in range(len(prediction))]

其余的代码和上面的代码类似,在此不重复赘述

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值