Pembelajaran mesin untuk pemaju Java, Bahagian 1: Algoritma untuk pembelajaran mesin

Kereta memandu sendiri, perisian pengesanan wajah, dan pembesar suara yang dikawal suara semuanya dibina berdasarkan teknologi dan kerangka pembelajaran mesin - dan ini hanyalah gelombang pertama. Selama dekad yang akan datang, generasi baru produk akan mengubah dunia kita, memulai pendekatan baru untuk pengembangan perisian dan aplikasi dan produk yang kita buat dan gunakan.

Sebagai pemaju Java, anda ingin maju dalam kurva ini, terutama kerana syarikat teknologi mulai serius melabur dalam pembelajaran mesin. Apa yang anda pelajari hari ini, anda boleh terus membangun dalam tempoh lima tahun akan datang, tetapi anda harus bermula di suatu tempat.

Artikel ini akan memulakan anda. Anda akan memulakan dengan kesan pertama bagaimana pembelajaran mesin berfungsi, diikuti dengan panduan ringkas untuk melaksanakan dan melatih algoritma pembelajaran mesin. Setelah mempelajari dalaman algoritma pembelajaran dan ciri yang boleh anda gunakan untuk melatih, menjaringkan gol, dan memilih fungsi ramalan yang paling sesuai, anda akan mendapat gambaran keseluruhan mengenai penggunaan kerangka JVM, Weka, untuk membina penyelesaian pembelajaran mesin. Artikel ini memberi tumpuan kepada pembelajaran mesin yang diselia, yang merupakan pendekatan yang paling umum untuk mengembangkan aplikasi pintar.

Pembelajaran mesin untuk pemaju Java, Bahagian 2

Adakah anda bersedia untuk langkah seterusnya? Separuh kedua tutorial ini menunjukkan kepada anda bagaimana mengembangkan dan menggunakan saluran data pembelajaran mesin anda.

Pembelajaran mesin dan kecerdasan buatan

Pembelajaran mesin telah berkembang dari bidang kecerdasan buatan, yang bertujuan untuk menghasilkan mesin yang mampu meniru kecerdasan manusia. Walaupun pembelajaran mesin adalah trend yang muncul dalam sains komputer, kecerdasan buatan bukanlah bidang saintifik baru. Ujian Turing, yang dikembangkan oleh Alan Turing pada awal 1950-an, adalah salah satu ujian pertama yang dibuat untuk menentukan sama ada komputer dapat memiliki kecerdasan sebenar. Menurut ujian Turing, komputer dapat membuktikan kecerdasan manusia dengan menipu manusia untuk mempercayai bahawa ia juga manusia.

Banyak pendekatan pembelajaran mesin canggih berdasarkan konsep berusia puluhan tahun. Apa yang telah berubah dalam dekad yang lalu adalah bahawa komputer (dan platform pengkomputeran yang diedarkan) kini mempunyai daya pemprosesan yang diperlukan untuk algoritma pembelajaran mesin. Sebilangan besar algoritma pembelajaran mesin menuntut sebilangan besar pendaraban matriks dan operasi matematik lain untuk diproses. Teknologi pengkomputeran untuk menguruskan pengiraan ini tidak ada bahkan dua dekad yang lalu, tetapi sekarang.

Pembelajaran mesin membolehkan program melaksanakan proses peningkatan kualiti dan memperluas kemampuannya tanpa penglibatan manusia. Program yang dibina dengan pembelajaran mesin mampu mengemas kini atau memperluas kodnya sendiri.

Pembelajaran diawasi berbanding pembelajaran tanpa pengawasan

Pembelajaran diawasi dan pembelajaran tanpa pengawasan adalah pendekatan yang paling popular untuk pembelajaran mesin. Kedua-duanya memerlukan mesin data sejumlah besar data untuk berkorelasi dan belajar dari. Rekod data yang dikumpulkan seperti ini biasanya dikenali sebagai vektor ciri. Bagi rumah individu, vektor ciri mungkin terdiri daripada ciri-ciri seperti ukuran keseluruhan rumah, jumlah bilik, dan usia rumah.

