다음을 통해 공유


microsoftml.rx_fast_linear: 확률적 이중 좌표 상승법을 사용한 선형 모델

사용

microsoftml.rx_fast_linear()

Description

선형 이진 분류 및 회귀를 위한 SDCA(확률적 이중 좌표 상승법) 최적화 트레이너입니다.

세부 정보

rx_fast_linear는 볼록 목적 함수를 위한 최신 최적화 기술인 SDCA(확률적 이중 좌표 상승법) 방법을 기반으로 하는 트레이너입니다. 알고리즘은 다중 스레딩을 지원하는 반비동기화된 구현으로 인해 메모리가 부족한 큰 데이터 세트에서 사용하도록 스케일링할 수 있습니다. 별도의 스레드에서 원시 업데이트와 이중 업데이트 간에 정기적으로 동기화를 적용하여 수렴을 보증합니다. 여러 가지 손실 함수도 선택할 수 있습니다. SDCA 방법은 로지스틱 회귀 및 SVM 알고리즘의 여러 가지 최상의 속성 및 기능을 결합합니다. SDCA에 대한 자세한 내용은 참조 섹션의 인용을 참조하세요.

SGD(확률적 경사 하강법)와 같은 기존의 최적화 알고리즘은 경험적 손실 함수를 직접 최적화합니다. SDCA는 이중 문제를 최적화하는 다른 방법을 선택합니다. 이중 손실 함수는 예제별 가중치로 매개 변수화됩니다. 각 반복에서 학습 데이터 세트의 학습 예제를 읽으면 이중 손실 함수가 현재 예제에 대해 최적화되도록 해당 예제 가중치가 조정됩니다. SDCA에서는 다양한 경사 하강법에 필요한 단계 크기를 결정하는 데 학습률이 필요하지 않습니다.

rx_fast_linear는 현재 로그 손실, 힌지 손실, 매끄러운 힌지 손실이라는 세 가지 유형의 손실 함수에서 이진 분류를 지원합니다. 선형 회귀는 제곱 손실 함수도 지원합니다. 탄력적 net 정규화는 l2_weightl1_weight 매개 변수로 지정할 수 있습니다. l2_weight는 수렴률에 영향을 미칩니다. 일반적으로 l2_weight가 클수록 SDCA가 더 빠르게 수렴합니다.

rx_fast_linear는 확률적 및 스트리밍 최적화 알고리즘입니다. 결과는 학습 데이터의 순서에 따라 달라집니다. 재현 가능한 결과를 얻으려면 shuffleFalse로 설정하고 train_threads1로 설정하는 것이 좋습니다.

인수

formula

revoscalepy.rx_formula에 설명된 수식입니다. 상호 작용 용어 및 F()는 현재 microsoftml에서 지원되지 않습니다.

데이터

.xdf 파일 또는 데이터 프레임 개체를 지정하는 데이터 원본 개체 또는 문자열입니다.

메서드(method)

문자열로 모델 유형을 지정합니다. 기본 이진 분류의 경우 "binary"이고 선형 회귀의 경우 "regression"입니다.

loss_function

최적화할 경험적 손실 함수를 지정합니다. 이진 분류의 경우 다음 선택 항목을 사용할 수 있습니다.

  • log_loss: 로그 손실입니다. 이것이 기본값입니다.

  • hinge_loss: SVM 힌지 손실입니다. 해당 매개 변수는 여백 크기를 나타냅니다.

  • smooth_hinge_loss: 매끄러운 힌지 손실입니다. 해당 매개 변수는 다듬기 상수를 나타냅니다.

선형 회귀의 경우 현재 제곱 손실 squared_loss가 지원됩니다. 이 매개 변수를 None으로 설정하면 기본값이 학습 유형에 따라 달라집니다.

다음 예제에서는 loss_function을 hinge_loss로 변경합니다. rx_fast_linear(..., loss_function=hinge_loss())

l1_weight

L1 정규화 가중치를 지정합니다. 값은 음수가 아니거나 None이어야 합니다. None을 지정하면 실제 값이 데이터 세트에 따라 자동으로 계산됩니다. None이 기본값입니다.

l2_weight

L2 정규화 가중치를 지정합니다. 값은 음수가 아니거나 None이어야 합니다. None을 지정하면 실제 값이 데이터 세트에 따라 자동으로 계산됩니다. None이 기본값입니다.

