如何利用scikit线性回归找到系数的特征名称?

2024-06-16 13:02:59 发布

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

#training the model
model_1_features = ['sqft_living', 'bathrooms', 'bedrooms', 'lat', 'long']
model_2_features = model_1_features + ['bed_bath_rooms']
model_3_features = model_2_features + ['bedrooms_squared', 'log_sqft_living', 'lat_plus_long']

model_1 = linear_model.LinearRegression()
model_1.fit(train_data[model_1_features], train_data['price'])

model_2 = linear_model.LinearRegression()
model_2.fit(train_data[model_2_features], train_data['price'])

model_3 = linear_model.LinearRegression()
model_3.fit(train_data[model_3_features], train_data['price'])

# extracting the coef
print model_1.coef_
print model_2.coef_
print model_3.coef_

如果我更改特征的顺序,coef仍然以相同的顺序打印,因此我想知道特征与coef的映射


Tags: thedatamodeltrainpricefitlinearfeatures
3条回答

这是我在Jupyter中用来打印系数的工具。我不知道为什么顺序是一个问题-据我所知,系数的顺序应该与您给出的输入数据的顺序相匹配。

请注意,第一行假设您有一个名为df的Pandas数据帧,在将其转换为numpy数组进行回归之前,您最初将数据存储在该数据帧中:

fieldList = np.array(list(df)).reshape(-1,1)

coeffs = np.reshape(np.round(clf.coef_,5),(-1,1))
coeffs=np.concatenate((fieldList,coeffs),axis=1)
print(pd.DataFrame(coeffs,columns=['Field','Coeff']))

诀窍在于,在训练完模型之后,您就知道了系数的顺序:

model_1 = linear_model.LinearRegression()
model_1.fit(train_data[model_1_features], train_data['price'])
print(list(zip(model_1.coef_, model_1_features)))

这将打印系数和正确的特征。(用熊猫数据框测试)

如果以后要重用系数,也可以将其放入字典中:

coef_dict = {}
for coef, feat in zip(model_1.coef_,model_1_features):
    coef_dict[feat] = coef

(您可以通过培训具有相同功能的两个模型来测试它,但正如您所说的,功能顺序是无序的。)

@Robin给出了一个很好的答案,但对我来说,我必须对它做一个调整,才能按照我想要的方式工作,这是指我想要的“coef”np.array的维度,即修改为:model_1.coef_0,:],如下所示:

coef_dict = {}
for coef, feat in zip(model_1.coef_[0,:],model_1_features):
    coef_dict[feat] = coef

然后,按照我的想象创建了dict,它有{feature_name':coefficient_value}对。

相关问题 更多 >