Implementieren Sie maschinelles Lernen mit Caret in R

Teilen auf Facebook
Teilen auf twittern
Teilen auf verlinktin
Teilen auf Telegramm
Teilen auf WhatsApp

Inhalt

Einführung

Eine der größten Herausforderungen für Anfänger des maschinellen Lernens besteht darin, welche Algorithmen sie lernen und worauf sie sich konzentrieren müssen.. Im Fall von R, das Problem wird dadurch verschärft, dass verschiedene Algorithmen unterschiedliche Syntax haben, unterschiedliche Parameter zum Einstellen und unterschiedliche Anforderungen an das Datenformat. Das könnte für einen Anfänger zu viel sein.

Dann, Wie können Sie vom Anfänger zum Datenwissenschaftler werden, indem Sie Hunderte von Modellen erstellen und diese stapeln?? Es gibt sicherlich keine Abkürzung, Aber was ich Ihnen heute sagen werde, wird es Ihnen ermöglichen, Hunderte von Modellen für maschinelles Lernen anzuwenden, ohne es zu müssen:

  • Merken Sie sich die unterschiedlichen Paketnamen für jeden Algorithmus.
  • Anwendungssyntax jedes Algorithmus.
  • Parameter zum Anpassen für jeden Algorithmus.

All dies war möglich dank der jahrelangen Bemühungen, die zurückgegangen sind CARET (Klassifikations- und Regressionstraining) Das ist möglicherweise das größte Projekt in R. Dieses Paket allein ist alles, was Sie wissen müssen, um fast jedes überwachte maschinelle Lernproblem zu lösen.. Bietet eine einheitliche Schnittstelle für verschiedene Machine-Learning-Algorithmen und standardisiert andere Aufgaben wie das Data-Slicing, Vorverarbeitung, Funktionsauswahl, die Schätzung der Bedeutung von Variablen, etc.

Für eine detaillierte Beschreibung der verschiedenen Funktionen von Caret, Sie können auf diesen Artikel verweisen.

Heute arbeiten wir an der Kreditvorhersageproblem III um Ihnen die Kraft des Caret-Pakets zu zeigen.

PD Während Caret die Arbeit definitiv ein wenig vereinfacht, Es kann nicht die harte Arbeit und Übung nehmen, die es braucht, um ein Meister des maschinellen Lernens zu werden.

Inhaltsverzeichnis

  1. Beginnend
  2. Vorverarbeitung mit Caret
  3. Teilen Sie die Daten mit Caret
  4. Funktionsauswahl mit Caret
  5. Trainingsmodelle mit Caret
  6. Parameter-Tuning mit Caret
  7. Schätzung der Wichtigkeit von Variablen mit Caret
  8. Machen Sie Vorhersagen mit Caret

1. Beginnend

In einer Nussschale, Caret ist im Wesentlichen ein Behälter für mehr als 200 Algorithmen für maschinelles Lernen. Was ist mehr, bietet mehrere Funktionen, die es zu einer umfassenden Lösung für alle Modellierungsanforderungen für überwachte maschinelle Lernprobleme machen.

Caret versucht zunächst nicht alle Pakete zu laden, von denen es abhängt. jedoch, lädt sie nur, wenn Pakete benötigt werden. Es wird jedoch davon ausgegangen, dass Sie bereits alle Algorithmen auf Ihrem System installiert haben.

So installieren Sie Caret auf Ihrem System, Verwenden Sie den folgenden Befehl. Notiz: es kann etwas dauern:

> install.packages("caret", dependencies = c("Depends", "Suggests"))

Jetzt, Beginnen wir mit der Verwendung des Kollationspakets in Problem mit der Kreditvorhersage 3:

