Aracılığıyla paylaş


microsoftml.rx_logistic_regression: Lojistik Regresyon

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

Machine Learning Lojistik Regresyonu

Ayrıntılar

Lojistik Regresyon, kategorik bağımlı değişkenin bir veya daha fazla bağımsız değişkenle ilişkisinden lojistik dağılıma sahip olduğu varsayılan değeri tahmin etmek için kullanılan bir sınıflandırma yöntemidir. Bağımlı değişkende yalnızca iki olası değer varsa (başarı/başarısızlık), lojistik regresyon ikilidir. Bağımlı değişkenin ikiden fazla olası değeri varsa (tanı testi sonuçları verilen kan grubu), lojistik regresyon çok terimli olur.

için rx_logistic_regression kullanılan iyileştirme tekniği sınırlı bellek Broyden-Fletcher-Goldfarb-Shanno (L-BFGS). Hem L-BFGS hem de normal BFGS algoritmaları, Newton'un adımları hesaplamak için kullandığı denklemde hesaplama açısından yoğun Hessian matrisini tahmin etmek için quasi-Newton yöntemlerini kullanır. Ancak L-BFGS yaklaşık değeri, özellikle çok sayıda değişkenle ilgili sorunlar için uygun olması için bir sonraki adım yönünü hesaplamak için yalnızca sınırlı miktarda bellek kullanır. parametresi, memory_size sonraki adımın hesaplamasında kullanılmak üzere depolanması gereken geçmiş konumların ve gradyanların sayısını belirtir.

Bu öğrenci esnek net düzenlileştirmeyi kullanabilir: L1 (kement) ve L2 (sırt) düzenlileştirmelerinin doğrusal bir bileşimi. Normalleştirme, verileri desteklemek için bilgi sağlayan ve aşırı katsayı değerlerine sahip modelleri cezalandırarak fazla uygunluğu önleyen kısıtlamalar getirerek kötü görünen bir sorunu daha çekici hale getirebilen bir yöntemdir. Bu, sapma-varyans dengelenmesinde en uygun karmaşıklığı seçerek öğrenilen modelin genelleştirilmesini iyileştirebilir. Normalleştirme, hipotez hatasına katsayı değerleriyle ilişkili cezayı ekleyerek çalışır. Aşırı katsayı değerlerine sahip doğru bir model daha fazla cezaya neden olur, ancak daha muhafazakar değerlere sahip daha az doğru bir model daha az cezaya neden olur. L1 ve L2 düzenlileştirmenin farklı etkileri ve belirli açılardan tamamlayıcı olan kullanımları vardır.

  • l1_weight: yüksek boyutlu verilerle çalışırken seyrek modellere uygulanabilir. 0'a doğru nispeten önemli olmayan küçük ağırlıklarla ilişkili özellikleri çeker.

  • l2_weight: seyrek olmayan veriler için tercih edilir. Büyük ağırlıkları sıfıra doğru çeker.

Normalleştirmeye sırt cezası eklemek kementin bazı sınırlamalarının üstesinden gelir. Tahmine dayalı doğruluğunu geliştirebilir, örneğin tahmincilerin sayısı örnek boyutundan büyük olduğunda. if x = l1_weight ve y = l2_weightise, ax + by = c normalleştirme terimlerinin doğrusal aralığını tanımlar. Varsayılan x ve y değerleri her ikisi de 1şeklindedir. Agresif bir düzenlileştirme, önemli değişkenleri modelin dışında tutarak tahmine dayalı kapasiteye zarar verebilir. Bu nedenle, normalleştirme parametreleri için en uygun değerlerin seçilmesi lojistik regresyon modelinin performansı için önemlidir.

Arguments

formül

revoscalepy.rx_formula Etkileşim koşullarında açıklandığı gibi ve F() şu anda microsoftml'de desteklenmeyen formül.

veriler

Bir veri kaynağı nesnesi veya .xdf dosyası veya veri çerçevesi nesnesi belirten bir karakter dizesi.

method

Lojistik Regresyon türünü belirten karakter dizesi: "binary" varsayılan ikili sınıflandırma lojistik regresyonu veya "multiClass" çok terimli lojistik regresyon için.

l2_weight

L2 düzenlileştirme ağırlığı. Değeri büyüktür veya değerine eşit 0 olmalıdır ve varsayılan değer olarak 1ayarlanır.

l1_weight

L1 düzenlileştirme ağırlığı. Değeri büyüktür veya değerine eşit 0 olmalıdır ve varsayılan değer olarak 1ayarlanır.

opt_tol

