#python #machine-learning #scikit-learn #linear-regression
#Python #машинное обучение #scikit-learn #линейная регрессия
Вопрос:
Итак, я создал модель линейной регрессии для этого набора данных: https://www.kaggle.com/shree1992/housedata
После моей очистки и построения моей модели я получаю сумасшедшие высокие коэффициенты, которых я не ожидал.
Я погуглил эту проблему и, основываясь на этом, провел регрессию хребта, которая исправила сумасшедшие коэффициенты, но оценка и MAE почти одинаковы (линейная регрессия показывает лучшие результаты, хотя и в MAE score), что указывает на то, что это не связано с переобучением, так почему я получаю эти высокие коэффициенты и какдолжен ли я их объяснять / интерпретировать? Заранее спасибо.. Ниже приведены мои коэффициенты и код.
Коэффициенты:
sqft_living :: -20531660933516.066
floors :: -46157.99116169465
bedrooms :: -35148.64994889144
yr_built :: -110.275390625
sqft_lot :: -0.01336842838432517
yr_renovated :: 13901.669921875
bathrooms :: 22068.444163259817
condition :: 28854.36132510344
view :: 54609.32181396632
waterfront :: 619987.8770517551
statezip_WA 98070 :: 51720518.26940918
statezip_WA 98023 :: 51733793.98413086
statezip_WA 98198 :: 51745527.19320679
statezip_WA 98092 :: 51753612.19506836
statezip_WA 98003 :: 51768969.80859375
statezip_WA 98057 :: 51774754.2020874
statezip_WA 98032 :: 51777293.54980469
statezip_WA 98188 :: 51780926.42871094
statezip_WA 98022 :: 51785464.6875
statezip_WA 98042 :: 51788032.485961914
statezip_WA 98001 :: 51798657.185058594
statezip_WA 98030 :: 51800982.91894531
statezip_WA 98002 :: 51807063.37084961
statezip_WA 98038 :: 51818086.75805664
statezip_WA 98058 :: 51818726.060058594
statezip_WA 98031 :: 51820966.17700195
statezip_WA 98055 :: 51836975.10852051
statezip_WA 98178 :: 51839662.78881836
statezip_WA 98059 :: 51845304.94116211
statezip_WA 98019 :: 51849298.035583496
statezip_WA 98065 :: 51858962.752441406
statezip_WA 98014 :: 51862571.193847656
statezip_WA 98148 :: 51872288.3659668
statezip_WA 98166 :: 51878712.109375
statezip_WA 98056 :: 51890492.997558594
statezip_WA 98045 :: 51890671.47558594
statezip_WA 98168 :: 51909556.58944702
statezip_WA 98146 :: 51923932.966308594
statezip_WA 98011 :: 51925708.75717163
statezip_WA 98028 :: 51930531.6730957
statezip_WA 98155 :: 51933038.31750488
statezip_WA 98024 :: 51933207.13555908
statezip_WA 98108 :: 51935337.22363281
statezip_WA 98077 :: 51937928.41999817
statezip_WA 98072 :: 51939094.63574219
statezip_WA 98106 :: 51946079.88293457
statezip_WA 98027 :: 51954189.55102539
statezip_WA 98133 :: 51968441.83276367
statezip_WA 98118 :: 51972078.98779297
statezip_WA 98074 :: 51972640.670410156
statezip_WA 98125 :: 51985392.0078125
statezip_WA 98034 :: 51989931.86279297
statezip_WA 98053 :: 51994949.201171875
statezip_WA 98075 :: 51996895.56713867
statezip_WA 98126 :: 52003476.768066406
statezip_WA 98008 :: 52019588.31152344
statezip_WA 98029 :: 52033227.60961914
statezip_WA 98177 :: 52044918.458618164
statezip_WA 98136 :: 52054739.052734375
statezip_WA 98052 :: 52055053.704589844
statezip_WA 98006 :: 52077050.865234375
statezip_WA 98007 :: 52084987.728515625
statezip_WA 98144 :: 52104137.84765625
statezip_WA 98116 :: 52123261.3046875
statezip_WA 98033 :: 52128846.232666016
statezip_WA 98115 :: 52137801.478027344
statezip_WA 98117 :: 52140383.259521484
statezip_WA 98005 :: 52147522.69140625
statezip_WA 98122 :: 52159159.841552734
statezip_WA 98103 :: 52160013.99584961
statezip_WA 98107 :: 52176913.24609375
statezip_WA 98199 :: 52218928.334228516
statezip_WA 98102 :: 52277970.43017578
statezip_WA 98040 :: 52319189.98120117
statezip_WA 98119 :: 52323874.4597168
statezip_WA 98105 :: 52360431.115722656
statezip_WA 98109 :: 52381532.43066406
statezip_WA 98112 :: 52410056.1015625
statezip_WA 98004 :: 52665837.48083496
statezip_WA 98039 :: 52891510.521728516
sqft_basement :: 20531660933682.504
sqft_above :: 20531660933785.93
Код
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
toremove = houses_preprocessed['statezip'].value_counts()
houses_preprocessed=houses_preprocessed[houses_preprocessed.isin(toremove.index[toremove > 10]).values]
X = houses_preprocessed.drop(columns=['price'])
y = houses_preprocessed['price']
X = pd.get_dummies(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
reg = LinearRegression()
reg.fit(X_train, y_train)
Комментарии:
1. я думаю, вы получили неправильный набор данных. вы можете правильно его обновить
2. @StupidWolf Извините. Большое спасибо. Я обновил набор данных….
Ответ №1:
То, с чем вы столкнулись, — это мультиколлинеарность. Если два или более ваших предикторов сильно коррелируют, регрессионным моделям нужно использовать только один из них, а для остальных будет установлено какое-то бессмысленное значение. Если вы посмотрите на данные:
X = houses_preprocessed.drop(columns=['price'])
y = houses_preprocessed['price']
import seaborn as sns
sns.clustermap(X.select_dtypes("number").corr(method="spearman"),figsize=(6, 6))
Эти три переменные сильно коррелируют:
sns.pairplot(X[['bathrooms','sqft_above','sqft_living']])
Поэтому мы сохраняем один из них, и, наконец, поскольку вы сделали один горячий, вы не можете поместить перехват, иначе один горячий statezip будет линейной комбинацией вашего перехвата:
X = pd.get_dummies(X.drop(columns=['bathrooms','sqft_above']))
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
reg = LinearRegression(fit_intercept=False)
reg.fit(X_train, y_train)
Проверьте r2 :
reg.score(X_test,y_test)
0.7621069304476887
И теперь коэффициенты выглядят нормально, учитывая диапазон ваших значений y:
res = pd.DataFrame({'coef':reg.coef_},index=X.columns)
res.reindex(res.coef.abs().sort_values().index)
coef
sqft_lot -0.023554
yr_built 54.699771
sqft_basement -100.401752
sqft_living 278.836773
statezip_WA 98006 565.521930
... ...
statezip_WA 98023 -342256.082284
statezip_WA 98070 -353819.063160
statezip_WA 98004 589945.748620
waterfront 621313.209967
statezip_WA 98039 816056.566554