Sdílet prostřednictvím


microsoftml.rx_logistic_regression: Logistická regrese

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

Logistická regrese strojového učení

Podrobnosti

Logistická regrese je klasifikační metoda, která se používá k predikci hodnoty proměnné závislé na kategoriích z jejího vztahu k jedné nebo více nezávislých proměnných, u kterých se předpokládá logistická distribuce. Pokud má závislá proměnná pouze dvě možné hodnoty (úspěch/selhání), pak logistická regrese je binární. Pokud má závislá proměnná více než dvě možné hodnoty (výsledky diagnostického testu krevního typu), je logistická regrese multinomická.

Technika optimalizace používaná pro rx_logistic_regression omezenou paměť Broyden-Fletcher-Goldfarb-Shanno (L-BFGS). Oba L-BFGS i běžné algoritmy BFGS používají kvazi-Newtonovské metody k odhadu výpočetně náročné Hessian matice v rovnici používané Newtonovou metodou k výpočtu kroků. Aproximace L-BFGS ale používá k výpočtu dalšího kroku pouze omezené množství paměti, takže je obzvláště vhodná pro problémy s velkým počtem proměnných. Parametr memory_size určuje počet minulých pozic a přechodů, které se mají uložit pro použití ve výpočtu dalšího kroku.

Tento learner může používat elastické regularizace net: lineární kombinace L1 (laso) a L2 (ridge) regularizace. Regularizace je metoda, která může vykreslit špatně posedlé problémy tím, že uloží omezení, která poskytují informace k doplnění dat a které brání přeurčení tím, že modely s extrémními hodnotami koeficientu. To může zlepšit generalizaci modelu získané výběrem optimální složitosti v kompromisu odchylky. Regularizace funguje tak, že k chybě hypotézy přidá penále, která je přidružená k hodnotám koeficientu. Přesný model s extrémními hodnotami koeficientů by byl penalizován více, ale méně přesný model s konzervativnějšími hodnotami by byl penalizován méně. Regularizace L1 a L2 mají různé účinky a použití, které se doplňují v určitých ohledech.

  • l1_weight: lze použít u řídkých modelů při práci s vysoce dimenzionálními daty. Načítá malé váhy přidružené funkce, které jsou relativně nedůležité směrem k 0.

  • l2_weight: je vhodnější pro data, která nejsou řídká. Stahuje velké váhy směrem k nule.

Přidáním trestů ridge do regularizace se překonaly některé omezení lasa. Může zlepšit prediktivní přesnost, například když je počet prediktorů větší než velikost vzorku. Pokud x = l1_weight a y = l2_weight, ax + by = c definuje lineární rozsah regulárních termínů. Výchozí hodnoty x a y jsou oba 1. Agresivní regularizace může poškodit prediktivní kapacitu vyloučením důležitých proměnných z modelu. Proto je volba optimálních hodnot pro parametry regularizace důležitá pro výkon modelu logistické regrese.

Arguments

vzorec

Vzorec, jak je popsáno v podmínkách interakce revoscalepy.rx_formula a F() v microsoftml se v současné době nepodporuje.

data

Objekt zdroje dat nebo řetězec znaku určující soubor .xdf nebo objekt datového rámce.

metoda

Řetězec znaku, který určuje typ logistické regrese: "binary" pro výchozí logistickou regresi binární klasifikace nebo "multiClass" pro multinomické logistické regrese.

l2_weight

Hmotnost regularizace L2. Jeho hodnota musí být větší nebo rovna 0 a výchozí hodnota je nastavena na 1.

l1_weight

Hmotnost regularizace L1. Jeho hodnota musí být větší nebo rovna 0 a výchozí hodnota je nastavena na 1.

opt_tol

Prahová hodnota pro konvergenci optimalizátoru. Pokud je zlepšení mezi iteracemi menší než prahová hodnota, algoritmus se zastaví a vrátí aktuální model. Menší hodnoty jsou pomalejší, ale přesnější. Výchozí hodnota je 1e-07.

memory_size

Velikost paměti pro L-BFGS určující počet minulých pozic a přechodů, které se mají uložit pro výpočet dalšího kroku. Tento parametr optimalizace omezuje velikost paměti, která se používá k výpočtu velikosti a směru dalšího kroku. Když zadáte méně paměti, trénování je rychlejší, ale méně přesné. Musí být větší nebo rovno 1 a výchozí hodnota je 20.

max_iterations

Nastaví maximální počet iterací. Po tomto počtu kroků se algoritmus zastaví, i když nesplňuje kritéria konvergence.

show_training_stats

Zadejte True , aby se zobrazily statistiky trénovacích dat a vytrénovaného modelu, jinak False. Výchozí hodnota je False. Další informace o statistikách modelu najdete v tématu summary.ml_model().

sgd_init_tol

Nastavte na číslo větší než 0 pro vyhledání počátečních parametrů pomocí stochastického gradientního sestupu (SGD). Množina nenulových hodnot určuje směroná odchylka, která se používá k určení konvergence. Výchozí hodnota určuje 0 , že SGD se nepoužívá.

init_wts_diameter

Nastaví průměr počátečních hmotností, který určuje rozsah, ze kterého jsou hodnoty nakresleny pro počáteční váhy. Tyto váhy se inicializují náhodně z tohoto rozsahu. Pokud je například zadán dprůměr , pak jsou váhy rovnoměrně rozděleny mezi -d/2 a d/2. Výchozí hodnota je 0, která určuje, že všechny váhy jsou inicializovány na 0.

train_threads

Počet vláken, která se mají použít při trénování modelu. To by mělo být nastavené na počet jader na počítači. Všimněte si, že vícevláknové ověřování L-BFGS se pokouší načíst datovou sadu do paměti. Vpřípaděch train_threads1 Pokud se počet vláken, která se mají použít, určuje interně. Výchozí hodnota je None.

