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