Python - 从 OLS 模型中获取排列重要性

问题描述 投票:0回答:1

正如标题所述,我正在尝试获取 OLS 模型中特征的排列重要性,但得到的是:

TypeError:估计器应该是实现“fit”方法的估计器,已通过

这是我的代码:

import pandas as pd
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split
import statsmodels.api as sm

df = pd.read_csv(r'my_file')

X = df.drop(my dependent variable)
y = df[my dependent variable)

X_train, X_test, y_train, y_test = train_test_split(X, y)

model - sm.OLS(y_train, X_train).fit()
print(model.summary())

score = permuation_importance(model, X_train, y_train, scoring='neg_root_mean_squared_error')

importance = score.importances_mean

for i,v in enumerate(importance):
   print('Feature: %0d, Score: %.5f' % (i,v))

我有一种感觉,因为我使用的模型不是来自 sklearn,所以想知道是否有办法从我的 OLS 模型中获取特征指标?谢谢!!

python machine-learning scikit-learn statistics regression
1个回答
0
投票

您得到的错误是因为您将回归结果而不是拟合模型传递给

permutation_importance
方法。要消除此错误,请执行以下操作:

model = sm.OLS(y_train, X_train)
results = model.fit()
print(results.summary())
score = permuation_importance(model, X_test, y_test, scoring='neg_root_mean_squared_error')

这里,

model
statsmodels.regression.linear_model.OLS
类型,它实现了
.fit()
方法。但是,
results
statsmodels.regression.linear_model.RegressionResultsWrapper
类型,它不实现
.fit()
。传递给
permutation_importance
方法的第一个参数必须是定义
.fit()
方法的类型。

话虽这么说,仅仅因为您传递给它的模型实现了

.fit()
,并不一定意味着该模型将受到sklearn的支持。我建议执行以下任一操作:

选项1

使用 sklearn 的

LinearRegression
,而不是 statsmodel 的
OLS
。 sklearn 的
permutation_importance
方法绝对支持前者。请参阅https://scikit-learn.org/stable/modules/ generated/sklearn.linear_model.LinearRegression.html

选项2

假设您的数据已适当缩放,您可以使用模型系数作为特征重要性的度量。

feature_importances = abs(results.params)
print(feature_importances.sort_values(ascending=False))
© www.soinside.com 2019 - 2024. All rights reserved.