#Loading caret package library("caret") #Loading training data train<-read.csv("train_u6lujuX_CVtuZ9i.csv",stringsAsFactors = T) #Looking at the structure of caret package. str(train) #'data.frame':         614 obs. of  13 variables: #$ Loan_ID          : Factor w/ 614 levels "LP001002","LP001003",..: 1 2 3 4 5 6 7 8 9 #10 .. #$ Gender           : Factor w/ 3 levels "","Female","Male": 3 3 3 3 3 3 3 3 3 3 ... #$ Married          : Factor w/ 3 levels "","No","Yes": 2 3 3 3 2 3 3 3 3 3 ... #$ Dependents       : Factor w/ 5 levels "","0","1","2",..: 2 3 2 2 2 4 2 5 4 3 ... #$ Education        : Factor w/ 2 levels "Graduate","Not Graduate": 1 1 1 2 1 1 2 1 1 #1 ... #$ Self_Employed    : Factor w/ 3 levels "","No","Yes": 2 2 3 2 2 3 2 2 2 2 ... #$ ApplicantIncome  : int  5849 4583 3000 2583 6000 5417 2333 3036 4006 12841 #... #$ CoapplicantIncome: num  0 1508 0 2358 0 ... #$ LoanAmount       : int  NA 128 66 120 141 267 95 158 168 349 ... #$ Loan_Amount_Term : int  360 360 360 360 360 360 360 360 360 360 ... #$ Credit_History   : int  1 1 1 1 1 1 1 0 1 1 ... #$ Property_Area    : Factor w/ 3 levels "Rural","Semiurban",..: 3 1 3 3 3 3 3 2 3 2 #... #$ Loan_Status      : Factor w/ 2 levels "N","Y": 2 1 2 2 2 2 2 1 2 1 ...

Bei diesem Problem, wir müssen den Kreditstatus einer Person anhand ihres Profils vorhersagen.

2. Vorverarbeitung mit Caret

Wir müssen unsere Daten vorverarbeiten, bevor wir sie für die Modellierung verwenden können. Lassen Sie uns überprüfen, ob in den Daten Werte fehlen:

sum(is.na(train)) #[1] 86

Dann, Lassen Sie uns Caret verwenden, um diese fehlenden Werte mit dem KNN-Algorithmus zu imputieren. Wir werden diese fehlenden Werte basierend auf anderen Attributen für diese Zeile vorhersagen. Was ist mehr, Wir skalieren und zentrieren die numerischen Daten mit dem praktischen Vorprozess () und Caret.

#Imputing missing values using KNN.Also centering and scaling numerical columns preProcValues <- preProcess(train, method = c("knnImpute","center","scale")) library('RANN') train_processed <- predict(preProcValues, train) sum(is.na(train_processed)) #[1] 0

Es ist auch sehr einfach, eine Hot-Codierung in Caret zu verwenden, um Dummy-Variablen für jede Ebene einer kategorialen Variablen zu erstellen. Aber zuerst, Wir werden die abhängige Variable in numerisch umwandeln.

#Converting outcome variable to numeric train_processed$Loan_Status<-ifelse(train_processed$Loan_Status=='N',0,1) id<-train_processed$Loan_ID train_processed$Loan_ID<-NULL #Checking the structure of processed train file str(train_processed) #'data.frame':         614 obs. of  12 variables: #$ Gender           : Factor w/ 3 levels "","Female","Male": 3 3 3 3 3 3 3 3 3 3 ... #$ Married          : Factor w/ 3 levels "","No","Yes": 2 3 3 3 2 3 3 3 3 3 ... #$ Dependents       : Factor w/ 5 levels "","0","1","2",..: 2 3 2 2 2 4 2 5 4 3 ... #$ Education        : Factor w/ 2 levels "Graduate","Not Graduate": 1 1 1 2 1 1 2 1 1 #1 ... #$ Self_Employed    : Factor w/ 3 levels "","No","Yes": 2 2 3 2 2 3 2 2 2 2 ... #$ ApplicantIncome  : num  0.0729 -0.1343 -0.3934 -0.4617 0.0976 ... #$ CoapplicantIncome: num  -0.554 -0.0387 -0.554 0.2518 -0.554 ... #$ LoanAmount       : num  0.0162 -0.2151 -0.9395 -0.3086 -0.0632 ... #$ Loan_Amount_Term : num  0.276 0.276 0.276 0.276 0.276 ... #$ Credit_History   : num  0.432 0.432 0.432 0.432 0.432 ... #$ Property_Area    : Factor w/ 3 levels "Rural","Semiurban",..: 3 1 3 3 3 3 3 2 3 2 #... #$ Loan_Status      : num  1 0 1 1 1 1 1 0 1 0 ...

