Udostępnij przez


microsoftml.rx_logistic_regression: Regresja logistyczna

Usage

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

Regresja logistyczna uczenia maszynowego

Szczegóły

Regresja logistyczna to metoda klasyfikacji służąca do przewidywania wartości zmiennej zależnej podzielonej na kategorie z relacji do co najmniej jednej niezależnej zmiennej, która ma rozkład logistyczny. Jeśli zmienna zależna ma tylko dwie możliwe wartości (powodzenie/niepowodzenie), regresja logistyczna jest binarna. Jeśli zmienna zależna ma więcej niż dwie możliwe wartości (dane wyniki badania diagnostycznego typu krwi), regresja logistyczna jest wielomianowa.

Technika optymalizacji używana dla rx_logistic_regression programu to ograniczona pamięć Broyden-Fletcher-Goldfarb-Shanno (L-BFGS). Zarówno L-BFGS, jak i zwykłe algorytmy BFGS używają quasi-newtonowskich metod do oszacowania obliczeniowej macierzy hessyjskiej w równaniu używanym przez metodę Newtona do obliczania kroków. Jednak przybliżenie L-BFGS używa tylko ograniczonej ilości pamięci do obliczenia następnego kierunku kroku, dzięki czemu jest szczególnie odpowiednie w przypadku problemów z dużą liczbą zmiennych. Parametr memory_size określa liczbę poprzednich pozycji i gradientów do przechowywania do użycia w obliczeniu następnego kroku.

Ten uczeń może używać elastycznej regularyzacji sieci: liniowej kombinacji L1 (lasso) i L2 (grzbiet) regularyzacji. Regularyzacja to metoda, która może sprawić, że problem stanie się bardziej problematyczny przez nałożenie ograniczeń, które dostarczają informacji w celu uzupełnienia danych i które zapobiega nadmiernemu dopasowaniu modeli poprzez karanie modeli z skrajnymi wartościami współczynników. Może to poprawić uogólnienie modelu poznanego, wybierając optymalną złożoność kompromisu odchylenia odchylenia. Regularyzacja działa przez dodanie kary powiązanej z wartościami współczynników do błędu hipotezy. Dokładny model o skrajnych wartościach współczynników byłby bardziej ukarany, ale mniej dokładny model z bardziej konserwatywnymi wartościami byłby karany mniej. Regularyzacja L1 i L2 ma różne skutki i zastosowania, które uzupełniają się pod pewnymi względami.

  • l1_weight: można stosować do rozrzednych modeli podczas pracy z danymi o wysokim wymiarach. Ściąga małe wagi skojarzone cechy, które są stosunkowo nieistotne w kierunku 0.

  • l2_weight: jest preferowany w przypadku danych, które nie są rozrzedłe. Ściąga duże wagi w kierunku zera.

Dodanie kary grzbietu do uregulowania przezwycięży niektóre ograniczenia lasso. Może ona zwiększyć dokładność predykcyjną, na przykład wtedy, gdy liczba predyktorów jest większa niż rozmiar próbki. Jeśli x = l1_weight i y = l2_weight, ax + by = c definiuje liniowy zakres terminów regularyzacji. Wartości domyślne x i y to 1. Agresywna regularyzacja może zaszkodzić wydajności predykcyjnej, wykluczając ważne zmienne z modelu. Dlatego wybranie optymalnych wartości parametrów regularyzacji jest ważne dla wydajności modelu regresji logistycznej.

Arguments

formuła

Formuła opisana w revoscalepy.rx_formula terminach interakcji i F() nie jest obecnie obsługiwana w języku microsoftml.

dane

Obiekt źródła danych lub ciąg znaków określający plik xdf lub obiekt ramki danych.

metoda

Ciąg znaków określający typ regresji logistycznej: "binary" dla domyślnej regresji logistycznej klasyfikacji binarnej lub "multiClass" regresji logistycznej wielomianowej.

l2_weight

Waga regularyzacji L2. Jego wartość musi być większa lub równa, 0 a wartość domyślna jest ustawiona na 1wartość .

l1_weight

Waga regularyzacji L1. Jego wartość musi być większa lub równa, 0 a wartość domyślna jest ustawiona na 1wartość .

opt_tol

Wartość progowa dla zbieżności optymalizatora. Jeśli poprawa między iteracjami jest mniejsza niż próg, algorytm zatrzymuje się i zwraca bieżący model. Mniejsze wartości są wolniejsze, ale dokładniejsze. Domyślna wartość to 1e-07.

memory_size

Rozmiar pamięci dla L-BFGS, określając liczbę poprzednich pozycji i gradientów do przechowywania na potrzeby obliczeń następnego kroku. Ten parametr optymalizacji ogranicza ilość pamięci używanej do obliczenia wielkości i kierunku następnego kroku. Po określeniu mniejszej ilości pamięci trenowanie jest szybsze, ale mniej dokładne. Wartość musi być większa lub równa 1 , a wartość domyślna to 20.

max_iterations

Ustawia maksymalną liczbę iteracji. Po wykonaniu tej liczby kroków algorytm zatrzymuje się nawet wtedy, gdy nie spełnia kryteriów zbieżności.

show_training_stats

Określ True , aby wyświetlić statystyki danych treningowych i wytrenowanego modelu; w przeciwnym razie False. Domyślna wartość to False. Aby uzyskać dodatkowe informacje na temat statystyk modelu, zobacz summary.ml_model().

sgd_init_tol

Ustaw na liczbę większą niż 0, aby użyć Stochastic Gradient Descent (SGD) w celu znalezienia parametrów początkowych. Zestaw wartości innych niż zero określa tolerancję użycia SGD do określenia zbieżności. Wartość domyślna określa 0 , że sgD nie jest używany.

init_wts_diameter

Ustawia początkową średnicę wag, która określa zakres, z którego wartości są pobierane dla wag początkowych. Wagi te są inicjowane losowo z poziomu tego zakresu. Na przykład, jeśli średnica jest określona jako d, wagi są równomiernie rozłożone między -d/2 i d/2. Wartość domyślna to 0, która określa, że wszystkie wagi są inicjowane na 0.

train_threads

Liczba wątków używanych w trenowaniu modelu. Powinno to być ustawione na liczbę rdzeni na maszynie. Należy pamiętać, że wiele wątków L-BFGS próbuje załadować zestaw danych do pamięci. W przypadku problemów z brakiem pamięci ustaw wartość train_threads na wartość , aby 1 wyłączyć wielowątkowy. Jeśli żadna liczba wątków do użycia nie zostanie określona wewnętrznie. Wartość domyślna to Brak.

dense_optimizer

Jeśli Trueelement wymusza zagęszczenie wektorów optymalizacji wewnętrznej. Jeśli Falseprogram włączy optymalizator regresji logistycznej, użyj rozrzednionych lub gęstych stanów wewnętrznych, ponieważ uzna to za odpowiednie. Ustawienie denseOptimizer wymaga True wewnętrznego optymalizatora używania gęstego stanu wewnętrznego, co może pomóc złagodzić obciążenie modułu odśmiecanie pamięci w przypadku niektórych odmian większych problemów.

Normalizacji

Określa typ używanej automatycznej normalizacji:

  • "Auto": jeśli jest wymagana normalizacja, jest wykonywana automatycznie. Jest to wybór domyślny.

  • "No": nie jest wykonywana normalizacja.

  • "Yes": jest wykonywana normalizacja.

  • "Warn": jeśli jest wymagana normalizacja, zostanie wyświetlony komunikat ostrzegawczy, ale normalizacja nie jest wykonywana.

Normalizacja zmienia skalowanie różnych zakresów danych do standardowej skali. Skalowanie funkcji zapewnia proporcjonalne odległości między punktami danych i umożliwia różne metody optymalizacji, takie jak spadek gradientu, znacznie szybsze. W przypadku normalizacji MaxMin jest używany normalizator. Normalizuje wartości w interwale [a, b] gdzie -1 <= a <= 0 i 0 <= b <= 1 .b - a = 1 Ten normalizator zachowuje rozrzedliwość przez mapowanie zera na zero.

ml_transforms

Określa listę przekształceń MicrosoftML, które mają być wykonywane na danych przed trenowanie lub Brak , jeśli nie mają być wykonywane żadne przekształcenia. Zobacz featurize_text, categoricali categorical_hash, aby zapoznać się z obsługiwanymi przekształceniami. Te przekształcenia są wykonywane po wszelkich określonych przekształceniach języka Python. Wartość domyślna to Brak.

ml_transform_vars

