报错与解决 | ValueError: pos_label=‘pos‘ is not a valid label

本文介绍了解决在使用sklearn计算召回率时遇到的一个常见错误:当正标签不为默认值1时如何正确设置pos_label参数。通过具体示例展示了如何修改代码以避免此错误,并扩展到其他相关评估指标的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

报错

在使用sklearn.metrics.recall()时报错:

ValueError: pos_label=‘pos’ is not a valid label: array([‘HA’, ‘LA’], dtype=‘<U2’)

报错分析

其实这个错误很简单,意思就是:默认的正标签pos_label1,那么,在计算指标的时候,系统就会认为1是正标签,其他的都为负标签(比如:0)。而我们所定义的标签中,HA是正标签,LA是负标签,因此,我们只需在代码中添加一句pos_label='HA',这样程序就认得了:哦!原来正标签不是1,是HA啊! 这样就解决这个错误。是不是很简单啊😏


报错前:

sklearn.metrics.recall_score(y_test, y_pred)

将代码更改为下面的,即可解决

# 请根据自己的实际情况,更换为自己的标签:pos_label='定义的正标签'
sklearn.metrics.recall_score(y_test, y_pred,pos_label='HA') 

tips

同理,在计算下列指标时,都可以这样改哦!

  • from sklearn import metrics
  • metrics.precision_score(y_test, y_pred,pos_label=“自己数据定义的正标签”))
  • metrics.recall_score(y_test, y_pred,pos_label=“自己数据定义的正标签”))
果然刚才那个代码““best_val_acc = 0.0for epoch in range(training_epochs): model.train() train_loss = 0.0 train_mae = 0.0 with tqdm(total=len(train_loader), desc=f’Epoch {epoch + 1}/{training_epochs}', unit=‘batch’, position=0, leave=True) as pbar: for X_batch, Y_batch in train_loader: X_batch, Y_batch = X_batch.to(device), Y_batch.to(device) optimizer.zero_grad() output = model(X_batch) loss = criterion(output, Y_batch) #训练过程 loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) optimizer.step() output_np = output.detach().cpu().numpy() Y_batch_np = Y_batch.detach().cpu().numpy() output_np_flat = output_np.reshape(output_np.shape[0], -1) Y_batch_np_flat = Y_batch_np.reshape(Y_batch_np.shape[0], -1) mae = mean_absolute_error(Y_batch_np_flat, output_np_flat) train_loss += loss.item() train_mae += mae.item() pbar.set_postfix({'loss': f'{loss.item():.4f}', 'mae': f'{mae.item():.4f}'}) pbar.update(1) train_loss /= len(train_loader) train_mae /= len(train_loader) history['train_loss'].append(train_loss) history['train_mae'].append(train_mae) model.eval() val_loss = 0.0 val_mae = 0.0 val_acc = 0.0 with torch.no_grad(): for X_batch, Y_batch in valid_loader: X_batch, Y_batch = X_batch.to(device), Y_batch.to(device) output = model(X_batch) loss = criterion(output, Y_batch) output_np = output.detach().cpu().numpy() Y_batch_np = Y_batch.detach().cpu().numpy() output_np_flat = output_np.reshape(output_np.shape[0], -1) Y_batch_np_flat = Y_batch_np.reshape(Y_batch_np.shape[0], -1) mae = mean_absolute_error(Y_batch_np_flat, output_np_flat) val_loss += loss.item() val_mae += mae.item() acc = precision_score(Y_batch_np_flat, output_np_flat) val_acc += acc.item() val_loss /= len(valid_loader) val_mae /= len(valid_loader) val_acc /= len(valid_loader) history['val_loss'].append(val_loss) history['val_mae'].append(val_mae) print( f'Epoch {epoch + 1}/{training_epochs}, Train Loss: {train_loss:.4f}, Validation Loss: {val_loss:.4f}, Validation MAE: {val_mae:.4f}') if val_acc > best_val_acc: best_val_acc = val_acc torch.save(model.state_dict(), file_weights) print(f'Best model saved at epoch {epoch + 1} with validation loss {val_loss:.4f}')””,出现这个问题"Traceback (most recent call last): File "/home/featurize/work/trainkanmuacc.py", line 205, in <module> acc = precision_score(Y_batch_np_flat, output_np_flat) File "/environment/miniconda3/lib/python3.10/site-packages/sklearn/utils/_param_validation.py", line 214, in wrapper return func(*args, **kwargs) File "/environment/miniconda3/lib/python3.10/site-packages/sklearn/metrics/_classification.py", line 2131, in precision_score p, _, _, _ = precision_recall_fscore_support( File "/environment/miniconda3/lib/python3.10/site-packages/sklearn/utils/_param_validation.py", line 187, in wrapper return func(*args, **kwargs) File "/environment/miniconda3/lib/python3.10/site-packages/sklearn/metrics/_classification.py", line 1724, in precision_recall_fscore_support labels = _check_set_wise_labels(y_true, y_pred, average, labels, pos_label) File "/environment/miniconda3/lib/python3.10/site-packages/sklearn/metrics/_classification.py", line 1501, in _check_set_wise_labels y_type, y_true, y_pred = _check_targets(y_true, y_pred) File "/environment/miniconda3/lib/python3.10/site-packages/sklearn/metrics/_classification.py", line 104, in _check_targets raise ValueError("{0} is not supported".format(y_type)) ValueError: continuous-multioutput is not supported"
03-09
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值