Jetzt, Erstellen von Dummy-Variablen mit Hot-Encoding:

#Converting every categorical variable to numerical using dummy variables dmy <- dummyVars(" ~ .", data = train_processed,fullRank = T) train_transformed <- data.frame(predict(dmy, newdata = train_processed)) #Checking the structure of transformed train file str(train_transformed) #'data.frame':         614 obs. of  19 variables: #$ Gender.Female          : num  0 0 0 0 0 0 0 0 0 0 ... #$ Gender.Male            : num  1 1 1 1 1 1 1 1 1 1 ... #$ Married.No             : num  1 0 0 0 1 0 0 0 0 0 ... #$ Married.Yes            : num  0 1 1 1 0 1 1 1 1 1 ... #$ Dependents.0           : num  1 0 1 1 1 0 1 0 0 0 ... #$ Dependents.1           : num  0 1 0 0 0 0 0 0 0 1 ... #$ Dependents.2           : num  0 0 0 0 0 1 0 0 1 0 ... #$ Dependents.3.          : num  0 0 0 0 0 0 0 1 0 0 ... #$ Education.Not.Graduate : num  0 0 0 1 0 0 1 0 0 0 ... #$ Self_Employed.No       : num  1 1 0 1 1 0 1 1 1 1 ... #$ Self_Employed.Yes      : num  0 0 1 0 0 1 0 0 0 0 ... #$ ApplicantIncome        : num  0.0729 -0.1343 -0.3934 -0.4617 0.0976 ... #$ CoapplicantIncome      : num  -0.554 -0.0387 -0.554 0.2518 -0.554 ... #$ LoanAmount             : num  0.0162 -0.2151 -0.9395 -0.3086 -0.0632 ... #$ Loan_Amount_Term       : num  0.276 0.276 0.276 0.276 0.276 ... #$ Credit_History         : num  0.432 0.432 0.432 0.432 0.432 ... #$ Property_Area.Semiurban: num  0 0 0 0 0 0 0 1 0 1 ... #$ Property_Area.Urban    : num  1 0 1 1 1 1 1 0 1 0 ... #$ Loan_Status            : num  1 0 1 1 1 1 1 0 1 0 ... #Converting the dependent variable back to categorical train_transformed$Loan_Status<-as.factor(train_transformed$Loan_Status)

Hier, “voller Rang = T” wird nur erstellen (n-1) Spalten für eine kategoriale Spalte mit n verschiedenen Ebenen. Dies funktioniert insbesondere bei kategorialen Prädiktoren, die als Geschlecht darstellen, verheiratet, etc., wo wir nur zwei ebenen haben: Männlich / Feminin, Jawohl / Nein, etc. warum 0 kann verwendet werden, um eine Klasse darzustellen, während 1 repräsentiert die andere Klasse in derselben Spalte.

3. Daten mit dem Caret-Zeichen aufteilen

Wir werden ein Kreuzvalidierungsset aus dem Trainingsset erstellen, um unser Modell zu evaluieren. Es ist wichtig, sich für die eigentliche Bewertung Ihres Modells mehr auf das Kreuzvalidierungsset zu verlassen, andererseits, Sie könnten am Ende die öffentliche Bestenliste überfordern.

Wir verwenden createDataPartition () um unsere Trainingsdaten in zwei Sätze aufzuteilen: 75% Ja 25%. Da unsere Ergebnisvariable kategorialer Natur ist, diese Funktion stellt sicher, dass die Verteilung der Ergebnisvariablenklassen in beiden Mengen ähnlich ist.

