Megosztás a következőn keresztül:


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ó: R-csomag leírása

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.

R-összetevő bemeneteinek diagramja

A tervezőben tárolt adathalmazok automatikusan R-adatkeretté alakulnak, amikor betöltik ezt az összetevőt.

  1. Adja hozzá az Execute R Script összetevőt a folyamathoz.

  2. 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.

  3. 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> , és Param<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ása dataset1: , 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.

  4. 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.

    1. Kötegelje a szkriptet és más egyéni erőforrásokat egy zip-fájlba.
    2. Töltse fel a zip-fájlt Fájladatkészletként a stúdióba.
    3. Húzza az adathalmaz-összetevőt a tervező szerzői lapjának bal oldali összetevőpanelén található Adathalmazok listából.
    4. 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)))
    }
    
  5. 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) .

  6. 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.

  1. 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.

  2. 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.

  3. Csatlakoztassa az adathalmazt a Script Bundle bemeneti porthoz.

  4. 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.

  1. Hozza létre az adatfájlt CSV formátumban, és nevezze el mydatafile.csv.
  2. Hozzon létre egy .zip fájlt, és adja hozzá a CSV-fájlt az archívumhoz.
  3. Töltse fel a tömörített fájlt az Azure Machine Learning-munkaterületre.
  4. Csatlakoztassa az eredményként kapott adatkészletet az Execute R Script összetevő ScriptBundle bemenetéhez.
  5. 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.

  1. 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.

  2. Adjon hozzá egy második példányt az Execute R Script összetevőhöz, és csatlakoztassa az előző összetevő kimeneti portjához.

  3. Í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.