Bagikan melalui


microsoftml.rx_logistic_regression: Registri Logistik

Penggunaan

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)

Deskripsi

Regresi Logistik Pembelajaran Mesin

Detail

Regresi Logistik adalah metode klasifikasi yang digunakan untuk memprediksi nilai variabel dependen kategoris dari hubungannya ke satu atau beberapa variabel independen yang diasumsikan memiliki distribusi logistik. Jika variabel dependen hanya memiliki dua nilai yang mungkin (berhasil/gagal), maka regresi logistik adalah biner. Jika variabel dependen memiliki lebih dari dua nilai yang mungkin (jenis darah yang diberikan hasil tes diagnostik), regresi logistik adalah multinomial.

Teknik pengoptimalan yang digunakan untuk rx_logistic_regression adalah memori terbatas Broyden-Fletcher-Goldfarb-Shanno (L-BFGS). Algoritma L-BFGS dan BFGS reguler menggunakan metode kuasi-Newtonian untuk memperkirakan matriks Hessian yang intensif secara komputasi dalam persamaan yang digunakan oleh metode Newton untuk menghitung langkah-langkah. Tetapi perkiraan L-BFGS hanya menggunakan jumlah memori terbatas untuk menghitung arah langkah berikutnya, sehingga sangat cocok untuk masalah dengan sejumlah besar variabel. Parameter memory_size menentukan jumlah posisi dan gradien sebelumnya untuk disimpan untuk digunakan dalam komputasi langkah berikutnya.

Pelajar ini dapat menggunakan regularisasi jaring elastis: kombinasi linier regularisasi L1 (lasso) dan L2 (ridge). Regularisasi adalah metode yang dapat membuat masalah yang buruk lebih dapat dilacak dengan memberlakukan batasan yang memberikan informasi untuk melengkapi data dan yang mencegah overfitting dengan menghukut model dengan nilai koefisien ekstrem. Ini dapat meningkatkan generalisasi model yang dipelajari dengan memilih kompleksitas optimal dalam tradeoff varians bias. Regularisasi bekerja dengan menambahkan penalti yang terkait dengan nilai koefisien ke kesalahan hipotesis. Model yang akurat dengan nilai koefisien ekstrem akan dikenakan sanksi lebih banyak, tetapi model yang kurang akurat dengan nilai yang lebih konservatif akan dikenakan sanksi lebih sedikit. Regularisasi L1 dan L2 memiliki efek dan penggunaan yang berbeda yang saling melengkapi dalam hal-hal tertentu.

  • l1_weight: dapat diterapkan ke model jarang, saat bekerja dengan data dimensi tinggi. Ini menarik bobot kecil terkait fitur yang relatif tidak penting terhadap 0.

  • l2_weight: lebih disukai untuk data yang tidak jarang. Ini menarik bobot besar menuju nol.

Menambahkan penalti ridge ke regularisasi mengatasi beberapa keterbatasan lasso. Ini dapat meningkatkan akurasi prediktifnya, misalnya, ketika jumlah prediktor lebih besar dari ukuran sampel. Jika x = l1_weight dan y = l2_weight, ax + by = c mendefinisikan rentang linier dari istilah regularisasi. Nilai default x dan y keduanya adalah 1. Regularisasi agresif dapat membahayakan kapasitas prediktif dengan mengecualikan variabel penting dari model. Jadi memilih nilai optimal untuk parameter regularisasi penting untuk performa model regresi logistik.

Argumen

Formula

Rumus seperti yang dijelaskan dalam istilah interaksi revoscalepy.rx_formula dan F() saat ini tidak didukung dalam microsoftml.

data

Objek sumber data atau string karakter yang menentukan file .xdf atau objek bingkai data.

metode

String karakter yang menentukan jenis Regresi Logistik: "binary" untuk regresi logistik klasifikasi biner default atau "multiClass" untuk regresi logistik multinomial.

l2_weight

Berat regularisasi L2. Nilainya harus lebih besar dari atau sama dengan 0 dan nilai default diatur ke 1.

l1_weight

Berat regularisasi L1. Nilainya harus lebih besar dari atau sama dengan 0 dan nilai default diatur ke 1.

opt_tol

