分级器上的属性错误:AttributeError:“LinearRegression”对象没有属性“predict_proba”

2024-04-29 05:41:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助解决我学校的年级生产生的属性错误。在

我的任务: 我需要创建一个自定义变压器输入到一个平地机。在

评分员将字典列表传递给我的估计器的predict或predict_proba方法,而不是数据帧。这意味着模型必须同时使用这两种数据类型。因此,我需要提供一个定制的ColumnSelectTransformer来代替scikitlearn自己的ColumnTransformer。在

这是我的自定义转换器的代码,它的目标是在提供的列中输入空值。在

from sklearn.impute import SimpleImputer

simple_cols = ['BEDCERT', 'RESTOT', 'INHOSP', 'CCRC_FACIL', 'SFF', 'CHOW_LAST_12MOS', 'SPRINKLER_STATUS', 'EXP_TOTAL', 'ADJ_TOTAL']

class ColumnSelectTransformer(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        if not isinstance(X, pd.DataFrame):
            X = pd.DataFrame(X)
        return X[self.columns].values

simple_features = Pipeline([
    ('cst', ColumnSelectTransformer(simple_cols)),
    ('imputer', SimpleImputer(strategy='mean')),
])

然后我的任务是创建一个新的管道,并用一个估计器对其进行拟合,下面是我的尝试。在

^{pr2}$

管道生成成功

^{3}$

然而,当我把我的简单的_features_模型传给学校的学生时

def positive_probability(model):
    def predict_proba(X):
        return model.predict_proba(X)[:, 1]
    return predict_proba

grader.score.ml__simple_features(positive_probability(simple_features_model))

我得到以下错误

AttributeError                            Traceback (most recent call last)
<ipython-input-87-243f592b48ee> in <module>()
      4     return predict_proba
      5 
----> 6 grader.score.ml__simple_features(positive_probability(simple_features_model))

/opt/conda/lib/python3.7/site-packages/static_grader/grader.py in func(*args, **kw)
     92   def __getattr__(self, method):
     93     def func(*args, **kw):
---> 94       return self(method, *args, **kw)
     95     return func
     96 

/opt/conda/lib/python3.7/site-packages/static_grader/grader.py in __call__(self, question_name, func)
     88       return
     89     test_cases = json.loads(resp.text)
---> 90     test_cases_grading(question_name, func, test_cases)
     91 
     92   def __getattr__(self, method):

/opt/conda/lib/python3.7/site-packages/static_grader/grader.py in test_cases_grading(question_name, func, test_cases)
     40   for test_case in test_cases:
     41     if inspect.isroutine(func):
---> 42       sub_res = func(*test_case['args'], **test_case['kwargs'])
     43     elif not test_case['args'] and not test_case['kwargs']:
     44       sub_res = func

<ipython-input-87-243f592b48ee> in predict_proba(X)
      1 def positive_probability(model):
      2     def predict_proba(X):
----> 3         return model.predict_proba(X)[:, 1]
      4     return predict_proba
      5 

/opt/conda/lib/python3.7/site-packages/sklearn/utils/metaestimators.py in __get__(self, obj, type)
    108                     continue
    109                 else:
--> 110                     getattr(delegate, self.attribute_name)
    111                     break
    112             else:

AttributeError: 'LinearRegression' object has no attribute 'predict_proba'

Tags: intestselfmodelreturndefargssimple
1条回答
网友
1楼 · 发布于 2024-04-29 05:41:15

线性回归模块确实没有predict_proba属性(检查docs),原因非常简单:概率估计仅适用于分类模型,而不适用于回归(即数值预测),如线性回归。在

由于您的帖子中不清楚您是否正在尝试进行回归或分类:

  • 如果您在一个回归设置中,只需将predict_proba替换为predict。在
  • 如果您处于分类设置中,则不能使用线性回归-请尝试使用logistic回归(尽管名称不同,它是一种分类算法),它确实具有predict_proba属性(同样,请参见docs)。在

相关问题 更多 >