我使用scikit线性回归,如果我改变特征的顺序,系数仍然以相同的顺序打印,因此我想知道特征与系数的Map。
#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_
8条答案
按热度按时间wko9yo5t1#
诀窍在于,在训练好模型之后,您就知道了系数的顺序:
这将打印系数和正确的特征。(用Pandas数据框测试)
如果您想在以后重用这些系数,也可以将它们放入字典中:
(You我可以通过训练两个具有相同特征的模型来自己测试它,但正如您所说,特征的顺序被打乱了。)
uxh89sit2#
xriantvc3#
@Robin贴出了一个很棒的答案,但对我来说,我必须对它做一个调整才能按我想要的方式工作,它是引用我想要的'coef_' np.数组的维度,即修改为:模型_1.coef_[0,:],如下所示:
然后,dict就像我想象的那样被创建了,代码为{'feature_name':系数_值}对。
hof1towb4#
下面是我在Jupyter中用来漂亮打印系数的方法。我不确定我是否明白为什么顺序是一个问题--据我所知,系数的顺序应该与输入数据的顺序相匹配。
请注意,第一行假设您有一个名为df的Pandas数据框,在将数据转换为numpy数组进行回归之前,您最初将数据存储在该数据框中:
fjaof16o5#
借用Robin的话,但简化了语法:
关于zip的重要说明:zip假设其输入长度相等,因此确认特征和系数的长度匹配(在更复杂的模型中可能不是这种情况)尤为重要。如果一个输入比另一个长,则较长的输入将截断其额外索引位置的值。请注意以下示例中缺少的7:
zte4gxcn6#
tgabmvqs7#
所有这些答案都很棒,但对我个人来说,最有效的是这个,因为我需要的特性名称是train_date Dataframe 的列:
fhg3lkii8#
训练完模型后,系数值存储在变量
model.coef_[0]
中,我们可以迭代列名,并将列名及其系数值存储在字典中。希望这有帮助!