Wrappers para análisis integrados
Las siguientes secciones describen los wrappers soportados para diferentes funciones Netezza Analytics, sus principales argumentos y parámetros. Las secciones también ofrecen ejemplos sencillos de cómo utilizar estas funciones.
> help(nzGlm)Dado que la mayoría de las funciones que proporciona el paquete NZA son envoltorios de las funciones Netezza Analytics, también puede consultar la guía del desarrollador de Netezza Analytics in-database analytics y la guía de referencia de Netezza Analytics in-database analytics para obtener más información. Por ejemplo, si está interesado en los detalles sobre el parámetro de enlace para la función " nzGlm() ", la sección sobre GLM de la guía del desarrollador de análisis en base de datos de Netezza Analytics le ofrece una descripción detallada de las funciones de enlace individuales disponibles.
Árboles de decisión
El paquete Netezza Analytics proporciona un conjunto de sofisticados algoritmos. A continuación se presenta un ejemplo sencillo de algoritmo de árbol de decisión. En las secciones siguientes se muestran ejemplos de otros algoritmos estadísticos y de minería de datos.
Supongamos que el conjunto de datos de adultos se almacena en la base de datos MM en la tabla ADULTOS. En el siguiente fragmento de código, se crea una conexión a la base de datos y, a continuación, se crea un puntero a la tabla con los datos. A continuación, se ajusta el modelo de árbol de decisión y, por último, el modelo ajustado se descarga en R. Todos los pasos son transparentes para el usuario de R.
# 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")El objeto R ' nzadult es un puntero a la tabla ' ADULT en el sistema Netezza. Es un objeto de la clase ' nz.data.frame ' con funciones sobrecargadas como print(), [,] y otras. Como se describe en The Netezza R library , corresponde a un objeto estándar ' data.frame, pero se almacena de forma remota en la base de datos.Las funciones de R que son envoltorios de las rutinas analíticas Netezza pueden tomar este puntero como argumento. Este ejemplo utiliza la función ' nzDecTree() del paquete Netezza Analytics Library for R que construye el árbol de clasificación. La función ' nzDecTree() ' es una envoltura de R que prepara una consulta SQL que llama remotamente al procedimiento almacenado ' DECTREE Netezza Analytics. El procedimiento se ejecuta de forma remota y el modelo final se devuelve a R. A continuación, el modelo se convierte en un objeto de la clase árbol que tiene una estructura similar a los objetos que se crean con la función ' tree() ' de R.
ID " del conjunto de datos " ADULT " se especifica en el parámetro id.# build a tree using built-in analytics
adultTree = nzDecTree(INCOME~AGE+SEX+HOURS_PER_WEEK, nzadult, id="ID")La salida de la función se almacena en la base de datos, mientras que la función ' nzDecTree() ' la transforma por defecto en un objeto R de la clase tree , especificada por el paquete del mismo nombre. Por lo tanto, las funciones sobrecargadas como ' print(), ' plot() o ' predict() ' funcionan con este objeto. Es posible imprimir o visualizar el árbol en R, incluso si se ha ajustado para un gran conjunto de datos con millones de filas.# 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 ) *El modelo ajustado puede aplicarse a otro conjunto de datos. Si el conjunto de datos se almacena en una tabla de base de datos, se puede evitar la transferencia masiva de datos utilizando la función sobrecargada predict() para realizar la clasificación dentro de Netezza.# 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 también podría devolver un objeto de la clase ' rpart, como se especifica en el paquete del mismo nombre. Este objeto también admite funciones sobrecargadas de ' rpart como ' print(), ' plot() o ' 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....) *árboles de regresión
El siguiente ejemplo muestra árboles de regresión. La idea básica es la misma que para los árboles de decisión. En este fragmento de código se utiliza el conjunto de datos " WEATHERR ". La variable de interés es el grado, una variable continua. Los valores medios de la variable grado se almacenan en cada una de las hojas correspondientes del árbol de regresión.
# 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")Para construir un árbol de regresión a distancia, se utiliza la función " nzRegTree() ". Llama al procedimiento almacenado Netezza Analytics ' REGTREE. Sólo el modelo final, es decir, los parámetros del árbol ajustado, se descargan en R y se transforman en un objeto de la clase tree, tal y como especifica el paquete del mismo nombre. Este ejemplo construye un árbol de regresión para predecir la calificación de las variables basándose en todas las demás variables del conjunto de datos. La columna " ID " del conjunto de datos " WEATHERR " se especifica en el parámetro id.wTree = nzRegTree(GRADE~., data=weatherr, id="INSTANCE",
minimprove=0.1, minsplit=2, maxdepth=4)Se pueden utilizar funciones sobrecargadas como ' print() o ' plot() ' para visualizar el árbol ajustado.# 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 *Este modelo preconstruido puede aplicarse a otro conjunto de datos. Si el conjunto de datos está almacenado en la base de datos, se puede utilizar la función sobrecargada ' predict() ' para aplicar el árbol de regresión dentro del sistema Netezza. La función " predict() " llama al procedimiento almacenado " PREDICT_REGTREE ".# 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 también podría devolver un objeto de la clase ' rpart, como se especifica en el paquete del mismo nombre. La funcionalidad es igual a las características de ' rpart ' en ' 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....) *ANOVA unidireccional y bidireccional
Las funciones estadísticas clásicas, como ANOVA, están disponibles en Netezza Analytics. Esta sección cubre el ANOVA unidireccional y bidireccional.
En este ejemplo, se utiliza el conjunto de datos " WEATHERR ". Se excluye la primera instancia para que haya el mismo número de observaciones para cada valor del parámetro en la variable " HUMIDITY.
WEATHERR. Además, excluye la primera fila de la tabla.# 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, ]Las columnas " HUMIDITY " y " OUTLOOK " de esta tabla corresponden a variables de agrupación. La columna " TEMPERATURE " es una variable continua. El ANOVA se utiliza para comprobar si el valor medio de la variable " TEMPERATURE " varía en los distintos subgrupos.La función ' nzAnova() ' ejecuta remotamente el algoritmo ANOVA. La función toma un objeto fórmula como primer argumento.
Si hay una variable en el lado derecho de las fórmulas, la función llama al algoritmo ' ANOVA_CRD_TEST ' de Netezza Analytics. Si hay dos variables a la derecha, la función llama al algoritmo ' ANOVA_RBD_TEST ' de Netezza Analytics. A continuación, la función transforma sus resultados en un objeto de la clase " summary.aov.
HUMIDITY " como variable de tratamiento.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.1Este ejemplo demuestra el algoritmo ANOVA de dos vías, en el que " HUMIDITY " se elige como variable de tratamiento y " OUTLOOK " como variable de bloque.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-medias
Los métodos de agrupación en clústeres son compatibles con el paquete Netezza Analytics.
El siguiente ejemplo de clustering ' k-means ' utiliza el conjunto de datos ' IRIS. El conjunto de datos contiene datos relativos a tres especies diferentes de Iris, a saber, " setosa", " versicolor y " virginica. Así pues, se esperan tres grupos en el conjunto de datos " IRIS ", cada uno relacionado con una especie diferente.
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")La función ' nzKMeans() ' realiza la agrupación de forma remota llamando al procedimiento almacenado ' KMEANS. Los estadísticos de conglomerados, tamaños y valores medios son los únicos datos que se descargan en R y se transforman en un objeto de la clase ' kmeans, como se describe en el paquete stats.
# 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"El objeto devuelto se implementa como una lista y, por lo tanto, se pueden utilizar operaciones de lista comunes para recuperar componentes individuales del resultado.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.3376270El modelo ajustado puede trazarse llamando a la función sobrecargada ' plot(). Esta función descargará una muestra de puntos por su ' DISTANCE, o descargará todos los puntos para producir una matriz de gráficos de dispersión como hace la función incorporada ' pairs() de R.# 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 es un algoritmo de agrupación alternativo al algoritmo ' k-means '. Sus principales ventajas son que puede determinar el número de conglomerados automáticamente y que puede manejar una mezcla de campos categóricos y continuos de forma estadísticamente correcta.
En el siguiente ejemplo de agrupación, se utiliza el conjunto de datos " 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")nzTwoStep " para agrupar los datos.# 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"El objeto de resultado proporciona información sobre los centros de los conglomerados, los tamaños de los conglomerados y las sumas de cuadrados dentro de cada conglomerado. El atributo distancia almacena la información sobre qué métrica de distancia se utiliza.names(t2)
#[1] "cluster" "centers" "withinss" "size" "distance" "model"
t2$size
50 50
#[1] 50
t2$distance
#[1] "loglikelihood"El modelo ajustado puede aplicarse a otro conjunto de datos. Si el conjunto de datos se almacena en la base de datos, puede utilizar la función sobrecargada " predict() " para realizar la clasificación en el sistema Netezza. La función devuelve la distancia al cluster más cercano y su identificador.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, o descarga todos los puntos para producir una matriz de gráficos de dispersión como hace la función incorporada ' pairs() de R.# plot TwoStep's result as matrix of
scatterplots plot(t2)La función " nzTwoStep() " también admite un formato de salida sin procesar. Este formato sólo descarga todas las tablas que son creadas por el algoritmo ' KMEANS de Netezza Analytics y las almacena en una lista de ' 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"