rxFastLinear: Model Linier Cepat -- Ascent Koordinat Ganda Stochastic

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

rxFastLinear adalah pelatih berdasarkan metode Stochastic Dual Coordinate Ascent (SDCA), teknik pengoptimalan canggih untuk fungsi objektif cembung. Algoritma dapat diskalakan untuk digunakan pada himpunan data kehabisan memori besar karena implementasi semi-asinkron yang mendukung multi-utas. pembaruan primal dan ganda dalam utas terpisah. Beberapa pilihan fungsi kerugian juga disediakan. Metode SDCA menggabungkan beberapa properti dan kemampuan terbaik regresi logistik dan algoritma SVM. Untuk informasi selengkapnya tentang SDCA, lihat kutipan di bagian referensi.

Algoritma pengoptimalan tradisional, seperti penurunan gradien stochastic (SGD), mengoptimalkan fungsi kehilangan empiris secara langsung. SDCA memilih pendekatan berbeda yang mengoptimalkan masalah ganda sebagai gantinya. Fungsi kehilangan ganda diparmetrized oleh bobot per contoh. Dalam setiap perulangan, ketika contoh pelatihan dari himpunan data pelatihan dibaca, bobot contoh yang sesuai disesuaikan sehingga fungsi kehilangan ganda dioptimalkan sehubungan dengan contoh saat ini. Tidak ada tingkat pembelajaran yang diperlukan oleh SDCA untuk menentukan ukuran langkah seperti yang diperlukan oleh berbagai metode penurunan gradien.

rxFastLinear mendukung klasifikasi biner dengan tiga jenis fungsi kerugian saat ini: Kehilangan log, kehilangan engsel, dan kehilangan engsel yang dihaluskan. Regresi linier juga mendukung dengan fungsi kehilangan kuadrat. Regularisasi bersih elastis dapat ditentukan oleh l2Weight parameter dan l1Weight . Perhatikan bahwa l2Weight memiliki efek pada tingkat konvergensi. Secara umum, semakin besar l2Weight, semakin cepat SDCA menyatu.

Perhatikan bahwa rxFastLinear adalah algoritma pengoptimalan stochastic dan streaming. Hasilnya tergantung pada urutan data pelatihan. Untuk hasil yang dapat direproduksi, disarankan shuffle agar satu set ke FALSE dan trainThreads ke 1.