İyileştirici yakınsama için eşik değeri. Yinelemeler arasındaki iyileştirme eşikten küçükse algoritma durur ve geçerli modeli döndürür. Daha küçük değerler daha yavaştır, ancak daha doğru olur. Varsayılan değer şudur: 1e-07.

memory_size

L-BFGS için bellek boyutu, sonraki adımın hesaplaması için depolanması gereken geçmiş konumların ve gradyanların sayısını belirtir. Bu iyileştirme parametresi, bir sonraki adımın büyüklüğünü ve yönünü hesaplamak için kullanılan bellek miktarını sınırlar. Daha az bellek belirttiğinizde eğitim daha hızlı ama daha az doğru olur. değerinden büyük veya buna eşit 1 olmalıdır ve varsayılan değer şeklindedir 20.

max_iterations

En fazla yineleme sayısını ayarlar. Bu sayıda adımdan sonra, yakınsama ölçütünü karşılamamış olsa bile algoritma durdurulur.

show_training_stats

Eğitim verilerinin ve eğitilen modelin istatistiklerini göstermek için belirtin True ; aksi takdirde , False. Varsayılan değer şudur: False. Model istatistikleri hakkında ek bilgi için bkz summary.ml_model(). .

sgd_init_tol

İlk parametreleri bulmak için Stokastik Gradyan Azalma (SGD) kullanmak için 0'dan büyük bir sayıya ayarlayın. Sıfır olmayan bir değer kümesi, SGD'nin yakınsama belirlemek için kullandığı toleransı belirtir. Varsayılan değer, 0 SGD'nin kullanılmadığını belirtir.

init_wts_diameter

İlk ağırlıklar için değerlerin çekildiği aralığı belirten ilk ağırlık çapını ayarlar. Bu ağırlıklar bu aralığın içinden rastgele başlatılır. Örneğin, çap olarak dbelirtilirse ağırlıklar ile d/2arasında -d/2 eşit olarak dağıtılır. Varsayılan değer, 0tüm ağırlıkların olarak 0başlatıldığını belirten değeridir.

train_threads

Modeli eğitmek için kullanılacak iş parçacığı sayısı. Bu, makinedeki çekirdek sayısına ayarlanmalıdır. L-BFGS çoklu iş parçacığı oluşturmanın veri kümesini belleğe yüklemeyi denediğini unutmayın. Yetersiz bellek sorunları söz konusu olduğunda, çoklu iş parçacığını kapatmak için olarak ayarlayın train_threads1 . Hiçbiri değilse, kullanılacak iş parçacığı sayısı dahili olarak belirlenir. Varsayılan değer olarak Hiçbiri kullanılır.

dense_optimizer

ise True, iç iyileştirme vektörlerinin reddedilmesini zorlar. ise False, lojistik regresyon iyileştiricisinin uygun bulduğu şekilde seyrek veya yoğun iç durumları kullanmasını sağlar. ayarı denseOptimizerTrue , iç iyileştiricinin yoğun bir iç durum kullanmasını gerektirir ve bu da bazı büyük sorun türleri için çöp toplayıcı üzerindeki yükü hafifletmeye yardımcı olabilir.

Normalleştirmek

Kullanılan otomatik normalleştirme türünü belirtir:

  • "Auto": normalleştirme gerekiyorsa otomatik olarak gerçekleştirilir. Bu varsayılan seçenektir.

  • "No": normalleştirme yapılmaz.

  • "Yes": normalleştirme gerçekleştirilir.

  • "Warn": normalleştirme gerekiyorsa, bir uyarı iletisi görüntülenir, ancak normalleştirme gerçekleştirilmez.

Normalleştirme, farklı veri aralıklarını standart bir ölçeğe yeniden ölçeklendirir. Özellik ölçeklendirme, veri noktaları arasındaki mesafelerin orantılı olmasını sağlar ve gradyan azalma gibi çeşitli iyileştirme yöntemlerinin çok daha hızlı yakınsamasını sağlar. Normalleştirme yapılırsa bir MaxMin normalleştirici kullanılır. [a, b] nerede -1 <= a <= 0 ve 0 <= b <= 1b - a = 1aralığındaki değerleri normalleştirir. Bu normalleştirici sıfırdan sıfıra eşleyerek sparsity'yi korur.

ml_transforms

Eğitimden önce veriler üzerinde gerçekleştirilecek MicrosoftML dönüşümlerinin listesini veya hiçbir dönüşüm gerçekleştirilecekse Hiçbiri'ni belirtir. Desteklenen dönüştürmeler için bkz featurize_text. , categoricalve categorical_hash. Bu dönüştürmeler, belirtilen Python dönüşümlerinden sonra gerçekleştirilir. Varsayılan değer olarak Hiçbiri kullanılır.

