기본 제공 분석용 래퍼
다음 섹션에서는 다양한 Netezza Analytics 함수에 대해 지원되는 래퍼, 주요 인수 및 매개변수에 대해 설명합니다. 이 섹션에서는 이러한 기능을 사용하는 방법에 대한 간단한 예시도 제공합니다.
> help(nzGlm)NZA 패키지에서 제공하는 대부분의 기능은 Netezza Analytics 기능을 래퍼링한 것이므로, 자세한 내용은 Netezza Analytics 리틱스 데이터베이스 내 애널리틱스 개발자 가이드와 Netezza Analytics 데이터베이스 내 애널리틱스 참조 가이드도 참고하세요. 예를 들어, ' nzGlm() ' 함수에 대한 링크 매개변수에 대한 자세한 내용이 궁금하다면, Netezza Analytics 데이터베이스 내 분석 개발자 가이드의 GLM 섹션에서 사용 가능한 개별 링크 기능에 대한 자세한 설명을 확인할 수 있습니다.
의사결정 트리
Netezza Analytics 패키지는 정교한 알고리즘 세트를 제공합니다. 의사 결정 트리 알고리즘의 간단한 예가 아래에 나와 있습니다. 다음 섹션에서는 다른 통계 및 데이터 마이닝 알고리즘의 예가 나와 있습니다.
성인 데이터 세트가 ADULT 테이블의 데이터베이스 MM에 저장되어 있다고 가정합니다. 아래 코드 스니펫에서는 데이터베이스에 대한 연결이 생성된 다음 데이터가 있는 테이블에 대한 포인터가 만들어집니다. 다음으로 의사 결정 트리 모델을 피팅하고 마지막으로 피팅된 모델을 R로 다운로드합니다. 모든 단계는 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")' nzadult R 개체는 Netezza 시스템의 ' ADULT ' 테이블에 대한 포인터입니다. 인쇄(), [,] 등과 같은 오버로드된 함수가 있는 ' nz.data.frame ' 클래스의 객체입니다. 설명된 대로 Netezza R 라이브러리 , 표준 ' data.frame 객체에 해당하지만 데이터베이스에 원격으로 저장됩니다.Netezza 분석 루틴의 래퍼인 R 함수는 이 포인터를 인수로 사용할 수 있습니다. 이 예제에서는 분류 트리를 구축하는 R용 Netezza Analytics 라이브러리 패키지의 ' nzDecTree() ' 함수를 사용합니다. ' nzDecTree() ' 함수는 Netezza Analytics ' DECTREE 저장 프로시저를 원격으로 호출하는 SQL 쿼리를 준비하는 R 래퍼입니다. 절차가 원격으로 실행되고 최종 모델이 R로 반환됩니다. 그런 다음 모델은 R ' tree() ' 함수로 만든 개체와 유사한 구조를 가진 트리 클래스의 개체로 변환됩니다.
ADULT '의 ' ID 열은 id 매개변수에 지정됩니다.# build a tree using built-in analytics
adultTree = nzDecTree(INCOME~AGE+SEX+HOURS_PER_WEEK, nzadult, id="ID")함수 출력은 데이터베이스에 저장되고 함수 ' nzDecTree() '은 기본적으로 같은 이름의 패키지로 지정된 클래스 트리의 R 객체로 변환합니다. 따라서 ' print(), ' plot() ' 또는 ' predict() '과 같은 오버로드된 함수는 이 객체에서 작동합니다. 수백만 개의 행이 있는 대규모 데이터 집합에 맞게 트리를 구성한 경우에도 R에서 트리를 인쇄하거나 시각화할 수 있습니다.# 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 ) *적합 모델은 다른 데이터 세트에 적용할 수 있습니다. 데이터 세트가 데이터베이스 테이블에 저장되어 있는 경우, 과부하된 함수 predict()를 사용하여 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 '은 같은 이름의 패키지에 지정된 대로 ' rpart' 클래스의 객체를 반환할 수도 있습니다. 이 오브젝트는 ' print(), ' plot() ' 또는 ' predict()' 와 같은 ' rpart '의 오버로드된 함수도 지원합니다.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....) *회귀 트리
아래 예는 회귀 트리를 보여줍니다. 기본 개념은 의사 결정 트리와 동일합니다. 이 코드 스니펫에서는 ' WEATHERR 데이터 세트가 사용됩니다. 관심 변수는 연속형 변수인 성적입니다. 변수 성적의 평균값은 회귀 트리의 각 해당 잎에 저장됩니다.
# 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")회귀 트리를 원격으로 구축하려면 ' nzRegTree() ' 함수를 사용합니다. Netezza Analytics 저장 프로시저 ' REGTREE'을 호출합니다. 최종 모델, 즉 적합 트리의 매개 변수만 R로 다운로드되고 같은 이름의 패키지에 지정된 대로 클래스 트리의 객체로 변환됩니다. 이 예는 데이터 세트 내의 다른 모든 변수를 기반으로 변수 등급을 예측하기 위한 회귀 트리를 구축합니다. 데이터 집합 ' WEATHERR '의 ' ID 열은 id 매개변수에 지정됩니다.wTree = nzRegTree(GRADE~., data=weatherr, id="INSTANCE",
minimprove=0.1, minsplit=2, maxdepth=4)' print() ' 또는 ' plot() '와 같은 오버로드된 함수를 사용하여 장착된 트리를 시각화할 수 있습니다.# 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 *이 사전 구축된 모델을 다른 데이터 집합에 적용할 수 있습니다. 데이터 세트가 데이터베이스에 저장되어 있는 경우, 오버로드된 ' predict() ' 함수를 사용하여 Netezza 시스템 내에서 회귀 트리를 적용할 수 있습니다. ' predict() ' 함수는 ' 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 '은 같은 이름의 패키지에 지정된 대로 ' rpart' 클래스의 객체를 반환할 수도 있습니다. 이 기능은 ' nzDecTree()'의 ' rpart 기능과 동일합니다: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
Netezza Analytics ANOVA와 같은 고전적인 통계 함수를 사용할 수 있습니다. 이 섹션에서는 단방향 및 양방향 분산분석에 대해 설명합니다.
이 샘플에서는 ' WEATHERR 데이터 세트가 사용되었습니다. 첫 번째 인스턴스는 제외되어 변수 ' HUMIDITY의 각 매개 변수 값에 대해 동일한 수의 관찰이 이루어집니다.
WEATHERR 테이블에 대한 포인터를 생성합니다. 또한 표의 첫 번째 행은 제외합니다.# 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, ]이 표의 ' HUMIDITY ' 및 ' OUTLOOK ' 열은 그룹화 변수에 해당합니다. ' TEMPERATURE ' 열은 연속형 변수입니다. ' TEMPERATURE ' 변수의 평균값이 하위 그룹에 따라 달라지는지 확인하기 위해 분산분석(ANOVA)을 사용합니다.' nzAnova() ' 함수는 ANOVA 알고리즘을 원격으로 실행합니다. 이 함수는 수식 객체를 첫 번째 인수로 받습니다.
수식의 오른쪽에 변수가 하나 있는 경우, 이 함수는 Netezza Analytics' ANOVA_CRD_TEST 알고리즘을 호출합니다. 오른쪽에 두 개의 변수가 있는 경우, 이 함수는 Netezza Analytics' ANOVA_RBD_TEST 알고리즘을 호출합니다. 그런 다음 함수는 그 결과를 ' summary.aov' 클래스의 객체로 변환합니다.
HUMIDITY '이 처리 변수로 선택된 단방향 분산분석 알고리즘을 보여줍니다.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.1이 예는 ' HUMIDITY '이 처리 변수로 선택되고 ' OUTLOOK '가 블록 변수로 선택되는 양방향 분산분석 알고리즘을 보여줍니다.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-평균
클러스터링 방법은 Netezza Analytics 패키지에서 지원됩니다.
다음 ' k-means 클러스터링 예제에서는 ' IRIS ' 데이터 집합을 사용합니다. 데이터 세트에는 ' setosa, ' versicolor' , ' virginica' 등 세 가지 아이리스 종에 대한 데이터가 포함되어 있습니다. 따라서 ' IRIS 데이터 세트에는 각각 다른 종과 관련된 세 개의 클러스터가 예상됩니다.
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")' nzKMeans() ' 함수는 저장 프로시저 ' KMEANS'를 호출하여 원격으로 클러스터링을 수행합니다. 클러스터 통계, 크기 및 평균값은 통계 패키지에 설명된 대로 R로 다운로드되어 ' kmeans 클래스의 개체로 변환되는 유일한 데이터입니다.
# 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"반환된 객체는 목록으로 구현되므로 일반적인 목록 연산을 사용하여 결과의 단일 구성 요소를 검색할 수 있습니다.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.3376270장착된 모델은 오버로드된 ' plot() ' 함수를 호출하여 플로팅할 수 있습니다. 이 함수는 ' DISTANCE'을 기준으로 점의 샘플을 다운로드하거나 R의 내장 함수 ' pairs() '와 같이 모든 점을 다운로드하여 분산형 차트의 행렬을 생성합니다.# 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 '은 ' k-means ' 알고리즘의 대체 클러스터링 알고리즘입니다. 주요 장점은 클러스터 수를 자동으로 결정할 수 있고 범주형 필드와 연속형 필드를 통계적으로 건전한 방식으로 혼합하여 처리할 수 있다는 점입니다.
다음 클러스터링 예제에서는 ' 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 ' 함수를 사용하여 데이터를 클러스터링합니다.# 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"결과 개체는 클러스터 중심, 클러스터 크기, 각 클러스터 내 제곱의 합에 대한 정보를 제공합니다. 거리 속성은 사용된 거리 메트릭에 대한 정보를 저장합니다.names(t2)
#[1] "cluster" "centers" "withinss" "size" "distance" "model"
t2$size
50 50
#[1] 50
t2$distance
#[1] "loglikelihood"적합 모델은 다른 데이터 세트에 적용할 수 있습니다. 데이터 세트가 데이터베이스에 저장되어 있는 경우, 오버로드된 ' predict() ' 함수를 사용하여 Netezza 시스템에서 분류를 수행할 수 있습니다. 이 함수는 가장 가까운 클러스터와 그 식별자까지의 거리를 반환합니다.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'을 기준으로 포인트 샘플을 다운로드하거나, R의 내장 함수 ' pairs() '처럼 모든 포인트를 다운로드하여 분산형 차트의 행렬을 생성합니다.# plot TwoStep's result as matrix of
scatterplots plot(t2)' nzTwoStep() ' 함수는 원시 출력 형식도 지원합니다. 이 형식은 Netezza Analytics ' KMEANS 알고리즘으로 생성된 모든 테이블만 다운로드하여 ' 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"