Python ValueError:分类指标可以';t处理多类和多标签指示器目标的混合
我有2000个不同标签的多类标签文本分类问题。使用带有手套嵌入的LSTM进行分类Python ValueError:分类指标可以';t处理多类和多标签指示器目标的混合,python,machine-learning,lstm,data-science,text-classification,Python,Machine Learning,Lstm,Data Science,Text Classification,我有2000个不同标签的多类标签文本分类问题。使用带有手套嵌入的LSTM进行分类 目标变量的标签编码器 带嵌入层的LSTM层 误差度量为F2分数 标签编码的目标变量: LSTM网络如下图所示,带有手套嵌入 我的误差指标是F1分数。我为误差度量构建了下面的函数 class Metrics(Callback): def on_train_begin(self, logs={}): self.val_f1s = [] self.val_recalls = []
class Metrics(Callback):
def on_train_begin(self, logs={}):
self.val_f1s = []
self.val_recalls = []
self.val_precisions = []
def on_epoch_end(self, epoch, logs={}):
val_predict = (np.asarray(self.model.predict(self.validation_data[0]))).round()
val_targ = self.validation_data[1]
_val_f1 = f1_score(val_targ, val_predict)
_val_recall = recall_score(val_targ, val_predict)
_val_precision = precision_score(val_targ, val_predict)
self.val_f1s.append(_val_f1)
self.val_recalls.append(_val_recall)
self.val_precisions.append(_val_precision)
print("— val_f1: %f — val_precision: %f — val_recall %f" % (_val_f1, _val_precision, _val_recall))
return
metrics = Metrics()
模型拟合是
第一个历元后出现以下错误:
ValueError: Classification metrics can't handle a mix of multiclass and continuous-multioutput targets
你能告诉我我的密码哪里出错了吗
我试图解决我自己,但我没有得到任何线索。你能在这方面帮助我吗?F1分数、召回率和精度是二进制分类的指标,用于多类/多标签问题。你需要在函数中添加一个参数
F1\u分数
、recall\u分数
和precision\u分数
试试这个:
_val_f1 = f1_score(val_targ, val_predict, average='weighted')
_val_recall = recall_score(val_targ, val_predict, average='weighted')
_val_precision = precision_score(val_targ, val_predict, average='weighted')
在此处查找平均参数的更多信息:F1分数、召回率和精度是二进制分类的指标,用于解决多类/多标签问题。您需要在函数
F1\u分数
、召回率分数
和精度分数
中添加一个参数
试试这个:
_val_f1 = f1_score(val_targ, val_predict, average='weighted')
_val_recall = recall_score(val_targ, val_predict, average='weighted')
_val_precision = precision_score(val_targ, val_predict, average='weighted')
在此处查找平均参数的更多信息:您的问题是由这行代码中val_predict中的连续值引起的
_val_f1 = f1_score(val_targ, val_predict)
在计算f1_分数之前,您应该在val_predict中对您的预测进行四舍五入
示例解决方案:
_val_f1 = f1_score(val_targ,np.round(val_predict))
需要说明的是:如果要更改舍入函数的阈值(默认值为0.5),可以在[0,1]间隔内添加或减去值:
>>> a = np.arange(0,1,0.1)
>>> print(a, abs(np.round(a-0.1)), sep='\n')
>>> print(a, abs(np.round(a+0.3)), sep='\n')
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
array([0. 0. 0. 0. 0. 0. 1. 1. 1. 1.])
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
array([0., 0., 0., 1., 1., 1., 1., 1., 1., 1.])
希望有帮助 您的问题是由这行代码中val_predict中存在的连续值引起的
_val_f1 = f1_score(val_targ, val_predict)
在计算f1_分数之前,您应该在val_predict中对您的预测进行四舍五入
示例解决方案:
_val_f1 = f1_score(val_targ,np.round(val_predict))
需要说明的是:如果要更改舍入函数的阈值(默认值为0.5),可以在[0,1]间隔内添加或减去值:
>>> a = np.arange(0,1,0.1)
>>> print(a, abs(np.round(a-0.1)), sep='\n')
>>> print(a, abs(np.round(a+0.3)), sep='\n')
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
array([0. 0. 0. 0. 0. 0. 1. 1. 1. 1.])
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
array([0., 0., 0., 1., 1., 1., 1., 1., 1., 1.])
希望有帮助 这不走运,这不走运。