R-scriptonderdeel uitvoeren

In dit artikel wordt beschreven hoe u het onderdeel R-script uitvoeren gebruikt om R-code uit te voeren in uw Azure Machine Learning Designer-pijplijn.

Met R kunt u taken uitvoeren die niet worden ondersteund door bestaande onderdelen, zoals:

  • Aangepaste gegevenstransformaties maken
  • Uw eigen metrische gegevens gebruiken om voorspellingen te evalueren
  • Modellen bouwen met behulp van algoritmen die niet zijn geïmplementeerd als zelfstandige onderdelen in de ontwerpfunctie

Ondersteuning voor R-versies

Azure Machine Learning Designer maakt gebruik van de CRAN-distributie (Comprehensive R Archive Network) van R. De momenteel gebruikte versie is CRAN 3.5.1.

Ondersteunde R-pakketten

De R-omgeving is vooraf geïnstalleerd met meer dan 100 pakketten. Zie de sectie Vooraf geïnstalleerde R-pakketten voor een volledige lijst.

U kunt ook de volgende code toevoegen aan een R-scriptonderdeel uitvoeren om de geïnstalleerde pakketten weer te geven.

azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  dataframe1 <- data.frame(installed.packages())
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Notitie

Als uw pijplijn meerdere execute R Script-onderdelen bevat die pakketten nodig hebben die niet in de vooraf geïnstalleerde lijst staan, installeert u de pakketten in elk onderdeel.

R-pakketten installeren

Gebruik de install.packages() methode om extra R-pakketten te installeren. Pakketten worden geïnstalleerd voor elk R-scriptonderdeel uitvoeren. Ze worden niet gedeeld met andere onderdelen van Execute R Script.

Notitie

Het wordt NIET aanbevolen om het R-pakket te installeren vanuit de scriptbundel. Het wordt aanbevolen om pakketten rechtstreeks in de scripteditor te installeren. Geef de CRAN-opslagplaats op wanneer u pakketten installeert, zoals install.packages("zoo",repos = "https://cloud.r-project.org").

Waarschuwing

Het excute R-scriptonderdeel biedt geen ondersteuning voor het installeren van pakketten waarvoor systeemeigen compilatie is vereist, zoals qdap een pakket waarvoor JAVA is vereist en drc een pakket waarvoor C++ is vereist. Dit komt doordat dit onderdeel wordt uitgevoerd in een vooraf geïnstalleerde omgeving met niet-beheerdersmachtigingen. Installeer geen pakketten die vooraf zijn gebouwd op/voor Windows, omdat de ontwerponderdelen worden uitgevoerd op Ubuntu. Als u wilt controleren of een pakket vooraf is gebouwd in Windows, kunt u naar CRAN gaan en uw pakket doorzoeken, één binair bestand downloaden op basis van uw besturingssysteem en ingebouwd: deel in het DESCRIPTION-bestand controleren. Hier volgt een voorbeeld: Beschrijving van R-pakket

In dit voorbeeld ziet u hoe u Zoo installeert:

# 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))
}

Notitie

Voordat u een pakket installeert, controleert u of het al bestaat, zodat u een installatie niet herhaalt. Herhaalde installaties kunnen ertoe leiden dat er een time-out optreedt voor webserviceaanvragen.

Toegang tot geregistreerde gegevensset

U kunt de volgende voorbeeldcode raadplegen voor toegang tot de geregistreerde gegevenssets in uw werkruimte:

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))
}

R-script uitvoeren configureren

Het onderdeel R-script uitvoeren bevat voorbeeldcode als uitgangspunt.

Diagram van invoer voor een R-onderdeel

