microsoftml.rx_fast_linear: Model Linear dengan Pendakian Koordinat Ganda Stokastik

Usage

microsoftml.rx_fast_linear()

Deskripsi

Pelatih optimasi Stochastic Dual Coordinate Ascent (SDCA) untuk klasifikasi biner linier dan regresi.

Rincian

rx_fast_linear adalah pelatih yang didasarkan pada metode Stochastic Dual Coordinate Ascent (SDCA), sebuah teknik optimasi mutakhir untuk fungsi objektif cembung. Algoritma ini dapat diskalakan untuk digunakan pada set data besar yang kehabisan memori berkat implementasi semi-asinkron yang mendukung multi-threading. Konvergensi didasarkan dengan secara berkala menegakkan sinkronisasi antara pembaruan primal dan dual dalam thread terpisah. Beberapa pilihan fungsi kerugian juga disediakan. Metode SDCA menggabungkan beberapa sifat dan kemampuan terbaik dari logistik regresi dan algoritma SVM. Untuk informasi lebih lanjut tentang SDCA, lihat kutipan di bagian referensi.

Algoritma optimasi tradisional, seperti stochastic gradient descent (SGD), mengoptimalkan fungsi kerugian empiris secara langsung. SDCA memilih pendekatan berbeda yang mengoptimalkan masalah ganda sebagai gantinya. Fungsi dual loss diparameterisasi oleh bobot per contoh. Dalam setiap iterasi, ketika contoh pelatihan dari set data pelatihan dibaca, bobot contoh yang sesuai disesuaikan sehingga fungsi dual loss dioptimalkan terhadap contoh saat ini. SDCA tidak memerlukan tingkat pembelajaran untuk menentukan ukuran langkah seperti yang diperlukan oleh berbagai metode penurunan gradien.

rx_fast_linear mendukung klasifikasi biner dengan tiga jenis fungsi kehilangan saat ini: Log loss, hinge loss, dan smoothed hinge loss. Regresi linier juga mendukung fungsi rugi kuadrat. Regularisasi net elastis dapat ditentukan oleh parameter dan l2_weightl1_weight . Perlu dicatat bahwa memiliki l2_weight efek pada laju konvergensi. Secara umum, semakin besar , l2_weightsemakin cepat SDCA konvergen.

Perlu dicatat bahwa rx_fast_linear ini adalah algoritma optimasi stokastik dan streaming. Hasilnya bergantung pada urutan data pelatihan. Untuk hasil yang dapat direproduksi, disarankan untuk mengatur shuffle ke dan train_threadsFalse ke 1.

Arguments

formula

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

data

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

metode

Menentukan tipe model dengan string karakter: "binary" untuk klasifikasi biner default atau "regression" untuk regresi linier.

loss_function

Menentukan fungsi kehilangan empiris yang akan dioptimalkan. Untuk klasifikasi biner, pilihan berikut tersedia:

  • log_loss: Kehilangan log. Ini adalah default.

  • hinge_loss: Kehilangan engsel SVM. Parameternya mewakili ukuran margin.

  • smooth_hinge_loss: Kehilangan engsel yang dihaluskan. Parameternya mewakili konstanta penghalusan.

Untuk regresi linier, rugi squared_loss kuadrat saat ini didukung. Ketika parameter ini diatur ke None, nilai defaultnya bergantung pada jenis pembelajaran:

Contoh berikut mengubah loss_function menjadi hinge_loss: rx_fast_linear(..., loss_function=hinge_loss()).

l1_weight

Menentukan bobot regularisasi L1. Nilainya harus tidak negatif atau Tidak Ada. Jika None ditentukan, nilai sebenarnya secara otomatis dihitung berdasarkan set data. Tidak ada adalah nilai default.

l2_weight

Menentukan bobot regularisasi L2. Nilainya harus tidak negatif atau Tidak Ada. Jika None ditentukan, nilai sebenarnya secara otomatis dihitung berdasarkan set data. Tidak ada adalah nilai default.

train_threads

