#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は同じ順序で印刷されます。したがって、フィーチャと係数のマッピングを知りたい
秘Theは、モデルをトレーニングした直後に、係数の順序を知ることです。
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
(同じ機能を持つ2つのモデルをトレーニングすることで、自分でテストできますが、先ほど言ったように、機能の順序を入れ替えます。)
@Robinは素晴らしい答えを投稿しましたが、私にとっては、私が望んでいた方法で動作するように微調整する必要がありました。 model_1.coef_ [0 ,:]、以下のとおり:
coef_dict = {}
for coef, feat in Zip(model_1.coef_[0,:],model_1_features):
coef_dict[feat] = coef
それから、{'feature_name':efficient_value}のペアを使用して、私が描いたとおりに辞書を作成しました。
Jupyterで係数をきれいに印刷するために使用するものを次に示します。順序が問題になる理由を理解していない-係数の順序があなたが与えた入力データの順序と一致する必要があることを知っている限り。
最初の行では、回帰のためにnumpy配列に変換する前にデータを最初に保存したdfと呼ばれるPandasデータフレームがあることを前提としていることに注意してください。
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']))
ロビンから借りましたが、構文を簡素化します。
coef_dict = dict(Zip(model_1_features, model_1.coef_))
Zipに関する重要な注意:Zipは入力が同じ長さであると想定しているため、特徴と係数の長さが一致していることを確認することが特に重要です(より複雑なモデルでは当てはまらない場合があります)。 1つの入力が他の入力よりも長い場合、長い入力の余分なインデックス位置の値は切り捨てられます。次の例で7が欠落していることに注意してください。
In [1]: [i for i in Zip([1, 2, 3], [4, 5, 6, 7])]
Out[1]: [(1, 4), (2, 5), (3, 6)]