Nilai ambang batas untuk konvergensi pengoptimal. Jika perbaikan antara perulangan kurang dari ambang batas, algoritma akan berhenti dan mengembalikan model saat ini. Nilai yang lebih kecil lebih lambat, tetapi lebih akurat. Nilai defaultnya adalah 1e-07.

memory_size

Ukuran memori untuk L-BFGS, menentukan jumlah posisi dan gradien sebelumnya yang akan disimpan untuk komputasi langkah berikutnya. Parameter pengoptimalan ini membatasi jumlah memori yang digunakan untuk menghitung besaran dan arah langkah berikutnya. Saat Anda menentukan lebih sedikit memori, pelatihan berjalan lebih cepat tetapi kurang akurat. Harus lebih besar dari atau sama dengan 1 dan nilai defaultnya adalah 20.

max_iterations

Mengatur jumlah maksimum perulangan. Setelah jumlah langkah ini, algoritma berhenti bahkan jika belum memenuhi kriteria konvergensi.

show_training_stats

Tentukan True untuk memperlihatkan statistik data pelatihan dan model terlatih; jika tidak, False. Nilai defaultnya adalah False. Untuk informasi tambahan tentang statistik model, lihat summary.ml_model().

sgd_init_tol

Atur ke angka yang lebih besar dari 0 untuk menggunakan Stochastic Gradient Descent (SGD) untuk menemukan parameter awal. Set nilai bukan nol menentukan toleransi yang digunakan SGD untuk menentukan konvergensi. Nilai default menentukan 0 bahwa SGD tidak digunakan.

init_wts_diameter

Mengatur diameter bobot awal yang menentukan rentang dari mana nilai digambar untuk bobot awal. Bobot ini diinisialisasi secara acak dari dalam rentang ini. Misalnya, jika diameter ditentukan menjadi d, maka bobot didistribusikan secara seragam antara -d/2 dan d/2. Nilai defaultnya adalah 0, yang menentukan bahwa semua bobot diinisialisasi ke 0.

train_threads

Jumlah utas yang akan digunakan dalam melatih model. Ini harus diatur ke jumlah inti pada komputer. Perhatikan bahwa multi-utas L-BFGS mencoba memuat himpunan data ke dalam memori. Jika terjadi masalah kehabisan memori, atur train_threads ke 1 untuk menonaktifkan multi-utas. Jika Tidak ada jumlah utas yang akan digunakan ditentukan secara internal. Nilai defaultnya adalah Tidak Ada.

dense_optimizer

Jika True, memaksa kepadatan vektor pengoptimalan internal. Jika False, memungkinkan pengoptimal regresi logistik menggunakan status internal yang jarang atau padat karena menurutnya sesuai. Pengaturan denseOptimizer untuk True mengharuskan pengoptimal internal menggunakan keadaan internal yang padat, yang dapat membantu meringankan beban pada pengumpul sampah untuk beberapa varietas masalah yang lebih besar.

Menormalkan

Menentukan jenis normalisasi otomatis yang digunakan:

  • "Auto": jika normalisasi diperlukan, itu dilakukan secara otomatis. Ini adalah pilihan default.

  • "No": tidak ada normalisasi yang dilakukan.

  • "Yes": normalisasi dilakukan.

  • "Warn": jika normalisasi diperlukan, pesan peringatan ditampilkan, tetapi normalisasi tidak dilakukan.

Normalisasi menskalakan ulang rentang data yang berbeda dengan skala standar. Penskalaan fitur memastikan jarak antara titik data proporsional dan memungkinkan berbagai metode pengoptimalan seperti penurunan gradien untuk berkonversi jauh lebih cepat. Jika normalisasi dilakukan, MaxMin normalizer digunakan. Ini menormalkan nilai dalam interval [a, b] di mana -1 <= a <= 0 dan b - a = 10 <= b <= 1 . Normalizer ini mempertahankan sparsitas dengan memetakan nol ke nol.

ml_transforms

Menentukan daftar transformasi MicrosoftML yang akan dilakukan pada data sebelum pelatihan atau Tidak Ada jika tidak ada transformasi yang akan dilakukan. Lihat featurize_text, , categoricaldan categorical_hash, untuk transformasi yang didukung. Transformasi ini dilakukan setelah transformasi Python yang ditentukan. Nilai defaultnya adalah Tidak Ada.

ml_transform_vars