#Spliting training set into two parts based on outcome: 75% and 25% index <- createDataPartition(train_transformed$Loan_Status, p=0.75, list=FALSE) trainSet <- train_transformed[ index,] testSet <- train_transformed[-index,] #Checking the structure of trainSet str(trainSet) #'data.frame':         461 obs. of  19 variables: #$ Gender.Female          : num  0 0 0 0 0 0 0 0 0 0 ... #$ Gender.Male            : num  1 1 1 1 1 1 1 1 1 1 ... #$ Married.No             : num  1 0 0 0 1 0 0 0 0 0 ... #$ Married.Yes            : num  0 1 1 1 0 1 1 1 1 1 ... #$ Dependents.0           : num  1 0 1 1 1 0 1 0 0 0 ... #$ Dependents.1           : num  0 1 0 0 0 0 0 0 1 0 ... #$ Dependents.2           : num  0 0 0 0 0 1 0 0 0 1 ... #$ Dependents.3.          : num  0 0 0 0 0 0 0 1 0 0 ... #$ Education.Not.Graduate : num  0 0 0 1 0 0 1 0 0 0 ... #$ Self_Employed.No       : num  1 1 0 1 1 0 1 1 1 1 ... #$ Self_Employed.Yes      : num  0 0 1 0 0 1 0 0 0 0 ... #$ ApplicantIncome        : num  0.0729 -0.1343 -0.3934 -0.4617 0.0976 ... #$ CoapplicantIncome      : num  -0.554 -0.0387 -0.554 0.2518 -0.554 ... #$ LoanAmount             : num  0.0162 -0.2151 -0.9395 -0.3086 -0.0632 ... #$ Loan_Amount_Term       : num  0.276 0.276 0.276 0.276 0.276 ... #$ Credit_History         : num  0.432 0.432 0.432 0.432 0.432 ... #$ Property_Area.Semiurban: num  0 0 0 0 0 0 0 1 1 0 ... #$ Property_Area.Urban    : num  1 0 1 1 1 1 1 0 0 1 ... #$ Loan_Status            : Factor w/ 2 levels "0","1": 2 1 2 2 2 2 2 1 1 2 ...

4. Funktionsauswahl mit Caret

Die Merkmalsauswahl ist ein äußerst wichtiger Teil der Modellierung. Die Bedeutung der Rollenauswahl und die verschiedenen Techniken, die für die Rollenauswahl verwendet werden, verstehen, Ich empfehle Ihnen dringend, meinen vorherigen Artikel zu lesen. Zur Zeit, wir werden die Eliminierung rekursiver Features nutzen, Dies ist eine Wrapper-Methode, um die beste Teilmenge von Features für die Modellierung zu finden.

#Featureauswahl mit rfe in Caret
control <- rfeControl(functions = rfFuncs,                    method = "repeatedcv",                    repeats = 3,                    verbose = FALSE) outcomeName<-'Loan_Status' predictors<-names(trainSet)[!names(trainSet) %in% outcomeName] Loan_Pred_Profile <- rfe(trainSet[,predictors], trainSet[,outcomeName],                       rfeControl = control) Loan_Pred_Profile #Recursive feature selection #Outer resampling method: Cross-Validated (10 fold, repeated 3 times) #Resampling performance over subset size: #  Variables Accuracy  Kappa AccuracySD KappaSD Selected #4   0.7737 0.4127    0.03707 0.09962         #8   0.7874 0.4317    0.03833 0.11168         #16   0.7903 0.4527    0.04159 0.11526         #18   0.7882 0.4431    0.03615 0.10812         #The top 5 variables (out of 16): #  Credit_History, LoanAmount, Loan_Amount_Term, ApplicantIncome, CoapplicantIncome #Taking only the top 5 predictors predictors<-c("Credit_History", "LoanAmount", "Loan_Amount_Term", "ApplicantIncome", "CoapplicantIncome")

5. Trainingsmodelle mit Caret

Dies ist wahrscheinlich der Teil, in dem sich Caret von allen anderen verfügbaren Paketen abhebt.. Bietet die Möglichkeit, mehr als 200 Machine-Learning-Algorithmen mit konsistenter Syntax. Für eine Liste aller Algorithmen, die Caret unterstützt, Sie können verwenden:

