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
指定 sgd
或 adaptive
最佳化演算法的清單。 您可以使用 sgd 或 adaDeltaSgd 來建立此清單。 預設值是 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 <= 0
、0 <= b <= 1
以及b - a = 1
。 此正規化程式會藉由將零對應至零來保留稀疏性。
mlTransforms
指定要在定型之前要在資料上執行的 MicrosoftML 轉換清單,或者未執行任何轉換時為 NULL
。 請參閱 featurizeText、categorical 和 categoricalHash 以了解支援的轉換。 這些轉換會在任何指定的 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 的觀察值。 資料列選取會在處理任何資料轉換之後執行 (請參閱引數 transforms
或 transformFunc
)。 如同所有運算式,rowSelection
可以使用運算式函數在函數呼叫之外定義。
transforms
代表第一輪變數轉換形式 list(name = expression, ``...)
的運算式。 如同所有運算式,transforms
(或 rowSelection
) 可以使用運算式函數在函數呼叫之外定義。
transformObjects
具名清單,其中包含 transforms
、transformsFunc
和 rowSelection
可以參考的物件。
transformFunc
變數轉換函數。 如需詳細資料,請參閱 rxTransform。
transformVars
轉換函數所需之輸入資料集變數的字元向量。 如需詳細資料,請參閱 rxTransform。
transformPackages
指定其他 R 套件 (rxGetOption("transformPackages")
中指定的套件之外) 以供使用的字元向量,並預先載入以供變數轉換函數使用。 例如,RevoScaleR 函數中透過其 transforms
和 transformFunc
引數明確定義,或透過其 formula
或 rowSelection
引數隱含定義的字元向量。 transformPackages
引數也可能是 NULL
,表示 rxGetOption("transformPackages")
以外沒有預先載入任何套件。
transformEnvir
使用者定義的環境,作為內部開發之所有環境的父系且用於變數資料轉換。 如果為 transformEnvir = NULL
,則會改用具有父代 baseenv()
的新「雜湊」環境。
blocksPerRead
指定要針對從資料來源讀取之每個資料區塊讀取的區塊數目。
reportProgress
指定資料列處理進度報告層級的整數值:
0
:未報告進度。1
:已列印和更新處理的資料列數目。2
:報告已處理的資料列數目與時間。3
:已處理資料列且已報告所有時間。
verbose
指定要輸出數量的整數值。 若為 0
,則計算期間不會列印任何詳細資訊輸出。 整數值 1
到 4
提供越來越多的資訊量。
computeContext
設定執行計算的內容,以有效的 RxComputeContext 指定。 目前支援本機和 RxInSqlServer 計算內容。
ensemble
用於集成的控制參數。
...
直接傳遞至 Microsoft Compute Engine 的額外引數。
詳細資料
神經網路是從人類大腦獲得靈感的預測模型類別。 神經網路可以表示為加權導向圖表。 圖表中的每個節點稱為神經元。 圖表中的神經元會排列在圖層中,其中一層中的神經元會依加權邊緣連線 (權數可以是 0 或正數) 到下一層的神經元。 第一層稱為輸入層,而輸入層中的每個神經元都會對應至其中一個特徵。 函數的最後一層稱為輸出層。 因此,如果是二進位神經網路,其包含兩個輸出神經元,每個類別各一個,其值為屬於每個類別的機率。 剩餘的層稱為隱藏層。 隱藏層和輸出層中的神經元值是藉由計算前一層中神經元值的加權總和,並將啟用函數套用至該加權總和來設定。 神經網路模型是依據其圖表結構 (也就是隱藏層數目以及每個隱藏層中的神經元數目)、啟用函數的選項,以及圖表邊緣的權數來定義。 神經網路演算法會根據訓練資料,嘗試學習邊緣的最佳權數。
雖然廣泛用於深入學習和模型化複雜的問題,例如影像辨識已知類神經網路,也會輕鬆地調整迴歸問題。 如果使用自動調整的加權,而且可以近似其輸入的非線性函數,任何類別的統計模型可以視為神經網路。 神經網路迴歸特別適合用於較傳統的迴歸模型無法在其中納入解決方案的問題。
值
rxNeuralNet
:具有定型模型的 rxNeuralNet
物件。
NeuralNet
:適用於神經網路定型工具的類別 maml
學習工具規格物件。
備註
此演算法為單一執行緒,不會嘗試將整個資料集載入記憶體中。
作者
Microsoft Corporation Microsoft Technical Support
參考資料
Wikipedia: Artificial neural network
另請參閱
rxFastTrees、rxFastForest、rxFastLinear、rxLogisticRegression、rxOneClassSvm、featurizeText、categorical、categoricalHash、rxPredict.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,]