Gegevenssets die zijn opgeslagen in de ontwerpfunctie, worden automatisch geconverteerd naar een R-gegevensframe wanneer ze met dit onderdeel worden geladen.

  1. Voeg het onderdeel R-script uitvoeren toe aan uw pijplijn.

  2. Verbind alle invoer die het script nodig heeft. Invoer is optioneel en kan gegevens en aanvullende R-code bevatten.

    • Gegevensset1: verwijs naar de eerste invoer als dataframe1. De invoergegevensset moet zijn opgemaakt als een CSV-, TSV- of ARFF-bestand. U kunt ook een Azure Machine Learning-gegevensset verbinden.

    • Gegevensset2: verwijs naar de tweede invoer als dataframe2. Deze gegevensset moet ook zijn opgemaakt als een CSV-, TSV- of ARFF-bestand of als een Azure Machine Learning-gegevensset.

    • Scriptbundel: De derde invoer accepteert .zip bestanden. Een zip-bestand kan meerdere bestanden en meerdere bestandstypen bevatten.

  3. Typ of plak een geldig R-script in het tekstvak R-script .

    Notitie

    Wees voorzichtig bij het schrijven van uw script. Zorg ervoor dat er geen syntaxisfouten zijn, zoals het gebruik van niet-opgegeven variabelen of niet-geimporteerde onderdelen of functies. Besteed extra aandacht aan de vooraf geïnstalleerde pakketlijst aan het einde van dit artikel. Als u pakketten wilt gebruiken die niet worden vermeld, installeert u deze in uw script. Een voorbeeld is install.packages("zoo",repos = "https://cloud.r-project.org").

    Om u op weg te helpen, wordt het tekstvak R-script vooraf ingevuld met voorbeeldcode, die u kunt bewerken of vervangen.

    # 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))
    }
    

    De invoerpuntfunctie moet de invoerargumenten Param<dataframe1> en Param<dataframe2>hebben, zelfs als deze argumenten niet worden gebruikt in de functie.

    Notitie

    Naar de gegevens die worden doorgegeven aan het onderdeel Execute R Script wordt verwezen als dataframe1 en dataframe2, wat verschilt van Azure Machine Learning Designer (de ontwerpfunctieverwijzing is dataset1, dataset2). Zorg ervoor dat in het script correct naar invoergegevens wordt verwezen.

    Notitie

    Bestaande R-code moet mogelijk kleine wijzigingen hebben om in een ontwerppijplijn uit te voeren. Invoergegevens die u in CSV-indeling opgeeft, moeten bijvoorbeeld expliciet worden geconverteerd naar een gegevensset voordat u deze in uw code kunt gebruiken. Gegevens- en kolomtypen die in de R-taal worden gebruikt, verschillen in sommige opzichten ook van de gegevens- en kolomtypen die in de ontwerpfunctie worden gebruikt.

  4. Als uw script groter is dan 16 kB, gebruikt u de poort scriptbundel om fouten te voorkomen zoals CommandLine overschrijdt de limiet van 16597 tekens.

    1. Bundel het script en andere aangepaste resources in een zip-bestand.
    2. Upload het ZIP-bestand als een bestandsgegevensset naar de studio.
    3. Sleep het gegevenssetonderdeel vanuit de lijst Gegevenssets in het linkerdeelvenster van de ontwerppagina.
    4. Verbind het gegevenssetonderdeel met de poort scriptbundel van het onderdeel R Script uitvoeren .

    Hieronder ziet u de voorbeeldcode om het script in de scriptbundel te gebruiken:

    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. Voer voor Willekeurig zaad een waarde in die u in de R-omgeving wilt gebruiken als de willekeurige seed-waarde. Deze parameter is gelijk aan het aanroepen set.seed(value) in R-code.

  6. Verzend de pijplijn.

Resultaten

R-scriptonderdelen uitvoeren kunnen meerdere uitvoerwaarden retourneren, maar deze moeten worden opgegeven als R-gegevensframes. De ontwerpfunctie converteert gegevensframes automatisch naar gegevenssets voor compatibiliteit met andere onderdelen.

Standaardberichten en fouten van R worden geretourneerd naar het logboek van het onderdeel.

Als u resultaten wilt afdrukken in het R-script, vindt u de afgedrukte resultaten in 70_driver_log onder het tabblad Uitvoer en logboeken in het rechterdeelvenster van het onderdeel.

Voorbeeldscripts

Er zijn veel manieren om uw pijplijn uit te breiden met behulp van aangepaste R-scripts. Deze sectie bevat voorbeeldcode voor algemene taken.

Een R-script toevoegen als invoer

Het onderdeel Execute R Script ondersteunt willekeurige R-scriptbestanden als invoer. Als u ze wilt gebruiken, moet u ze uploaden naar uw werkruimte als onderdeel van het .zip-bestand.

  1. Als u een .zip-bestand met R-code wilt uploaden naar uw werkruimte, gaat u naar de assetpagina Gegevenssets . Selecteer Gegevensset maken en selecteer vervolgens Van lokaal bestand en de optie Type bestandsgegevensset.

  2. Controleer of het zip-bestand wordt weergegeven in Mijn gegevenssets onder de categorie Gegevenssets in de linkeronderdelenstructuur.

  3. Verbind de gegevensset met de invoerpoort scriptbundel .

  4. Alle bestanden in het .zip-bestand zijn beschikbaar tijdens de uitvoering van de pijplijn.

    Als het scriptbundelbestand een mapstructuur bevat, blijft de structuur behouden. Maar u moet uw code wijzigen om de map ./Script Bundle toe te voegen aan het pad.

Gegevens verwerken

In het volgende voorbeeld ziet u hoe u invoergegevens kunt schalen en normaliseren:

# 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))
}

Een .zip-bestand als invoer lezen

