microsoftml.rx_logistic_regression: 로지스틱 회귀
사용
microsoftml.rx_logistic_regression(formula: str,
data: [revoscalepy.datasource.RxDataSource.RxDataSource,
pandas.core.frame.DataFrame], method: ['binary',
'multiClass'] = 'binary', l2_weight: float = 1,
l1_weight: float = 1, opt_tol: float = 1e-07,
memory_size: int = 20, init_wts_diameter: float = 0,
max_iterations: int = 2147483647,
show_training_stats: bool = False, sgd_init_tol: float = 0,
train_threads: int = None, dense_optimizer: bool = False,
normalize: ['No', 'Warn', 'Auto', 'Yes'] = 'Auto',
ml_transforms: list = None, ml_transform_vars: list = None,
row_selection: str = None, transforms: dict = None,
transform_objects: dict = None, transform_function: str = None,
transform_variables: list = None,
transform_packages: list = None,
transform_environment: dict = None, blocks_per_read: int = None,
report_progress: int = None, verbose: int = 1,
ensemble: microsoftml.modules.ensemble.EnsembleControl = None,
compute_context: revoscalepy.computecontext.RxComputeContext.RxComputeContext = None)
Description
기계 학습 로지스틱 회귀
세부 정보
로지스틱 회귀는 로지스틱 분포가 있는 것으로 가정되는 하나 이상의 독립 변수와의 관계로부터 범주형 종속 변수의 값을 예측하는 데 사용되는 분류 방법입니다. 종속 변수에 두 개의 가능한 값(성공/실패)만 있는 경우 로지스틱 회귀는 이진입니다. 종속 변수에 세 개 이상의 가능한 값(진단 테스트 결과에서 제공된 혈액형)이 있는 경우 로지스틱 회귀는 다항입니다.
rx_logistic_regression
에 사용된 최적화 기술은 제한된 메모리 L-BFGS(Broyden-Fletcher-Goldfarb-Shanno)입니다. L-BFGS 알고리즘과 일반 BFGS 알고리즘은 모두 뉴턴의 방법으로 단계를 계산하는 데 사용되는 수식에서 계산 집약적인 헤세 행렬식을 추정하기 위해 유사 뉴턴식 방법을 사용합니다. 그러나 L-BFGS 근사값은 제한된 양의 메모리만 사용하여 다음 단계 방향을 계산하므로 많은 변수가 있는 문제에 특히 적합합니다.
memory_size
매개 변수는 다음 단계의 계산에 사용하기 위해 저장할 이전 위치 및 경사의 수를 지정합니다.
이 학습자는 탄력적 망 정규화: L1(올가미) 및 L2(볼록) 정규화의 선형 조합을 사용할 수 있습니다. 정규화는 데이터를 보완하는 정보를 제공하는 제약 조건을 부과하여 잘못된 문제를 좀 더 다루기 쉽게 만들 수 있는 방법이자, 극단적인 계수 값으로 모델에 페널티를 부과하여 과잉 맞춤을 방지하는 방법입니다. 이렇게 하면 바이어스-분산 절충에서 최적의 복잡성을 선택함으로써 학습된 모델의 일반화를 개선할 수 있습니다. 정규화는 계수 값과 연결된 페널티를 가설의 오류에 추가하여 작동합니다. 극단적인 계수 값을 가진 정확한 모델이 더 많은 페널티를 받고, 더 보수적인 값이 있는 덜 정확한 모델이 더 적은 페널티를 받습니다. L1 및 L2 정규화는 어떤 면에서 상호 보완적인 여러 효과와 용도가 있습니다.
l1_weight
: 스파스 모델에 적용할 수 있으며, 고차원 데이터로 작업할 때 유용합니다. 상대적으로 중요하지 않은 기능과 관련된 작은 가중치를 0으로 끌어옵니다.l2_weight
: 스파스가 아닌 데이터에 적합합니다. 큰 가중치를 0으로 끌어옵니다.
정규화에 볼록 페널티를 추가하면 일부 올가미의 제한 사항이 극복됩니다. 예를 들어 예측 변수의 수가 샘플 크기보다 큰 경우 예측 정확도를 높일 수 있습니다.
x = l1_weight
및 y = l2_weight
인 경우 ax + by = c
는 정규화 항의 선형 범위를 정의합니다. x 및 y의 기본값은 모두 1
입니다. 적극적인 정규화는 모델에서 중요한 변수를 제외함으로써 예측 능력을 떨어뜨릴 수 있습니다. 따라서 정규화 매개 변수에 대한 최적의 값을 선택하는 것은 로지스틱 회귀 모델의 성능에 중요합니다.
인수
formula
revoscalepy.rx_formula에 설명된 수식. 상호 작용 용어와 F()
는 현재 microsoftml에서 지원되지 않습니다.
데이터
.xdf 파일 또는 데이터 프레임 개체를 지정하는 데이터 원본 개체 또는 문자열입니다.
메서드(method)
로지스틱 회귀의 유형을 지정하는 문자열: 기본 이진 분류 로지스틱 회귀의 경우 "binary"
, 다항 로지스틱 회귀의 경우 "multiClass"
l2_weight
L2 정규화 가중치. 값은 0
보다 크거나 같아야 하며 기본값은 1
로 설정됩니다.
l1_weight
L1 정규화 가중치. 값은 0
보다 크거나 같아야 하며 기본값은 1
로 설정됩니다.
opt_tol
최적화 프로그램 수렴의 임계값. 반복 간의 개선 수준이 임계값보다 낮으면 알고리즘이 중지되며 현재 모델이 반환됩니다. 값이 작을수록 속도는 느려지지만 정확도는 높아집니다.
기본값은 1e-07
입니다.
memory_size
다음 단계 계산을 위해 저장할 이전 위치 및 경사의 수를 지정하는 L-BFGS의 메모리 크기. 이 최적화 매개 변수는 다음 단계의 크기와 방향을 계산하는 데 사용되는 메모리의 양을 제한합니다. 메모리를 적게 지정할수록 학습 속도가 빨라지지만 정확도는 낮아집니다. 값은 1
보다 크거나 같아야 하며 기본값은 20
입니다.
max_iterations
최대 반복 횟수를 설정합니다. 이 횟수만큼 반복한 후에는 알고리즘이 수렴 기준을 충족하지 않더라도 중지됩니다.
show_training_stats
학습 데이터 및 학습된 모델의 통계를 표시하려면 True
를 지정하고, 표시하지 않으려면 False
를 지정합니다. 기본값은 False
입니다. 모델 통계에 대한 자세한 내용은 summary.ml_model()
을 참조하세요.
sgd_init_tol
SGD(확률적 경사 하강법)를 사용하여 초기 매개 변수를 찾으려면 0보다 큰 숫자로 설정합니다. 0이 아닌 값 집합은 SGD가 수렴을 결정하는 데 사용하는 허용 오차를 지정합니다.
기본값은 0
으로, SGD가 사용되지 않도록 지정합니다.
init_wts_diameter
초기 가중치에 대해 값이 그려지는 범위를 지정하는 초기 가중치 지름을 설정합니다. 가중치는 이 범위 내에서 무작위로 초기화됩니다. 예를 들어, 지름이 d
로 지정되면 가중치는 -d/2
와 d/2
사이에 균등하게 분포됩니다. 기본값은 0
으로, 모든 가중치가 0
으로 초기화되도록 지정합니다.
train_threads
모델 학습에 사용할 스레드의 수.
이 값은 머신의 코어 수로 설정해야 합니다. L-BFGS 다중 스레딩은 데이터 세트를 메모리에 로드하려고 시도합니다. 메모리 부족 문제가 발생하는 경우 train_threads
를 1
로 설정하여 다중 스레딩을 해제합니다.
None인 경우 사용할 스레드 수가 내부적으로 결정됩니다. 기본값은 없음입니다.
dense_optimizer
True
인 경우 내부 최적화 벡터의 고밀화를 적용합니다.
False
인 경우에는 로지스틱 회귀 최적화 프로그램이 적절한 판단에 따라 스파스 또는 고밀도 내부 상태를 사용합니다.
denseOptimizer
를 True
로 설정하면 내부 최적화 프로그램이 고밀도 내부 상태를 사용해야 하며, 이는 일부 유형의 더 큰 문제에 대한 가비지 수집기의 로드를 완화하는 데 도움이 될 수 있습니다.
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")
에 지정된 패키지 외부)를 지정하는 문자 벡터입니다.
예를 들어 transforms
및 transform_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
앙상블을 위한 제어 매개 변수입니다.
반환
학습된 모델이 있는 LogisticRegression
개체입니다.
참고
이 알고리즘은 train_threads > 1
(다중 스레딩)일 때 전체 데이터 세트를 메모리에 로드하려고 시도합니다.
추가 정보
참고 자료
테스트 실행 - 기계 학습에 대한 L1 및 L2 정규화
이진 분류 예제
'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, 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)
model = rx_logistic_regression(
formula=" isCase ~ age + parity + education + spontaneous + induced ",
data=data_train)
print(model.coef_)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(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.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 6
improvement criterion: Mean Improvement
L1 regularization selected 5 of 6 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0646405
Elapsed time: 00:00:00.0083991
OrderedDict([('(Bias)', -1.2366217374801636), ('spontaneous', 1.9391206502914429), ('induced', 0.7497404217720032), ('parity', -0.31517016887664795), ('age', -3.162723260174971e-06)])
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0287290
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds
isCase PredictedLabel Score Probability
0 False False -1.341681 0.207234
1 True True 0.597440 0.645070
2 False True 0.544912 0.632954
3 False False -1.289152 0.215996
4 False False -1.019339 0.265156
다중 클래스 분류 예제
'''
MultiClass Classification
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset
iris = get_dataset("iris")
import sklearn
if sklearn.__version__ < "0.18":
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
irisdf = iris.as_df()
irisdf["Species"] = irisdf["Species"].astype("category")
data_train, data_test, y_train, y_test = train_test_split(irisdf, irisdf.Species)
model = rx_logistic_regression(
formula=" Species ~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width ",
method="multiClass",
data=data_train)
print(model.coef_)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
extra_vars_to_write=["Species", "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: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 15
improvement criterion: Mean Improvement
L1 regularization selected 9 of 15 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0493224
Elapsed time: 00:00:00.0080558
OrderedDict([('setosa+(Bias)', 2.074636697769165), ('versicolor+(Bias)', 0.4899507164955139), ('virginica+(Bias)', -2.564580202102661), ('setosa+Petal_Width', -2.8389241695404053), ('setosa+Petal_Length', -2.4824044704437256), ('setosa+Sepal_Width', 0.274869441986084), ('versicolor+Sepal_Width', -0.2645561397075653), ('virginica+Petal_Width', 2.6924400329589844), ('virginica+Petal_Length', 1.5976412296295166)])
Beginning processing data.
Rows Read: 38, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0331861
Finished writing 38 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds
Species Score.0 Score.1 Score.2
0 virginica 0.044230 0.364927 0.590843
1 setosa 0.767412 0.210586 0.022002
2 setosa 0.756523 0.221933 0.021543
3 setosa 0.767652 0.211191 0.021157
4 versicolor 0.116369 0.498615 0.385016