Menentukan berapa banyak thread konkuren yang dapat digunakan untuk menjalankan algoritma. Ketika parameter ini diatur ke None, jumlah thread yang digunakan ditentukan berdasarkan jumlah prosesor logis yang tersedia untuk proses serta seberapa jarang data. Atur agar 1 algoritma dijalankan dalam satu thread.

convergence_tolerance

Menentukan ambang toleransi yang digunakan sebagai kriteria konvergensi. Harus antara 0 dan 1. Nilai defaultnya adalah 0.1. Algoritma ini dianggap telah konvergen jika celah dualitas relatif, yaitu rasio antara celah dualitas dan kerugian primal, berada di bawah toleransi konvergensi yang ditentukan.

max_iterations

Menentukan batas atas jumlah iterasi pelatihan. Parameter ini harus positif atau Tidak Ada. Jika None ditentukan, nilai sebenarnya secara otomatis dihitung berdasarkan set data. Setiap iterasi memerlukan pemeriksaan lengkap terhadap data pelatihan. Pelatihan berakhir setelah total jumlah iterasi mencapai batas atas yang ditentukan atau ketika fungsi kehilangan konvergen, mana yang terjadi sebelumnya.

mengocok/menyeret-nyeret

Menentukan apakah data pelatihan akan dikocok. Atur True untuk mengocak data; False bukan untuk mengacak. Nilai defaultnya adalah True. SDCA adalah algoritma optimasi stokastik. Jika pengocok diaktifkan, data pelatihan akan diacak pada setiap iterasi.

check_frequency

Jumlah iterasi setelah mana fungsi kehilangan dihitung dan diperiksa untuk menentukan apakah fungsi tersebut telah konvergen. Nilai yang ditentukan harus berupa bilangan bulat positif atau Tidak Ada. Jika Tidak ada, nilai sebenarnya secara otomatis dihitung berdasarkan set data. Jika tidak, misalnya, jika checkFrequency = 5 ditentukan, maka fungsi kerugian dihitung dan konvergensi diperiksa setiap 5 iterasi. Perhitungan fungsi kehilangan memerlukan proses lengkap terpisah atas data pelatihan.

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 0 <= b <= 1b - a = 1 . Normalizer ini mempertahankan sparitas dengan memetakan nol hingga nol.

ml_transforms

Menentukan daftar transformasi MicrosoftML yang akan dilakukan pada data sebelum pelatihan atau Tidak ada jika tidak ada transformasi yang harus dilakukan. Lihat featurize_text, categorical, dan categorical_hash, untuk transformasi yang didukung. Transformasi ini dilakukan setelah transformasi Python tertentu. 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 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 .

Mengubah

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_functiondan 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, mereka yang secara eksplisit didefinisikan dalam fungsi pencabutan skala melalui argumen dan transforms mereka transform_function atau yang didefinisikan secara implisit melalui argumen atau formula merekarow_selection. 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 waktunya 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 peningkatan jumlah informasi.

compute_context

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

Ansambel

Parameter kontrol untuk ansambel.

Pengembalian Barang

Objek FastLinear dengan model terlatih.

Note

Algoritma ini bersifat multi-thread dan tidak akan mencoba memuat seluruh dataset ke memori.

References

Meningkatkan Pendakian Koordinat Ganda Stokastik

Metode Pendakian Koordinat Ganda Stokastik untuk Minimizasi Kerugian Terregulasi

Contoh klasifikasi biner

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, 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)

forest_model = rx_fast_linear(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_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, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
  isCase PredictedLabel     Score  Probability
0   True           True  0.990544     0.729195
1  False          False -2.307120     0.090535
2  False          False -0.608565     0.352387
3   True           True  1.028217     0.736570
4   True          False -3.913066     0.019588

Contoh regresi

'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

attitude = get_dataset("attitude")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)

model = rx_fast_linear(
    formula="rating ~ complaints + privileges + learning + raises + critical + advance",
    method="regression",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["rating"])
                     
# 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: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
   rating      Score
0    71.0  72.630440
1    67.0  56.995350
2    67.0  52.958641
3    72.0  80.894539
4    50.0  38.375427

fungsi kerugian