Namen(getModelInfo())
#[1] "ada"                 "AdaBag"              "AdaBoost.M1"         "adaboost"           #[5] "amdai"               "ANFIS"               "avNNet"              "awnb"               #[9] "awtan"               "bag"                 "bagEarth"            "bagEarthGCV"        #[13] "bagFDA"              "bagFDAGCV"           "bam"                 "bartMachine"        #[17] "bayesglm"            "bdk"                 "binda"               "blackboost"         #[21] "blasso"              "blassoAveraged"      "Boruta"              "bridge"              #…. #[205] "svmBoundrangeString" "svmExpoString"       "svmLinear"           "svmLinear2"         #[209] "svmLinear3"          "svmLinearWeights"    "svmLinearWeights2"   "svmPoly"            #[213] "svmRadial"           "svmRadialCost"       "svmRadialSigma"      "svmRadialWeights"   #[217] "svmSpectrumString"   "tan"                 "tanSearch"           "treebag"            #[221] "vbmpRadial"          "vglmAdjCat"          "vglmContRatio"       "vglmCumulative"     #[225] "widekernelpls"       "WM"                  "wsrf"                "xgbLinear"          #[229] "xgbTree"             "xyf"

Für weitere Details zu jedem Modell, du kannst dich beraten hier.

Wir können einfach eine große Anzahl von Algorithmen mit ähnlicher Syntax anwenden. Zum Beispiel, GBM anwenden, zufälliger Wald, neuronales Netz und logistische Regression:

model_gbm<-train(trainSet[,predictors],trainSet[,outcomeName],method='gbm') model_rf<-train(trainSet[,predictors],trainSet[,outcomeName],method='rf') model_nnet<-train(trainSet[,predictors],trainSet[,outcomeName],method='nnet') model_glm<-train(trainSet[,predictors],trainSet[,outcomeName],method='glm')

Sie können die Parameter in all diesen Algorithmen mit den Parameter-Tuning-Techniken weiter optimieren.

6. Parameter-Tuning mit Caret

Mit Caret . lassen sich die Parameter ganz einfach anpassen. Normalerweise, Parametereinstellung in Caret erfolgt wie folgt:

Caret-6-6167917

Nahezu jeder Schritt des Anpassungsprozesses kann individuell angepasst werden. Die Resampling-Technik zur Bewertung der Modellleistung unter Verwendung eines Parametersatzes in Caret ist standardmäßig Bootstrap, aber es bietet Alternativen zur Verwendung von k-fold, Wiederholte K-Fold- und Leave-one-out-Kreuzvalidierung (LOOCV) die mit trainControl . spezifiziert werden können (). In diesem Beispiel, Wir werden die Kreuzvalidierung von verwenden 5 wiederholte Teile 5 mal.

fitControl <- trainControl(   method = "repeatedcv",   number = 5,   repeats = 5)

Wenn der Parametersuchraum nicht definiert ist, Caret wird verwenden 3 Zufallswerte jedes abstimmbaren Parameters und verwendet die Ergebnisse der Kreuzvalidierung, um den besten Parametersatz für diesen Algorithmus zu finden. Andererseits, Es gibt zwei weitere Möglichkeiten, die Parameter anzupassen:

6.1.Verwenden von tuneGrid

So finden Sie die Parameter eines Modells, die angepasst werden können, du kannst verwenden

