1

Ich habe mehrere Algorithmen, die eine binäre Klassifizierung (mit Antwort 0 oder 1) Problem lösen, indem Sie jeder Beobachtung eine Wahrscheinlichkeit des Zielwerts gleich 1 zuweisen. Alle Algorithmen versuchen, die log loss function wo N zu minimieren ist die Anzahl der Beobachtungen, y_i ist der tatsächliche Zielwert und p_i ist die Wahrscheinlichkeit von 1, die vom Algorithmus vorhergesagt wird. Hier sind einige R-Code mit Beispieldaten:Kombinieren binärer Klassifikationsalgorithmen

actual.response = c(1,0,0,0,1) 
prediction.df = data.frame(
    method1 = c(0.5080349,0.5155535,0.5338271,0.4434838,0.5002529), 
    method2 = c(0.5229466,0.5298336,0.5360780,0.4217748,0.4998602), 
    method3 = c(0.5175378,0.5157711,0.5133765,0.4372109,0.5215695), 
    method4 = c(0.5155535,0.5094510,0.5201827,0.4351625,0.5069823) 
) 

log.loss = colSums(-1/length(actual.response)*(actual.response*log(prediction.df)+(1-actual.response)*log(1-prediction.df))) 

Der Beispielcode das Protokoll Verlust für jeden Algorithmus ergibt:

method1 method3 method2 method4 
0.6887705 0.6659796 0.6824404 0.6719181 

Jetzt möchte ich dies kombinieren Algorithmen, so kann ich die Log-Verlust minimieren weiter . Gibt es ein R-Paket, das das für mich tun kann? Ich werde Referenzen zu irgendwelchen Algorithmen, Artikeln, Büchern oder Forschungsarbeiten schätzen, die diese Art von Problem lösen. Beachten Sie, dass ich als Endergebnis die vorhergesagten Wahrscheinlichkeiten jeder Klasse haben und einfache 0,1 Antworten notieren möchte.

Antwort

2

Dies wird ensemble learning (Wikipedia) genannt.

Schauen Sie sich diesen Artikel: "an intro to ensemble learning in r."

Hier ist ein Beispiel, das ich die Cornell movie review data tat verwendet, die durch Klicken auf den Link heruntergeladen werden können. Ich habe Daten mit 1000 positiven und 1000 negativen Bewertungen verwendet. Wenn Sie die Daten in R erhalten:

library(RTextTools) 
library(tm) 
library(glmnet) 
library(ipred) 
library(randomForest) 
library(data.table) 

## create a column of sentiment score. 0 for negative and 1 for   
## positive. 

text_neg$pos_neg<-rep(0,1000) 
text_pos$pos_neg<-rep(1,1000) 

## Combine into 1 data.table and rename. 

text_all<-rbind(text_neg, text_pos) 
##dont forget to shuffle 
set.seed(26) 
text2<-text_all[sample(nrow(text_all)),] 
## turn the data.frame into a document term matrix. This uses the handy 
##RTextTools wrappers and functions. 

doc_matrix <- create_matrix(text2$V1, language="english", 
removeNumbers=TRUE, stemWords=TRUE, removeSparseTerms=.98) 
ncol(data.frame(as.matrix(doc_matrix))) 

## 2200 variables at .98 sparsity. runs pretty slow... 
## create a container with the very nice RTextTools package 

container <- create_container(doc_matrix, text2$pos_neg, 
trainSize=1:1700, testSize=1701:2000, virgin=FALSE) 

## train the data 
time_glm<-system.time(GLMNET <- train_model(container,"GLMNET"));  
time_glm #1.19 
time_slda<-system.time(SLDA <- train_model(container,"SLDA")); 
time_slda #45.03 
time_bag<-system.time(BAGGING <- train_model(container,"BAGGING")); 
time_bag #59.24 
time_rf<-system.time(RF <- train_model(container,"RF")); time_rf #69.59 

## classify with the models 
GLMNET_CLASSIFY <- classify_model(container, GLMNET) 
SLDA_CLASSIFY <- classify_model(container, SLDA) 
BAGGING_CLASSIFY <- classify_model(container, BAGGING) 
RF_CLASSIFY <- classify_model(container, RF) 

## summarize results 
analytics <- create_analytics(container,cbind(SLDA_CLASSIFY, 
BAGGING_CLASSIFY,RF_CLASSIFY, GLMNET_CLASSIFY)) 

summary(analytics) 

Das lief ein Ensemble Klassifikator die 4 verschiedenen Methoden (random Wälder, GLM, SLD und Verpackung) verwendet wird. Das Ensemble Zusammenfassung am Ende zeigt

# ENSEMBLE SUMMARY 
# 
# n-ENSEMBLE COVERAGE n-ENSEMBLE  RECALL 
# n >= 1    1.00    0.86 
# n >= 2    1.00    0.86 
# n >= 3    0.89    0.89 
# n >= 4    0.63    0.96 

dass, wenn alle vier Methoden vereinbart, wenn die Überprüfung positiv oder negativ ist, dann ist das Ensemble eine 96% ige Trefferquote hatte. Aber sei vorsichtig, denn mit einem binären Ergebnis (2 Wahlmöglichkeiten) und 4 verschiedenen Algorithmen wird es sehr viel Übereinstimmung geben.

Weitere Informationen finden Sie in der Dokumentation RTextTools. Sie machen auch ein fast identisches Beispiel mit Daten des US-Kongresses, die ich im obigen Beispiel mehr oder weniger nachgeahmt habe.

Ich hoffe, das war hilfreich.