[scikit-learn] How compute weighted accuracy for multi-class classification?
Yaser Norouzzadeh
ynr.info at gmail.com
Thu Oct 19 15:36:59 EDT 2017
I do multi-class classification on unbalanced classes. I'm using
SGDClassifier(), GradientBoostingClassifier(), RandomForestClassifier(),
and LogisticRegression()with class_weight='balanced'. To compare the
results. it is required to compute the accuracy. I tried the following way
to compute weighted accuracy:
n_samples = len(y_train)
weights_cof =
float(n_samples)/(n_classes*np.bincount(data[target_label].as_matrix().astype(int))[1:])
sample_weights = np.ones((n_samples,n_classes)) * weights_cof
print accuracy_score(y_test, y_pred, sample_weight=sample_weights)
y_train is a binary array. So sample_weights has the same shape as y_train
(n_samples, n_classes). When I run the script, I received the following
error:
Traceback (most recent call last):
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition
2016.3.2\helpers\pydev\pydevd.py", line 1596, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition
2016.3.2\helpers\pydev\pydevd.py", line 974, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "D:/Destiny/DestinyScripts/MainLocationAware.py", line 424, in
<module>
predict_country(featuresDF, score, featuresLabel, country_sample_size,
'gbc')
File "D:/Destiny/DestinyScripts/MainLocationAware.py", line 313, in
predict_country
print accuracy_score(y_test, y_pred, sample_weight=sample_weights)
File
"C:\ProgramData\Anaconda2\lib\site-packages\sklearn\metrics\classification.py",
line 183, in accuracy_score
return _weighted_sum(score, sample_weight, normalize)
File
"C:\ProgramData\Anaconda2\lib\site-packages\sklearn\metrics\classification.py",
line 108, in _weighted_sum
return np.average(sample_score, weights=sample_weight)
File
"C:\ProgramData\Anaconda2\lib\site-packages\numpy\lib\function_base.py",
line 1124, in average
"Axis must be specified when shapes of a and weights "
TypeError: Axis must be specified when shapes of a and weights differ.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-learn/attachments/20171019/aa061ba5/attachment.html>
More information about the scikit-learn
mailing list