Menentukan vektor karakter nama variabel yang akan digunakan di ml_transforms atau Tidak Ada jika tidak ada yang akan digunakan. Nilai defaultnya adalah Tidak Ada.

row_selection

TIDAK DIDUKUNG. Menentukan baris (pengamatan) dari himpunan data yang akan digunakan oleh model dengan nama variabel logis dari himpunan data (dalam tanda kutip) atau dengan ekspresi logis menggunakan variabel dalam himpunan data. Contohnya:

  • row_selection = "old" hanya akan menggunakan pengamatan di mana nilai variabel old adalah True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) hanya menggunakan pengamatan di mana nilai age variabel adalah antara 20 dan 65 dan nilai logincome variabel lebih besar dari 10.

Pemilihan baris dilakukan setelah memproses transformasi data apa pun (lihat argumen transforms atau transform_function). Seperti semua ekspresi, row_selection dapat didefinisikan di luar panggilan fungsi menggunakan expression fungsi .

transformasi

TIDAK DIDUKUNG. Ekspresi formulir yang mewakili putaran pertama transformasi variabel. Seperti semua ekspresi, transforms (atau row_selection) dapat didefinisikan di luar panggilan fungsi menggunakan expression fungsi .

transform_objects

TIDAK DIDUKUNG. Daftar bernama yang berisi objek yang dapat dirujuk oleh transforms, transform_function, dan row_selection.

transform_function

Fungsi transformasi variabel.

transform_variables

Vektor karakter variabel himpunan data input yang diperlukan untuk fungsi transformasi.

transform_packages

TIDAK DIDUKUNG. Vektor karakter yang menentukan paket Python tambahan (di luar yang ditentukan dalam RxOptions.get_option("transform_packages")) untuk tersedia dan dimuat sebelumnya untuk digunakan dalam fungsi transformasi variabel. Misalnya, yang secara eksplisit didefinisikan dalam fungsi revoscalepy melalui argumen dan transform_function mereka transforms atau yang didefinisikan secara implisit melalui argumen atau row_selection merekaformula. Argumen transform_packages mungkin juga Tidak Ada, menunjukkan bahwa tidak ada paket di luar RxOptions.get_option("transform_packages") yang dimuat sebelumnya.

transform_environment

TIDAK DIDUKUNG. Lingkungan yang ditentukan pengguna untuk berfungsi sebagai induk untuk semua lingkungan yang dikembangkan secara internal dan digunakan untuk transformasi data variabel. Jika transform_environment = None, lingkungan "hash" baru dengan revoscalepy.baseenv induk digunakan sebagai gantinya.

blocks_per_read

Menentukan jumlah blok yang akan dibaca untuk setiap potongan data yang dibaca dari sumber data.

report_progress

Nilai bilangan bulat yang menentukan tingkat pelaporan pada kemajuan pemrosesan baris:

  • 0: tidak ada kemajuan yang dilaporkan.

  • 1: jumlah baris yang diproses dicetak dan diperbarui.

  • 2: baris yang diproses dan waktu dilaporkan.

  • 3: baris yang diproses dan semua waktu dilaporkan.

verbose

Nilai bilangan bulat yang menentukan jumlah output yang diinginkan. Jika 0, tidak ada output verbose yang dicetak selama perhitungan. Nilai bilangan bulat dari 1 untuk 4 memberikan jumlah informasi yang meningkat.

compute_context

Mengatur konteks di mana komputasi dijalankan, ditentukan dengan revoscalepy yang valid. RxComputeContext. Saat ini lokal dan revoscalepy. Konteks komputasi RxInSqlServer didukung.

Ansambel

Parameter kontrol untuk ansambel.

Mengembalikan

Objek LogisticRegression dengan model terlatih.

Catatan

Algoritma ini akan mencoba memuat seluruh himpunan data ke dalam memori saat train_threads > 1 (multi-utas).

Lihat juga

rx_predict

Referensi

Wikipedia: L-BFGS

Wikipedia: Regresi logistik

Pelatihan Model L1-Regularized Log-Linear yang Dapat Diskalakan

Uji Coba - Regularisasi L1 dan L2 untuk Pembelajaran Mesin

Contoh klasifikasi biner

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

Output:

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

Contoh klasifikasi MultiKelas

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

Output:

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