modelLookup(model="gbm") #model         parameter                   label forReg forClass probModel #1   gbm           n.trees   # Boosting Iterations   TRUE     TRUE      TRUE #2   gbm interaction.depth          Max Tree Depth   TRUE     TRUE      TRUE #3   gbm         shrinkage               Shrinkage   TRUE     TRUE      TRUE #4   gbm    n.minobsinnode Min. Terminal Node Size   TRUE     TRUE      TRUE #using grid search #Creating grid grid <- expand.grid(n.trees=c(10,20,50,100,500,1000),shrinkage=c(0.01,0.05,0.1,0.5),n.minobsinnode = c(3,5,10),interaction.depth=c(1,5,10)) # training the model model_gbm<-train(trainSet[,predictors],trainSet[,outcomeName],method='gbm',trControl=fitControl,tuneGrid=grid) # summarizing the model print(model_gbm) #Stochastic Gradient Boosting #461 samples #5 predictor #2 classes: '0', '1' #No pre-processing #Resampling: Cross-Validated (5 fold, repeated 5 times) #Summary of sample sizes: 368, 370, 369, 369, 368, 369, ... #Resampling results across tuning parameters: #  shrinkage  interaction.depth  n.minobsinnode  n.trees  Accuracy   Kappa    #0.01        1                  3                10     0.6876416  0.0000000 #0.01        1                  3                20     0.6876416  0.0000000 #0.01        1                  3                50     0.7982345  0.4423609 #0.01        1                  3               100     0.7952190  0.4364383 #0.01        1                  3               500     0.7904882  0.4342300 #0.01        1                  3              1000     0.7913627  0.4421230 #0.01        1                  5                10     0.6876416  0.0000000 #0.01        1                  5                20     0.6876416  0.0000000 #0.01        1                  5                50     0.7982345  0.4423609 #0.01        1                  5               100     0.7943635  0.4351912 #0.01        1                  5               500     0.7930783  0.4411348 #0.01        1                  5              1000     0.7913720  0.4417463 #0.01        1                 10                10     0.6876416  0.0000000 #0.01        1                 10                20     0.6876416  0.0000000 #0.01        1                 10                50     0.7982345  0.4423609 #0.01        1                 10               100     0.7943635  0.4351912 #0.01        1                 10               500     0.7939525  0.4426503 #0.01        1                 10              1000     0.7948362  0.4476742 #0.01        5                  3                10     0.6876416  0.0000000 #0.01        5                  3                20     0.6876416  0.0000000 #0.01        5                  3                50     0.7960556  0.4349571 #0.01        5                  3               100     0.7934987  0.4345481 #0.01        5                  3               500     0.7775055  0.4147204 #... #0.50        5                 10               100     0.7045617  0.2834696 #0.50        5                 10               500     0.6924480  0.2650477 #0.50        5                 10              1000     0.7115234  0.3050953 #0.50       10                  3                10     0.7389117  0.3681917 #0.50       10                  3                20     0.7228519  0.3317001 #0.50       10                  3                50     0.7180833  0.3159445 #0.50       10                  3               100     0.7172417  0.3189655 #0.50       10                  3               500     0.7058472  0.3098146 #0.50       10                  3              1000     0.7001852  0.2967784 #0.50       10                  5                10     0.7266895  0.3378430 #0.50       10                  5                20     0.7154746  0.3197905 #0.50       10                  5                50     0.7063535  0.2984819 #0.50       10                  5               100     0.7151012  0.3141440 #0.50       10                  5               500     0.7108516  0.3146822 #0.50       10                  5              1000     0.7147320  0.3225373 #0.50       10                 10                10     0.7314871  0.3327504 #0.50       10                 10                20     0.7150814  0.3081869 #0.50       10                 10                50     0.6993723  0.2815981 #0.50       10                 10               100     0.6977416  0.2719140 #0.50       10                 10               500     0.7037864  0.2854748 #0.50       10                 10              1000     0.6995610  0.2869718

Präzision wurde verwendet, um das optimale Modell mit dem größten Wert auszuwählen.

Die für das Modell verwendeten Endwerte waren n. Bäume = 10, Wechselwirkungstiefe = 1, Kontraktion = 0.05 und nein. Aminobsinnodo = 3

Handlung(model_gbm)

Caret-1-1024x583-4747969

Deswegen, für alle Parameterkombinationen, die Sie in expand.grid aufgelistet haben (), ein Modell wird erstellt und mittels Kreuzvalidierung getestet. Der Parametersatz mit der besten Kreuzvalidierungsleistung wird verwendet, um das endgültige Modell zu erstellen, das Sie am Ende erhalten.

6.2. Verwenden von tuneLength

