#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仍以相同的顺序打印,因此我想知道该要素与coeff的映射
答案 0 :(得分:11)
诀窍在于,在训练模型后,您就知道了系数的顺序:
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)))
这将打印系数和正确的功能。 (使用pandas DataFrame测试)
如果您想稍后重复使用这些系数,您也可以将它们放在字典中:
coef_dict = {}
for coef, feat in zip(model_1.coef_,model_1_features):
coef_dict[feat] = coef
(你可以通过训练两个具有相同功能的模型来测试它,但正如你所说的那样,改进了功能的顺序。)
答案 1 :(得分:4)
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
coef_table = pd.DataFrame(list(X_train.columns)).copy()
coef_table.insert(len(coef_table.columns),"Coefs",regressor.coef_.transpose())
答案 2 :(得分:3)
@Robin发布了一个很好的答案,但是对我来说,我必须对其进行一个调整才能按照我想要的方式工作,它是指我想要的'coef_'np.array的尺寸,即修改为此:model_1.coef_ [0 ,:],如下所示:
addsTo2 = (n1, n2) => {
return n1 + n2 === 2 ? `yes, ${n1} + ${n2} is 2`: `no, ${n1} + ${n2} is ${n1 + n2} instead`;
}
result = addsTo2(1,1)
// outputs > "yes, 1 + 1 is 2"
result = addsTo2(1,3)
// outputs > "no, 1 + 3 is 4 instead"
然后按照我的图片创建字典,其中包含{'feature_name':系数_值}对。
答案 3 :(得分:0)
这是我在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']))
答案 4 :(得分:0)
借用Robin,但简化了语法:
coef_dict = dict(zip(model_1_features, model_1.coef_))
关于zip的重要说明:zip假定其输入长度相等,因此特别重要的是确认特征和系数的长度匹配(在更复杂的模型中可能并非如此)。如果一个输入比另一个输入长,则较长的输入将在其额外索引位置中截断值。请注意以下示例中缺少的7:
In [1]: [i for i in zip([1, 2, 3], [4, 5, 6, 7])]
Out[1]: [(1, 4), (2, 5), (3, 6)]