Pembelajaran mesin untuk developer Java, Bagian 1: Algoritma untuk pembelajaran mesin

Mobil yang dapat mengemudi sendiri, perangkat lunak pendeteksi wajah, dan speaker yang dikontrol suara semuanya dibuat dengan kerangka kerja dan teknologi pembelajaran mesin - dan ini hanyalah gelombang pertama. Selama dekade berikutnya, generasi produk baru akan mengubah dunia kita, memulai pendekatan baru untuk pengembangan perangkat lunak serta aplikasi dan produk yang kita buat dan gunakan.

Sebagai developer Java, Anda ingin maju dari kurva ini, terutama karena perusahaan teknologi mulai berinvestasi secara serius dalam pembelajaran mesin. Apa yang Anda pelajari hari ini, dapat Anda kembangkan selama lima tahun ke depan, tetapi Anda harus memulainya dari suatu tempat.

Artikel ini akan membantu Anda memulai. Anda akan mulai dengan kesan pertama tentang cara kerja machine learning, diikuti dengan panduan singkat untuk menerapkan dan melatih algoritme machine learning. Setelah mempelajari internal algoritme pembelajaran dan fitur yang dapat Anda gunakan untuk melatih, menilai, dan memilih fungsi prediksi yang paling sesuai, Anda akan mendapatkan gambaran umum tentang penggunaan framework JVM, Weka, untuk membangun solusi pembelajaran mesin. Artikel ini berfokus pada pembelajaran mesin yang diawasi, yang merupakan pendekatan paling umum untuk mengembangkan aplikasi cerdas.

Pembelajaran mesin untuk developer Java, Bagian 2

Apakah Anda siap untuk langkah selanjutnya? Paruh kedua dari tutorial ini menunjukkan cara mengembangkan dan menerapkan pipeline data machine learning Anda.

Pembelajaran mesin dan kecerdasan buatan

Pembelajaran mesin telah berevolusi dari bidang kecerdasan buatan, yang berupaya menghasilkan mesin yang mampu meniru kecerdasan manusia. Meskipun pembelajaran mesin adalah tren yang muncul dalam ilmu komputer, kecerdasan buatan bukanlah bidang ilmiah baru. Tes Turing, yang dikembangkan oleh Alan Turing pada awal 1950-an, adalah salah satu tes pertama yang dibuat untuk menentukan apakah sebuah komputer dapat memiliki kecerdasan yang nyata. Menurut uji Turing, komputer dapat membuktikan kecerdasan manusia dengan menipu manusia agar percaya bahwa itu juga manusia.

Banyak pendekatan pembelajaran mesin yang canggih didasarkan pada konsep yang sudah berusia puluhan tahun. Apa yang telah berubah selama dekade terakhir adalah komputer (dan platform komputasi terdistribusi) sekarang memiliki kekuatan pemrosesan yang diperlukan untuk algoritme pembelajaran mesin. Sebagian besar algoritme pembelajaran mesin menuntut perkalian matriks dan operasi matematika lainnya dalam jumlah besar untuk diproses. Teknologi komputasi untuk mengelola kalkulasi ini bahkan tidak ada dua dekade lalu, tetapi sekarang ada.

Pembelajaran mesin memungkinkan program menjalankan proses peningkatan kualitas dan memperluas kemampuannya tanpa keterlibatan manusia. Program yang dibuat dengan pembelajaran mesin mampu memperbarui atau memperluas kodenya sendiri.

Pembelajaran yang diawasi vs. pembelajaran tanpa pengawasan

Pembelajaran yang diawasi dan pembelajaran tanpa pengawasan adalah pendekatan yang paling populer untuk pembelajaran mesin. Keduanya membutuhkan mesin makan sejumlah besar catatan data untuk dikorelasikan dan dipelajari. Rekaman data yang dikumpulkan seperti itu umumnya dikenal sebagai vektor fitur. Dalam kasus rumah individu, vektor fitur mungkin terdiri dari fitur-fitur seperti ukuran rumah secara keseluruhan, jumlah kamar, dan usia rumah.

Dalam supervised learning , algoritme pembelajaran mesin dilatih untuk menjawab pertanyaan terkait vektor fitur dengan benar. Untuk melatih algoritme, mesin diberi makan satu set vektor fitur dan label terkait. Label biasanya disediakan oleh anotator manusia, dan mewakili "jawaban" yang benar untuk pertanyaan yang diberikan. Algoritme pembelajaran menganalisis vektor fitur dan label yang benar untuk menemukan struktur internal dan hubungan di antara mereka. Dengan demikian, mesin belajar untuk menanggapi kueri dengan benar.