In dit voorbeeld ziet u hoe u een gegevensset in een .zip-bestand gebruikt als invoer voor het onderdeel R-script uitvoeren.

  1. Maak het gegevensbestand in CSV-indeling en geef het de naammydatafile.csv.
  2. Maak een .zip-bestand en voeg het CSV-bestand toe aan het archief.
  3. Upload het zip-bestand naar uw Azure Machine Learning-werkruimte.
  4. Verbind de resulterende gegevensset met de ScriptBundle-invoer van het onderdeel Execute R Script .
  5. Gebruik de volgende code om de CSV-gegevens uit het zip-bestand te lezen.
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))
}

Rijen repliceren

In dit voorbeeld ziet u hoe u positieve records in een gegevensset repliceert om het voorbeeld te verdelen:

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-objecten doorgeven tussen onderdelen van R-script uitvoeren

U kunt R-objecten doorgeven tussen exemplaren van het onderdeel R-script uitvoeren met behulp van het interne serialisatiemechanisme. In dit voorbeeld wordt ervan uitgegaan dat u het R-object met de naam A wilt verplaatsen tussen twee execute R Script-onderdelen.

  1. Voeg het eerste onderdeel Execute R Script toe aan uw pijplijn. Voer vervolgens de volgende code in het tekstvak R-script in om een geserialiseerd object A te maken als een kolom in de uitvoergegevenstabel van het onderdeel:

    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))
    }
    

    De expliciete conversie naar het type geheel getal wordt uitgevoerd omdat de serialisatiefunctie gegevens uitvoert in de R-indeling Raw , die de ontwerper niet ondersteunt.

  2. Voeg een tweede exemplaar van het onderdeel Execute R Script toe en verbind dit met de uitvoerpoort van het vorige onderdeel.

  3. Typ de volgende code in het tekstvak R-script om het object A uit de tabel met invoergegevens te extraheren.

    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))
    }
    

Vooraf geïnstalleerde R-pakketten

De volgende vooraf geïnstalleerde R-pakketten zijn momenteel beschikbaar:

Pakket Versie
Askpass 1.1
assertthat 0.2.1
backports 1.1.4
base 3.5.1
base64enc 0.1-3
BH 1.69.0-1
bindr 0.1.1
bindrcpp 0.2.2
bitops 1.0-6
boot 1.3-22
broom 0.5.2
callr 3.2.0
dakje 6.0-84
caTools 1.17.1.2
cellranger 1.1.0
klasse 7.3-15
cli 1.1.0
clipr 0.6.0
cluster 2.0.7-1
codetools 0.2-16
colorspace 1.4-1
compiler 3.5.1
crayon 1.3.4
curl 3,3
data.table 1.12.2
gegevenssets 3.5.1
DBI 1.0.0
dbplyr 1.4.1
digest 0.6.19
dplyr 0.7.6
e1071 1.7-2
evaluate 0,14
fansi 0.4.0
forcats 0.3.0
foreach 1.4.4
foreign 0.8-71
Fs 1.3.1
gdata 2.18.0
Generics 0.0.2
ggplot2 3.2.0
glmnet 2.0-18
glue 1.3.1
gower 0.2.1
gplots 3.0.1.1
afbeeldingen 3.5.1
grDevices 3.5.1
grid 3.5.1
gtable 0.3.0
gtools 3.8.1
haven 2.1.0
highr 0,8
hms 0.4.2
htmltools 0.3.6
httr 1.4.0
ipred 0.9-9
iterators 1.0.10
jsonlite 1.6
KernSmooth 2.23-15
knitr 1,23
labeling 0.3
lattice 0.20-38
lava 1.6.5
lazyeval 0.2.2
lubridate 1.7.4
magrittr 1.5
markdown 1
MASS 7.3-51.4
Matrix 1.2-17
methods 3.5.1
mgcv 1.8-28
mime 0,7
ModelMetrics 1.2.2
modelr 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
pillar 1.4.1
pkgconfig 2.0.2
plogr 0.2.0
plyr 1.8.4
prettyunits 1.0.2
processx 3.3.1
prodlim 2018.04.18
progress 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
readr 1.3.1
readxl 1.3.1
recipes 0.1.5
rematch 1.0.1
reprex 0.3.0
reshape2 1.4.3
reticulate 1.12
rlang 0.4.0
rmarkdown 1.13
ROCR 1.0-7
rpart 4.1-15
rstudioapi 0,1
rvest 0.3.4
scales 1.0.0
selectr 0.4-1
spatial 7.3-11
splines 3.5.1
SQUAREM 2017.10-1
stats 3.5.1
stats4 3.5.1
stringi 1.4.3
stringr 1.3.1
survival 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
tools 3.5.1
tseries 0.10-47
TTR 0.23-4
utf8 1.1.4
utils 3.5.1
vctrs 0.1.0
viridisLite 0.3.0
whisker 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
zoo 1.8-6

Volgende stappen

Bekijk de set onderdelen die beschikbaar zijn voor Azure Machine Learning.