microsoftml.rx_fast_linear: 확률적 쌍대 좌표 상승을 가진 선형 모델

Usage

microsoftml.rx_fast_linear()

설명

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

세부 정보

rx_fast_linear 는 볼록 목적 함수에 대한 최첨단 최적화 기법인 확률적 쌍대 좌표 상승(SDCA) 방법을 기반으로 한 트레이너입니다. 이 알고리즘은 다중 스레딩을 지원하는 반비동기 구현 덕분에 대규모 메모리 밖 데이터 세트에 적용할 수 있도록 확장될 수 있습니다. 수렴은 별도의 스레드에서 원시 및 이중 업데이트 간 동기화를 주기적으로 강제함으로써 이루어집니다. 손실 함수의 여러 선택지도 제공됩니다. SDCA 방법은 로지스틱 회귀와 SVM 알고리즘의 여러 우수한 특성과 기능을 결합합니다. SDCA에 대한 자세한 정보는 참고문헌 섹션의 인용문을 참조하세요.

확률적 구배 하강(SGD)과 같은 전통적인 최적화 알고리즘은 경험적 손실 함수를 직접 최적화합니다. SDCA는 대신 쌍대 문제를 최적화하는 다른 접근법을 선택합니다. 쌍대 손실 함수는 예시별 가중치로 매개변수화됩니다. 각 반복에서, 훈련 데이터 세트에서 훈련 예제를 읽을 때, 해당 예제 가중치가 조정되어 쌍대 손실 함수가 현재 예제에 대해 최적화되도록 합니다. SDCA는 다양한 그라디언트 하강 기법에서 요구하는 것처럼 스텝 크기를 결정하기 위해 학습 속도를 요구하지 않습니다.

rx_fast_linear 현재 로그 손실, 힌지 손실, 그리고 평활한 힌지 손실 세 가지 유형의 손실 함수를 사용하여 이진 분류를 지원합니다. 선형 회귀는 제곱 손실 함수도 지원합니다. 탄성 순 정규화는 와 l1_weight 매개변수로 l2_weight 지정할 수 있습니다. 이 l2_weight 수렴 속도에 영향을 미친다는 점에 유의하세요. 일반적으로 , 가 l2_weight클수록 SDCA가 더 빠르게 수렴합니다.

참고로 는 rx_fast_linear 확률적이고 스트리밍 최적화 알고리즘입니다. 결과는 학습 데이터의 순서에 따라 달라집니다. 재현 가능한 결과를 위해서는 를 와 Falsetrain_threads1설정 shuffle 하는 것이 권장됩니다.

Arguments

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

data

데이터 원본 개체 또는 .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 이 지정되어 있을 경우, 실제 값은 데이터 세트를 기반으로 자동으로 계산됩니다. 기본 값은 없습니다.

l2_weight

L2 정규화 가중치를 지정합니다. 값은 음수가 아니거나 None이어야 합니다. None 이 지정되어 있을 경우, 실제 값은 데이터 세트를 기반으로 자동으로 계산됩니다. 기본 값은 없습니다.

train_threads

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

convergence_tolerance

수렴 기준으로 사용되는 허용 임계값을 지정합니다. 0과 1 사이여야 합니다. 기본값은 0.1입니다. 이 알고리즘은 상대 쌍대 격차(쌍대 격차와 원시 손실의 비율)가 지정된 수렴 허용 차보다 낮아질 때 수렴했다고 간주됩니다.

max_iterations

훈련 반복 횟수의 상한을 명시합니다. 이 매개변수는 양수이거나 None이어야 합니다. None 이 지정되어 있을 경우, 실제 값은 데이터 세트를 기반으로 자동으로 계산됩니다. 각 반복은 훈련 데이터를 완전히 검토해야 합니다. 훈련은 총 반복 횟수가 지정된 상한에 도달하거나 손실 함수가 수렴할 때 종료되며, 이는 더 앞당겨 발생하는 경우입니다.

뒤섞다

훈련 데이터를 셔플할지 여부를 지정합니다. 데이터를 셔플하도록 설정 True 했지만, False 셔플하지 않게 설정되어 있습니다. 기본값은 True입니다. SDCA는 확률적 최적화 알고리즘입니다. 셔플이 켜져 있으면 학습 데이터가 각 반복마다 셔플됩니다.

check_frequency

손실 함수가 계산되고 수렴했는지 확인하기 위해 반복 횟수를 의미합니다. 지정된 값은 양의 정수 또는 None이어야 합니다. N이면 실제 값이 데이터 세트를 기반으로 자동으로 계산됩니다. 예를 들어, 가 지정되면 checkFrequency = 5 손실 함수를 계산하고 5번마다 수렴을 점검합니다. 손실 함수 계산은 별도의 완전 학습 데이터를 수행해야 합니다.

정규화

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

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

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

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

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

정규화는 서로 다른 데이터 범위를 표준 크기 조정으로 다시 크기 조정합니다. 기능 크기 조정은 데이터 요소 간의 거리가 비례하도록 보장하고 그라데이션 하강과 같은 다양한 최적화 방법을 사용하여 훨씬 더 빠르게 수렴할 수 있도록 합니다. 정규화가 수행되면 MaxMin 정규화기가 사용됩니다. 간격 [a, b]의 위치 -1 <= a <= 00 <= b <= 1b - a = 1. 이 정규화기는 0에서 0으로 매핑하여 스파스를 유지합니다.

ml_transforms

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

ml_transform_vars

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

row_selection

지원되지 않습니다. 데이터 집합의 논리 변수 이름(따옴표)을 사용하거나 데이터 집합의 변수를 사용하는 논리 식과 함께 모델에서 사용할 데이터 집합의 행(관찰)을 지정합니다. 다음은 그 예입니다.

  • row_selection = "old" 는 변수 oldTrue값이 있는 관찰만 사용합니다.

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

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

변환

지원되지 않습니다. 변수 변환의 첫 번째 라운드를 나타내는 폼의 식입니다. 모든 식과 마찬가지로 함수를 transforms 사용하여 row_selection 함수 호출 외부에서 정의expression할 수 있습니다.

transform_objects

지원되지 않습니다. , transformstransform_function.에서 참조할 수 있는 개체가 포함된 명명된 row_selection목록입니다.

transform_function

변수 변환 함수입니다.

transform_variables

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

transform_packages

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

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 컴퓨팅 컨텍스트가 지원됩니다.

앙상블

ensembling에 대한 컨트롤 매개 변수입니다.

Returns

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

메모

이 알고리즘은 멀티스레드 방식이며 전체 데이터셋을 메모리에 로드하려 하지 않습니다.

References

확률적 쌍좌표 상승 확장

정규화 손실 최소화를 위한 확률적 쌍대 좌표 상승법

이진 분류 예제

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

Output:

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

Output:

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

손실 함수