train_threads

알고리즘을 실행하는 데 사용할 수 있는 동시 스레드 수를 지정합니다. 이 매개 변수를 None으로 설정하면 사용되는 스레드 수가 프로세스에 사용할 수 있는 논리 프로세서 수와 데이터 희박도에 따라 결정됩니다. 단일 스레드에서 알고리즘을 실행하려면 1로 설정합니다.

convergence_tolerance

수렴 기준으로 사용되는 허용 오차 임계값을 지정합니다. 0에서 1 사이여야 합니다. 기본값은 0.1입니다. 이 알고리즘은 이중성 간격과 원시 손실 간의 비율인 상대 이중성 간격이 지정된 수렴 허용 오차보다 낮은 경우 수렴된 것으로 간주됩니다.

max_iterations

학습 반복 횟수의 상한을 지정합니다. 이 매개 변수는 양수이거나 None이어야 합니다. None을 지정하면 실제 값이 데이터 세트에 따라 자동으로 계산됩니다. 반복할 때마다 학습 데이터 전체를 전달해야 합니다. 학습은 총 반복 횟수가 지정된 상한에 도달한 이후의 시간과 손실 함수가 수렴되는 시간 중 이른 시간에 종료됩니다.

순서 섞기

학습 데이터의 순서를 섞을지 여부를 지정합니다. 데이터 순서를 섞으려면 True로 설정하고, 순서를 섞지 않으려면 False로 설정합니다. 기본값은 True입니다. SDCA는 확률적 최적화 알고리즘입니다. 순서 섞기를 설정한 경우 반복할 때마다 학습 데이터 순서가 섞입니다.

check_frequency

손실 함수가 계산되고 수렴되었는지 여부가 검사되는 반복 횟수입니다. 지정된 값은 양의 정수이거나 None이어야 합니다. None이면 실제 값이 데이터 세트에 따라 자동으로 계산됩니다. 예를 들어 checkFrequency = 5를 지정하면 5회 반복마다 손실 함수가 계산되고 수렴이 검사됩니다. 손실 함수를 계산하려면 학습 데이터 전체를 별도로 전달해야 합니다.

normalize

사용되는 자동 정규화 유형을 지정합니다.

  • "Auto": 정규화가 필요한 경우 자동으로 수행됩니다. 기본 옵션입니다.

  • "No": 정규화가 수행되지 않습니다.

  • "Yes": 정규화가 수행됩니다.

  • "Warn": 정규화가 필요한 경우 경고 메시지가 표시되지만 정규화는 수행되지 않습니다.

정규화는 서로 다른 데이터 범위를 표준 배율로 다시 스케일링합니다. 기능 스케일링은 데이터 요소 간 거리가 비례하도록 보장하며, 경사 하강법과 같은 다양한 최적화 방법이 훨씬 더 빠르게 수렴되도록 합니다. 정규화가 수행되면 MaxMin 노멀라이저가 사용됩니다. 간격 [a, b]의 값을 정규화합니다. 이때 -1 <= a <= 0, 0 <= b <= 1, b - a = 1입니다. 이 노멀라이저는 0에서 0으로 매핑하여 희박도를 유지합니다.

ml_transforms

학습 전에 데이터에서 수행할 MicrosoftML 변환 목록을 지정하거나 수행할 변환이 없는 경우 None을 지정합니다. 지원되는 변환은 featurize_text, categorical, categorical_hash를 참조하세요. 이러한 변환은 지정된 Python 변환 후에 수행됩니다. 기본값은 없음입니다.

ml_transform_vars

ml_transforms에 사용할 변수 이름의 문자 벡터를 지정하거나 사용할 변수가 없는 경우 None을 지정합니다. 기본값은 없음입니다.

row_selection

지원되지 않음. 데이터 세트의 논리 변수 이름(따옴표) 또는 데이터 세트의 변수를 사용하는 논리 식으로 모델에서 사용할 데이터 세트의 행(관찰)을 지정합니다. 예를 들면 다음과 같습니다.

  • row_selection = "old"old 변수의 값이 True인 관찰만 사용합니다.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10)age 변수의 값이 20에서 65 사이이고 income 변수의 log 값이 10보다 큰 관찰만 사용합니다.