Penggunaan

  rxFastLinear(formula = NULL, data, type = c("binary", "regression"),
    lossFunction = NULL, l2Weight = NULL, l1Weight = NULL,
    trainThreads = NULL, convergenceTolerance = 0.1, maxIterations = NULL,
    shuffle = TRUE, checkFrequency = NULL, normalize = "auto",
    mlTransforms = NULL, mlTransformVars = NULL, rowSelection = NULL,
    transforms = NULL, transformObjects = NULL, transformFunc = NULL,
    transformVars = NULL, transformPackages = NULL, transformEnvir = NULL,
    blocksPerRead = rxGetOption("blocksPerRead"),
    reportProgress = rxGetOption("reportProgress"), verbose = 1,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

Argumen

formula

Rumus yang dijelaskan dalam rxFormula. 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.

type

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

lossFunction

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

  • logLoss: Log-loss. Ini adalah default.
  • hingeLoss: Kehilangan engsel SVM. Parameternya mewakili ukuran margin.
  • smoothHingeLoss: Kehilangan engsel yang dihaluskan. Parameternya mewakili konstanta penghalusan.
    Untuk regresi linier, squaredLoss kerugian kuadrat saat ini didukung. Ketika parameter ini diatur ke NULL, nilai defaultnya tergantung pada jenis pembelajaran:
  • logLoss untuk klasifikasi biner.
  • squaredLoss untuk regresi linier.

l2Weight

Menentukan berat regularisasi L2. Nilai harus non-negatif atau NULL. Jika NULL ditentukan, nilai aktual secara otomatis dihitung berdasarkan himpunan data. NULL merupakan nilai defaultnya.

l1Weight

Menentukan berat regularisasi L1. Nilai harus non-negatif atau NULL. Jika NULL ditentukan, nilai aktual secara otomatis dihitung berdasarkan himpunan data. NULL merupakan nilai defaultnya.

trainThreads

Menentukan berapa banyak utas bersamaan yang dapat digunakan untuk menjalankan algoritma. Ketika parameter ini diatur ke NULL, jumlah utas yang digunakan ditentukan berdasarkan jumlah prosesor logis yang tersedia untuk proses serta sparitas data. Atur ke 1 untuk menjalankan algoritma dalam satu utas.

convergenceTolerance

Menentukan ambang toleransi yang digunakan sebagai kriteria konvergensi. Harus antara 0 dan 1. Nilai defaultnya adalah 0.1. Algoritma dianggap telah terkonvergensi jika kesenjangan gandaitas relatif, yang merupakan rasio antara kesenjangan gandaitas dan kehilangan primata, berada di bawah toleransi konvergensi yang ditentukan.

maxIterations

Menentukan batas atas pada jumlah iterasi pelatihan. Parameter ini harus positif atau NULL. Jika NULL ditentukan, nilai aktual secara otomatis dihitung berdasarkan himpunan data. Setiap perulangan memerlukan pass over lengkap atas data pelatihan. Pelatihan berakhir setelah jumlah total iterasi mencapai batas atas yang ditentukan atau ketika fungsi kerugian menyatu, mana pun yang terjadi sebelumnya.

shuffle

Menentukan apakah akan mengacak data pelatihan. Atur TRUE untuk mengacak data; FALSE bukan mengacak. Nilai defaultnya adalah TRUE. SDCA adalah algoritma pengoptimalan stochastic. Jika pengacakan diaktifkan, data pelatihan diacak pada setiap perulangan.

checkFrequency

Jumlah iterasi setelah fungsi kerugian dihitung dan diperiksa untuk menentukan apakah fungsi tersebut telah terkonvergensi. Nilai yang ditentukan harus berupa bilangan bulat positif atau NULL. Jika NULL, nilai aktual secara otomatis dihitung berdasarkan himpunan data. Jika tidak, misalnya, jika checkFrequency = 5 ditentukan, maka fungsi kerugian dihitung dan konvergensi diperiksa setiap 5 iterasi. Komputasi fungsi kerugian memerlukan pass lengkap terpisah atas data pelatihan.

normalize

Menentukan jenis normalisasi otomatis yang digunakan:

  • "auto": jika normalisasi diperlukan, itu secara otomatis dilakukan. Ini adalah nilai 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 akan digunakan. Ini menormalkan nilai dalam interval [a, b] di mana -1 <= a <= 0dan b - a = 10 <= b <= 1 . Normalizer ini mempertahankan sparsitas dengan memetakan nol ke nol.

mlTransforms

Menentukan daftar transformasi MicrosoftML yang akan dilakukan pada data sebelum pelatihan atau NULL jika tidak ada transformasi yang harus dilakukan. Lihat featurizeText, categorical, dan categoricalHash, untuk transformasi yang didukung. Transformasi ini dilakukan setelah transformasi R yang ditentukan. Nilai defaultnya adalah NULL.

mlTransformVars

Menentukan vektor karakter nama variabel yang akan digunakan di mlTransforms atau NULL jika tidak ada yang akan digunakan. Nilai defaultnya adalah NULL.

rowSelection

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. Misalnya, rowSelection = "old" hanya akan menggunakan pengamatan di mana nilai variabel old adalah TRUE. rowSelection = (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 transformFunc). Seperti semua ekspresi, rowSelection dapat didefinisikan di luar panggilan fungsi menggunakan fungsi ekspresi.

transforms

Ekspresi formulir list(name = expression, ``...) yang mewakili putaran pertama transformasi variabel. Seperti semua ekspresi, transforms (atau rowSelection) dapat ditentukan di luar panggilan fungsi menggunakan fungsi ekspresi.

transformObjects

Daftar bernama yang berisi objek yang dapat dirujuk oleh transforms, transformsFunc, dan rowSelection.

transformFunc

Fungsi transformasi variabel. Lihat rxTransform untuk detailnya.

transformVars

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

transformPackages

Vektor karakter yang menentukan paket R tambahan (di luar yang ditentukan dalam rxGetOption("transformPackages")) yang akan disediakan dan dimuat sebelumnya untuk digunakan dalam fungsi transformasi variabel. Misalnya, yang secara eksplisit didefinisikan dalam fungsi RevoScaleR melalui argumen dan transformFunc atau transforms yang ditentukan secara implisit melalui argumen atau rowSelection merekaformula. Argumen transformPackages mungkin juga NULL, menunjukkan bahwa tidak ada paket di luar rxGetOption("transformPackages") yang dimuat sebelumnya.

transformEnvir

Lingkungan yang ditentukan pengguna untuk berfungsi sebagai induk untuk semua lingkungan yang dikembangkan secara internal dan digunakan untuk transformasi data variabel. Jika transformEnvir = NULL, lingkungan "hash" baru dengan induk baseenv() digunakan sebagai gantinya.

blocksPerRead

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

reportProgress

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 peningkatan jumlah informasi.

computeContext

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

ensemble

Parameter kontrol untuk ansambel.

...

Argumen tambahan yang akan diteruskan langsung ke Microsoft Compute Engine.

Nilai

rxFastLinear: Objek rxFastLinear dengan model terlatih.

FastLinear: Objek spesifikasi pelajar kelas maml untuk pelatih Linier Cepat.

Catatan

Algoritma ini multi-utas dan tidak akan mencoba memuat seluruh himpunan data ke dalam memori.

Penulis

Microsoft Corporation Microsoft Technical Support

Referensi

Scaling Up Stochastic Dual Coordinate Ascent

Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization

Lihat juga

logLoss, hingeLoss, smoothHingeLoss, squaredLoss, rxFastTrees, rxFastForest, rxLogisticRegression, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.

Contoh


 # Train a binary classiication model with rxFastLinear
 res1 <- rxFastLinear(isCase ~ age + parity + education + spontaneous + induced,
                   transforms = list(isCase = case == 1),
                   data = infert,
                   type = "binary")
 # Print a summary of the model
 summary(res1)

 # Score to a data frame
 scoreDF <- rxPredict(res1, data = infert, 
     extraVarsToWrite = "isCase")

 # Compute and plot the Radio Operator Curve and AUC
 roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF) 
 plot(roc1)
 rxAuc(roc1)

 #########################################################################
 # rxFastLinear Regression

 # Create an xdf file with the attitude data
 myXdf <- tempfile(pattern = "tempAttitude", fileext = ".xdf")
 rxDataStep(attitude, myXdf, rowsPerRead = 50, overwrite = TRUE)
 myXdfDS <- RxXdfData(file = myXdf)

 attitudeForm <- rating ~ complaints + privileges + learning + 
     raises + critical + advance

 # Estimate a regression model with rxFastLinear 
 res2 <- rxFastLinear(formula = attitudeForm,  data = myXdfDS, 
     type = "regression")

 # Score to data frame
 scoreOut2 <- rxPredict(res2, data = myXdfDS, 
     extraVarsToWrite = "rating")

 # Plot the rating versus the score with a regression line
 rxLinePlot(rating~Score, type = c("p","r"), data = scoreOut2)

 # Clean up   
 file.remove(myXdf)