Python 如何处理sklearn中的评分方法?

Python 如何处理sklearn中的评分方法?,python,scikit-learn,Python,Scikit Learn,这是我上一个问题的延伸 我非常感谢本论坛给予我的帮助,尤其是阿尔贝托·加西亚·拉博索,他回答了我关于这一模式的问题 随着我的继续,会出现更多的错误。这一条对我来说似乎很难纠正。这是关于模型的性能评估。我试图使用.score(pred_值、real_值),但错误表明输入值不在[索引]中: KeyError: 'None of [[87.333333333333329, 76.0, 81.5, 87.333333333333329, 87.333333333333329, 76.0, 81.5]]

这是我上一个问题的延伸

我非常感谢本论坛给予我的帮助,尤其是阿尔贝托·加西亚·拉博索,他回答了我关于这一模式的问题

随着我的继续,会出现更多的错误。这一条对我来说似乎很难纠正。这是关于模型的性能评估。我试图使用.score(pred_值、real_值),但错误表明输入值不在[索引]中:

KeyError: 'None of [[87.333333333333329, 76.0, 81.5, 87.333333333333329, 87.333333333333329, 76.0, 81.5]] are in the [index]'
我不知道如何解释这一点。索引在哪里?如何访问它并解决问题

其实我想了很久了。当我再次尝试时,我仍然无法解决问题。如果有任何帮助,我将不胜感激。多谢各位

型号

from sklearn.base import BaseEstimator, ClassifierMixin
import pandas as pd
import numpy as np

class MeanClassifier(BaseEstimator, ClassifierMixin):
    def __init__(self):
        pass

    def fit(self, X, y):
        self.name = X
        self.scores = y
        self.data = pd.DataFrame({"name": self.name, "score": self.scores})
        #print(self.data)
        self.means = self.data.groupby(["name"]).mean()
        #print(self.means)
        return self

    def predict(self, X):
        return list(self.means.loc[X, 'score'])
数据输入和模型测试

names = ["John", "Mary", "Suzie", "John", "John", "Mary", "Suzie"]
scores = [80, 70, 75, 90, 92, 82, 88]
dd = pd.DataFrame({"name": names, "score": scores})

ddnames = list(dd['name'])
ddscores = list(dd['score'])

B = MeanClassifier()
Bfit = B.fit(ddnames, ddscores)

Bpred = B.predict(dd['name'])
#print(Bpred)

print(B.score(Bpred, ddscores))  #The error appears here

您的代码中有两个问题……第一个问题是
score
方法

score的函数定义如下-

分数(X,y[,样本重量])

只需提到
score
调用
predict
后端本身

其中X是特征集,y是真实数据。您提供的是预测列表和真实列表。因此,将该行改为:

print(B.score(ddnames, ddscores))
但是如果你运行这个你会得到另一个错误-

无法处理多类和连续类的混合

出现此错误的原因是,您正在继承
ClassifierMixin
并执行回归任务。因此,简单地说,您提供的是连续输出,但是
classifiermixin
将其视为一个分类问题

因此,只要继承
RegressorMixin
就可以了

#left code#
from sklearn.base import BaseEstimator, RegressorMixin
class MeanClassifier(BaseEstimator, RegressorMixin):
def __init__(self):
    pass
#left code#

print(B.score(ddnames, ddscores))  
输出-

0.395607701564

非常感谢。这确实是我需要的。:)