preloader

SVM - Práctica de regresión con SVR

Índice de contenido
python
import pandas as pd
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV, train_test_split
python
df = pd.read_csv("C:/Users/user/Desktop/energydata_complete.csv", parse_dates = ["date"], infer_datetime_format =True)
df

dateApplianceslightsT1RH_1T2RH_2T3RH_3T4...T9RH_9T_outPress_mm_hgRH_outWindspeedVisibilityTdewpointrv1rv2
02016-01-11 17:00:00603019.89000047.59666719.20000044.79000019.79000044.73000019.000000...17.03333345.53006.600000733.592.0000007.00000063.0000005.30000013.27543313.275433
12016-01-11 17:10:00603019.89000046.69333319.20000044.72250019.79000044.79000019.000000...17.06666745.56006.483333733.692.0000006.66666759.1666675.20000018.60619518.606195
22016-01-11 17:20:00503019.89000046.30000019.20000044.62666719.79000044.93333318.926667...17.00000045.50006.366667733.792.0000006.33333355.3333335.10000028.64266828.642668
32016-01-11 17:30:00504019.89000046.06666719.20000044.59000019.79000045.00000018.890000...17.00000045.40006.250000733.892.0000006.00000051.5000005.00000045.41038945.410389
42016-01-11 17:40:00604019.89000046.33333319.20000044.53000019.79000045.00000018.890000...17.00000045.40006.133333733.992.0000005.66666747.6666674.90000010.08409710.084097
..................................................................
197302016-05-27 17:20:00100025.56666746.56000025.89000042.02571427.20000041.16333324.700000...23.20000046.790022.733333755.255.6666673.33333323.66666713.33333343.09681243.096812
197312016-05-27 17:30:0090025.50000046.50000025.75400042.08000027.13333341.22333324.700000...23.20000046.790022.600000755.256.0000003.50000024.50000013.30000049.28294049.282940
197322016-05-27 17:40:002701025.50000046.59666725.62857142.76857127.05000041.69000024.700000...23.20000046.790022.466667755.256.3333333.66666725.33333313.26666729.19911729.199117
197332016-05-27 17:50:004201025.50000046.99000025.41400043.03600026.89000041.29000024.700000...23.20000046.817522.333333755.256.6666673.83333326.16666713.2333336.3227846.322784
197342016-05-27 18:00:004301025.50000046.60000025.26428642.97142926.82333341.15666724.700000...23.20000046.845022.200000755.257.0000004.00000027.00000013.20000034.11885134.118851

19735 rows × 29 columns

python
df.set_index("date", inplace=True)
python
df

ApplianceslightsT1RH_1T2RH_2T3RH_3T4RH_4...T9RH_9T_outPress_mm_hgRH_outWindspeedVisibilityTdewpointrv1rv2
date
2016-01-11 17:00:00603019.89000047.59666719.20000044.79000019.79000044.73000019.00000045.566667...17.03333345.53006.600000733.592.0000007.00000063.0000005.30000013.27543313.275433
2016-01-11 17:10:00603019.89000046.69333319.20000044.72250019.79000044.79000019.00000045.992500...17.06666745.56006.483333733.692.0000006.66666759.1666675.20000018.60619518.606195
2016-01-11 17:20:00503019.89000046.30000019.20000044.62666719.79000044.93333318.92666745.890000...17.00000045.50006.366667733.792.0000006.33333355.3333335.10000028.64266828.642668
2016-01-11 17:30:00504019.89000046.06666719.20000044.59000019.79000045.00000018.89000045.723333...17.00000045.40006.250000733.892.0000006.00000051.5000005.00000045.41038945.410389
2016-01-11 17:40:00604019.89000046.33333319.20000044.53000019.79000045.00000018.89000045.530000...17.00000045.40006.133333733.992.0000005.66666747.6666674.90000010.08409710.084097
..................................................................
2016-05-27 17:20:00100025.56666746.56000025.89000042.02571427.20000041.16333324.70000045.590000...23.20000046.790022.733333755.255.6666673.33333323.66666713.33333343.09681243.096812
2016-05-27 17:30:0090025.50000046.50000025.75400042.08000027.13333341.22333324.70000045.590000...23.20000046.790022.600000755.256.0000003.50000024.50000013.30000049.28294049.282940
2016-05-27 17:40:002701025.50000046.59666725.62857142.76857127.05000041.69000024.70000045.730000...23.20000046.790022.466667755.256.3333333.66666725.33333313.26666729.19911729.199117
2016-05-27 17:50:004201025.50000046.99000025.41400043.03600026.89000041.29000024.70000045.790000...23.20000046.817522.333333755.256.6666673.83333326.16666713.2333336.3227846.322784
2016-05-27 18:00:004301025.50000046.60000025.26428642.97142926.82333341.15666724.70000045.963333...23.20000046.845022.200000755.257.0000004.00000027.00000013.20000034.11885134.118851