Dalam pembelajaran yang diselia , algoritma pembelajaran mesin dilatih untuk menjawab dengan betul soalan yang berkaitan dengan vektor ciri. Untuk melatih algoritma, mesin diberi satu set vektor ciri dan label yang berkaitan. Label biasanya disediakan oleh anotator manusia, dan mewakili "jawapan" yang tepat untuk soalan tertentu. Algoritma pembelajaran menganalisis vektor ciri dan labelnya yang betul untuk mencari struktur dalaman dan hubungan di antara mereka. Oleh itu, mesin belajar untuk bertindak balas dengan betul terhadap pertanyaan.

Sebagai contoh, aplikasi harta tanah pintar mungkin dilatih dengan vektor ciri termasuk ukuran, jumlah bilik, dan usia masing-masing untuk pelbagai rumah. Label manusia akan melabel setiap rumah dengan harga rumah yang betul berdasarkan faktor-faktor ini. Dengan menganalisis data tersebut, aplikasi harta tanah akan dilatih untuk menjawab soalan: " Berapa banyak wang yang saya dapat untuk rumah ini? "

Setelah proses latihan selesai, data input baru tidak akan dilabel. Mesin akan dapat menjawab pertanyaan dengan betul, walaupun untuk vektor ciri yang tidak kelihatan dan tidak berlabel.

Dalam pembelajaran tanpa pengawasan , algoritma diprogramkan untuk meramalkan jawapan tanpa pelabelan manusia, atau bahkan soalan. Daripada menentukan label atau menentukan hasilnya, pembelajaran tanpa pengawasan memanfaatkan set data yang besar dan kekuatan pemprosesan untuk menemui korelasi yang tidak diketahui sebelumnya. Dalam pemasaran produk pengguna, misalnya, pembelajaran tanpa pengawasan dapat digunakan untuk mengidentifikasi hubungan tersembunyi atau pengelompokan pengguna, akhirnya mengarah ke strategi pemasaran baru atau lebih baik.

Artikel ini memberi tumpuan kepada pembelajaran mesin yang diselia, yang merupakan pendekatan yang paling biasa untuk pembelajaran mesin pada masa ini.

Pembelajaran mesin yang diselia

Semua pembelajaran mesin berdasarkan data. Untuk projek pembelajaran mesin yang diselia, anda perlu melabel data dengan cara yang bermakna untuk hasil yang anda cari. Dalam Jadual 1, perhatikan bahawa setiap baris rekod rumah tersebut merangkumi label untuk "harga rumah." Dengan menghubungkan data baris dengan label harga rumah, algoritma akhirnya akan dapat meramalkan harga pasaran untuk sebuah rumah yang tidak ada dalam set datanya (perhatikan bahawa ukuran rumah berdasarkan meter persegi, dan harga rumah berdasarkan euro).

Jadual 1. Rekod rumah

CIRI-CIRI CIRI-CIRI CIRI-CIRI MAKMAL
Saiz rumah Nombor bilik Umur rumah Anggaran kos rumah
90 m2 / 295 kaki 2 bilik 23 tahun 249,000 €
101 m2 / 331 kaki 3 bilik n / a 338,000 €
1330 m2 / 4363 kaki 11 bilik 12 tahun 6,500,000 €

Pada peringkat awal, anda mungkin akan melabelkan catatan data dengan tangan, tetapi akhirnya anda dapat melatih program anda untuk mengotomatisasi proses ini. Anda mungkin pernah melihatnya dengan aplikasi e-mel, di mana memindahkan e-mel ke folder spam anda menghasilkan pertanyaan "Adakah ini spam?" Apabila anda bertindak balas, anda melatih program untuk mengenali surat yang anda tidak mahu lihat. Penapis spam aplikasi belajar melabel surat masa depan dari sumber yang sama, atau mempunyai kandungan yang serupa, dan membuangnya.