Anstatt die genauen Werte für jeden Tuning-Parameter anzugeben, wir können ihn einfach bitten, über tuneLength . eine beliebige Anzahl möglicher Werte für jeden Tuning-Parameter zu verwenden. Versuchen wir ein Beispiel mit tuneLength = 10.

#using tune length model_gbm<-train(trainSet[,predictors],trainSet[,outcomeName],method='gbm',trControl=fitControl,tuneLength=10) print(model_gbm) #Stochastic Gradient Boosting #461 samples #5 predictor #2 classes: '0', '1' #No pre-processing #Resampling: Cross-Validated (5 fold, repeated 5 times) #Summary of sample sizes: 368, 369, 369, 370, 368, 369, ... #Resampling results across tuning parameters: #  interaction.depth  n.trees  Accuracy   Kappa    #1                  50      0.7978084  0.4541008 #1                 100      0.7978177  0.4566764 #1                 150      0.7934792  0.4472347 #1                 200      0.7904310  0.4424091 #1                 250      0.7869714  0.4342797 #1                 300      0.7830488  0.4262414 ... #10                 100      0.7575230  0.3860319 #10                 150      0.7479757  0.3719707 #10                 200      0.7397290  0.3566972 #10                 250      0.7397285  0.3561990 #10                 300      0.7362552  0.3513413 #10                 350      0.7340812  0.3453415 #10                 400      0.7336416  0.3453117 #10                 450      0.7306027  0.3415153 #10                 500      0.7253854  0.3295929

Der Einstellparameter „Schrumpf“’ blieb konstant bei einem Wert von 0,1

Der Einstellparameter 'n.minobsinnode’ blieb konstant bei einem Wert von 10

Präzision wurde verwendet, um das optimale Modell mit dem größten Wert auszuwählen.

Die für das Modell verwendeten Endwerte waren n. Bäume = 50, Wechselwirkungstiefe = 2, Kontraktion = 0,1 und nein. Aminobsinnodo = 10.

plot(model_gbm)

Caret-2-1024x587-8130371

Hier, hält die Kontraktionsparameter und n konstant. Aminobsinnode beim Ändern von n. Bäume und die Tiefe der Interaktion auf 10 Werte und verwendet die beste Kombination, um das endgültige Modell zu trainieren.

7. Abschätzung der Bedeutung der Variablen durch Verschachtelung

Caret macht auch die Wichtigkeitsschätzungen der Variablen mit varImp zugänglich () für jedes Modell. Werfen wir einen Blick auf die Bedeutung der Variablen für die vier von uns erstellten Modelle:

#Checking variable importance for GBM #Variable Importance varImp(object=model_gbm) #gbm variable importance #Overall #Credit_History    100.000 #LoanAmount         16.633 #ApplicantIncome     7.104 #CoapplicantIncome   6.773 #Loan_Amount_Term    0.000 #Plotting Varianle importance for GBM plot(varImp(object=model_gbm),main="GBM - Variable Importance")

Caret-3-7668388

#Checking variable importance for RF varImp(object=model_rf) #rf variable importance #Overall #Credit_History     100.00 #ApplicantIncome     73.46 #LoanAmount          60.59 #CoapplicantIncome   40.43 #Loan_Amount_Term     0.00 #Plotting Varianle importance for Random Forest plot(varImp(object=model_rf),main="RF - Variable Importance")

Caret-8-4569087

#Checking variable importance for NNET varImp(object=model_nnet) #nnet variable importance #Overall #ApplicantIncome    100.00 #LoanAmount          82.87 #CoapplicantIncome   56.92 #Credit_History      41.11 #Loan_Amount_Term     0.00 #Plotting Variable importance for Neural Network plot(varImp(object=model_nnet),main="NNET - Variable Importance")

Caret-4-2231888

#Checking variable importance for GLM varImp(object=model_glm) #glm variable importance #Overall #Credit_History    100.000 #CoapplicantIncome  17.218 #Loan_Amount_Term   12.988 #LoanAmount          5.632 #ApplicantIncome     0.000 #Plotting Variable importance for GLM plot(varImp(object=model_glm),main="GLM - Variable Importance")