19735 rows × 28 columns

python
df.dtypes
date           datetime64[ns]
Appliances              int64
lights                  int64
T1                    float64
RH_1                  float64
T2                    float64
RH_2                  float64
T3                    float64
RH_3                  float64
T4                    float64
RH_4                  float64
T5                    float64
RH_5                  float64
T6                    float64
RH_6                  float64
T7                    float64
RH_7                  float64
T8                    float64
RH_8                  float64
T9                    float64
RH_9                  float64
T_out                 float64
Press_mm_hg           float64
RH_out                float64
Windspeed             float64
Visibility            float64
Tdewpoint             float64
rv1                   float64
rv2                   float64
dtype: object
python
regressor = SVR()
python
y = df.Appliances
python
X = df.drop("Appliances", axis=1)
python
X.columns
Index(['lights', 'T1', 'RH_1', 'T2', 'RH_2', 'T3', 'RH_3', 'T4', 'RH_4', 'T5',
       'RH_5', 'T6', 'RH_6', 'T7', 'RH_7', 'T8', 'RH_8', 'T9', 'RH_9', 'T_out',
       'Press_mm_hg', 'RH_out', 'Windspeed', 'Visibility', 'Tdewpoint', 'rv1',
       'rv2'],
      dtype='object')
python
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    random_state = 42,
                                                   test_size = 0.15)
python
paramgrid = {"kernel": ["linear", "poly", "rbf", "sigmoid"],
            "C": [0.2, 0.4, 0.6, 0.8, 1]}
python
gs = GridSearchCV(estimator = regressor,
                 param_grid = paramgrid,
                 scoring = None,
                 cv = None,
                 refit = True)
python
gs.fit(X_train, y_train)
GridSearchCV(estimator=SVR(),
             param_grid={'C': [0.2, 0.4, 0.6, 0.8, 1],
                         'kernel': ['linear', 'poly', 'rbf', 'sigmoid']})
python
pd.DataFrame(gs.cv_results_)

mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_Cparam_kernelparamssplit0_test_scoresplit1_test_scoresplit2_test_scoresplit3_test_scoresplit4_test_scoremean_test_scorestd_test_scorerank_test_score
040.7525311.3521082.3739360.1405720.2linear{'C': 0.2, 'kernel': 'linear'}0.0196530.0102380.0332270.0432150.0346250.0281920.0117285
118.3264480.8669182.4137380.1291360.2poly{'C': 0.2, 'kernel': 'poly'}-0.118780-0.115594-0.115704-0.108767-0.113247-0.1144190.00332813
219.7819310.3127702.7949600.0192610.2rbf{'C': 0.2, 'kernel': 'rbf'}-0.129083-0.125228-0.126925-0.118871-0.123578-0.1247370.00345515
321.6036360.0725453.5870050.0177820.2sigmoid{'C': 0.2, 'kernel': 'sigmoid'}-0.137131-0.132830-0.135788-0.127274-0.131937-0.1329920.00342920
441.4147690.5528101.6928970.1276140.4linear{'C': 0.4, 'kernel': 'linear'}0.0207790.0112670.0342620.0442830.0364740.0294130.0118184
518.1660391.0242262.3795360.0712290.4poly{'C': 0.4, 'kernel': 'poly'}-0.111933-0.109167-0.108241-0.102607-0.106765-0.1077430.00307110
623.9863720.5143233.4693980.0448690.4rbf{'C': 0.4, 'kernel': 'rbf'}-0.119906-0.116396-0.116779-0.109390-0.113987-0.1152920.00350014
724.2089851.3288533.9542260.3279620.4sigmoid{'C': 0.4, 'kernel': 'sigmoid'}-0.135667-0.131464-0.134193-0.125775-0.130426-0.1315050.00342219
855.2595610.9890181.6740960.0344290.6linear{'C': 0.6, 'kernel': 'linear'}0.0216430.0117050.0350390.0452990.0368300.0301030.0119213
916.3571360.9879402.1385220.3344830.6poly{'C': 0.6, 'kernel': 'poly'}-0.107240-0.104847-0.102930-0.098082-0.102331-0.1030860.0030338
1019.8067330.1466112.8201610.0098800.6rbf{'C': 0.6, 'kernel': 'rbf'}-0.115550-0.112441-0.111675-0.105857-0.109917-0.1110880.00318812
1122.3744800.0948183.7434140.0300380.6sigmoid{'C': 0.6, 'kernel': 'sigmoid'}-0.134220-0.130056-0.132545-0.124174-0.128895-0.1299780.00344818
1264.5842940.9532691.6512940.0146350.8linear{'C': 0.8, 'kernel': 'linear'}0.0218940.0115500.0350230.0462480.0380900.0305610.0123232
1315.3592780.2167401.9537120.0138080.8poly{'C': 0.8, 'kernel': 'poly'}-0.103437-0.101485-0.098904-0.094132-0.098330-0.0992580.0031527
1419.6791260.0995042.8115610.0120940.8rbf{'C': 0.8, 'kernel': 'rbf'}-0.112886-0.109904-0.109041-0.103642-0.107450-0.1085850.00303911
1522.3780800.0702873.7658150.0184360.8sigmoid{'C': 0.8, 'kernel': 'sigmoid'}-0.132739-0.128607-0.130842-0.122580-0.127290-0.1284110.00346217
1675.4411152.2131221.7388990.1917931linear{'C': 1, 'kernel': 'linear'}0.0218460.0117440.0352270.0466980.0381770.0307390.0124101
1715.2530720.1427321.9809130.1024271poly{'C': 1, 'kernel': 'poly'}-0.100448-0.098625-0.095828-0.090579-0.095173-0.0961300.0033676
1819.5781200.0750162.7997600.0249941rbf{'C': 1, 'kernel': 'rbf'}-0.110324-0.107222-0.106138-0.100981-0.104646-0.1058620.0030709
1922.3986810.1089513.7976170.0557371sigmoid{'C': 1, 'kernel': 'sigmoid'}-0.131244-0.127154-0.129186-0.121045-0.125743-0.1268750.00345816
python
gs.best_params_
{'C': 1, 'kernel': 'linear'}
python
gs.best_score_
0.0307386556178449
python
best_model = gs.best_estimator_
python
y_pred = best_model.predict(X_test)
python
pd.DataFrame({"y_test": y_test, "y_pred": y_pred})

y_testy_pred
date
2016-03-14 01:40:004047.425845
2016-01-30 20:00:0090144.780909
2016-03-15 03:00:005043.357670
2016-04-20 10:10:005072.324751
2016-03-13 08:10:007040.150215
.........
2016-04-25 13:30:005082.308629
2016-04-09 07:20:003052.122389
2016-02-12 05:40:006048.252534
2016-05-01 06:10:006058.874192
2016-04-07 16:00:005079.774316

2961 rows × 2 columns

python
best_model.score(X_test, y_test)
0.05339127348678119
python
best_model.get_params()
{'C': 1,
 'cache_size': 200,
 'coef0': 0.0,
 'degree': 3,
 'epsilon': 0.1,
 'gamma': 'scale',
 'kernel': 'linear',
 'max_iter': -1,
 'shrinking': True,
 'tol': 0.001,
 'verbose': False}
comments powered by Disqus