“NoneType”对象不支持在\u init内分配项__

2024-10-01 13:43:06 发布

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

我正在从Kaggle上的this tutorial学习机器学习。在

我试图修改项目结构,以便创建一个新的.py文件来创建一个新类。这是课程:

class ModelHelper(object):
    def __init__(self, model, seed=0, params=None):
        params['random_state'] = seed # TypeError: 'NoneType' object does not support item assignment
        self.model = model(**params)

    def train(self, x_train, y_train):
        self.model.fit(x_train, y_train)

    def predict(self, x):
        return self.model.predict(x)

    def fit(self, x, y):
        return self.model.fit(x, y)

    def feature_importances(self, x, y):
        print(self.model.fit(x, y).feature_importances_)

我就是这样用的:

^{pr2}$

这是我得到的全部错误:

Traceback (most recent call last):
  File "F:/backup/PycharmProjects/KaggleTitanic/DataAnalysis.py", line 191, in <module>
    log_reg = ModelHelper(model=LogisticRegression);
  File "F:\backup\PycharmProjects\KaggleTitanic\ModelHelper.py", line 3, in __init__
    params['random_state'] = seed # TypeError: 'NoneType' object does not support item assignment
TypeError: 'NoneType' object does not support item assignment

可能是我的__init__参数中的params=None引起的错误。我想要的是使这个params字段成为可选的(如果我不想,我就不必通过它)


Tags: pyselfmodelobjectinitdefnottrain
1条回答
网友
1楼 · 发布于 2024-10-01 13:43:06

修改ModelHelper,以便在未传递值时正确初始化params的默认值。在

class ModelHelper(object):
    def __init__(self, model, seed=0, params=None):
        if params is None:
            params = {}
        params['random_state'] = seed # TypeError: 'NoneType' object does not support item assignment
        self.model = model(**params)

    def train(self, x_train, y_train):
        self.model.fit(x_train, y_train)

    def predict(self, x):
        return self.model.predict(x)

    def fit(self, x, y):
        return self.model.fit(x, y)

    def feature_importances(self, x, y):
        print(self.model.fit(x, y).feature_importances_)

在调用签名中必须使用params=None而不是{},这样ModelHelper的每个实例都使用自己独立的params字典。也可以通过将调用签名更改为使用**params来实现这一点,但为了不破坏您可能已经用此签名编写的调用的任何代码,我建议使用上面的答案。在

相关问题 更多 >