Caret-5-9711677

Deutlich, Schätzungen unterschiedlicher Bedeutung aus verschiedenen Modellen unterscheiden sich und, Daher, könnte verwendet werden, um eine ganzheitlichere Sicht auf die Bedeutung jedes Prädiktors zu erhalten. Zwei Hauptanwendungen von unterschiedlicher Bedeutung verschiedener Modelle sind:

  • Prädiktoren, die für die meisten Modelle wichtig sind, stellen wirklich wichtige Prädiktoren dar.
  • Im Großen und Ganzen, wir sollten Vorhersagen von Modellen verwenden, die eine signifikant unterschiedliche Bedeutung der Variablen haben, da Ihre Vorhersagen auch anders sein werden. Selbst wenn, Eine Sache, die Sie sicherstellen müssen, ist, dass alle genau genug sind.

8. Vorhersagen mit Caret

Um die abhängige Variable für den Testsatz vorherzusagen, Caret ofrece predict.train (). Sie müssen den Modellnamen angeben, Testdaten. Bei Klassifizierungsproblemen, Caret bietet auch eine weitere Funktion namens Typ, die als . eingestellt werden kann “prob” Ö “roh”. Para-Typ = ”roh”, die Vorhersagen sind nur die Ergebnisklassen für die Testdaten, while for type = "prob", gibt die Wahrscheinlichkeit des Auftretens jeder Beobachtung in mehreren Klassen der Ergebnisvariablen an.

Werfen wir einen Blick auf die Vorhersagen unseres GBM-Modells:

#Predictions predictions<-predict.train(object=model_gbm,testSet[,predictors],type="raw") table(predictions) #predictions #0   1 #28 125

Caret bietet auch eine Verwirrungsmatrix-Funktion, die die Verwirrungsmatrix zusammen mit verschiedenen anderen Metriken für Ihre Vorhersagen bereitstellt.. Hier ist die Leistungsanalyse unseres GBM-Modells:

confusionMatrix(predictions,testSet[,outcomeName]) #Confusion Matrix and Statistics #Reference #Prediction   0   1 #0  25   3 #1  23 102 #Accuracy : 0.8301         #95% CI : (0.761, 0.8859) #No Information Rate : 0.6863         #P-Value [Acc > NIR] : 4.049e-05      #Kappa : 0.555          #Mcnemar's Test P-Value : 0.0001944      #Sensitivity : 0.5208         #Specificity : 0.9714         #Pos Pred Value : 0.8929 #Neg Pred Value : 0.8160         #Prevalence : 0.3137         #Detection Rate : 0.1634         #Detection Prevalence : 0.1830         #Balanced Accuracy : 0.7461         #'Positive' Class : 0

Zusätzliche Ressourcen

Abschließende Anmerkungen

Caret ist eines der leistungsstärksten und nützlichsten Pakete, die jemals in R . erstellt wurden. Es ist nur in der Lage, alle Anforderungen an die prädiktive Modellierung von der Vorverarbeitung bis zur Interpretation zu erfüllen. Was ist mehr, seine Syntax ist auch sehr einfach zu verwenden. Ein R, Ich werde Sie ermutigen, Caret . zu verwenden.

Caret ist ein sehr komplettes Paket und, anstatt alle Funktionalitäten abzudecken, die es bietet, Ich dachte, es wäre eine bessere Idee, eine End-to-End-Implementierung von Caret in einem tatsächlichen Hackathon J-Datensatz zu zeigen. Ich habe versucht, so viele Funktionen wie möglich in Caret abzudecken, aber Caret hat noch so viel mehr zu bieten. Vertiefen, Vielleicht finden Sie die oben aufgeführten Ressourcen sehr hilfreich. Mehrere dieser Quellen wurden von Max Kuhn selbst geschrieben (der Schöpfer des Caret-Pakets).

Du kannst deine Fähigkeiten und dein Wissen auf die Probe stellen. Überprüfen Live-Wettbewerbe und messe dich in den Kommentaren unten mit den besten Datenwissenschaftlern aus der ganzen Welt.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.