Set data berlabel diperlukan untuk tujuan latihan dan ujian sahaja. Setelah fasa ini selesai, algoritma pembelajaran mesin berfungsi pada contoh data tanpa label. Sebagai contoh, anda dapat memberi maklumat kepada algoritma ramalan rekod rumah baru yang tidak berlabel dan secara automatik akan meramalkan jangkaan harga rumah berdasarkan data latihan.

Bagaimana mesin belajar membuat ramalan

Cabaran pembelajaran mesin yang diselia adalah mencari fungsi ramalan yang tepat untuk soalan tertentu. Secara matematik, cabarannya adalah untuk mencari fungsi input-output yang mengambil pemboleh ubah input x dan mengembalikan nilai ramalan y . Ini fungsi hipotesis (h θ ) adalah output proses latihan. Selalunya fungsi hipotesis juga disebut fungsi sasaran atau ramalan .

Gregor Roth

Dalam kebanyakan kes, x mewakili titik berbilang data. Dalam contoh kami, ini boleh menjadi titik data dua dimensi dari rumah individu yang ditentukan oleh nilai ukuran rumah dan nilai jumlah bilik . Susunan nilai-nilai ini disebut sebagai vektor ciri . Dengan adanya fungsi sasaran konkrit, fungsi tersebut dapat digunakan untuk membuat ramalan bagi setiap vektor fitur x . Untuk meramalkan harga rumah individu, anda dapat memanggil fungsi sasaran dengan menggunakan vektor fitur {101.0, 3.0} yang mengandungi ukuran rumah dan jumlah bilik:

 // target function h (which is the output of the learn process) Function h = ...; // set the feature vector with house size=101 and number-of-rooms=3 Double[] x = new Double[] { 101.0, 3.0 }; // and predicted the house price (label) double y = h.apply(x); 

Dalam Penyenaraian 1, nilai x pemboleh ubah array mewakili vektor ciri rumah. The y nilai dikembalikan oleh fungsi sasaran adalah harga rumah yang diramalkan.

Cabaran pembelajaran mesin adalah menentukan fungsi sasaran yang akan berfungsi seakurat mungkin untuk kejadian data yang tidak diketahui. Dalam pembelajaran mesin, fungsi sasaran (h θ ) kadang-kadang disebut model . Model ini adalah hasil proses pembelajaran.

Gregor Roth

Berdasarkan contoh latihan berlabel, algoritma pembelajaran mencari struktur atau corak dalam data latihan. Dari ini, ia menghasilkan model yang menyamaratakan data dengan baik.

Biasanya, proses pembelajaran bersifat eksploratif . Dalam kebanyakan kes, proses akan dilakukan berkali-kali dengan menggunakan variasi algoritma dan konfigurasi pembelajaran yang berbeza.

Akhirnya, semua model akan dinilai berdasarkan metrik prestasi, dan yang terbaik akan dipilih. Model itu kemudian akan digunakan untuk menghitung ramalan untuk contoh data tidak berlabel masa depan.

Regresi linear

Untuk melatih mesin berfikir, langkah pertama adalah memilih algoritma pembelajaran yang akan anda gunakan. Regresi linier adalah salah satu algoritma pembelajaran yang diselia paling mudah dan popular. Algoritma ini menganggap bahawa hubungan antara ciri input dan label yang dikeluarkan adalah linear. Fungsi regresi linier generik di bawah mengembalikan nilai yang diramalkan dengan meringkaskan setiap elemen vektor ciri dikalikan dengan parameter theta (θ) . Parameter theta digunakan dalam proses latihan untuk menyesuaikan atau "menyesuaikan" fungsi regresi berdasarkan data latihan.

Gregor Roth

