R-szkript összetevő végrehajtása
Ez a cikk azt ismerteti, hogyan futtathat R-kódot az Azure Machine Learning Designer-folyamat R-kódjának futtatásához az R-szkript végrehajtása összetevővel.
Az R használatával olyan feladatokat hajthat végre, amelyeket a meglévő összetevők nem támogatnak, például:
- Egyéni adatátalakítások létrehozása
- Saját metrikák használata az előrejelzések kiértékeléséhez
- Modellek létrehozása a tervezőben nem önálló összetevőként implementált algoritmusokkal
R-verzió támogatása
Az Azure Machine Learning designer az R CRAN (Átfogó R Archív hálózat) disztribúcióját használja. A jelenleg használt verzió a CRAN 3.5.1.
Támogatott R-csomagok
Az R-környezet több mint 100 csomaggal van előtelepítve. A teljes listát az előre telepített R-csomagok című szakaszban találja.
A telepített csomagok megtekintéséhez hozzáadhatja a következő kódot bármely Execute R Script-összetevőhöz.
azureml_main <- function(dataframe1, dataframe2){
print("R script run.")
dataframe1 <- data.frame(installed.packages())
return(list(dataset1=dataframe1, dataset2=dataframe2))
}
Feljegyzés
Ha a folyamat több olyan Végrehajtási R-szkript-összetevőt tartalmaz, amelyeknek olyan csomagokra van szükségük, amelyek nem szerepelnek az előre telepített listában, telepítse a csomagokat minden összetevőbe.
R-csomagok telepítése
További R-csomagok telepítéséhez használja a metódust install.packages()
. A csomagok minden végrehajtási R-szkript-összetevőhöz telepítve vannak. A rendszer nem osztja meg őket más Végrehajtási R-szkript-összetevők között.
Feljegyzés
Nem ajánlott az R-csomag telepítése a szkriptcsomagból. Javasoljuk, hogy közvetlenül a szkriptszerkesztőben telepítse a csomagokat.
Adja meg a CRAN-adattárat a csomagok telepítésekor, például install.packages("zoo",repos = "https://cloud.r-project.org")
.
Figyelmeztetés
Az Excute R Script összetevő nem támogatja a natív fordítást igénylő csomagok telepítését, például qdap
a JAVA-t és drc
a C++-t igénylő csomagokat. Ennek az az oka, hogy ezt az összetevőt egy előre telepített, nem rendszergazdai engedéllyel rendelkező környezetben hajtja végre a rendszer.
Ne telepítsen olyan csomagokat, amelyek előre beépítettek/windowsosak, mivel a tervező összetevői az Ubuntu-on futnak. Annak ellenőrzéséhez, hogy egy csomag előre készült-e a Windowsra, a CRAN-ban kereshet a csomagban, letölthet egy bináris fájlt az operációs rendszernek megfelelően, és ellenőrizheti a Built: part in the DESCRIPTION fájlt. Az alábbiakban egy példa látható:
Ez a minta a Zoo telepítését mutatja be:
# R version: 3.5.1
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.
# Note that functions dependent on the X11 library,
# such as "View," are not supported because the X11 library
# is not preinstalled.
# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be null.
# Param<dataframe1>: a R DataFrame
# Param<dataframe2>: a R DataFrame
azureml_main <- function(dataframe1, dataframe2){
print("R script run.")
if(!require(zoo)) install.packages("zoo",repos = "https://cloud.r-project.org")
library(zoo)
# Return datasets as a Named List
return(list(dataset1=dataframe1, dataset2=dataframe2))
}
Feljegyzés
A csomag telepítése előtt ellenőrizze, hogy már létezik-e, hogy ne ismételje meg a telepítést. Az ismétlődő telepítések miatt a webszolgáltatás kérései időtúllépést okozhatnak.
Hozzáférés a regisztrált adatkészlethez
A munkaterület regisztrált adathalmazaihoz való hozzáféréshez tekintse meg az alábbi mintakódot:
azureml_main <- function(dataframe1, dataframe2){
print("R script run.")
run = get_current_run()
ws = run$experiment$workspace
dataset = azureml$core$dataset$Dataset$get_by_name(ws, "YOUR DATASET NAME")
dataframe2 <- dataset$to_pandas_dataframe()
# Return datasets as a Named List
return(list(dataset1=dataframe1, dataset2=dataframe2))
}
Az R-szkript végrehajtásának konfigurálása
Az R-szkript végrehajtása összetevő kiindulási pontként mintakódot tartalmaz.
A tervezőben tárolt adathalmazok automatikusan R-adatkeretté alakulnak, amikor betöltik ezt az összetevőt.
Adja hozzá az Execute R Script összetevőt a folyamathoz.
Csatlakoztassa azokat a bemeneteket, amelyekre a szkriptnek szüksége van. A bemenetek nem kötelezőek, és tartalmazhatnak adatokat és további R-kódot.
Adathalmaz1: Hivatkozzon az első bemenetre a következőként
dataframe1
: . A bemeneti adatkészletet CSV-, TSV- vagy ARFF-fájlként kell formázni. Vagy csatlakoztathat egy Azure Machine Learning-adatkészletet.Adatkészlet2: Hivatkozzon a második bemenetre a következőként
dataframe2
: . Ezt az adatkészletet CSV-, TSV- vagy ARFF-fájlként vagy Azure Machine Learning-adatkészletként is formázni kell.Szkriptcsomag: A harmadik bemenet .zip fájlokat fogad el. A tömörített fájlok több fájlt és több fájltípust tartalmazhatnak.
Az R-szkript szövegmezőbe írja be vagy illessze be az érvényes R-szkriptet.
Feljegyzés
Legyen óvatos a szkript írásakor. Győződjön meg arról, hogy nincsenek szintaxishibák, például be nem jelentett változók vagy nem fontos összetevők vagy függvények használata. A cikk végén különös figyelmet kell fordítani az előre telepített csomaglistára. Ha nem listázott csomagokat szeretne használni, telepítse őket a szkriptbe. Például:
install.packages("zoo",repos = "https://cloud.r-project.org")
.Az első lépésekhez az R-szkript szövegmezője előre fel van töltve mintakóddal, amelyet szerkesztheti vagy lecserélhet.
# R version: 3.5.1 # The script MUST contain a function named azureml_main, # which is the entry point for this component. # Note that functions dependent on the X11 library, # such as "View," are not supported because the X11 library # is not preinstalled. # The entry point function MUST have two input arguments. # If the input port is not connected, the corresponding # dataframe argument will be null. # Param<dataframe1>: a R DataFrame # Param<dataframe2>: a R DataFrame azureml_main <- function(dataframe1, dataframe2){ print("R script run.") # If a .zip file is connected to the third input port, it's # unzipped under "./Script Bundle". This directory is added # to sys.path. # Return datasets as a Named List return(list(dataset1=dataframe1, dataset2=dataframe2)) }
A belépési pont függvénynek tartalmaznia kell a bemeneti argumentumokat
Param<dataframe1>
, ésParam<dataframe2>
akkor is, ha ezeket az argumentumokat nem használják a függvényben.Feljegyzés
Az Execute R Script összetevőnek átadott adatokra a rendszer az Azure Machine Learning Designertől eltérő módon hivatkozik
dataframe1
dataframe2
(a tervező hivatkozásadataset1
: ,dataset2
). Győződjön meg arról, hogy a bemeneti adatokra helyesen hivatkozik a szkript.Feljegyzés
Előfordulhat, hogy a meglévő R-kódnak kisebb módosításokra van szüksége a tervezői folyamatban való futtatáshoz. Például a CSV formátumban megadott bemeneti adatokat explicit módon adatkészletté kell konvertálni, mielőtt használhatná azokat a kódban. Az R nyelvben használt adatok és oszloptípusok is eltérnek a tervezőben használt adatoktól és oszloptípusoktól.
Ha a szkript nagyobb, mint 16 KB, használja a Szkriptcsomag portot az olyan hibák elkerüléséhez, mint a CommandLine, amely meghaladja az 16597 karakteres korlátot.
- Kötegelje a szkriptet és más egyéni erőforrásokat egy zip-fájlba.
- Töltse fel a zip-fájlt Fájladatkészletként a stúdióba.
- Húzza az adathalmaz-összetevőt a tervező szerzői lapjának bal oldali összetevőpanelén található Adathalmazok listából.
- Csatlakoztassa az adathalmaz-összetevőt az R-szkriptösszetevő Szkriptköteg portjához.
A szkriptcsomagban a szkriptet a következő mintakód használja fel:
azureml_main <- function(dataframe1, dataframe2){ # Source the custom R script: my_script.R source("./Script Bundle/my_script.R") # Use the function that defined in my_script.R dataframe1 <- my_func(dataframe1) sample <- readLines("./Script Bundle/my_sample.txt") return (list(dataset1=dataframe1, dataset2=data.frame("Sample"=sample))) }
Véletlenszerű mag esetén adjon meg egy értéket, amelyet az R-környezetben használ a véletlenszerű magértékként. Ez a paraméter egyenértékű az R-kódban való hívással
set.seed(value)
.Küldje el a folyamatot.
Results (Eredmények)
Az R-szkript-összetevők több kimenetet is visszaadhatnak, de R-adatkeretként kell megadni őket. A tervező automatikusan adathalmazokká alakítja az adatkereteket a többi összetevővel való kompatibilitás érdekében.
Az R normál üzeneteit és hibáit a rendszer visszaadja az összetevő naplójába.
Ha az R-szkriptben kell kinyomtatnia az eredményeket, a kinyomtatott eredményeket az összetevő jobb oldali paneljén, az Outputs+logs lap 70_driver_log találja.
Mintaszkriptek
A folyamat sokféleképpen bővíthető egyéni R-szkriptekkel. Ez a szakasz mintakódot biztosít a gyakori feladatokhoz.
R-szkript hozzáadása bemenetként
Az R-szkript végrehajtása összetevő bemenetként tetszőleges R-szkriptfájlokat támogat. A használatukhoz fel kell töltenie őket a munkaterületre a .zip fájl részeként.
Ha R-kódot tartalmazó .zip fájlt szeretne feltölteni a munkaterületre, nyissa meg az Adathalmazok eszközlapot. Válassza az Adathalmaz létrehozása lehetőséget, majd válassza a Helyi fájlból és a Fájl adatkészlet típusa lehetőséget.
Ellenőrizze, hogy a tömörített fájl megjelenik-e a My Datasets (Saját adathalmazok) kategóriában a bal oldali összetevőfán.
Csatlakoztassa az adathalmazt a Script Bundle bemeneti porthoz.
A .zip fájl összes fájlja elérhető a folyamat futási ideje alatt.
Ha a szkriptcsomagfájl könyvtárstruktúrát tartalmaz, a struktúra megmarad. A kódot azonban módosítania kell, hogy a könyvtárat előre fel lehessen függesztetni a ./Script Bundle könyvtárra.
Adatok feldolgozása
Az alábbi minta bemutatja, hogyan méretezheti és normalizálhatja a bemeneti adatokat:
# R version: 3.5.1
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.
# Note that functions dependent on the X11 library,
# such as "View," are not supported because the X11 library
# is not preinstalled.
# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be null.
# Param<dataframe1>: a R DataFrame
# Param<dataframe2>: a R DataFrame
azureml_main <- function(dataframe1, dataframe2){
print("R script run.")
# If a .zip file is connected to the third input port, it's
# unzipped under "./Script Bundle". This directory is added
# to sys.path.
series <- dataframe1$width
# Find the maximum and minimum values of the width column in dataframe1
max_v <- max(series)
min_v <- min(series)
# Calculate the scale and bias
scale <- max_v - min_v
bias <- min_v / dis
# Apply min-max normalizing
dataframe1$width <- dataframe1$width / scale - bias
dataframe2$width <- dataframe2$width / scale - bias
# Return datasets as a Named List
return(list(dataset1=dataframe1, dataset2=dataframe2))
}
.zip fájl beolvasása bemenetként
Ez a minta bemutatja, hogyan használhat adatkészletet egy .zip fájlban az R-szkript végrehajtása összetevő bemeneteként.
- Hozza létre az adatfájlt CSV formátumban, és nevezze el mydatafile.csv.
- Hozzon létre egy .zip fájlt, és adja hozzá a CSV-fájlt az archívumhoz.
- Töltse fel a tömörített fájlt az Azure Machine Learning-munkaterületre.
- Csatlakoztassa az eredményként kapott adatkészletet az Execute R Script összetevő ScriptBundle bemenetéhez.
- Az alábbi kóddal olvassa be a CSV-adatokat a tömörített fájlból.
azureml_main <- function(dataframe1, dataframe2){
print("R script run.")
mydataset<-read.csv("./Script Bundle/mydatafile.csv",encoding="UTF-8");
# Return datasets as a Named List
return(list(dataset1=mydataset, dataset2=dataframe2))
}
Sorok replikálása
Ez a minta bemutatja, hogyan replikálhat pozitív rekordokat egy adathalmazban a minta egyensúlyának érdekében:
azureml_main <- function(dataframe1, dataframe2){
data.set <- dataframe1[dataframe1[,1]==-1,]
# positions of the positive samples
pos <- dataframe1[dataframe1[,1]==1,]
# replicate the positive samples to balance the sample
for (i in 1:20) data.set <- rbind(data.set,pos)
row.names(data.set) <- NULL
# Return datasets as a Named List
return(list(dataset1=data.set, dataset2=dataframe2))
}
R-objektumok átadása az R-szkript-összetevők végrehajtása között
Az R-objektumok a belső szerializálási mechanizmussal továbbíthatók az R-szkript végrehajtása összetevő példányai között. Ez a példa feltételezi, hogy az R-objektumot A
két R-szkript-összetevő között szeretné áthelyezni.
Adja hozzá az első Execute R Script összetevőt a folyamathoz. Ezután írja be a következő kódot az R-szkript szövegmezőbe, és hozzon létre egy szerializált objektumot
A
oszlopként az összetevő kimeneti adattáblájában:azureml_main <- function(dataframe1, dataframe2){ print("R script run.") # some codes generated A serialized <- as.integer(serialize(A,NULL)) data.set <- data.frame(serialized,stringsAsFactors=FALSE) return(list(dataset1=data.set, dataset2=dataframe2)) }
Az egész szám típusra való explicit átalakítás azért történik, mert a szerializációs függvény R
Raw
formátumban adja ki az adatokat, amelyet a tervező nem támogat.Adjon hozzá egy második példányt az Execute R Script összetevőhöz, és csatlakoztassa az előző összetevő kimeneti portjához.
Írja be a következő kódot az R-szkript szövegmezőbe, hogy kinyerje az objektumot
A
a bemeneti adattáblából.azureml_main <- function(dataframe1, dataframe2){ print("R script run.") A <- unserialize(as.raw(dataframe1$serialized)) # Return datasets as a Named List return(list(dataset1=dataframe1, dataset2=dataframe2)) }
Előre telepített R-csomagok
Jelenleg az alábbi előre telepített R-csomagok érhetők el:
Csomag | Verzió |
---|---|
askpass | 1,1 |
assertthat | 0.2.1 |
backports | 1.1.4 |
alap | 3.5.1 |
base64enc | 0.1-3 |
BH | 1.69.0-1 |
bindr | 0.1.1 |
bindrcpp | 0.2.2 |
bitops | 1.0-6 |
indítás | 1.3-22 |
seprű | 0.5.2 |
hívó | 3.2.0 |
kalap | 6.0-84 |
caTools | 1.17.1.2 |
cellranger | 1.1.0 |
osztály | 7.3-15 |
Cli | 1.1.0 |
clipr | 0.6.0 |
fürt | 2.0.7-1 |
kódtoolok | 0.2-16 |
színtér | 1.4-1 |
fordítóprogram | 3.5.1 |
zsírkréta | 1.3.4 |
csavarodik | 3.3 |
data.table | 1.12.2 |
adatkészletek | 3.5.1 |
DBI | 1.0.0 |
dbplyr | 1.4.1 |
emészt | 0.6.19 |
dplyr | 0.7.6 |
e1071 | 1.7-2 |
evaluate | 0,14 |
fani | 0.4.0 |
forcats | 0.3.0 |
foreach | 1.4.4 |
külföldi | 0.8-71 |
Fs | 1.3.1 |
gdata | 2.18.0 |
Generikus | 0.0.2 |
ggplot2 | 3.2.0 |
glmnet | 2.0-18 |
ragasztó | 1.3.1 |
Gower | 0.2.1 |
gplots | 3.0.1.1 |
grafika | 3.5.1 |
grDevices | 3.5.1 |
rács | 3.5.1 |
gtable | 0.3.0 |
gtoolok | 3.8.1 |
kikötő | 2.1.0 |
highr | 0,8 |
Hms | 0.4.2 |
htmltoolok | 0.3.6 |
httr | 1.4.0 |
ipred | 0.9-9 |
iterátorok | 1.0.10 |
jsonlite | 1.6 |
KernSmooth | 2.23-15 |
knitr | 1.23 |
címkézés | 0.3 |
rács | 0.20-38 |
láva | 1.6.5 |
lazyeval | 0.2.2 |
lubridate | 1.7.4 |
magrittr | 1,5 |
markdown | 0 |
TÖMEG | 7.3-51.4 |
Mátrix | 1.2-17 |
metódusok | 3.5.1 |
mgcv | 1.8-28 |
MIME | 0,7 |
ModelMetrics | 1.2.2 |
modellező | 0.1.4 |
munsell | 0.5.0 |
nlme | 3.1-140 |
nnet | 7.3-12 |
numDeriv | 2016.8-1.1 |
openssl | 1.4 |
parallel | 3.5.1 |
pillér | 1.4.1 |
pkgconfig | 2.0.2 |
plogr | 0.2.0 |
rétegelt | 1.8.4 |
prettyunits | 1.0.2 |
processx | 3.3.1 |
prodlim | 2018.04.18 |
haladás | 1.2.2 |
Ps | 1.3.0 |
purrr | 0.3.2 |
quadprog | 1.5-7 |
quantmod | 0.4-15 |
R6 | 2.4.0 |
randomForest | 4.6-14 |
RColorBrewer | 1.1-2 |
Rcpp | 1.0.1 |
RcppRoll | 0.3.0 |
olvasó | 1.3.1 |
readxl | 1.3.1 |
receptek | 0.1.5 |
Visszavágót | 1.0.1 |
reprex | 0.3.0 |
újraformázás2 | 1.4.3 |
újraértesít | 1.12 |
rlang | 0.4.0 |
rmarkdown | 1.13 |
ROCR | 1.0-7 |
rpart | 4.1-15 |
rstudioapi | 0,1 |
rvest | 0.3.4 |
mérleg | 1.0.0 |
választó | 0.4-1 |
térbeli | 7.3-11 |
splines | 3.5.1 |
NÉGYZET | 2017.10-1 |
statisztika | 3.5.1 |
statisztikák4 | 3.5.1 |
stringi | 1.4.3 |
sztring | 1.3.1 |
túlélés | 2.44-1.1 |
sys | 3.2 |
tcltk | 3.5.1 |
tibble | 2.1.3 |
tidyr | 0.8.3 |
tidyselect | 0.2.5 |
tidyverse | 1.2.1 |
timeDate | 3043.102 |
tinytex | 0,13 |
eszközök | 3.5.1 |
tseries | 0.10-47 |
TTR | 0.23-4 |
utf8 | 1.1.4 |
eszközök | 3.5.1 |
vctrs | 0.1.0 |
viridisLite | 0.3.0 |
bajusz | 0.3-2 |
withr | 2.1.2 |
xfun | 0,8 |
xml2 | 1.2.0 |
xts | 0.11-2 |
yaml | 2.2.0 |
zeallot | 0.1.0 |
állatkert | 1.8-6 |
Következő lépések
Tekintse meg az Azure Machine Learning számára elérhető összetevőket.