我正在尝试使用以下函数计算我创建的模型的准确性:
def accuracy(y_true, y_pred):
accuracy = np.mean(y_pred == y_true)
return accuracy
有时它会正确显示准确性,有时会显示错误。有人可以解释一下我如何解决该功能,以使其显示与sklearn precision_score相同的精度。这是我从方法中得到的结果的示例。
y_true
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
y_pred
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
KNN classification accuracy: 0.0
KNN classification accuracy sklearn: 0.9428571428571428
答案 0 :(得分:1)
使用numpy,您可以执行以下操作:
docker-compose.nodejs.yml
答案 1 :(得分:1)
设置方式y_pred == y_true
始终为False,即使列表中的一个值都不相同。当您执行np.mean(False)
时,将获得0.0的值。
您想要做的是迭代查找列表中的每个项目是否相等。这是我的解决方案:
def accuracy(y_true,y_pred,normalize=True):
accuracy=[]
for i in range(len(y_pred)):
if y_pred[i]==y_true[i]:
accuracy.append(1)
else:
accuracy.append(0)
if normalize==True:
return np.mean(accuracy)
if normalize==False:
return sum(accuracy)
精度列表将跟踪y_pred的每个项是否等于y_true。 像https://scikit-learn.org/stable/modules/model_evaluation.html#accuracy-score中一样, 如果它们相等,则应附加1。如果不是,则应附加0。
您没有在原始函数中包含此函数,但是为了您好奇,我像sklearn一样添加了normalize选项。归一化将自动为真并会找到平均值,但这是代码,如果您想计算准确的数量。