행 선택은 데이터 변환을 처리한 후 수행됩니다(인수 transforms 또는 transform_function 참조). 모든 식과 마찬가지로 expression 함수를 사용하여 함수 호출 외부에서 row_selection을 정의할 수 있습니다.

변환

지원되지 않음. 변수 변환의 첫 번째 반올림을 나타내는 양식의 식입니다. 모든 식과 마찬가지로 expression 함수를 사용하여 함수 호출 외부에서 transforms(또는 row_selection)를 정의할 수 있습니다.

transform_objects

지원되지 않음. transforms, transform_function, row_selection에서 참조할 수 있는 개체를 포함하는 명명된 목록입니다.

transform_function

변수 변환 함수입니다.

transform_variables

변환 함수에 필요한 입력 데이터 세트 변수의 문자 벡터입니다.

transform_packages

지원되지 않음. 사용 가능하게 하고 변수 변환 함수에서 사용하도록 미리 로드할 추가 Python 패키지(RxOptions.get_option("transform_packages")에 지정된 패키지 외부)를 지정하는 문자 벡터입니다. 예를 들어 transformstransform_function 인수를 통해 revoscalepy 함수에 명시적으로 정의되거나 formula 또는 row_selection 인수를 통해 암시적으로 정의됩니다. transform_packages 인수는 None일 수도 있으며, 이는 RxOptions.get_option("transform_packages") 외부의 패키지가 미리 로드되지 않음을 나타냅니다.

transform_environment

지원되지 않음. 내부적으로 개발되어 변수 데이터 변환에 사용되는 모든 환경의 부모 역할을 하는 사용자 정의 환경입니다. transform_environment = None인 경우 부모 revoscalepy.baseenv가 있는 새 "해시" 환경이 대신 사용됩니다.

blocks_per_read

데이터 원본에서 읽은 데이터의 각 청크에 대해 읽을 블록 수를 지정합니다.

report_progress

행 처리 진행률에 대한 보고 수준을 지정하는 정수 값입니다.

  • 0: 진행률을 보고하지 않습니다.

  • 1: 처리된 행 수가 출력되고 업데이트됩니다.

  • 2: 처리된 행 및 타이밍이 보고됩니다.

  • 3: 처리된 행 및 모든 타이밍이 보고됩니다.

verbose

원하는 출력의 양을 지정하는 정수 값입니다. 0이면 계산 중에 자세한 정보가 출력되지 않습니다. 1에서 4 사이의 정수 값은 더 많은 양의 정보를 제공합니다.

compute_context

유효한 revoscalepy.RxComputeContext로 지정되었으며 계산이 실행되는 컨텍스트를 설정합니다. 현재 로컬 및 revoscalepy.RxInSqlServer 컴퓨팅 컨텍스트가 지원됩니다.

ensemble

앙상블을 위한 제어 매개 변수입니다.

반환

학습된 모델이 있는 FastLinear 개체입니다.

참고

이 알고리즘은 다중 스레드이며 전체 데이터 세트를 메모리에 로드하려고 시도하지 않습니다.

추가 정보

hinge_loss, log_loss, smoothed_hinge_loss, squared_loss, rx_predict

참고 자료

확률적 이중 좌표 상승법 스케일 업

정규화된 손실 최소화를 위한 확률적 이중 좌표 상승법

이진 분류 예제

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

infert = get_dataset("infert")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

infertdf = infert.as_df()
infertdf["isCase"] = infertdf.case == 1
data_train, data_test, y_train, y_test = train_test_split(infertdf, infertdf.isCase)

forest_model = rx_fast_linear(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_model, data=data_test,
                     extra_vars_to_write=["isCase", "Score"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

출력:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
  isCase PredictedLabel     Score  Probability
0   True           True  0.990544     0.729195
1  False          False -2.307120     0.090535
2  False          False -0.608565     0.352387
3   True           True  1.028217     0.736570
4   True          False -3.913066     0.019588

회귀 예제

'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

attitude = get_dataset("attitude")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)

model = rx_fast_linear(
    formula="rating ~ complaints + privileges + learning + raises + critical + advance",
    method="regression",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["rating"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

출력:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
   rating      Score
0    71.0  72.630440
1    67.0  56.995350
2    67.0  52.958641
3    72.0  80.894539
4    50.0  38.375427

손실 함수