El aprendizaje automático es un subconjunto de la inteligencia artificial que se centra en el desarrollo de software o programas informáticos que acceden a los datos para aprender por sí mismos y hacer predicciones, es decir, sin estar programados explícitamente. El aprendizaje automático consta de diferentes subpartes, es decir, aprendizaje no supervisado, aprendizaje supervisado y aprendizaje por refuerzo. Define problemas numéricos y problemas categóricos que ayudan en la construcción de modelos.
El lenguaje R se utiliza para el análisis estadístico y la informática utilizada por la mayoría de los investigadores de todo el mundo. R se está utilizando en la creación de modelos de aprendizaje automático debido a su flexibilidad, paquetes eficientes y la capacidad de realizar modelos de aprendizaje profundo con integración en la nube. Al ser un lenguaje de código abierto, todos los paquetes se publican en R con contribuciones de programadores de todo el mundo para que sea más fácil de usar. Los siguientes paquetes de R que se usan ampliamente en la industria son:
- tabla de datos
- dplyr
- ggplot2
- signo de intercalación
- e1071
- xgboost
- bosque aleatorio
tabla de datos
data.table proporciona una versión de alto rendimiento de data.frame de R con mejoras de características y sintaxis para facilitar el uso, usar la memoria eficientemente y tener muchas características. Proporciona un lector de archivos delimitados y un escritor de archivos rápidos y amigables. Es uno de los paquetes mejor calificados en Github. Proporciona paralelismo de bajo nivel, agregaciones escalables con uniones ricas en características y datos de remodelación ricos en características.
R
# Installing the package install.packages("data.table") # Loading package library(data.table) # Importing dataset Gov_mortage <- fread("Government_Mortage.csv") # Record with loan amount 114 # With country code 60 Answer <- Gov_mortage[loan_amount == 114 & county_code == 60] Answer
Producción:
row_id loan_type property_type loan_purpose occupancy loan_amount preapproval msa_md 1: 65 1 1 3 1 114 3 344 2: 1285 1 1 1 1 114 2 -1 3: 6748 1 1 3 1 114 3 309 4: 31396 1 1 1 1 114 1 333 5: 70311 1 1 1 1 114 3 309 6: 215535 1 1 3 1 114 3 365 7: 217264 1 1 1 2 114 3 333 8: 301947 1 1 3 1 114 3 48 state_code county_code applicant_ethnicity applicant_race applicant_sex 1: 9 60 2 5 1 2: 25 60 2 5 2 3: 47 60 2 5 2 4: 6 60 2 5 1 5: 47 60 2 5 2 6: 21 60 2 5 1 7: 6 60 2 5 1 8: 14 60 2 5 2 applicant_income population minority_population_pct ffiecmedian_family_income 1: 68 6355 14.844 61840 2: 57 1538 2.734 58558 3: 54 4084 5.329 76241 4: 116 5445 41.429 70519 5: 50 5214 3.141 74094 6: 57 6951 4.219 56341 7: 37 2416 18.382 70031 8: 35 3159 8.533 56335 tract_to_msa_md_income_pct number_of_owner-occupied_units 1: 100.000 1493 2: 100.000 561 3: 100.000 1359 4: 100.000 1522 5: 100.000 1694 6: 97.845 2134 7: 65.868 905 8: 100.000 1080 number_of_1_to_4_family_units lender co_applicant 1: 2202 3507 TRUE 2: 694 6325 FALSE 3: 1561 3549 FALSE 4: 1730 2111 TRUE 5: 2153 3229 FALSE 6: 2993 1574 TRUE 7: 3308 3110 FALSE 8: 1492 6314 FALSE
Dplyr
Dplyr es un paquete de manipulación de datos ampliamente utilizado en la industria. Consta de cinco funciones clave de manipulación de datos, también conocidas como verbos, es decir, seleccionar, filtrar, organizar, mutar y resumir.
R
# Installing the package install.packages("dplyr") # Loading package library(dplyr) # Importing dataset Gov_mortage <- fread("Government_Mortage.csv") # Select select(Gov_mortage, state_code) # Mutate m <- mutate(Gov_mortage, amount = loan_amount - applicant_income) m # Filter f = filter(Gov_mortage, county_code == 80) f # Arrange arrange(Gov_mortage, county_code == 80) # Summarize summarise(f, max_loan = max(loan_amount))
Producción:
# Filter row_id loan_type property_type loan_purpose occupancy loan_amount preapproval msa_md 1 16 1 1 3 2 177 3 333 2 25 1 1 3 1 292 3 333 3 585 1 1 3 1 134 3 333 4 1033 1 1 1 1 349 2 333 5 1120 1 1 1 1 109 3 333 6 1303 1 1 3 2 166 3 333 7 1758 1 1 2 1 45 3 333 8 2053 3 1 1 1 267 3 333 9 3305 1 1 3 1 392 3 333 10 3555 1 1 3 1 98 3 333 11 3769 1 1 3 1 288 3 333 12 3807 1 1 1 1 185 3 333 13 3840 1 1 3 1 280 3 333 14 5356 1 1 3 1 123 3 333 15 5604 2 1 1 1 191 1 333 16 6294 1 1 2 1 102 3 333 17 7631 3 1 3 1 107 3 333 18 8222 2 1 3 1 62 3 333 19 9335 1 1 3 1 113 3 333 20 10137 1 1 1 1 204 3 333 21 10387 3 1 1 1 434 2 333 22 10601 2 1 1 1 299 2 333 23 13076 1 1 1 1 586 3 333 24 13763 1 1 3 1 29 3 333 25 13769 3 1 1 1 262 3 333 26 13818 2 1 1 1 233 3 333 27 14102 1 1 3 1 130 3 333 28 14196 1 1 2 1 3 3 333 29 15569 1 1 1 1 536 2 333 30 15863 1 1 1 1 20 3 333 31 16184 1 1 3 1 755 3 333 32 16296 1 1 1 2 123 2 333 33 16328 1 1 3 1 153 3 333 34 16486 3 1 3 1 95 3 333 35 16684 1 1 2 1 26 3 333 36 16922 1 1 1 1 160 2 333 37 17470 1 1 3 1 174 3 333 38 18336 1 2 1 1 37 3 333 39 18586 1 2 1 1 114 3 333 40 19249 1 1 3 1 422 3 333 41 19405 1 1 1 1 288 2 333 42 19421 1 1 2 1 301 3 333 43 20125 1 1 3 1 449 3 333 44 20388 1 1 1 1 494 3 333 45 21434 1 1 3 1 251 3 333 state_code county_code applicant_ethnicity applicant_race applicant_sex 1 6 80 1 5 2 2 6 80 2 3 2 3 6 80 2 5 2 4 6 80 3 6 1 5 6 80 2 5 2 6 6 80 1 5 1 7 6 80 2 5 1 8 6 80 1 5 2 9 6 80 2 5 1 10 6 80 2 5 1 11 6 80 2 5 1 12 6 80 1 5 1 13 6 80 1 5 1 14 6 80 1 5 1 15 6 80 2 5 1 16 6 80 2 5 1 17 6 80 3 6 3 18 6 80 2 5 1 19 6 80 2 5 2 20 6 80 2 5 1 21 6 80 2 5 1 22 6 80 2 5 1 23 6 80 3 6 3 24 6 80 2 5 2 25 6 80 2 5 1 26 6 80 2 5 1 27 6 80 2 5 2 28 6 80 1 6 1 29 6 80 2 5 1 30 6 80 2 5 1 31 6 80 2 5 1 32 6 80 2 5 2 33 6 80 1 5 1 34 6 80 2 5 1 35 6 80 2 5 1 36 6 80 2 5 2 37 6 80 2 5 1 38 6 80 1 5 1 39 6 80 1 5 1 40 6 80 1 5 1 41 6 80 2 2 1 42 6 80 2 5 1 43 6 80 2 5 1 44 6 80 2 5 1 45 6 80 2 5 1 applicant_income population minority_population_pct ffiecmedian_family_income 1 NA 6420 29.818 68065 2 99 4346 16.489 70745 3 46 6782 20.265 69818 4 236 9813 15.168 69691 5 49 5854 35.968 70555 6 148 4234 19.864 72156 7 231 5699 17.130 71892 8 48 6537 13.024 71562 9 219 18911 26.595 69795 10 71 8454 17.436 68727 11 94 6304 13.490 69181 12 78 9451 14.684 69337 13 74 15540 43.148 70000 14 54 16183 42.388 70862 15 73 11198 40.481 70039 16 199 12133 10.971 70023 17 43 10712 33.973 68117 18 115 8759 17.669 70526 19 59 24887 32.833 71510 20 135 25252 31.854 69602 21 108 6507 13.613 70267 22 191 9261 22.583 71505 23 430 7943 19.990 70801 24 206 7193 18.002 69973 25 150 7413 14.092 68202 26 94 7611 14.618 71260 27 81 10946 34.220 70386 28 64 10438 36.395 70141 29 387 8258 20.666 69409 30 80 7525 26.604 70104 31 NA 4525 20.299 71947 32 40 8397 32.542 68087 33 87 20083 19.750 69893 34 96 20539 19.673 72152 35 45 10497 12.920 70134 36 54 15686 26.071 70890 37 119 7558 14.710 69052 38 62 25960 32.858 68061 39 18 5790 39.450 68878 40 103 18086 26.099 69925 41 70 8689 31.467 70794 42 38 3923 30.206 68821 43 183 6522 13.795 69779 44 169 18459 26.874 69392 45 140 15954 25.330 71096 tract_to_msa_md_income_pct number_of_owner-occupied_units 1 100.000 1553 2 100.000 1198 3 100.000 1910 4 100.000 2351 5 100.000 1463 6 100.000 1276 7 100.000 1467 8 100.000 1766 9 100.000 4316 10 90.071 2324 11 100.000 1784 12 100.000 2357 13 100.000 3252 14 100.000 3319 15 79.049 2438 16 100.000 3639 17 100.000 2612 18 87.201 2345 19 100.000 6713 20 100.000 6987 21 100.000 1788 22 91.023 2349 23 100.000 1997 24 100.000 2012 25 100.000 2359 26 100.000 2304 27 100.000 2674 28 80.957 2023 29 100.000 2034 30 100.000 2343 31 77.707 1059 32 100.000 1546 33 100.000 5929 34 100.000 6017 35 100.000 3542 36 100.000 4277 37 100.000 2316 38 100.000 6989 39 56.933 1021 40 100.000 4183 41 100.000 1540 42 100.000 882 43 100.000 1774 44 100.000 4417 45 100.000 4169 number_of_1_to_4_family_units lender co_applicant 1 2001 3354 FALSE 2 1349 2458 FALSE 3 2326 4129 FALSE 4 2928 4701 TRUE 5 1914 2134 FALSE 6 1638 5710 FALSE 7 1670 3110 FALSE 8 1926 3080 TRUE 9 5241 5710 TRUE 10 3121 5710 FALSE 11 1953 933 FALSE 12 2989 186 TRUE 13 4482 2134 TRUE 14 4380 5339 TRUE 15 3495 5267 TRUE 16 4875 1831 TRUE 17 3220 5710 FALSE 18 3024 3885 TRUE 19 7980 2458 FALSE 20 7949 6240 TRUE 21 2015 542 TRUE 22 3215 2702 TRUE 23 2361 3216 FALSE 24 2482 6240 FALSE 25 2597 3970 TRUE 26 2503 3264 FALSE 27 3226 2570 TRUE 28 3044 6240 FALSE 29 2423 1928 TRUE 30 2659 5738 FALSE 31 1544 2458 FALSE 32 2316 3950 FALSE 33 7105 3143 FALSE 34 7191 4701 FALSE 35 4325 5339 FALSE 36 5188 2702 FALSE 37 2531 2458 TRUE 38 7976 2318 TRUE 39 1755 5026 FALSE 40 5159 4931 TRUE 41 2337 2352 FALSE 42 1317 2458 FALSE 43 1949 5726 FALSE 44 5055 5316 TRUE 45 5197 5726 FALSE [ reached 'max' / getOption("max.print") -- omitted 1034 rows ] #
ggplot2
ggplot2 , también denominado Grammar of Graphics , es un paquete de visualización gratuito, de código abierto y fácil de usar ampliamente utilizado en R. Es el paquete de visualización más poderoso escrito por Hadley Wickham.
R
# Installing the package install.packages("dplyr") install.packages("ggplot2") # Loading packages library(dplyr) library(ggplot2) # Data Layer ggplot(data = mtcars) # Aesthetic Layer ggplot(data = mtcars, aes(x = hp, y = mpg, col = disp)) # Geometric layer ggplot(data = mtcars, aes(x = hp, y = mpg, col = disp)) + geom_point()
Producción:
- Capa geométrica:
- Capa geométrica – Agregar tamaño:
signo de intercalación
El símbolo de intercalación denominado Entrenamiento de clasificación y regresión utiliza muchas funciones para entrenar y trazar modelos de clasificación y regresión. Es uno de los paquetes más utilizados entre los desarrolladores de R y en varios concursos de aprendizaje automático.
R
# Installing Packages install.packages("e1071") install.packages("caTools") install.packages("caret") # Loading package library(e1071) library(caTools) library(caret) # Loading data data(iris) # Splitting data into train # and test data split <- sample.split(iris, SplitRatio = 0.7) train_cl <- subset(iris, split == "TRUE") test_cl <- subset(iris, split == "FALSE") # Feature Scaling train_scale <- scale(train_cl[, 1:4]) test_scale <- scale(test_cl[, 1:4]) # Fitting Naive Bayes Model # to training dataset set.seed(120) # Setting Seed classifier_cl <- naiveBayes(Species ~ ., data = train_cl) classifier_cl # Predicting on test data' y_pred <- predict(classifier_cl, newdata = test_cl) # Confusion Matrix cm <- table(test_cl$Species, y_pred) cm
Producción:
- Modelo clasificador_cl:
- Array de confusión:
e1071
El paquete e1071 se usa para realizar algoritmos de agrupamiento, máquinas de vectores de soporte (SVM), cálculos de ruta más corta, algoritmos de agrupamiento en bolsas, algoritmo K-NN, etc. Principalmente, se usa para realizar un algoritmo K-NN. que depende de su valor k (vecinos) y encuentra sus aplicaciones en muchas industrias, como la industria financiera, la industria de la salud, etc. K-Nearest Neighbor o K-NN es un algoritmo de clasificación no lineal supervisado. K-NN es un algoritmo no paramétrico, es decir, no hace ninguna suposición sobre los datos subyacentes o su distribución.
R
# Installing Packages install.packages("e1071") install.packages("caTools") install.packages("class") # Loading package library(e1071) library(caTools) library(class) # Loading data data(iris) # Splitting data into train # and test data split <- sample.split(iris, SplitRatio = 0.7) train_cl <- subset(iris, split == "TRUE") test_cl <- subset(iris, split == "FALSE") # Feature Scaling train_scale <- scale(train_cl[, 1:4]) test_scale <- scale(test_cl[, 1:4]) # Fitting KNN Model # to training dataset classifier_knn <- knn(train = train_scale, test = test_scale, cl = train_cl$Species, k = 1) classifier_knn # Confusiin Matrix cm <- table(test_cl$Species, classifier_knn) cm # Model Evaluation - Choosing K # Calculate out of Sample error misClassError <- mean(classifier_knn != test_cl$Species) print(paste('Accuracy =', 1 - misClassError))
Salidas:
- Modelo clasificador_knn(k=1):
- Array de confusión:
- Evaluación del modelo (k=1):
XGBoost
XGBoost funciona solo con variables numéricas. Es una parte de la técnica boosting en la que la selección de la muestra se hace de forma más inteligente para clasificar las observaciones. Hay interfaces de XGBoost en C++, R, Python, Julia, Java y Scala. Consiste en técnicas de Bagging y Boosting . El conjunto de datos usó BigMart .
R
# Installing Packages install.packages("data.table") install.packages("dplyr") install.packages("ggplot2") install.packages("caret") install.packages("xgboost") install.packages("e1071") install.packages("cowplot") # Loading packages library(data.table) # for reading and manipulation of data library(dplyr) # for data manipulation and joining library(ggplot2) # for ploting library(caret) # for modeling library(xgboost) # for building XGBoost model library(e1071) # for skewness library(cowplot) # for combining multiple plots # Setting test dataset # Combining datasets # add Item_Outlet_Sales to test data test[, Item_Outlet_Sales := NA] combi = rbind(train, test) # Missing Value Treatment missing_index = which(is.na(combi$Item_Weight)) for(i in missing_index){ item = combi$Item_Identifier[i] combi$Item_Weight[i] = mean(combi$Item_Weight [combi$Item_Identifier == item], na.rm = T) } # Replacing 0 in Item_Visibility with mean zero_index = which(combi$Item_Visibility == 0) for(i in zero_index){ item = combi$Item_Identifier[i] combi$Item_Visibility[i] = mean( combi$Item_Visibility[combi$Item_Identifier == item], na.rm = T) } # Label Encoding # To convert categorical in numerical combi[, Outlet_Size_num := ifelse(Outlet_Size == "Small", 0, ifelse(Outlet_Size == "Medium", 1, 2))] combi[, Outlet_Location_Type_num := ifelse(Outlet_Location_Type == "Tier 3", 0, ifelse(Outlet_Location_Type == "Tier 2", 1, 2))] combi[, c("Outlet_Size", "Outlet_Location_Type") := NULL] # One Hot Encoding # To convert categorical in numerical ohe_1 = dummyVars("~.", data = combi[, -c("Item_Identifier", "Outlet_Establishment_Year", "Item_Type")], fullRank = T) ohe_df = data.table(predict(ohe_1, combi[, -c("Item_Identifier", "Outlet_Establishment_Year", "Item_Type")])) combi = cbind(combi[, "Item_Identifier"], ohe_df) # Remove skewness skewness(combi$Item_Visibility) skewness(combi$price_per_unit_wt) # log + 1 to avoid division by zero combi[, Item_Visibility := log(Item_Visibility + 1)] # Scaling and Centering data # index of numeric features num_vars = which(sapply(combi, is.numeric)) num_vars_names = names(num_vars) combi_numeric = combi[, setdiff(num_vars_names, "Item_Outlet_Sales"), with = F] prep_num = preProcess(combi_numeric, method = c("center", "scale")) combi_numeric_norm = predict(prep_num, combi_numeric) # removing numeric independent variables combi[, setdiff(num_vars_names, "Item_Outlet_Sales") := NULL] combi = cbind(combi, combi_numeric_norm) # Splitting data back to train and test train = combi[1:nrow(train)] test = combi[(nrow(train) + 1):nrow(combi)] # Removing Item_Outlet_Sales test[, Item_Outlet_Sales := NULL] # Model Building: XGBoost param_list = list( objective = "reg:linear", eta = 0.01, gamma = 1, max_depth = 6, subsample = 0.8, colsample_bytree = 0.5 ) # Converting train and test into xgb.DMatrix format Dtrain = xgb.DMatrix( data = as.matrix(train[, -c("Item_Identifier", "Item_Outlet_Sales")]), label = train$Item_Outlet_Sales) Dtest = xgb.DMatrix( data = as.matrix(test[, -c("Item_Identifier")])) # 5-fold cross-validation to # find optimal value of nrounds set.seed(112) # Setting seed xgbcv = xgb.cv(params = param_list, data = Dtrain, nrounds = 1000, nfold = 5, print_every_n = 10, early_stopping_rounds = 30, maximize = F) # Training XGBoost model at nrounds = 428 xgb_model = xgb.train(data = Dtrain, params = param_list, nrounds = 428) xgb_model
Producción:
- Entrenamiento del modelo Xgboost:
- Modelo xgb_modelo:
bosque aleatorio
Random Forest en R Programming es un conjunto de árboles de decisión. Construye y combina múltiples árboles de decisión para obtener predicciones más precisas. Es un algoritmo de clasificación no lineal. Cada modelo de árbol de decisión se utiliza cuando se emplea por sí solo. Se realiza una estimación de errores de casos que no se utiliza al construir el árbol. Esto se denomina estimación de error fuera de la bolsa y se menciona como un porcentaje.
R
# Installing package # For sampling the dataset install.packages("caTools") # For implementing random forest algorithm install.packages("randomForest") # Loading package library(caTools) library(randomForest) # Loading data data(iris) # Splitting data in train and test data split <- sample.split(iris, SplitRatio = 0.7) split train <- subset(iris, split == "TRUE") test <- subset(iris, split == "FALSE") # Fitting Random Forest to the train dataset set.seed(120) # Setting seed classifier_RF = randomForest(x = train[-5], y = train$Species, ntree = 500) classifier_RF # Predicting the Test set results y_pred = predict(classifier_RF, newdata = test[-5]) # Confusion Matrix confusion_mtx = table(test[, 5], y_pred) confusion_mtx
Salidas:
- Clasificador de modelo_RF:
- Array de confusión: