rxLogisticRegression: 로지스틱 회귀
기계 학습 로지스틱 회귀
사용
rxLogisticRegression(formula = NULL, data, type = c("binary", "multiClass"),
l2Weight = 1, l1Weight = 1, optTol = 1e-07, memorySize = 20,
initWtsScale = 0, maxIterations = 2147483647, showTrainingStats = FALSE,
sgdInitTol = 0, trainThreads = NULL, denseOptimizer = FALSE,
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에서 설명된 수식입니다. 상호 작용 용어와 F()
는 현재 MicrosoftML에서 지원되지 않습니다.
data
.xdf 파일 또는 데이터 프레임 개체를 지정하는 데이터 원본 개체 또는 문자열입니다.
type
로지스틱 회귀의 유형을 지정하는 문자열: 기본 이진 분류 로지스틱 회귀의 경우 "binary"
, 다항 로지스틱 회귀의 경우 "multi"
l2Weight
L2 정규화 가중치. 값은 0
보다 크거나 같아야 하며 기본값은 1
로 설정됩니다.
l1Weight
L1 정규화 가중치. 값은 0
보다 크거나 같아야 하며 기본값은 1
로 설정됩니다.
optTol
최적화 프로그램 수렴의 임계값. 반복 간의 개선 수준이 임계값보다 낮으면 알고리즘이 중지되며 현재 모델이 반환됩니다. 값이 작을수록 속도는 느려지지만 정확도는 높아집니다. 기본값은 1e-07
입니다.
memorySize
다음 단계 계산을 위해 저장할 이전 위치 및 경사의 수를 지정하는 L-BFGS의 메모리 크기. 이 최적화 매개 변수는 다음 단계의 크기와 방향을 계산하는 데 사용되는 메모리의 양을 제한합니다. 메모리를 적게 지정할수록 학습 속도가 빨라지지만 정확도는 낮아집니다. 값은 1
보다 크거나 같아야 하며 기본값은 20
입니다.
initWtsScale
초기 가중치에 대해 값이 그려지는 범위를 지정하는 초기 가중치 지름을 설정합니다. 가중치는 이 범위 내에서 무작위로 초기화됩니다. 예를 들어, 지름이 d
로 지정되면 가중치는 -d/2
와 d/2
사이에 균등하게 분포됩니다. 기본값은 0
으로, 모든 가중치가 0
으로 초기화되도록 지정합니다.
maxIterations
최대 반복 횟수를 설정합니다. 이 횟수만큼 반복한 후에는 알고리즘이 수렴 기준을 충족하지 않더라도 중지됩니다.
showTrainingStats
학습 데이터 및 학습된 모델의 통계를 표시하려면 TRUE
를 지정하고, 표시하지 않으려면 FALSE
를 지정합니다. 기본값은 FALSE
입니다. 모델 통계에 관한 자세한 내용은 summary.mlModel을 참조하세요.
sgdInitTol
SGD(확률적 경사 하강법)를 사용하여 초기 매개 변수를 찾으려면 0보다 큰 숫자로 설정합니다. 0이 아닌 값 집합은 SGD가 수렴을 결정하는 데 사용하는 허용 오차를 지정합니다. 기본값은 0
으로, SGD가 사용되지 않도록 지정합니다.
trainThreads
모델 학습에 사용할 스레드의 수. 이 값은 머신의 코어 수로 설정해야 합니다. L-BFGS 다중 스레딩은 데이터 세트를 메모리에 로드하려고 시도합니다. 메모리 부족 문제가 발생하는 경우 trainThreads
를 1
로 설정하여 다중 스레딩을 해제합니다.
NULL
인 경우 사용할 스레드 수가 내부적으로 결정됩니다. 기본값은 NULL
입니다.
denseOptimizer
TRUE
인 경우 내부 최적화 벡터의 고밀화를 적용합니다.
FALSE
인 경우에는 로지스틱 회귀 최적화 프로그램이 적절한 판단에 따라 스파스 또는 고밀도 내부 상태를 사용합니다.
denseOptimizer
를 TRUE
로 설정하면 내부 최적화 프로그램이 고밀도 내부 상태를 사용해야 하며, 이는 일부 유형의 더 큰 문제에 대한 가비지 수집기의 로드를 완화하는 데 도움이 될 수 있습니다.
normalize
사용되는 자동 정규화 유형을 지정합니다.
-
"auto"
: 정규화가 필요한 경우 자동으로 수행됩니다. 기본 옵션입니다. -
"no"
: 정규화가 수행되지 않습니다. -
"yes"
: 정규화가 수행됩니다. -
"warn"
: 정규화가 필요한 경우 경고 메시지가 표시되지만 정규화는 수행되지 않습니다.
정규화는 서로 다른 데이터 범위를 표준 배율로 다시 스케일링합니다. 기능 스케일링은 데이터 요소 간 거리가 비례하도록 보장하며, 경사 하강법과 같은 다양한 최적화 방법이 훨씬 더 빠르게 수렴되도록 합니다. 정규화가 수행되면MaxMin
노멀라이저가 사용됩니다. 간격 [a, b]의 값을 정규화합니다. 이때-1 <= a <= 0
,0 <= b <= 1
,b - a = 1
입니다. 이 노멀라이저는 0에서 0으로 매핑하여 희박도를 유지합니다.
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
참조). 모든 식과 마찬가지로 expression 함수를 사용하여 함수 호출 외부에서 rowSelection
을 정의할 수 있습니다.
transforms
변수 변환의 첫 번째 반올림을 나타내는 list(name = expression, ``...)
양식의 식입니다. 모든 식과 마찬가지로 expression 함수를 사용하여 함수 호출 외부에서 transforms
(또는 rowSelection
)를 정의할 수 있습니다.
transformObjects
transforms
, transformsFunc
, rowSelection
에서 참조할 수 있는 개체를 포함하는 명명된 목록입니다.
transformFunc
변수 변환 함수입니다. 자세한 내용은 rxTransform을 참조하세요.
transformVars
변환 함수에 필요한 입력 데이터 세트 변수의 문자 벡터입니다. 자세한 내용은 rxTransform을 참조하세요.
transformPackages
사용 가능하게 하고 변수 변환 함수에서 사용하도록 미리 로드할 추가 R 패키지(rxGetOption("transformPackages")
에 지정된 패키지 외부)를 지정하는 문자 벡터입니다. 예를 들어, transforms
및 transformFunc
인수를 통해 RevoScaleR 함수에 명시적으로 정의되거나 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 컴퓨팅 엔진에 직접 전달할 추가 인수입니다.
세부 정보
로지스틱 회귀는 로지스틱 분포가 있는 것으로 가정되는 하나 이상의 독립 변수와의 관계로부터 범주형 종속 변수의 값을 예측하는 데 사용되는 분류 방법입니다. 종속 변수에 두 개의 가능한 값(성공/실패)만 있는 경우 로지스틱 회귀는 이진입니다. 종속 변수에 세 개 이상의 가능한 값(진단 테스트 결과에서 제공된 혈액형)이 있는 경우 로지스틱 회귀는 다항입니다.
rxLogisticRegression
에 사용된 최적화 기술은 제한된 메모리 L-BFGS(Broyden-Fletcher-Goldfarb-Shanno)입니다. L-BFGS 알고리즘과 일반 BFGS 알고리즘은 모두 뉴턴의 방법으로 단계를 계산하는 데 사용되는 수식에서 계산 집약적인 헤세 행렬식을 추정하기 위해 유사 뉴턴식 방법을 사용합니다. 그러나 L-BFGS 근사값은 제한된 양의 메모리만 사용하여 다음 단계 방향을 계산하므로 많은 변수가 있는 문제에 특히 적합합니다.
memorySize
매개 변수는 다음 단계의 계산에 사용하기 위해 저장할 이전 위치 및 경사의 수를 지정합니다.
이 학습자는 탄력적 망 정규화: L1(올가미) 및 L2(볼록) 정규화의 선형 조합을 사용할 수 있습니다. 정규화는 데이터를 보완하는 정보를 제공하는 제약 조건을 부과하여 잘못된 문제를 좀 더 다루기 쉽게 만들 수 있는 방법이자, 극단적인 계수 값으로 모델에 페널티를 부과하여 과잉 맞춤을 방지하는 방법입니다. 이렇게 하면 바이어스-분산 절충에서 최적의 복잡성을 선택함으로써 학습된 모델의 일반화를 개선할 수 있습니다. 정규화는 계수 값과 연결된 페널티를 가설의 오류에 추가하여 작동합니다. 극단적인 계수 값을 가진 정확한 모델이 더 많은 페널티를 받고, 더 보수적인 값이 있는 덜 정확한 모델이 더 적은 페널티를 받습니다. L1 및 L2 정규화는 어떤 면에서 상호 보완적인 여러 효과와 용도가 있습니다.
l1Weight
: 스파스 모델에 적용할 수 있으며, 고차원 데이터로 작업할 때 유용합니다. 상대적으로 중요하지 않은 기능과 관련된 작은 가중치를 0으로 끌어옵니다.
l2Weight
: 스파스가 아닌 데이터에 적합합니다. 큰 가중치를 0으로 끌어옵니다.
정규화에 볼록 페널티를 추가하면 일부 올가미의 제한 사항이
극복됩니다. 예를 들어 예측 변수의 수가 샘플 크기보다 큰 경우 예측 정확도를 높일 수 있습니다.
x = l1Weight
및 y = l2Weight
인 경우 ax + by = c
는 정규화 항의 선형 범위를 정의합니다. x 및 y의 기본값은 모두 1
입니다. 적극적인 정규화는 모델에서 중요한 변수를 제외함으로써 예측 능력을 떨어뜨릴 수 있습니다. 따라서 정규화 매개 변수에 대한 최적의 값을 선택하는 것은 로지스틱 회귀 모델의 성능에 중요합니다.
값
rxLogisticRegression
: 학습된 모델이 있는 rxLogisticRegression
개체입니다.
LogisticReg
: 로지스틱 회귀 트레이너에 대한 maml
클래스의 학습자 사양 개체입니다.
메모
이 알고리즘은 trainThreads > 1
(다중 스레딩)일 때 전체 데이터 세트를 메모리에 로드하려고 시도합니다.
작성자
Microsoft Corporation Microsoft Technical Support
참조
Training of L1-Regularized Log-Linear Models
and L2 Regularization for Machine Learning
추가 정보
rxFastTrees, rxFastForest, rxFastLinear, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.
예
# Estimate a logistic regression model
logitModel <- rxLogisticRegression(isCase ~ age + parity + education + spontaneous + induced,
transforms = list(isCase = case == 1),
data = infert)
# Print a summary of the model
summary(logitModel)
# Score to a data frame
scoreDF <- rxPredict(logitModel, data = infert,
extraVarsToWrite = "isCase")
# Compute and plot the Radio Operator Curve and AUC
roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF)
plot(roc1)
rxAuc(roc1)
#######################################################################################
# Multi-class logistic regression
testObs <- rnorm(nrow(iris)) > 0
testIris <- iris[testObs,]
trainIris <- iris[!testObs,]
multiLogit <- rxLogisticRegression(
formula = Species~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
type = "multiClass", data = trainIris)
# Score the model
scoreMultiDF <- rxPredict(multiLogit, data = testIris,
extraVarsToWrite = "Species")
# Print the first rows of the data frame with scores
head(scoreMultiDF)
# Look at confusion matrix
table(scoreMultiDF$Species, scoreMultiDF$PredictedLabel)
# Look at the observations with incorrect predictions
badPrediction = scoreMultiDF$Species != scoreMultiDF$PredictedLabel
scoreMultiDF[badPrediction,]