Określa wektor znaków nazw zmiennych do użycia w ml_transforms lub Brak , jeśli nie ma być używany. Wartość domyślna to Brak.

row_selection

NIEOBSŁUGIWANE. Określa wiersze (obserwacje) z zestawu danych, które mają być używane przez model z nazwą zmiennej logicznej z zestawu danych (w cudzysłowie) lub z wyrażeniem logicznym przy użyciu zmiennych w zestawie danych. Przykład:

  • row_selection = "old" będzie używać tylko obserwacji, w których wartość zmiennej old to True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) Używa tylko obserwacji, w których wartość age zmiennej wynosi od 20 do 65, a wartość log zmiennej income jest większa niż 10.

Wybór wiersza jest wykonywany po przetworzeniu wszystkich przekształceń danych (zobacz argumenty transforms lub transform_function). Podobnie jak w przypadku wszystkich wyrażeń, row_selection można zdefiniować poza wywołaniem funkcji przy użyciu expression funkcji.

Przekształca

NIEOBSŁUGIWANE. Wyrażenie formularza reprezentującego pierwszą rundę przekształceń zmiennych. Podobnie jak w przypadku wszystkich wyrażeń transforms (lub row_selection) można zdefiniować poza wywołaniem funkcji przy użyciu expression funkcji .

transform_objects

NIEOBSŁUGIWANE. Nazwana lista zawierająca obiekty, do których można odwoływać się w transformselementach , transform_functioni row_selection.

transform_function

Funkcja przekształcania zmiennej.

transform_variables

Wektor znaków zmiennych zestawu danych wejściowych potrzebnych do funkcji przekształcania.

transform_packages

NIEOBSŁUGIWANE. Wektor znaków określający dodatkowe pakiety języka Python (poza określonymi w ) RxOptions.get_option("transform_packages")do udostępnienia i wstępnie załadowane do użycia w funkcjach przekształcania zmiennych. Na przykład te jawnie zdefiniowane w funkcjach revoscalepy za pośrednictwem ich transforms argumentów i transform_function lub zdefiniowanych niejawnie za pośrednictwem ich formula lub row_selection argumentów. Argumentem transform_packages może być również Brak wskazujący, że żadne pakiety poza nie RxOptions.get_option("transform_packages") są wstępnie ładowane.

transform_environment

NIEOBSŁUGIWANE. Środowisko zdefiniowane przez użytkownika, które służy jako element nadrzędny dla wszystkich środowisk opracowanych wewnętrznie i używanych do przekształcania danych zmiennych. Jeśli transform_environment = Nonejest używane nowe środowisko "hash" z nadrzędnym elementem revoscalepy.baseenv.

blocks_per_read

Określa liczbę bloków do odczytu dla każdego fragmentu danych odczytywanych ze źródła danych.

report_progress

Wartość całkowita określająca poziom raportowania postępu przetwarzania wierszy:

  • 0: nie zgłoszono żadnego postępu.

  • 1: liczba przetworzonych wierszy jest drukowana i aktualizowana.

  • 2: są zgłaszane przetworzone wiersze i chronometraż.

  • 3: są zgłaszane wiersze przetworzone i wszystkie chronometraż.

pełny

Wartość całkowita określająca ilość żądanych danych wyjściowych. Jeśli 0podczas obliczeń nie są drukowane żadne pełne dane wyjściowe. Wartości całkowite z 1 , aby 4 zapewnić coraz większe ilości informacji.

compute_context

Ustawia kontekst, w którym są wykonywane obliczenia określone przy użyciu prawidłowej wersji revoscalepy. RxComputeContext. Obecnie lokalne i revoscalepy. Obsługiwane są konteksty obliczeniowe RxInSqlServer .

Zespół

Parametry sterowania dla ensembling.

Zwraca

LogisticRegression Obiekt z wytrenowanym modelem.

Uwaga / Notatka

Ten algorytm podejmie próbę załadowania całego zestawu danych do pamięci, gdy train_threads > 1 (wielowątkowy).

Zobacz także

rx_predict

References

Wikipedia: L-BFGS

Wikipedia: Regresja logistyczna

Skalowalne szkolenie modeli L1-Regularized Log-Linear

Przebieg testu — regularyzacja L1 i L2 na potrzeby uczenia maszynowego

Przykład klasyfikacji binarnej

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

Wyjście:

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

Przykład klasyfikacji MultiClass

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

Wyjście:

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