Sebagai contoh, aplikasi real estat cerdas mungkin dilatih dengan vektor fitur termasuk ukuran, jumlah kamar, dan usia masing-masing untuk berbagai rumah. Seorang pemberi label manusia akan memberi label pada setiap rumah dengan harga rumah yang benar berdasarkan faktor-faktor ini. Dengan menganalisis data itu, aplikasi real estat akan dilatih untuk menjawab pertanyaan: " Berapa banyak uang yang bisa saya dapatkan untuk rumah ini? "

Setelah proses pelatihan selesai, data masukan baru tidak akan diberi label. Mesin akan dapat merespons kueri dengan benar, bahkan untuk vektor fitur yang tidak terlihat dan tidak berlabel.

Dalam pembelajaran tanpa pengawasan , algoritme diprogram untuk memprediksi jawaban tanpa pelabelan manusia, atau bahkan pertanyaan. Daripada menentukan label atau hasil yang seharusnya, pembelajaran tanpa pengawasan memanfaatkan kumpulan data yang sangat besar dan kekuatan pemrosesan untuk menemukan korelasi yang sebelumnya tidak diketahui. Dalam pemasaran produk konsumen, misalnya, pembelajaran tanpa pengawasan dapat digunakan untuk mengidentifikasi hubungan tersembunyi atau pengelompokan konsumen, yang pada akhirnya mengarah pada strategi pemasaran yang baru atau lebih baik.

Artikel ini berfokus pada pembelajaran mesin yang diawasi, yang merupakan pendekatan paling umum untuk pembelajaran mesin saat ini.

Pembelajaran mesin yang diawasi

Semua pembelajaran mesin didasarkan pada data. Untuk proyek pembelajaran mesin yang diawasi, Anda perlu memberi label pada data dengan cara yang berarti untuk hasil yang Anda cari. Pada Tabel 1, perhatikan bahwa setiap baris catatan rumah menyertakan label "harga rumah". Dengan menghubungkan data baris ke label harga rumah, algoritme pada akhirnya akan dapat memprediksi harga pasar untuk rumah yang tidak termasuk dalam kumpulan datanya (perhatikan bahwa ukuran rumah didasarkan pada meter persegi, dan harga rumah didasarkan pada euro).

Tabel 1. Catatan rumah

FITUR FITUR FITUR LABEL
Ukuran rumah Jumlah ruangan Usia rumah Perkiraan biaya rumah
90 m2 / 295 kaki 2 kamar 23 tahun € 249.000
101 m2 / 331 kaki 3 kamar t / a 338.000 €
1330 m2 / 4363 kaki 11 kamar 12 tahun € 6,500,000

Pada tahap awal, Anda mungkin akan memberi label catatan data dengan tangan, tetapi pada akhirnya Anda dapat melatih program Anda untuk mengotomatiskan proses ini. Anda mungkin pernah melihat ini pada aplikasi email, di mana memindahkan email ke folder spam Anda menghasilkan kueri "Apakah ini spam?" Saat Anda merespons, Anda melatih program untuk mengenali email yang tidak ingin Anda lihat. Filter spam aplikasi mempelajari cara melabeli email di masa mendatang dari sumber yang sama, atau memuat konten serupa, dan membuangnya.

Kumpulan data berlabel hanya diperlukan untuk tujuan pelatihan dan pengujian. Setelah fase ini selesai, algoritme pembelajaran mesin berfungsi pada instance data tanpa label. Misalnya, Anda dapat memberi algoritme prediksi rekaman rumah baru tanpa label dan secara otomatis akan memprediksi harga rumah yang diharapkan berdasarkan data pelatihan.

Bagaimana mesin belajar memprediksi

Tantangan pembelajaran mesin yang diawasi adalah menemukan fungsi prediksi yang tepat untuk pertanyaan tertentu. Secara matematis, tantangannya adalah menemukan fungsi masukan-keluaran yang mengambil variabel masukan x dan mengembalikan nilai prediksi y . Ini fungsi hipotesis (h θ ) adalah output dari proses pelatihan. Seringkali fungsi hipotesis juga disebut fungsi target atau prediksi .

Gregor Roth

Dalam kebanyakan kasus, x mewakili titik data ganda. Dalam contoh kita, ini bisa menjadi titik data dua dimensi dari sebuah rumah yang ditentukan oleh nilai ukuran rumah dan nilai jumlah kamar . Array nilai-nilai ini disebut sebagai vektor fitur . Dengan adanya fungsi target yang konkret, fungsi tersebut dapat digunakan untuk membuat prediksi untuk setiap vektor fitur x . Untuk memprediksi harga sebuah rumah, Anda dapat memanggil fungsi target dengan menggunakan vektor fitur {101.0, 3.0} yang berisi ukuran rumah dan jumlah ruangan:

 // 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 Daftar 1, variabel larik nilai x mewakili vektor fitur rumah. Nilai y yang dikembalikan oleh fungsi target adalah harga rumah yang diprediksi.

