rxNeuralNet:神經網路

用於迴歸模型以及二進位和多類別分類的神經網路。

使用方式

  rxNeuralNet(formula = NULL, data, type = c("binary", "multiClass",
    "regression"), numHiddenNodes = 100, numIterations = 100,
    optimizer = sgd(), netDefinition = NULL, initWtsDiameter = 0.1,
    maxNorm = 0, acceleration = c("sse", "gpu"), miniBatchSize = 1,
    normalize = "auto", mlTransforms = NULL, mlTransformVars = NULL,
    rowSelection = NULL, transforms = NULL, transformObjects = NULL,
    transformFunc = NULL, transformVars = NULL, transformPackages = NULL,
    transformEnvir = NULL, blocksPerRead = rxGetOption("blocksPerRead"),
    reportProgress = rxGetOption("reportProgress"), verbose = 1,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

引數

formula

如 rxFormula 中所說明的公式。 MicrosoftML 目前不支援互動字詞和 F()

data

指定 .xdf 檔案或資料框架物件的資料來源物件或字元字串。

type

表示快速樹狀結構類型的字元字串:

  • 針對預設二進位分類神經網路為 "binary"
  • 針對多類別分類神經網路為 "multiClass"
  • 針對迴歸神經網路為 "regression"

numHiddenNodes

神經網路中隱藏節點的預設數目。 預設值是 100。

numIterations

完整訓練集上的反覆運算次數。 預設值是 100。

optimizer

指定 sgdadaptive 最佳化演算法的清單。 您可以使用 sgdadaDeltaSgd 來建立此清單。 預設值是 sgd

netDefinition

神經網路結構的 Net# 定義。 如需 Net# 語言的詳細資訊,請參閱Reference Guide

initWtsDiameter

設定初始權數直徑,指定從中為初始學習權數繪製值的範圍。 權數會從這個範圍內隨機初始化。 預設值為 0.1。

maxNorm

指定上限,以限制每個隱藏單位內送加權向量的標準。 這在神經網路的最大值以及定型產生未繫結權數的情況下,可能非常重要。

acceleration

指定要使用的硬體加速類型。 可能的值為 "sse" 和 "gpu"。 針對 GPU 加速,建議使用大於 1 的 miniBatchSize。 如果您想要使用 GPU 加速,則需要額外的手動設定步驟:

  • 下載並安裝 NVidia CUDA Toolkit 6.5 (CUDA Toolkit)。
  • 下載並安裝 NVidia cuDNN v2 程式庫 (cudnn Library)。
  • 呼叫 system.file("mxLibs/x64", package = "MicrosoftML") 來尋找 MicrosoftRML 封裝的 libs 目錄。
  • 將 cublas64_65.dll、cudart64_65.dll 和 cusparse64_65.dll 從 CUDA Toolkit 6.5 複製到 MicrosoftML 封裝的 libs 目錄中。
  • 將 cudnn64_65.dll 從 cuDNN v2 程式庫複製到 MicrosoftML 封裝的 libs 目錄中。

miniBatchSize

設定迷你批次大小。 建議值介於 1 到 256 之間。 只有當加速是 GPU 時,才會使用此參數。 將此參數設定為較高的值可改善訓練的速度,但可能會對正確性造成負面影響。 預設值為 1。

normalize

指定所使用的自動正規化類型:

  • "auto":如果需要正規化,會自動執行。 這是預設選項。
  • "no":不執行正規化。
  • "yes":執行正規化。
  • "warn":如果需要正規化,則會顯示警告訊息,但是不會執行正規化。
    正規化會將不同的資料範圍重新調整為標準規模。 特徵擴縮可確保資料點之間的距離成比例,並使各種最佳化方法 (例如梯度下降) 能夠更快收斂。 如果執行正規化,會使用 MaxMin 正規化程式。 其會在間隔 [a, b] 中將數值正規化,其中 -1 <= a <= 00 <= b <= 1 以及 b - a = 1。 此正規化程式會藉由將零對應至零來保留稀疏性。

mlTransforms

指定要在定型之前要在資料上執行的 MicrosoftML 轉換清單,或者未執行任何轉換時為 NULL。 請參閱 featurizeTextcategoricalcategoricalHash 以了解支援的轉換。 這些轉換會在任何指定的 R 轉換之後執行。 預設值是 NULL

mlTransformVars

指定要用於 mlTransforms 的變數名稱字元向量,或者,若不使用則為 NULL。 預設值是 NULL

rowSelection

指定資料集中要供模型使用的資料列 (觀測值),可以是來自資料集的邏輯變數名稱 (以引號括住),或是使用資料集中變數的邏輯運算式。 例如,rowSelection = "old" 將只會使用變數 old 值為 TRUE 的觀測值。 rowSelection = (age > 20) & (age < 65) & (log(income) > 10) 只會使用 age 變數值介於 20 到 65 之間且 income 變數 log 值大於 10 的觀察值。 資料列選取會在處理任何資料轉換之後執行 (請參閱引數 transformstransformFunc)。 如同所有運算式,rowSelection 可以使用運算式函數在函數呼叫之外定義。

transforms

代表第一輪變數轉換形式 list(name = expression, ``...) 的運算式。 如同所有運算式,transforms (或 rowSelection) 可以使用運算式函數在函數呼叫之外定義。

transformObjects

具名清單,其中包含 transformstransformsFuncrowSelection 可以參考的物件。

transformFunc

變數轉換函數。 如需詳細資料,請參閱 rxTransform。

transformVars

轉換函數所需之輸入資料集變數的字元向量。 如需詳細資料,請參閱 rxTransform。

transformPackages

指定其他 R 套件 (rxGetOption("transformPackages") 中指定的套件之外) 以供使用的字元向量,並預先載入以供變數轉換函數使用。 例如,RevoScaleR 函數中透過其 transformstransformFunc 引數明確定義,或透過其 formularowSelection 引數隱含定義的字元向量。 transformPackages 引數也可能是 NULL,表示 rxGetOption("transformPackages") 以外沒有預先載入任何套件。

transformEnvir

使用者定義的環境,作為內部開發之所有環境的父系且用於變數資料轉換。 如果為 transformEnvir = NULL,則會改用具有父代 baseenv() 的新「雜湊」環境。

blocksPerRead

指定要針對從資料來源讀取之每個資料區塊讀取的區塊數目。

reportProgress

指定資料列處理進度報告層級的整數值:

  • 0:未報告進度。
  • 1:已列印和更新處理的資料列數目。
  • 2:報告已處理的資料列數目與時間。
  • 3:已處理資料列且已報告所有時間。

verbose

指定要輸出數量的整數值。 若為 0,則計算期間不會列印任何詳細資訊輸出。 整數值 14 提供越來越多的資訊量。

computeContext

設定執行計算的內容,以有效的 RxComputeContext 指定。 目前支援本機和 RxInSqlServer 計算內容。

ensemble

用於集成的控制參數。

...

直接傳遞至 Microsoft Compute Engine 的額外引數。

詳細資料

神經網路是從人類大腦獲得靈感的預測模型類別。 神經網路可以表示為加權導向圖表。 圖表中的每個節點稱為神經元。 圖表中的神經元會排列在圖層中,其中一層中的神經元會依加權邊緣連線 (權數可以是 0 或正數) 到下一層的神經元。 第一層稱為輸入層,而輸入層中的每個神經元都會對應至其中一個特徵。 函數的最後一層稱為輸出層。 因此,如果是二進位神經網路,其包含兩個輸出神經元,每個類別各一個,其值為屬於每個類別的機率。 剩餘的層稱為隱藏層。 隱藏層和輸出層中的神經元值是藉由計算前一層中神經元值的加權總和,並將啟用函數套用至該加權總和來設定。 神經網路模型是依據其圖表結構 (也就是隱藏層數目以及每個隱藏層中的神經元數目)、啟用函數的選項,以及圖表邊緣的權數來定義。 神經網路演算法會根據訓練資料,嘗試學習邊緣的最佳權數。

雖然廣泛用於深入學習和模型化複雜的問題,例如影像辨識已知類神經網路,也會輕鬆地調整迴歸問題。 如果使用自動調整的加權,而且可以近似其輸入的非線性函數,任何類別的統計模型可以視為神經網路。 神經網路迴歸特別適合用於較傳統的迴歸模型無法在其中納入解決方案的問題。

rxNeuralNet:具有定型模型的 rxNeuralNet 物件。
NeuralNet:適用於神經網路定型工具的類別 maml 學習工具規格物件。

備註

此演算法為單一執行緒,不會嘗試將整個資料集載入記憶體中。

作者

Microsoft Corporation Microsoft Technical Support

參考資料

Wikipedia: Artificial neural network

另請參閱

rxFastTreesrxFastForestrxFastLinearrxLogisticRegressionrxOneClassSvmfeaturizeTextcategoricalcategoricalHashrxPredict.mlModel

範例


 # Estimate a binary neural net
 rxNeuralNet1 <- rxNeuralNet(isCase ~ age + parity + education + spontaneous + induced,
                   transforms = list(isCase = case == 1),
                   data = infert)

 # Score to a data frame
 scoreDF <- rxPredict(rxNeuralNet1, data = infert, 
     extraVarsToWrite = "isCase",
     outData = NULL) # return a data frame

 # Compute and plot the Radio Operator Curve and AUC
 roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF) 
 plot(roc1)
 rxAuc(roc1)

 #########################################################################
 # Regression neural net

 # Create an xdf file with the attitude data
 myXdf <- tempfile(pattern = "tempAttitude", fileext = ".xdf")
 rxDataStep(attitude, myXdf, rowsPerRead = 50, overwrite = TRUE)
 myXdfDS <- RxXdfData(file = myXdf)

 attitudeForm <- rating ~ complaints + privileges + learning + 
     raises + critical + advance

 # Estimate a regression neural net 
 res2 <- rxNeuralNet(formula = attitudeForm,  data = myXdfDS, 
     type = "regression")

 # Score to data frame
 scoreOut2 <- rxPredict(res2, data = myXdfDS, 
     extraVarsToWrite = "rating")

 # Plot the rating versus the score with a regression line
 rxLinePlot(rating~Score, type = c("p","r"), data = scoreOut2)

 # Clean up   
 file.remove(myXdf)    

 #############################################################################
 # Multi-class neural net
 multiNN <- rxNeuralNet(
     formula = Species~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
     type = "multiClass", data = iris)
 scoreMultiDF <- rxPredict(multiNN, data = iris, 
     extraVarsToWrite = "Species", outData = NULL)    
 # Print the first rows of the data frame with scores
 head(scoreMultiDF)
 # Compute % of incorrect predictions
 badPrediction = scoreMultiDF$Species != scoreMultiDF$PredictedLabel
 sum(badPrediction)*100/nrow(scoreMultiDF)
 # Look at the observations with incorrect predictions
 scoreMultiDF[badPrediction,]