Получение отрицательного коэффициента при ожидании положительного?

#python #machine-learning #scikit-learn #coefficients

#python #машинное обучение #scikit-learn #коэффициенты

Вопрос:

Я провожу линейный регрессионный анализ набора данных домов (можно найти здесь: https://www.kaggle.com/shree1992/housedata ). У меня есть следующий код (см. image1): image1

На изображении показано, что когда я печатаю среднюю цену для каждого количества спален, тенденция такова, что цена растет с увеличением количества спален. При выполнении одиночной линейной регрессии я получаю положительный коэффициент для спален, чего я и ожидал. (см. Изображение 2) изображение 2

Хотя, когда я выполняю множественную линейную регрессию (добавляю больше объектов / столбцов) в набор данных и печатаю coef_, я получаю отрицательный coef_ для спален (см. Изображение 3). image3

Как это имеет смысл, когда средняя цена увеличивается с увеличением количества спален?

 houses_preprocessed = houses[
    (houses.price<1.2*10**7) amp;
    (houses.bedrooms>0) amp;
    (houses.bedrooms <= 6) amp;
    (houses.bathrooms>0) amp;
    (houses.price>8000)].drop(columns=['country', 'date', 'street', 'city'])


houses_preprocessed.loc[houses_preprocessed['yr_renovated'] < 1, 'yr_renovated'] = 0
houses_preprocessed.loc[houses_preprocessed['yr_renovated'] > 1, 'yr_renovated'] = 1


X = houses_preprocessed[['bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated']]
y = houses_preprocessed[['price']]

X_train, X_test, y_train, y_test = train_test_split(X,y)

reg = LinearRegression()
reg.fit(X_train, y_train)

K=reg.coef_
K


coef_dict = {}
for K, name in zip(K,X):
    coef_dict[name] = K
coef_dict

# Create a list of tuples sorted by index 1 i.e. value field 
listofTuples = sorted(coef_dict.items(), key=lambda e:e[1])

# Iterate over the sorted sequence
for elem in listofTuples :
    print(elem[0] , " ::" , elem[1] )
  

Комментарии:

1. можете ли вы поделиться своим кодом и какие именно функции вы добавляете?

2. @Gray_Rhino Я добавил свой код

3. Сначала X это массив точек данных, затем вы используете его zip(K, X) для имени столбца. Разве это не должно быть `zip (K, X.столбцы)’?