【问题标题】:python error Can't handle mix of multiclass and continuous-multioutputpython错误无法处理多类和连续多输出的混合
【发布时间】:2017-04-03 04:28:15
【问题描述】:

当我尝试获取模型的准确性时,我收到此错误“无法处理多类和连续多输出的混合”。一段时间以来一直试图弄清楚发生了什么,但我不知道,我对出了什么问题感到困惑。

# TRAINING data
#Convert crime labels to numbers
df_crime = preprocessing.LabelEncoder()
crime = df_crime.fit_transform(train.Category)
#Get binarized weekdays, districts, and hours using dummy variables
days = pd.get_dummies(train.DayOfWeek)
district = pd.get_dummies(train.PdDistrict)
hour = train.Dates.dt.hour
hour = pd.get_dummies(hour)
#Build new array
train_data = pd.concat([hour, days, district], axis=1)
train_data['crime']=crime
#train_data.head()

#Repeat for test data
days = pd.get_dummies(test.DayOfWeek)
district = pd.get_dummies(test.PdDistrict)

hour = test.Dates.dt.hour
hour = pd.get_dummies(hour) 

test_data = pd.concat([hour, days, district], axis=1)

features = ['Friday', 'Monday', 'Saturday', 'Sunday', 'Thursday', 'Tuesday',
 'Wednesday', 'BAYVIEW', 'CENTRAL', 'INGLESIDE', 'MISSION',
 'NORTHERN', 'PARK', 'RICHMOND', 'SOUTHERN', 'TARAVAL', 'TENDERLOIN']

training, testing = train_test_split(train_data, train_size=.60) 

#bernoulliNB
# predicting only on the training data
model_B = BernoulliNB()
model_B.fit(training[features], training['crime'])
predicted2 = np.array(model_B.predict_proba(testing[features]))
log_loss(testing['crime'], predicted2)

score_b = accuracy_score(testing['crime'], predicted2)
print(score_b)


ValueError                                Traceback (most recent call last)
<ipython-input-27-7d9db3ef89cc> in <module>()
----> 1 score_b = accuracy_score(testing['crime'], predicted2)
      2 
      3 print(score_b)

C:\Users\Michael\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in accuracy_score(y_true, y_pred, normalize, sample_weight)
    170 
    171     # Compute accuracy for each possible representation
--> 172     y_type, y_true, y_pred = _check_targets(y_true, y_pred)
    173     if y_type.startswith('multilabel'):
    174         differing_labels = count_nonzero(y_true - y_pred, axis=1)

C:\Users\Michael\Anaconda3\lib\site-packages\sklearn\metrics\classification.py in _check_targets(y_true, y_pred)
     80     if len(y_type) > 1:
     81         raise ValueError("Can't handle mix of {0} and {1}"
---> 82                          "".format(type_true, type_pred))
     83 
     84     # We can't have more than one value on y_type => The set is no more needed

ValueError: Can't handle mix of multiclass and continuous-multioutput

【问题讨论】:

  • 您比较过log_lossaccuracy_score 的文档吗?检查 2 个输入的维度或类型,并将它们与预期进行比较?换句话说,您采取了哪些步骤来理解这个问题?

标签: python numpy scikit-learn multilabel-classification


【解决方案1】:

predicted2 是一个类概率数组(.predict_proba(X) 结果); accuracy_score 只接受顶级课程(predict(X) 结果)。这意味着这应该有效:

predicted3 = model_B.predict(testing[features])
accuracy_score(testing['crime'], predicted3)

但是调用 predict/predict_proba 两次并不是一个好主意:它效率低下,如果由于某种原因预测不确定,您可能会得到不匹配的分数。所以最好做这样的事情:

accuracy_score(testing['crime'], predicted2.argmax(axis=1))

【讨论】:

  • 天哪,我完全忘记了其他预测方法。我对这个大声笑还很陌生。非常感谢!!!
  • 很高兴知道!我不知道最好的做法是,如果您同时需要:1)y_predict_proba = clf.predict_proba 和 2)y_pred = y_predict_proba.argmax(axis=1)
猜你喜欢
  • 2017-06-06
  • 2016-09-18
  • 2020-05-10
  • 2018-08-05
  • 2020-11-11
  • 2021-12-20
  • 2020-12-16
  • 2019-10-22
  • 2021-04-14
相关资源
最近更新 更多