Wrapper für integrierte Analysen
In den folgenden Abschnitten werden die unterstützten Wrapper für verschiedene Netezza Analytics, ihre Hauptargumente und Parameter beschrieben. Die Abschnitte enthalten auch einfache Beispiele für die Verwendung dieser Funktionen.
> help(nzGlm)Da die meisten der vom NZA-Paket bereitgestellten Funktionen Wrapper für Netezza Analytics sind, können Sie auch einen Blick in das Netezza Analytics für datenbankinterne Analysen und das Netezza Analytics für datenbankinterne Analysen werfen, um Einzelheiten zu erfahren. Wenn Sie zum Beispiel an Details über den Link-Parameter für die Funktion " nzGlm() interessiert sind, finden Sie im Abschnitt über GLM im Netezza Analytics für datenbankinterne Analysen eine detaillierte Beschreibung der einzelnen verfügbaren Link-Funktionen.
Entscheidungsbäume
Das Netezza Analytics bietet eine Reihe von hochentwickelten Algorithmen. Im Folgenden wird ein einfaches Beispiel für einen Entscheidungsbaum-Algorithmus vorgestellt. In den folgenden Abschnitten werden Beispiele für andere statistische und Data-Mining-Algorithmen vorgestellt.
Angenommen, der Datensatz für Erwachsene ist in der Datenbank MM in der Tabelle ADULT gespeichert. In dem nachstehenden Codeausschnitt wird eine Verbindung zur Datenbank hergestellt und ein Zeiger auf die Tabelle mit den Daten erzeugt. Anschließend wird das Entscheidungsbaummodell angepasst und das angepasste Modell in R heruntergeladen. Alle Schritte sind für den R-Benutzer transparent.
# loads necessary
packages library(nza)
# connects to the mm database nzConnect("user",
"password", "TT4-R040", "mm")
# creates a pointer to the data set stored in the table
adult nzadult = nz.data.frame("adult")Das R-Objekt " nzadult ist ein Zeiger auf die Tabelle " ADULT auf dem Netezza. Es ist ein Objekt der Klasse ' nz.data.frame mit überladenen Funktionen wie print(), [,] und anderen. Wie in der Netezza R-Bibliothek beschrieben, entspricht es einem Standardobjekt " data.frame, wird aber dezentral in der Datenbank gespeichert.Die R-Funktionen, die Wrapper für die Analyseroutinen Netezza sind, können diesen Zeiger als Argument verwenden. In diesem Beispiel wird die Funktion " nzDecTree() aus dem Netezza Analytics Library for R-Paket verwendet, die den Klassifizierungsbaum aufbaut. Die Funktion " nzDecTree() ist ein R-Wrapper, der eine SQL-Abfrage vorbereitet, die die gespeicherte Prozedur " DECTREE Netezza Analytics ferngesteuert aufruft. Das Verfahren wird ferngesteuert ausgeführt und das endgültige Modell an R zurückgegeben. Anschließend wird das Modell in ein Objekt der Baumklasse umgewandelt, das eine ähnliche Struktur hat wie die Objekte, die mit der R-Funktion " tree() erstellt werden.
ID aus dem Datensatz " ADULT wird im Parameter id angegeben.# build a tree using built-in analytics
adultTree = nzDecTree(INCOME~AGE+SEX+HOURS_PER_WEEK, nzadult, id="ID")Die Funktionsausgabe wird in der Datenbank gespeichert, während die Funktion " nzDecTree() sie standardmäßig in ein R-Objekt der Klasse tree umwandelt, die durch das gleichnamige Paket festgelegt ist. Daher arbeiten überladene Funktionen wie ' print(), ' plot() oder ' predict() mit diesem Objekt. Es ist möglich, den Baum in R zu drucken oder zu visualisieren, auch wenn er für einen großen Datensatz mit Millionen von Zeilen angepasst wurde.# plot and print the
tree plot(adultTree)
print(adultTree)
#node), split, n, deviance, yval, (yprob)
# * denotes terminal node
#
# 1) root 32561 0 small ( 0.24081 0.75919 )
# 2) AGE < 27 8031 0 small ( 0.03213 0.96787 ) *
# 3) AGE > 27 24530 0 small ( 0.30913 0.69087 )
# 6) SEX=Female 7366 0 small ( 0.15096 0.84904 ) *
# 7) SEX < >Female 17164 0 small ( 0.37701 0.62299 )
# 14) HOURS_PER_WEEK < 41 10334 0 small ( 0.29988 0.70012 ) *
# 15) HOURS_PER_WEEK > 41 6830 0 small ( 0.49370 0.50630 )
# 30) AGE < 35 1925 0 small ( 0.34649 0.65351 ) *
# 31) AGE > 35 4905 0 large ( 0.55148 0.44852 ) *Das angepasste Modell kann auf einen anderen Datensatz angewendet werden. Wenn der Datensatz in einer Datenbanktabelle gespeichert ist, kann ein massiver Datentransfer vermieden werden, indem die überladene Funktion predict() für die Klassifizierung innerhalb von Netezza verwendet wird.# use the previously created tree for prediction of the same
data adultPred = predict(adultTree, nzadult)
# download the prediction results into a data.frame
head(as.data.frame(adultPred))
# ID CLASS
#1 1 small
#2 2 small
#3 3 small
#4 4 small
#5 5 small
#6 6 smallnzDecTree auch ein Objekt der Klasse ' rpart zurückgeben, wie im gleichnamigen Paket angegeben. Dieses Objekt unterstützt auch überladene Funktionen von " rpart wie " print(), " plot() oder " predict().adultRpart = nzDecTree(INCOME~AGE+SEX+HOURS_PER_WEEK, nzadult,
id="ID", format="rpart")
plot(adultRpart)
print(adultRpart)
#n= 32561
#
#node), split, n, loss, yval, (yprob)
# * denotes terminal node
#
# 1) root 32561 NA small (0.240809.... 0.759190....)
# 2) AGE< 27 8031 NA small (0.032125.... 0.967874....) *
# 3) AGE>=27 24530 NA small (0.309131.... 0.690868....)
# 6) SEX=Female 7366 NA small (0.150963.... 0.849036....) *
# 7) SEX=<other> 17164 NA small (0.377010.... 0.622989....)
# 14) HOURS_PER_WEEK< 41 10334 NA small (0.299883.... 0.700116....) *
# 15) HOURS_PER_WEEK>=41 6830 NA small (0.493704.... 0.506295....)
# 30) AGE< 35 1925 NA small (0.346493.... 0.653506....) *
# 31) AGE>=35 4905 NA large (0.551478.... 0.448521....) *Regressionsbaumstrukturen
Das nachstehende Beispiel zeigt die Regressionsbäume. Der Grundgedanke ist derselbe wie bei den Entscheidungsbäumen. In diesem Codeschnipsel wird der Datensatz " WEATHERR verwendet. Die Variable von Interesse ist die Note, eine kontinuierliche Variable. Die Mittelwerte der Variablen Grad werden in jedem der entsprechenden Blätter des Regressionsbaums gespeichert.
# loads necessary
packages library(nza)
# connect to the nza database
nzConnect("user", "password", "TT4-R040", "nza")
# a pointer to the WEATHERR table is created
weatherr = nz.data.frame("WEATHERR")Um einen Regressionsbaum aus der Ferne zu erstellen, wird die Funktion " nzRegTree() verwendet. Sie ruft die Netezza Analytics Stored Procedure " REGTREE auf. Nur das endgültige Modell, d. h. die Parameter des angepassten Baums, wird nach R heruntergeladen und in ein Objekt der Klasse tree umgewandelt, wie es im gleichnamigen Paket angegeben ist. In diesem Beispiel wird ein Regressionsbaum zur Vorhersage der Variablen Note auf der Grundlage aller anderen Variablen im Datensatz erstellt. Die Spalte " ID aus dem Datensatz " WEATHERR wird im Parameter id angegeben.wTree = nzRegTree(GRADE~., data=weatherr, id="INSTANCE",
minimprove=0.1, minsplit=2, maxdepth=4)Überladene Funktionen wie ' print() oder ' plot() können verwendet werden, um den angepassten Baum zu visualisieren.# plot and print the
tree plot(wTree)
print(wTree)
#node), split, n, deviance, yval
# * denotes terminal node
#
# 1) root 22 NA 2.636
# 2) OUTLOOK=sun 8 NA 3.875
# 4) TEMPERATURE < 72 6 NA 4.500
# 8) TEMPERATURE < 52 3 NA 4.000 *
# 9) TEMPERATURE > 52 3 NA 5.000 *
# 5) TEMPERATURE > 72 2 NA 2.000 *
# 3) OUTLOOK < >sun 14 NA 1.929
# 6) OUTLOOK=cloudy 6 NA 2.833
# 12) TEMPERATURE < 12 1 NA 2.000 *
# 13) TEMPERATURE > 12 5 NA 3.000 *
# 7) OUTLOOK < >cloudy 8 NA 1.250
# 14) HUMIDITY=low 2 NA 2.000 *
# 15) HUMIDITY < >low 6 NA 1.000 *Dieses vorgefertigte Modell kann auf einen anderen Datensatz angewendet werden. Wenn der Datensatz in der Datenbank gespeichert ist, kann die überladene Funktion " predict() verwendet werden, um den Regressionsbaum innerhalb des Netezza anzuwenden. Die Funktion " predict() ruft die gespeicherte Prozedur " PREDICT_REGTREE auf.# make prediction using the model wTree on table
weatherr wPred = predict(wTree, weatherr, id="INSTANCE")
# wPred is a nz.data.frame and can easily be
examined head(wPred)
# ID CLASS
#1 2 2
#2 6 1
#3 10 2
#4 14 1
#5 18 1
#6 22 1nzRegTree auch ein Objekt der Klasse ' rpart zurückgeben, wie im gleichnamigen Paket angegeben. Die Funktionalität entspricht den Funktionen von " rpart in " nzDecTree():adultRpart = nzDecTree(INCOME~AGE+SEX+HOURS_PER_WEEK, nzadult,
id="ID", format="rpart")
plot(adultRpart)
print(adultRpart)
#n= 32561
#
#node), split, n, loss, yval, (yprob)
# * denotes terminal node
#
# 1) root 32561 NA small (0.240809.... 0.759190....)
# 2) AGE< 27 8031 NA small (0.032125.... 0.967874....) *
# 3) AGE>=27 24530 NA small (0.309131.... 0.690868....)
# 6) SEX=Female 7366 NA small (0.150963.... 0.849036....) *
# 7) SEX=<other> 17164 NA small (0.377010.... 0.622989....)
# 14) HOURS_PER_WEEK< 41 10334 NA small (0.299883.... 0.700116....) *
# 15) HOURS_PER_WEEK>=41 6830 NA small (0.493704.... 0.506295....)
# 30) AGE< 35 1925 NA small (0.346493.... 0.653506....) *
# 31) AGE>=35 4905 NA large (0.551478.... 0.448521....) *Einseitige und zweiseitige ANOVA
Klassische statistische Funktionen wie ANOVA sind in Netezza Analytics verfügbar. Dieser Abschnitt behandelt die einseitige und die zweiseitige ANOVA.
In diesem Beispiel wird der Datensatz " WEATHERR verwendet. Die erste Instanz wird ausgeschlossen, damit für jeden Parameterwert in der Variablen " HUMIDITY die gleiche Anzahl von Beobachtungen vorliegt.
WEATHERR. Schließen Sie außerdem die erste Zeile der Tabelle aus.# loads necessary
packages library(nza)
# connect to the nza database
nzConnect("user", "password", "TT4-R040", "nza")
# a pointer to weatherr table is created
weatherr = nz.data.frame("weatherr")
# select all rows form the table whose INSTANCE is bigger than
one weatherr = weatherr[weatherr$INSTANCE>1, ]Die Spalten " HUMIDITY und " OUTLOOK in dieser Tabelle entsprechen den Gruppierungsvariablen. Die Spalte " TEMPERATURE ist eine kontinuierliche Variable. Die ANOVA wird verwendet, um zu überprüfen, ob der Mittelwert der Variable " TEMPERATURE für die verschiedenen Untergruppen unterschiedlich ist.Die Funktion " nzAnova() führt den ANOVA-Algorithmus aus der Ferne aus. Die Funktion nimmt ein Formelobjekt als erstes Argument an.
Wenn sich auf der rechten Seite der Formeln eine Variable befindet, ruft die Funktion den " ANOVA_CRD_TEST von Netezza Analytics auf. Wenn sich auf der rechten Seite zwei Variablen befinden, ruft die Funktion den " ANOVA_RBD_TEST von Netezza Analytics auf. Die Funktion wandelt dann ihre Ergebnisse in ein Objekt der Klasse " summary.aov um.
HUMIDITY als Behandlungsvariable gewählt wird.nzAnova(TEMPERATURE~HUMIDITY, weatherr)
# Df Sum Sq Mean Sq F value Pr(>F)
#HUMIDITY 2 275 137.3 0.265 0.77
#Residuals 18 9309 517.1Dieses Beispiel veranschaulicht den Algorithmus der zweiseitigen ANOVA, wobei " HUMIDITY als Behandlungsvariable und " OUTLOOK als Blockvariable gewählt wird.nzAnova(TEMPERATURE~HUMIDITY+OUTLOOK, weatherr)
HUMIDITY 2 275 137.3 0.337 0.7189
OUTLOOK 3 3206 1068.7 2.627 0.0884 .
Residuals 15 6102 406.8
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1K-Means
Clustering-Methoden werden im Netezza Analytics unterstützt.
Das folgende Beispiel für das Clustering von " k-means verwendet den Datensatz " IRIS. Der Datensatz enthält Daten zu drei verschiedenen Iris-Arten, nämlich " setosa, " versicolor und " virginica. Es werden also drei Cluster im " IRIS -Datensatz erwartet, die jeweils einer anderen Art zuzuordnen sind.
IRIS.# loads necessary
packages library(nza)
# connect to nza database
nzConnect("user", "password", "TT4-R040", "nza")
# a pointer to IRIS table is created
nziris = nz.data.frame("iris")Die Funktion " nzKMeans() führt das Clustering aus der Ferne durch, indem sie die gespeicherte Prozedur " KMEANS aufruft. Cluster-Statistiken, Größen und Mittelwerte sind die einzigen Daten, die in R heruntergeladen und in ein Objekt der Klasse " kmeans umgewandelt werden, wie im Paket stats beschrieben.
# K-Means for 2 clusters and euclidean
distance t3 = nzKMeans(nziris, k=3, id="ID")
# K-Means for 10 clusters and L1 distance
# also download item-cluster assignments for every item after computation t10
= nzKMeans(nziris, k=10, distance="manhattan", id="id", getLabels=T)print(t3)
#KMeans clustering with 3 clusters of sizes 50, 51, 49
#
#Cluster means:
# CLASS PETALLENGTH PETALWIDTH SEPALLENGTH SEPALWIDTH
#1 setosa 1.464000 0.244000 5.006000 3.418000
#2 versicolor 4.264706 1.333333 5.915686 2.764706
#3 virginica 5.573469 2.032653 6.622449 2.983673
#
#Clustering vector:
#SELECT "ID","CLUSTER_ID","DISTANCE" FROM ADMIN.IRIS_MODEL59040
#
#Within cluster sum of squares by cluster:
#[1] 15.24040 32.93373 39.15551
#
#Available components:
#[1] "cluster" "centers" "withinss" "size" "distance" "model"
# get used distance
metric t10$distance
#[1] "manhattan"Das zurückgegebene Objekt ist als Liste implementiert und daher können übliche Listenoperationen verwendet werden, um einzelne Komponenten des Ergebnisses abzurufen.names(t3)
#[1] "cluster" "centers" "withinss" "size" "distance" "model"
t3$centers
# CLASS PETALLENGTH PETALWIDTH SEPALLENGTH SEPALWIDTH
#1 setosa 1.464000 0.244000 5.006000 3.418000
#2 versicolor 4.264706 1.333333 5.915686 2.764706
#3 virginica 5.573469 2.032653 6.622449 2.983673
# nzKMeans' parameter getLabels was unset when computing t3
# hence t3$cluster is of class nz.data.frame
head(t3$cluster)
# ID CLUSTER_ID DISTANCE
#1 4 1 0.5188372
#2 8 1 0.0599333
#3 12 1 0.2513802
#4 16 1 1.2130919
#5 20 1 0.3989887
#6 24 1 0.3794628
# nzKMeans' parameter getLabels was TRUE when computing t10
# hence t3$cluster is of class data.frame
head(t10$cluster)
#123456
#146615
res = predict(t3, nziris, id="ID")
head(res)
# ID CLUSTER_ID DISTANCE
#1 2 1 0.4381689
#2 6 1 0.6838070
#3 10 1 0.3665951
#4 14 1 0.9090611
#5 18 1 0.1509702
#6 22 1 0.3376270Das angepasste Modell kann durch Aufruf der überladenen Funktion ' plot() gezeichnet werden. Diese Funktion lädt entweder eine Stichprobe von Punkten nach ihrem ' DISTANCE herunter, oder sie lädt alle Punkte herunter, um eine Matrix von Streudiagrammen zu erstellen, wie es die eingebaute Funktion ' pairs() von R tut.# plot KMeans' result as matrix of
scatterplots plot(t10)data.frames.r = nzKMeans(nziris, k=3, id="ID", format="raw")
names(r)
#[1] "clusters" "columns" "column.statistics"
#[4] "model" "centroids" "modelname"TwoStep
TwoStep ist ein alternativer Clustering-Algorithmus zum " k-means. Seine Hauptvorteile sind, dass es die Anzahl der Cluster automatisch bestimmen kann und dass es eine Mischung aus kategorialen und kontinuierlichen Feldern auf statistisch solide Weise verarbeiten kann.
Im folgenden Clustering-Beispiel wird der Datensatz " IRIS verwendet.
# loads necessary
packages library(nza)
# connect to nza database
nzConnect("user", "password", "TT4-R040", "nza")
# a pointer to IRIS table is created
nziris = nz.data.frame("iris")nzTwoStep zum Clustern der Daten verwendet.# TwoStep model for IRIS
t2 = nzTwoStep(nziris, id="id")print(t2)
#TwoStep clustering with 3 clusters of sizes 50, 50, 50
#
#Cluster means:
# CLASS PETALLENGTH PETALWIDTH SEPALLENGTH SEPALWIDTH
#1 setosa 1.464 0.244 5.006 3.418
#2 virginica 5.552 2.026 6.588 2.974
#3 versicolor 4.260 1.326 5.936 2.770
#
#Clustering vector:
#SELECT " ID "," CLUSTER_ID "," DISTANCE " FROM ADMIN.IRIS_MODEL74356
#
#Within cluster sum of squares by cluster:
#[1] 0.3713140 0.5413910 0.4277027
#
#Available components:
#[1] "cluster" "centers" "withinss" "size" "distance" "model"Das Ergebnisobjekt enthält Informationen über Clusterzentren, Clustergrößen und Quadratsummen innerhalb jedes Clusters. Das Attribut distance speichert die Information darüber, welche Abstandsmetrik verwendet wird.names(t2)
#[1] "cluster" "centers" "withinss" "size" "distance" "model"
t2$size
50 50
#[1] 50
t2$distance
#[1] "loglikelihood"Das angepasste Modell kann auf einen anderen Datensatz angewendet werden. Wenn der Datensatz in der Datenbank gespeichert ist, können Sie die überladene Funktion " predict() verwenden, um die Klassifizierung auf dem Netezza durchzuführen. Die Funktion gibt den Abstand zum nächstgelegenen Cluster und dessen Kennung zurück.res = predict(t2, data, "ID")
head(res)
# ID CLUSTER_ID DISTANCE
#1 2 1 0.34278577
#2 6 1 0.54303152
#3 10 1 0.24827305
#4 14 1 0.67509943
#5 18 1 0.09122145
#6 22 1 0.21751088DISTANCE herunter, oder lädt alle Punkte herunter, um eine Matrix von Streudiagrammen zu erstellen, wie es die eingebaute Funktion ' pairs() von R tut.# plot TwoStep's result as matrix of
scatterplots plot(t2)Die Funktion " nzTwoStep() unterstützt auch ein rohes Ausgabeformat. Dieses Format lädt nur alle Tabellen herunter, die mit dem " KMEANS von Netezza Analytics erstellt wurden, und speichert sie in einer Liste von " data.frames.r = nzKMeans(nziris, k=3, id="ID", format="raw")
names(r)
#[1] "clusters" "columns" "column.statistics"
#[4] "discrete.statistics" "model" "numeric.statistics"
#[7] "modelname" "cluster"