Tantangan pembelajaran mesin adalah menentukan fungsi target yang akan bekerja seakurat mungkin untuk instance data yang tidak diketahui dan tidak terlihat. Dalam pembelajaran mesin, fungsi target (h θ ) terkadang disebut model . Model ini merupakan hasil dari proses pembelajaran.

Gregor Roth

Berdasarkan contoh pelatihan berlabel, algoritme pembelajaran mencari struktur atau pola dalam data pelatihan. Dari sini dihasilkan model yang dapat digeneralisasi dengan baik dari data tersebut.

Biasanya, proses pembelajaran bersifat eksploratif . Dalam kebanyakan kasus, proses akan dilakukan beberapa kali dengan menggunakan variasi algoritma dan konfigurasi pembelajaran yang berbeda.

Akhirnya, semua model akan dievaluasi berdasarkan metrik kinerja, dan yang terbaik akan dipilih. Model itu kemudian akan digunakan untuk menghitung prediksi untuk instance data tak berlabel di masa mendatang.

Regresi linier

Untuk melatih mesin agar berpikir, langkah pertama adalah memilih algoritme pembelajaran yang akan Anda gunakan. Regresi linier adalah salah satu algoritma pembelajaran tersupervisi yang paling sederhana dan populer. Algoritma ini mengasumsikan bahwa hubungan antara fitur masukan dan label keluaran adalah linier. Fungsi regresi linier generik di bawah ini mengembalikan nilai prediksi dengan meringkas setiap elemen vektor fitur dikalikan dengan parameter theta (θ) . Parameter theta digunakan dalam proses pelatihan untuk mengadaptasi atau "menyesuaikan" fungsi regresi berdasarkan data pelatihan.

Gregor Roth

Dalam fungsi regresi linier, parameter theta dan parameter fitur dihitung dengan nomor langganan. Nomor langganan menunjukkan posisi parameter theta (θ) dan parameter fitur (x) dalam vektor. Perhatikan bahwa fitur x 0 adalah himpunan suku offset konstan dengan nilai 1 untuk tujuan komputasi. Hasilnya, indeks fitur khusus domain seperti ukuran rumah akan dimulai dengan x 1 . Sebagai contoh, jika x 1 disetel untuk nilai pertama vektor fitur Rumah, ukuran rumah, maka x 2 akan disetel untuk nilai berikutnya, jumlah kamar, dan seterusnya.

Kode 2 menunjukkan implementasi Java dari fungsi regresi linier, yang secara matematis ditampilkan sebagai h θ (x). Untuk mempermudah, penghitungan dilakukan dengan menggunakan tipe data double. Dalam apply()metode ini, diharapkan elemen pertama dari array telah ditetapkan dengan nilai 1.0 di luar fungsi ini.

Kode 2. Regresi linier 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 instance baru dari LinearRegressionFunction, Anda harus menyetel parameter theta. Parameter theta, atau vektor, digunakan untuk mengadaptasi fungsi regresi generik ke data pelatihan yang mendasarinya. Parameter theta program akan disetel selama proses pembelajaran, berdasarkan contoh pelatihan. Kualitas fungsi target yang dilatih hanya bisa sebaik kualitas data pelatihan yang diberikan.

Pada contoh di bawah ini LinearRegressionFunctionakan digunakan untuk memprediksi harga rumah berdasarkan ukuran rumah. Mempertimbangkan bahwa x 0 harus berupa nilai konstan 1.0, fungsi target dibuat menggunakan dua parameter theta. Parameter theta merupakan keluaran dari suatu proses pembelajaran. Setelah membuat contoh baru, harga rumah seluas 1330 meter persegi akan diprediksi sebagai 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 prediksi fungsi target ditampilkan sebagai garis biru pada grafik di bawah ini. Garis telah dihitung dengan menjalankan fungsi target untuk semua nilai ukuran rumah. Bagan juga menyertakan pasangan ukuran harga yang digunakan untuk pelatihan.

Gregor Roth

Sejauh ini grafik prediksi tampaknya cukup sesuai. Koordinat grafik (titik potong dan kemiringan) ditentukan oleh vektor teta { 1.004579, 5.286822 }. Tetapi bagaimana Anda tahu bahwa vektor theta ini paling cocok untuk aplikasi Anda? Akankah fungsinya lebih cocok jika Anda mengubah parameter theta pertama atau kedua? Untuk mengidentifikasi vektor parameter theta yang paling sesuai, Anda memerlukan fungsi utilitas , yang akan mengevaluasi seberapa baik kinerja fungsi target.

Menilai fungsi target

Dalam pembelajaran mesin, fungsi biaya (J (θ)) digunakan untuk menghitung kesalahan rata-rata, atau "biaya" dari fungsi target tertentu.

Gregor Roth