【问题标题】:ValueError: Target is multiclass but average='binary'. Please choose another average settingValueError:目标是多类但平均值='二进制'。请选择其他平均设置
【发布时间】:2019-09-12 13:42:04
【问题描述】:

我正在使用组合在一起的推文训练和测试数据集。 (combi = train.append(test, ignore_index=True)。

训练 csv 手动标记了以下情绪:-1、0 和 1(基本上是消极、中性和积极),而测试没有。

我希望代码使用逻辑回归来输出 f1 分数,但出现问题:使用了 f1_score(yvalid, prediction_int):

我的代码如下:

from sklearn.feature_extraction.text import CountVectorizer
bow_vectorizer = CountVectorizer(max_df=0.90, min_df=2,        max_features=1000, stop_words='english')
bow = bow_vectorizer.fit_transform(combi['tidy_tweet'])

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words='english')
tfidf = tfidf_vectorizer.fit_transform(combi['tidy_tweet'])

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score

train_bow = bow[:1300,:]
test_bow = bow[1300:,:]

xtrain_bow, xvalid_bow, ytrain, yvalid =     train_test_split(train_bow, train['label'], random_state=42,  test_size=0.3)

lreg = LogisticRegression()
lreg.fit(xtrain_bow, ytrain) # training the model

prediction = lreg.predict_proba(xvalid_bow) 
prediction_int = prediction[:,1] >= 0.3 
prediction_int = prediction_int.astype(np.int)

f1_score(yvalid, prediction_int)

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    阅读相关的documentation,你会看到f1_score中参数average的默认值为binary;因为这里你没有指定它,所以它采用这个默认值,但是对于你的多类分类的情况是无效的(同意,这可能是一个糟糕的设计选择)。

    按照错误消息的建议,您应该明确选择并指定文档中显示的其他可用参数之一;这是来自文档的示例,其中包含虚拟多类数据:

    from sklearn.metrics import f1_score
    # dummy multi-class data, similar to yours:
    y_true = [0, 1, 2, 0, 1, 2]
    y_pred = [0, 2, 1, 0, 0, 1]
    
    f1_score(y_true, y_pred, average='macro') 
    # 0.26666666666666666
    
    f1_score(y_true, y_pred, average='micro')
    # 0.33333333333333331
    
    f1_score(y_true, y_pred, average='weighted') 
    # 0.26666666666666666
    
    f1_score(y_true, y_pred) 
    # ValueError: Target is multiclass but average='binary'. Please choose another average setting.
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2019-02-15
      • 2020-11-08
      • 2016-09-04
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多