这是我之前的问题How to convert a groupby().mean() into a callable object?
的扩展我很感谢我从这个论坛得到的帮助,特别是Alberto Garcia-Raboso回答了我关于这个模型的问题。
随着我的继续,会发生更多错误。这个似乎很难纠正。它是关于模型的性能评估。我试图使用.score(pred_values,real_values),但错误表明输入值不在[index]中:
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
答案 0 :(得分:1)
您的代码中存在两个问题...第一个问题是使用score
方法。
得分的功能定义如 -
得分(X,y [,sample_weight])
仅提及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