我有以下非常简单的模型,在运行它时遇到错误消息。错误是
Traceback (most recent call last):
File "mltest.py", line 63, in <module>
pred = B.predict(ms,r[0:10])
File "mltest.py", line 54, in predict
return map(self.means['score'][X], X)
TypeError: 'Series' object is not callable
模型结构如下:
from sklearn.base import BaseEstimator, ClassifierMixin
import pandas as pd
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 map(self.means['score'][X], X)
然后我有一个X(名称)和y(分数)列表,用于模型拟合和预测。当我测试我的代码时,我只是使用相同的数据进行模型拟合和预测。
names = ["John", "Mary", "Suzie", "John", "John", "Mary", "Suzie"]
scores = [80, 70, 75, 90, 92, 82, 88]
B = MeanClassifier()
Bfit = B.fit(names, scores)
Bpred = B.predict(names)
显然,在我使用groupby(['name']).mean()
之后,错误来自数据类型。此对象不可调用,因此映射在此处不起作用。谁能给我一个如何解决这个问题的建议?谢谢!!
答案 0 :(得分:2)
在您的估算工具课程中,self.means
是一个索引为name
的DataFrame和一个名为score
的列。将您的predict
功能更改为
def predict(self, X):
return self.means.loc[X, 'score']
.loc
获取索引标签(或其列表)和列标签(或其列表),因此上面返回一个系列(因为您正在访问一列),其中包含列中的值score
中所有姓名的X
。