microsoftml.rx_oneclass_svm: 변칙 검색

사용

microsoftml.rx_oneclass_svm(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], cache_size: float = 100,
    kernel: [<function linear_kernel at 0x0000007156EAC8C8>,
    <function polynomial_kernel at 0x0000007156EAC950>,
    <function rbf_kernel at 0x0000007156EAC7B8>,
    <function sigmoid_kernel at 0x0000007156EACA60>] = {'Name': 'RbfKernel',
    'Settings': {}}, epsilon: float = 0.001, nu: float = 0.1,
    shrink: bool = True, 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

기계 학습 1클래스 지원 벡터 머신

세부 정보

1클래스 SVM은 변칙 검색을 위한 알고리즘입니다. 변칙 검색의 목표는 일부 대상 클래스에 속하지 않는 이상값을 식별하는 것입니다. 학습 집합에는 대상 클래스의 예제만 포함되므로 이 유형의 SVM은 1클래스입니다. 대상 클래스의 개체에 대해 어떤 속성이 일반적인지 유추하고 이러한 속성으로부터 어떤 예제가 일반 예제와 같지 않은지를 예측합니다. 학습 예제의 부족이 변칙의 결정적인 특징이므로 이는 변칙 검색에 유용합니다. 일반적으로 네트워크 침입, 사기 또는 기타 변칙적 동작 유형의 예는 매우 적습니다.

인수

formula

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

데이터

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

cache_size

학습 데이터를 저장하는 캐시의 최대 크기(MB). 대규모 학습 집합에 대해서는 이 값을 늘립니다. 기본값은 100MB입니다.

커널(kernel)

내부 곱을 계산하는 데 사용되는 커널을 나타내는 문자열. 자세한 내용은 ma_kernel()를 참조하세요. 다음 중에서 선택할 수 있습니다.

  • rbf_kernel: 방사형 기본 함수 커널. 해당 매개 변수는 exp(-gamma|x-y|^2 항에서 gamma를 나타냅니다. 지정하지 않으면, 기본값은 1을 사용된 기능 수로 나눈 값입니다. 예를 들어 rbf_kernel(gamma = .1)입니다. 기본값입니다.

  • linear_kernel: 선형 커널

  • polynomial_kernel: (a*<x,y> + bias)^deg 항에 매개 변수 이름이 a, bias, deg인 다항식 커널. bias의 기본값은 0입니다. deg(degree)의 기본값은 3입니다. a를 지정하지 않으면 1을 기능 수로 나눈 값으로 설정됩니다.

  • sigmoid_kernel: tanh(gamma*<x,y> + coef0) 항에 매개 변수 이름이 gammacoef0인 시그모이드(sigmoid) 커널. gamma의 기본값은 1을 기능 수로 나눈 값입니다. coef0 매개 변수의 기본값은 0입니다. 예를 들어 sigmoid_kernel(gamma = .1, coef0 = 0)입니다.

epsilon

최적화 프로그램 수렴의 임계값. 반복 간의 개선 수준이 임계값보다 낮으면 알고리즘이 중지되며 현재 모델이 반환됩니다. 값은 numpy.finfo(double).eps보다 크거나 같아야 합니다. 기본값은 0.001입니다.

nu

이상값의 소수 부분 및 지원 벡터의 수 간의 절충값(그리스 문자 nu로 표시됨). 0에서 1 사이여야 하며, 일반적으로 0.1에서 0.5 사이입니다. 기본값은 0.1입니다.

축소

True인 경우 축소 추론을 사용합니다. 이 경우 학습 절차 중에 일부 샘플이 “축소”되며, 이에 따라 학습 속도가 빨라질 수 있습니다. 기본값은 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")에 지정된 패키지 외부)를 지정하는 문자 벡터입니다. 예를 들어 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

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

반환

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

참고

이 알고리즘은 단일 스레드이며 항상 전체 데이터 세트를 메모리에 로드하려고 시도합니다.

추가 정보

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, rx_predict.

참고 자료

Wikipedia: 변칙 검색

Microsoft Azure Machine Learning Studio(클래식): 1클래스 지원 벡터 머신

고차원 분산 지원 예측

새로운 지원 벡터 알고리즘

LIBSVM: 지원 벡터 머신용 라이브러리

'''
Anomaly Detection.
'''
import numpy
import pandas
from microsoftml import rx_oneclass_svm, 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()
data_train, data_test = train_test_split(irisdf)

# Estimate a One-Class SVM model
model = rx_oneclass_svm(
            formula= "~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width",
            data=data_train)

# Add additional non-iris data to the test data set
data_test["isIris"] = 1.0
not_iris = pandas.DataFrame(data=dict(Sepal_Length=[2.5, 2.6], 
        Sepal_Width=[.75, .9], Petal_Length=[2.5, 2.5], 
        Petal_Width=[.8, .7], Species=["not iris", "not iris"], 
        isIris=[0., 0.]))

merged_test = pandas.concat([data_test, not_iris])

scoresdf = rx_predict(model, data=merged_test, extra_vars_to_write=["isIris"])

# Look at the last few observations
print(scoresdf.tail())

출력:

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.
Using these libsvm parameters: svm_type=2, nu=0.1, cache_size=100, eps=0.001, shrinking=1, kernel_type=2, gamma=0.25, degree=0, coef0=0
Reconstructed gradient.
optimization finished, #iter = 15
obj = 52.905421, rho = 9.506052
nSV = 12, nBSV = 9
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0555122
Elapsed time: 00:00:00.0212389
Beginning processing data.
Rows Read: 40, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0349974
Finished writing 40 rows.
Writing completed.
    isIris     Score
35     1.0 -0.142141
36     1.0 -0.531449
37     1.0 -0.189874
38     0.0  0.635845
39     0.0  0.555602