ml_transform_vars

Kullanılacak değişken adlarının karakter vektörlerini veya hiçbiri kullanılmadıysa ml_transformsHiçbiri'ni belirtir. Varsayılan değer olarak Hiçbiri kullanılır.

row_selection

DESTEKLENMEDİ. Model tarafından veri kümesindeki bir mantıksal değişkenin adıyla (tırnak içinde) veya veri kümesindeki değişkenleri kullanan bir mantıksal ifadeyle kullanılacak satırları (gözlemleri) belirtir. Örneğin:

  • row_selection = "old" yalnızca değişkeninin oldTruedeğerinin olduğu gözlemleri kullanır.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) yalnızca değişkenin değerinin age 20 ile 65 arasında olduğu ve değişkenin değerinin logincome 10'dan büyük olduğu gözlemleri kullanır.

Satır seçimi, veri dönüştürmeleri işlendikten sonra gerçekleştirilir (veya bağımsız değişkenlerine transformstransform_functionbakın). Tüm ifadelerde olduğu gibi, row_selection işlevi kullanılarak expression işlev çağrısı dışında tanımlanabilir.

Dönüştüren

DESTEKLENMEDİ. Değişken dönüşümlerinin ilk turunu temsil eden formun ifadesi. Tüm ifadelerde olduğu gibi , transforms (veya row_selection) işlevi kullanılarak expression işlev çağrısı dışında tanımlanabilir.

transform_objects

DESTEKLENMEDİ. , transform_functionve row_selectiontarafından transformsbaşvurulabilen nesneler içeren adlandırılmış liste.

transform_function

Değişken dönüştürme işlevi.

transform_variables

Dönüştürme işlevi için gereken giriş veri kümesi değişkenlerinin karakter vektörleri.

transform_packages

DESTEKLENMEDİ. Değişken dönüştürme işlevlerinde kullanılmak üzere kullanıma sunulacak ve önceden yüklenecek ek Python paketlerini (içinde RxOptions.get_option("transform_packages")belirtilenlerin dışında) belirten bir karakter vektör. Örneğin, ve bağımsız değişkenleri aracılığıyla transformstransform_functionrevoscalepy işlevlerinde açıkça tanımlananlar veya veya bağımsız değişkenleri aracılığıyla formularow_selection örtük olarak tanımlananlar. Bağımsız transform_packages değişken, dışında RxOptions.get_option("transform_packages") hiçbir paketin önceden yüklenmediğini gösteren Hiçbiri de olabilir.

transform_environment

DESTEKLENMEDİ. Dahili olarak geliştirilen ve değişken veri dönüşümü için kullanılan tüm ortamların üst öğesi olarak görev yapmak için kullanıcı tanımlı bir ortam. ise transform_environment = None, bunun yerine üst revoscalepy.baseenv içeren yeni bir "karma" ortam kullanılır.

blocks_per_read

Veri kaynağından okunan her veri öbekleri için okunacak blok sayısını belirtir.

report_progress

Satır işleme ilerleme durumuyla ilgili raporlama düzeyini belirten bir tamsayı değeri:

  • 0: herhangi bir ilerleme bildirilmemiştir.

  • 1: işlenen satır sayısı yazdırılır ve güncelleştirilir.

  • 2: işlenen satırlar ve zamanlamalar bildirilir.

  • 3: işlenen satırlar ve tüm zamanlamalar bildirilir.

verbose

İstenen çıkış miktarını belirten bir tamsayı değeri. ise 0, hesaplamalar sırasında ayrıntılı çıktı yazdırılmaz. Artan miktarda bilgi sağlamak için 4 olan 1 tamsayı değerleri.

compute_context

Geçerli bir revoscalepy ile belirtilen hesaplamaların yürütülme bağlamını ayarlar. RxComputeContext. Şu anda yerel ve revoscalepy. RxInSqlServer işlem bağlamları desteklenir.

Topluluğu

Benzerliği için denetim parametreleri.

İade

LogisticRegression Eğitilmiş modele sahip bir nesne.

Uyarı

Bu algoritma, (çok iş parçacığı) olduğunda train_threads > 1 veri kümesinin tamamını belleğe yüklemeyi dener.

Ayrıca bakınız

rx_predict

References

Vikipedi: L-BFGS

Vikipedi: Lojistik regresyon

L1-Regularized Log-Linear Modellerinin Ölçeklenebilir Eğitimi

Test Çalıştırması - Machine Learning için L1 ve L2 Düzenlileştirmesi

İkili sınıflandırma örneği

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

Çıktı:

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

Çok Sınıflı sınıflandırma örneği

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

Çıktı:

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