2016-01-07 41 views
6
#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_ 

Jeśli zmienić kolejność funkcji, COEF nadal są drukowane w tej samej kolejności, dlatego chciałbym wiedzieć mapowanie funkcji z WspółczynnikJak znaleźć nazwy funkcji współczynników za pomocą regresji liniowej scikit?

+0

Jak dokładnie zmieniłbyś kolejność funkcji? Zwykle używam jakiegoś zip (coef, featurenames), aby wydrukować go poprawnie. –

+0

@RobinSpiess Przykład model_e_features = [ 'bedrooms_squared', 'log_sqft_living', 'lat_plus_long'] + model_2_features – amehta

Odpowiedz

5

Sztuką jest to, że tuż po masz przeszkoleni modelu, wiesz kolejność współczynników:

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))) 

To będzie drukować współczynników i prawidłową funkcję. (Testowane z pandy DataFrame)

Jeśli chcesz ponownie użyć współczynników później można również umieścić je w słowniku:

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

(można przetestować go dla siebie przez trening dwa modele z tych samych funkcji, ale , jak powiedziałeś, tasowanie kolejności funkcji.)

+0

myślę, że powinno być 'print (lista (zip (model_1.coef_, model_1_features)))', czyli coef_ zamiast coef_ [0]. W przeciwnym razie zip nie ma nic do iteracji. –

+0

@AlexFedulov Ah tak, dzięki. Myślę, że DataFrame, której użyłem w przykładzie do przetestowania kodu, mogło spowodować, że sklearn pomyślał, że dostarczyłem wiele celów. A ponieważ coef_ zwróci tablicę 2d, jeśli podano wiele celów, musiałem użyć coef_ [0]. Ale generalnie coef_ powinien dać właściwy rezultat. –

+0

Kiedy drukuję (lista (zip (model_1.coef_, model_1_features))) w Jupyter wynik, który otrzymuję, nie jest łatwy do odczytania. (Najpierw wyświetlana jest co-wydajna tablica, a lista funkcji jest ułożona poniżej). Kiedy zmieniam oba, by zrobić to na odwrót, mój wydruk zawiera trochę puchu, co również utrudnia czytanie. np .: 'dtype = ' user1761806