dense_optimizer

Pokud True, vynutí densifikace vnitřních optimalizačních vektorů. Pokud Falseumožňuje optimalizátor logistické regrese používat zhuštěné nebo zhuštěné vnitřní stavy, jak je najde. Nastavení denseOptimizer , které vyžaduje, aby True interní optimalizátor používal hustý vnitřní stav, který může pomoci zmírnit zatížení uvolňování paměti pro některé odrůdy větších problémů.

Normalizovat

Určuje typ použité automatické normalizace:

  • "Auto": Pokud je potřeba normalizace, provede se automaticky. Toto je výchozí volba.

  • "No": Neprovádí se normalizace.

  • "Yes": normalizace se provádí.

  • "Warn": Pokud je potřeba normalizace, zobrazí se zpráva s upozorněním, ale normalizace se neprovede.

Normalizace rescales disparate data ranges to a standard scale. Škálování funkcí zajišťuje, že vzdálenosti mezi datovými body jsou proporcionální a umožňují mnohem rychleji konvergovat různé metody optimalizace, jako je gradientní sestup. Při normalizaci MaxMin se použije normalizátor. Normalizuje hodnoty v intervalu [a, b] where -1 <= a <= 0 a 0 <= b <= 1 .b - a = 1 Tento normalizátor zachovává sparsity tím, že namapuje nulu na nulu.

ml_transforms

Určuje seznam transformací MicrosoftML, které se mají provést s daty před trénováním nebo Žádná , pokud se neprovedou žádné transformace. Viz featurize_text, categoricala categorical_hash, pro transformace, které jsou podporovány. Tyto transformace se provádějí po všech zadaných transformacích Pythonu. Výchozí hodnota je None.

ml_transform_vars

Určuje vektor znaku názvů proměnných, který má být použit v ml_transforms nebo None , pokud se žádný použít. Výchozí hodnota je None.

row_selection

NEPODPORUJE SE. Určuje řádky (pozorování) ze sady dat, které má model používat s názvem logické proměnné ze sady dat (v uvozovkách) nebo logickým výrazem pomocí proměnných v sadě dat. Například:

  • row_selection = "old"použije pouze pozorování, ve kterých je Truehodnota proměnné old .

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) používá pouze pozorování, ve kterých je hodnota age proměnné mezi 20 a 65 a hodnotou logincome proměnné je větší než 10.

Výběr řádku se provede po zpracování všech transformací dat (viz argumenty transforms nebo transform_function). Stejně jako u všech výrazů row_selection je možné definovat mimo volání funkce pomocí expression funkce.

transformuje

NEPODPORUJE SE. Výraz formuláře, který představuje první kolo transformací proměnných. Stejně jako u všech výrazů transforms je možné definovat (nebo row_selection) mimo volání funkce pomocí expression funkce.

transform_objects

NEPODPORUJE SE. Pojmenovaný seznam obsahující objekty, na které lze odkazovat pomocí transforms, transform_functiona row_selection.

transform_function

Proměnná transformační funkce.

transform_variables

Znakový vektor vstupních proměnných množiny dat potřebných pro transformační funkci.

transform_packages

NEPODPORUJE SE. Vektor znaku určující další balíčky Pythonu (mimo balíčky zadané v RxOptions.get_option("transform_packages")) k dispozici a předem načtený pro použití v transformačních funkcích proměnných. Například explicitně definované v funkcích revoscalepy prostřednictvím jejich transforms a transform_function argumentů nebo těch, které jsou definovány implicitně prostřednictvím jejich formula nebo row_selection argumentů. Argumentem transform_packages může být také Žádný, což znamená, že nejsou předem načteny žádné balíčky mimo RxOptions.get_option("transform_packages") .

transform_environment

NEPODPORUJE SE. Uživatelem definované prostředí, které bude sloužit jako nadřazené všem prostředím vyvinutým interně a které se používají k transformaci proměnných dat. Pokud transform_environment = Nonese místo toho použije nové prostředí hash s nadřazeným revoscalepy.baseenv.

blocks_per_read

Určuje početblokůch

report_progress

Celočíselná hodnota, která určuje úroveň generování sestav o průběhu zpracování řádků:

  • 0: Nebyl hlášen žádný průběh.

  • 1: Počet zpracovaných řádků se vytiskne a aktualizuje.

  • 2: Jsou hlášeny řádky zpracovávané a časování.

  • 3: Jsou hlášeny řádky zpracovávané a všechna časování.

podrobný

Celočíselná hodnota, která určuje požadovanou velikost výstupu. Pokud 0se během výpočtů nevytiskne žádný podrobný výstup. Celočíselné hodnoty, od 1 které se 4 poskytují rostoucí množství informací.

compute_context

Nastaví kontext, ve kterém se výpočty spouštějí, zadané pomocí platné revoscalepy. RxComputeContext. V současné době místní a revoscalepy. Podporují se výpočetní kontexty RxInSqlServer .

Soubor

Kontrolní parametry pro přemíscení

Návraty

Objekt LogisticRegression s natrénovaným modelem.

Poznámka:

Tento algoritmus se pokusí načíst celou datovou sadu do paměti, když train_threads > 1 (více vláken).

Viz také

rx_predict

Odkazy

Wikipedie: L-BFGS

Wikipedie: Logistická regrese

Škálovatelné trénování modelů L1-Regularized Log-Linear

Testovací běh – Regularizace L1 a L2 pro strojové učení

Příklad binární klasifikace

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

Výstup:

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

Příklad klasifikace 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))

Výstup:

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