Dalam fungsi regresi linear, parameter theta dan parameter ciri dihitung oleh nombor langganan. Nombor langganan menunjukkan kedudukan parameter theta (θ) dan parameter ciri (x) dalam vektor. Perhatikan bahawa ciri x 0 adalah istilah ofset tetap yang ditetapkan dengan nilai 1 untuk tujuan pengiraan. Hasilnya, indeks ciri khusus domain seperti ukuran rumah akan dimulakan dengan x 1 . Sebagai contoh, jika x 1 ditetapkan untuk nilai pertama vektor ciri Rumah, ukuran rumah, maka x 2 akan ditetapkan untuk nilai seterusnya, jumlah bilik, dan sebagainya.

Penyenaraian 2 menunjukkan pelaksanaan Java dari fungsi regresi linier ini, yang ditunjukkan secara matematik sebagai h θ (x). Untuk kesederhanaan, pengiraan dilakukan menggunakan jenis data double. Dalam apply()metode ini, diharapkan elemen pertama dari array telah ditetapkan dengan nilai 1,0 di luar fungsi ini.

Penyenaraian 2. Regresi linear di Jawa

 public class LinearRegressionFunction implements Function { private final double[] thetaVector; LinearRegressionFunction(double[] thetaVector) { this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length); } public Double apply(Double[] featureVector) { // for computational reasons the first element has to be 1.0 assert featureVector[0] == 1.0; // simple, sequential implementation double prediction = 0; for (int j = 0; j < thetaVector.length; j++) { prediction += thetaVector[j] * featureVector[j]; } return prediction; } public double[] getThetas() { return Arrays.copyOf(thetaVector, thetaVector.length); } } 

Untuk membuat contoh baru LinearRegressionFunction, anda mesti menetapkan parameter theta. Parameter theta, atau vektor, digunakan untuk menyesuaikan fungsi regresi generik dengan data latihan yang mendasari. Parameter theta program akan disetel semasa proses pembelajaran, berdasarkan contoh latihan. Kualiti fungsi sasaran terlatih hanya dapat sama dengan kualitas data latihan yang diberikan.

Dalam contoh di bawah ini LinearRegressionFunctionakan dibuat untuk memprediksi harga rumah berdasarkan ukuran rumah. Dengan mempertimbangkan bahawa x 0 harus menjadi nilai tetap 1,0, fungsi target dibuat menggunakan dua parameter theta. Parameter theta adalah output dari proses pembelajaran. Setelah membuat contoh baru, harga rumah dengan ukuran 1330 meter persegi akan diramalkan seperti berikut:

 // the theta vector used here was output of a train process double[] thetaVector = new double[] { 1.004579, 5.286822 }; LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector); // create the feature vector function with x0=1 (for computational reasons) and x1=house-size Double[] featureVector = new Double[] { 1.0, 1330.0 }; // make the prediction double predictedPrice = targetFunction.apply(featureVector); 

Garis ramalan fungsi sasaran ditunjukkan sebagai garis biru dalam carta di bawah. Garis telah dihitung dengan menjalankan fungsi target untuk semua nilai ukuran rumah. Carta ini juga merangkumi pasangan ukuran harga yang digunakan untuk latihan.

Gregor Roth

Setakat ini graf ramalan nampaknya cukup sesuai. Koordinat grafik (pintasan dan cerun) ditentukan oleh vektor theta { 1.004579, 5.286822 }. Tetapi bagaimana anda tahu bahawa vektor theta ini paling sesuai untuk aplikasi anda? Adakah fungsinya sesuai jika anda menukar parameter theta pertama atau kedua? Untuk mengenal pasti vektor parameter theta yang paling sesuai, anda memerlukan fungsi utiliti , yang akan menilai sejauh mana prestasi fungsi sasaran.

Menjaringkan fungsi sasaran

Dalam pembelajaran mesin, fungsi biaya (J (θ)) digunakan untuk menghitung ralat rata-rata, atau "kos" fungsi sasaran tertentu.

Gregor Roth