A continuación, en este artículo realizaremos un ejemplo realista en regresión. Para ello utilizaremos el dataset de House Sales.
Ejemplo realista en regresión
#Ejemplo realista en regresión
#cargamos datos
house_data = pd.read_csv ("./data/kc_house_data.csv") # cargamos fichero
#Eliminamos las columnas id y date
house_data = house_data.drop (['id', 'date'], axis = 1)
#convertir las variables en pies al cuadrado en metros al cuadrado
feetFeatures = ['sqft_living', 'sqft_lot', 'sqft_above', 'sqft_basement', 'sqft_living15', 'sqft_lot15']
house_data [feetFeatures] = house data [feetFeatures].apply (Lambda x: x = 0.30489.3048)
#Ejemplo realista en regresión
#renombranos
house_data.columns = ['price', 'bedrooms', 'bathrooms', 'sqm_living', 'sqm_lot', 'floors', 'waterfront', 'view', 'condition', 'grade', 'sqm_above', 'sqm_basement', 'yr_built', 'yr_renovated', 'zip_code', 'lat', 'long', 'sqm_living15', 'sqm_lot15']
#convertimos el DataFrame at formato necesario para scikit-Learn
data = house_data.values
y = data [ : , 0] #nos quedamos con la 1 columna, price
X = data [ : , 1 : ] #nos quedamos con el resto
Lo que haremos aquí es dividir los datos entre train y test.
#Ejemplo realista en regresión
from sklearn import preprocessing
#paso 1
X_train, X test, y train, y test = train_test_split (x, np.log10 (y), test_size = .25, random_state = 2)
print ('Datos entrenamiento: ' X_train.shape)
print ('Datos test: ' X_test.shape)
scaler = preprocessing.Standardscaler ().fit (X_train)
XtrainScaled = scaler.transform (X_train)
XtestScaled = scaler.transform (X_test)
Datos entrenamiento: (16209, 18)
Datos test: (5404, 18)
Posteriormente, hacemos un barrido. Lo haremos con pocos parámetros de C y G.
Si nos fijamos, el C máximo es 102. En un problema anterior hemos puesto un C de 4, eran 700 datos; aquí, como son 16 mil, incluso con un C que no es tan alto, ha tardado un buen rato (30 segundos).
Debemos tener esto en cuenta, no solo para Support Vector Machines, sino también para modelos con datasets muy grandes. Si a ello le sumamos el hecho de que los datasets pueden tornarse complejos, este será un proceso que dure varias horas.
Si trabajamos con backend, no habrá ningún problema, porque se realizarán las operaciones en tiempo real. Pero si este no es tu caso y necesitas trabajar con datos, debes tener en cuenta que va a tardar el tiempo de respuesta, así que tienes que presupuestar esto en tus análisis.
Cuando tenemos datasets muy grandes, no se trabaja con el dataset real, sino que se hace un subset de ese dataset y se trabaja con, por ejemplo, el 10 o el 20% del conjunto de datos original, como si fuera el real.
Esto es útil porque, si imaginamos que tenemos un dataset de 200 mil registros, sería muy difícil trabajar con una cantidad de datos tan grande, ya que tardaríamos días o incluso semanas y meses. Por tanto, en este caso resulta bastante útil trabajar solo con un subconjunto de todo el dataset global.
#Ejemplo realista en regresión
from sklearn.svm import SVR
# Paso 2:
vectorC = np.logspace (-2, 2, 10)
vectorG = np.logspace (-5, 1, 8)
param_grid = {'C': vectorC, gamma vectorG)
grid = GridSearchCV (SVR (kernel = 'rbf'), param_grid = param_grid, cv = 5, verbose = 1)
grid.fit (XtrainScaled, y_train)
Fitting 5 folds for each of 80 candidates, totalling 400 fits
[Parallel (n jobs = 1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel (n_jobs = 1)]: Done 400 out of 400 l elapsed: 30.2 min finished
GridSearchCV (cv = 5, error_score = nan, estimator = SVR (C = 1.0, cache_size = 200, coef0 = 0.0, degree = 3, epsilon = 0.1, gamma = ‘scale’, kernel = ‘rbf’, max_iter = -1, shrinking = True, tol = 0.001, verbose=False), iid = ‘deprecated”, n_jobs = None, param_grid = {‘C’: array ([1.00000000 e – 02, 2.78255940 e – 02, 7.74263683 e – 02, 2.15443469 e – 01, 5.99484250 e – 81, 1.66810054 e + 00, 4.64158883 e + 00, 1.29154967 e + 01, 3.59381366 e + 01, 1.00000000 e + 02]), gamma: array ([1.00000000 e – 05, 7.19685673 e – 05, 5.17947468 e – 84, 3.72759372 e – 03, 2.68269588 e – 02, 1.93069773 e – 01, 1.38949549 e + 00, 1.00000000 e + 01])) pre dispatch = ‘2* n_jobs’, refit = True, return_train_score = False, scoring = None, verbose = 1)
#Ejemplo realista en regresión
print ("best mean cross - validation score: {: .3f}".format (grid.best_score_))
print ("best parameters: {}".format (grid.best_params_))
#Mostramos prestaciones en CV
scores = grid.cv_results_ ['mean_test_score'].reshape (len (vectorC), len (vectorG))
#Ejemplo realista en regresión
plt.figure (figsize = (10, 6))
plt.imshow (scores, interpolation = 'nearest', vmin = 0.6, vmax = 0.9)
plt.xlabel ('log (gamma)')
plt.ylabel ("log (C)")
plt.colorbar ()
plt.xticks (np.arange (len (vectorG)), np.log10 (vectorG), rotation = 90)
plt.yticks (np.arange (len (vectorC)), np.log10 (vectorC))
plt.title ('5 - fold accuracy')
plt.show ()
best mean cros – validation score: 0.857
best parameters: {‘C’: 4.6415888336227775, ‘gamma’: 0.026826957952797246}
Como hemos visto, este ejemplo realista en regresión es muy útil para resolver algunas dudas acerca del machine learning y su funcionamiento. Si te interesa el tema y quieres seguir aprendiendo sobre una de las disciplinas mejor pagadas de la actualidad, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Se trata de formación intensiva en la que adquirirás todos los conocimientos teóricos y prácticos que te permitirán incursionar en el mundo IT de manera óptima. ¡Anímate a cambiar tu futuro y solicita más información!