Data Mining Demo: Modellbildung und Prognose mit R und Exasol

Freitag, 13.05.2016

Im Folgenden finden Sie ein einfaches Data Mining Demo, das Modellbildung und Prognose in der Verbindung von R und Exasol zeigt. Falls Sie die Installation und Konfiguration der benötigten Komponenten noch nicht vollzogen haben, finden Sie die Anleitung dazu hier.
Außerdem finden Sie hier ein Webcast-Video, in dem das unten stehenden Demo gezeigt sowie die Grundzüge von R und Exsol erläutert werden.

# Laden der benötigten Pakete
library(RODBC)
library(exasol)
library(rredis)
library(magrittr)
library(stringi)
library(rpart)
library(partykit)
 
# Verbindung zu Exasol und Redis herstellen
con < – odbcConnect(„exasol_vm“)
redisConnect(172.20.248.13“)
 
# Erstellen eines Zufallszahlen-Vektors für die Stichprobenziehung
rnd <– rnorm(nrow(iris))
 
# Anfügen der Gruppenvariable (Training/Validierung)
iris$groups <– factor(NA, levels = c(„Train“, „Valid“))
 
# Nach Spezies geschichtete Zufallsziehung: 70% Training, 30% Validierung
for(i in unique(iris$Species)) {
  logVec <– iris$Species == i
  iris$groups[logVec] <– ifelse(test = rnd[logVec] > quantile(rnd[logVec],
                                                                 probs = 0.3),
                                yes = „Train“,
                                no = „Valid“)
}
 
# Überprüfung der Stichprobenziehung
table(iris$groups, iris$Species)
 
# Workspace aufräumen
rm(rnd, logVec, i)

Die iris Daten werden jetzt in die Exasol geschoben. Bei der ersten Verwendung wird zunächst ein Datenbankschema erstellt und eine leere Tabelle. Anschließend werden die iris Daten in die Tabelle geschoben. Sind die Daten einmal hochgeladen, können Sie immer wieder verwendet werden.

<br />
# Datenbankschema mit dem Namen <em>my_schema</em> erstellen<br />
odbcQuery(con, „create schema my_schema“)</p>
<p># Erstellen der leeren Tabelle unter dem Namen <em>irisdb</em><br />
odbcQuery(con, „create or replace table my_schema.irisdb(<br />
          SepalLength DOUBLE,<br />
          SepalWidth DOUBLE,<br />
          PetalLength DOUBLE,<br />
          PetalWidth DOUBLE,<br />
          Species CHAR(20),<br />
          Groups CHAR(20));“)</p>
<p># Hochladen der <em>iris</em> Daten in die Exasol<br />
exa.writeData(con, data = iris, tableName = „my_schema.irisdb“)

Im ersten Analyseschritt wird lokal ein Entscheidungsbaum erstellt. Auf Basis dieses Baums wird anschließend eine Prognose erstellt.

<br />
# Erstellen eines Trainings- und eines Validierungsdatensatzes<br />
train &lt; – subset(iris, subset = groups == „Train“, select = -groups)<br />
valid &lt;- subset(iris, subset = groups == „Valid“, select = -groups)</p>
<p># Erstellen des Entscheidungsbaums mit den Trainingsdaten<br />
localTree &lt;- rpart(Species ~ ., data = train)</p>
<p># Visualisierung des Baums<br />
plot(as.party(localTree))</p>
<p># Prognose Validierungsdaten mit Hilfe des Baums<br />
pred &lt;- predict(localTree, type =class, newdata = valid) # Prognose überprüfen table(pred, valid$Species, dnn = c(„Vorhersage“, „Tatsächlich“)) %&gt;%<br />
  addmargins()

Das selbe Vorgehen wie oben jetzt in der Exasol. Die exa.script Funktion erstellt ein R Skript auf dem Exasol Server. Der Aufruf dieser Funktion führt das Skript auf den Exasol Clustern aus. D.h. die Analyse findet nicht mehr auf dem lokalen R statt, sondern auf den R Instanzen im Exasol Cluster. Pakete, die auf den R Instanzen auf der Exasol verwendet werden, müssen dort installiert sein. Siehe dazu diesen Blogbeitrag.

Das im Exasol Cluster gebildete Modell wird in Redis, einer Key-Value Datenbank abgelegt. Mit Redis lassen sich sowohl Modelle als auch Funktionen oder andere R-Objekte im Cluster verteilen und aus dem Cluster laden.

<br />
# Erstellen eines Trainings- und eines Validierungsdatensatzes<br />
train &lt; – subset(iris, subset = groups == „Train“, select = -groups)<br />
valid &lt;- subset(iris, subset = groups == „Valid“, select = -groups)</p>
<p># Erstellen des Entscheidungsbaums mit den Trainingsdaten<br />
localTree &lt;- rpart(Species ~ ., data = train)</p>
<p># Visualisierung des Baums<br />
plot(as.party(localTree))</p>
<p># Prognose Validierungsdaten mit Hilfe des Baums<br />
pred &lt;- predict(localTree, type =class, newdata = valid) # Prognose überprüfen table(pred, valid$Species, dnn = c(„Vorhersage“, „Tatsächlich“)) %&gt;%<br />
  addmargins()

Das Baum Modell kann in einem separaten Schritt auf der Exasol für die Prognose verwendet werden. Der erste Teil ist mit der obigen Funktion weitgehend identisch.

<br />
exa_predict_rf &lt; – exa.createScript(<br />
  con,<br />
  „my_schema.exa_pred“,<br />
  function(data) {</p>
<p>    require(rpart)<br />
    require(rredis)</p>
<p>    redisConnect(172.20.248.13“, port = 6379)</p>
<p>    data$next_row(NA)</p>
<p>    df &lt;- data.frame(v1 = data$SepalLength,<br />
                     v2 = data$SepalWidth,<br />
                     v3 = data$PetalLength,<br />
                     v4 = data$PetalWidth,<br />
                     species = data$Species)</p>
<p>    # Laden des Baum Modells aus Redis<br />
    rf &lt;- redisGet(„exa_rf“) </p>
<p>    # Erstellen der Prognose<br />
    pred &lt;- predict(rf, newdata = df, type =class)</p>
<p>    # Rückgabe der Prognose sowie der echten Klassenzugehörigkeit<br />
    data$emit(pred, df$species)<br />
  },<br />
  inArgs = c( „SepalLength DOUBLE“,<br />
              „SepalWidth DOUBLE“,<br />
              „PetalLength DOUBLE“,<br />
              „PetalWidth DOUBLE“,<br />
              „Species CHAR(20)),<br />
  outArgs = c(„Prognose CHAR(20),<br />
              „Realwerte CHAR(20)))</p>
<p># Aufruf der oben gebildeten Funktion. Die Rückgabe wird in ein Objekt gespeichert.<br />
exa_pred &lt;- exa_predict_rf(„SepalLength“, „SepalWidth“, „PetalLength“, „PetalWidth“, „Species“, table = „my_schema.irisdb“, where = „groups = ‚Valid'“) # Mit Hilfe der Table Funktion kann geprüft werden, wie gut die Prognose performt. table(exa_pred$PROGNOSE, exa_pred$REALWERTE, dnn = c(„Prognose“, „Realwerte“)) %&gt;%<br />
  addmargins()

Mehr Informationen rund um Exasol?

Wir helfen bei Kauf, Implementierung und Support

Starten Sie jetzt durch:
Wir freuen uns auf den Austausch mit Ihnen. 







    Nach oben scrollen