如何为类拟合LinearRegression?解决NotFittedError报错问题
解决NotFittedError:LinearRegression未拟合的问题
问题根源
你调用代码的逻辑存在关键错误——每次执行models()都会生成一个全新的models类实例。第一个models().train_lr(...)确实训练了该实例内的lm模型,但这个实例执行完就被销毁了;第二个models().test_lr(...)是创建了另一个全新的models实例,它的lm从未经过训练,自然触发了未拟合的错误。
解决方案
1. 复用同一个实例(核心修复)
创建一次models实例并保存到变量,之后训练和测试都使用这个变量:
# 创建实例并保存 my_model = models() # 用同一个实例训练模型 my_model.train_lr(X_train, y_train, 'Base line') # 用同一个实例测试模型 my_model.test_lr(X_test, y_test, 'Base line')
2. 优化train_lr方法(可选)
原train_lr方法末尾重复执行了self.lm.fit(X, y),完全没必要(已经在开头完成拟合),修改后更高效:
def train_lr(self, X, y, title): self.lm.fit(X, y) y_hat = pd.DataFrame(self.lm.predict(X)) mse = metrics.mean_squared_error(y, y_hat) print('{} set'.format(title)) print('R2 {}:'.format(title), self.lm.score(X, y)) print('RMSE {}:'.format(title), math.sqrt(mse)) print('') # 返回训练好的模型即可,无需重复拟合 return self.lm
内容的提问来源于stack exchange,提问作者Dino
相关产品推荐
相关产品推荐

