MLRegression, Fitting, Backward Elimination

Kategori: Machine Learning , 27 Kasım 2019 , JanFranco


Bir önceki yazımızda verileri preprocessing işleminden geçirmiştik. Şimdi modeli oluşturup, verileri fit edip, test edeceğiz. Ayrıca backward elimination ile başarıyı artırmayı deneyeceğiz. Bir önceki yazımızdaki kodların üstüne ilave olarak, kütüphaneleri alalım:


import statsmodels.api as sm
from sklearn.linear_model import LinearRegression
Modeli oluşturalım, fit ve test işlemlerini gerçekleştirelim:


reg = LinearRegression()
reg.fit(x_train, y_train)
y_predict = reg.predict(x_test)
print(y_predict)

>>

[[182.25496542]
 [153.60175918]
 [163.03243328]
 [158.79170543]
 [130.88751593]
 [173.75783348]
 [150.54725552]
 [157.27677179]]
Verilerimizde bazı sütunlar, attribute'lar, öğrenmeyi olumsuz etkiliyor olabilir veya gereksiz de olabilir. Bunu bu attribute'ların p - değerlerine bakarak ölçebiliriz. Bunu statsmodels kütüphanesinin OLS methodu ile kolayca Python üzerinden yapalım:


x_l = df.iloc[:, [0, 1, 2, 3, 4, 5]].values
r_l = sm.OLS(height, x_l).fit()
print(r_l.summary())

>>

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 height   R-squared:                       0.886
Model:                            OLS   Adj. R-squared:                  0.850
Method:                 Least Squares   F-statistic:                     24.85
Date:                Fri, 12 Jul 2019   Prob (F-statistic):           5.17e-07
Time:                        16:22:28   Log-Likelihood:                -73.887
No. Observations:                  22   AIC:                             159.8
Df Residuals:                      16   BIC:                             166.3
Df Model:                           5                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
x1           103.1282      9.867     10.451      0.000      82.210     124.046
x2            97.6718      7.434     13.139      0.000      81.913     113.431
x3            93.6242     11.125      8.415      0.000      70.039     117.209
x4             0.9142      0.120      7.624      0.000       0.660       1.168
x5             0.1054      0.221      0.478      0.639      -0.362       0.573
x6            10.5082      5.005      2.099      0.052      -0.102      21.119
==============================================================================
Omnibus:                        1.129   Durbin-Watson:                   2.772
Prob(Omnibus):                  0.569   Jarque-Bera (JB):                0.679
Skew:                           0.426   Prob(JB):                        0.712
Kurtosis:                       2.878   Cond. No.                         675.
==============================================================================
Verilerin tamamını almamıza rağmen neden tek tek sütun girdik diye düşünebilirsiniz. Bunu bir sonraki aşamada kolay silebilelim diye yaptık. Backward algoritması, başarıyı artırmamızı hedefleyen bir algoritmadır ve bu algoritmaya göre her bir adımda p - değeri en yüksek attribute verikümesinden atılır. Buarada en yüksek p - değerine sahip attribute x5 yani age sütunudur. Veri kümesinden atalım ve tekrar deneyelim:


x_train = x_train.iloc[:, [0, 1, 2, 3, 5]]
x_test = x_test.iloc[:, [0, 1, 2, 3, 5]]

reg = LinearRegression()
reg.fit(x_train, y_train)
y_predict = reg.predict(x_test)
print(y_predict)

>>

[[181.89803222]
 [153.24827689]
 [160.08774579]
 [157.15654483]
 [131.11471282]
 [172.12736238]
 [148.36294197]
 [156.49429062]]
Bir sonraki en yüksek p - değerine sahip attribute x6 yani gender sütunudur. Atalım ve tekrar deneyelim. Bir önceki aşamada bir sütunu attığımız için sütun sayısı 5' e düştü. Yani 0, 1, 2, 3, 4. Burada son sütun gender sütunudur. 4 değerli indexe sahip sütunu attık:


x_train = x_train.iloc[:, [0, 1, 2, 3]]
x_test = x_test.iloc[:, [0, 1, 2, 3]]

reg = LinearRegression()
reg.fit(x_train, y_train)
y_predict = reg.predict(x_test)
print(y_predict)

>>

[[170.90273989]
 [150.39360044]
 [156.23302674]
 [153.73041546]
 [139.02382298]
 [162.56070232]
 [146.22258165]
 [149.2134422 ]]


Sonraki Yazı: Polynomial Regression
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın