Siapkan algoritme pembelajaran mesin dan kembangkan fungsi prediktif pertama Anda menggunakan Java. Mobil self-driving, sistem pengenalan wajah, dan asisten suara semuanya dikembangkan menggunakan teknologi dan kerangka kerja pembelajaran mesin. Dan ini baru gelombang pertama. Selama 10 tahun ke depan, produk generasi baru akan mengubah dunia kita, sehingga memunculkan pendekatan baru dalam pengembangan program, produk, dan aplikasi.
Sebagai programmer Java, Anda ingin menangkap gelombang ini sekarang karena perusahaan teknologi mulai banyak berinvestasi dalam pembelajaran mesin. Apa yang Anda pelajari hari ini dapat Anda gunakan untuk lima tahun ke depan. Tapi harus mulai dari mana? Artikel ini bertujuan untuk menjawab pertanyaan tersebut. Anda akan mendapatkan kesan pertama tentang prinsip-prinsip pembelajaran mesin dengan mengikuti panduan singkat kami dalam menerapkan dan menyiapkan algoritme pembelajaran mesin. Setelah mempelajari struktur algoritme pembelajaran dan fitur yang dapat Anda gunakan untuk melatihnya, mengevaluasinya, dan memilih fungsi yang memberikan akurasi prediksi terbaik, Anda akan memperoleh pemahaman tentang cara menggunakan kerangka kerja JVM (Weka) untuk membangun solusi pembelajaran mesin. Artikel ini berfokus pada pembelajaran mesin yang diawasi karena ini adalah prinsip yang paling umum digunakan dalam mengembangkan aplikasi pintar.
Pembelajaran mesin dan kecerdasan buatan
Pembelajaran mesin berevolusi dari bidang kecerdasan buatan yang bertujuan untuk menciptakan mesin yang dapat meniru kecerdasan manusia. Meskipun istilah “pembelajaran mesin” berasal dari ilmu komputer, kecerdasan buatan bukanlah bidang ilmu baru.
Tes Turing , yang dikembangkan oleh ahli matematika Alan Turing pada awal tahun lima puluhan abad ke-20, adalah salah satu tes pertama yang dirancang untuk menentukan apakah mesin komputasi memiliki kecerdasan sejati. Menurut tes Turing, komputer membuktikan keberadaan kecerdasan manusia dengan meniru seseorang tanpa orang tersebut menyadari bahwa dia sedang berbicara dengan mesin.
Banyak pendekatan pembelajaran mesin populer saat ini didasarkan pada ide-ide yang sudah berumur puluhan tahun. Namun dekade terakhir dalam komputasi (dan platform komputasi terdistribusi) telah memberikan kekuatan yang cukup untuk menerapkan algoritma pembelajaran mesin. Kebanyakan dari mereka memerlukan perkalian matriks dan perhitungan matematis lainnya dalam jumlah besar. Dua puluh tahun yang lalu, teknologi komputasi yang memungkinkan penghitungan seperti itu belum ada, namun kini telah menjadi kenyataan. Algoritme pembelajaran mesin memungkinkan program melakukan proses peningkatan kualitas dan memperluas kemampuannya tanpa campur tangan manusia. Sebuah program yang dikembangkan menggunakan pembelajaran mesin mampu memperbarui atau memperluas kodenya sendiri secara mandiri.
Pembelajaran yang diawasi vs pembelajaran tanpa pengawasan
Pembelajaran yang diawasi dan tanpa pengawasan adalah dua pendekatan pembelajaran mesin yang paling populer. Kedua opsi tersebut mengharuskan mesin memasukkan catatan data dalam jumlah besar untuk membangun hubungan dan belajar darinya. Data yang dikumpulkan seperti itu biasanya disebut
"vektor fitur" . Misalnya, kita mempunyai bangunan tempat tinggal tertentu. Dalam hal ini vektor ciri dapat memuat ciri-ciri seperti: luas total rumah, jumlah ruangan, tahun dibangunnya rumah, dan lain sebagainya.
Dalam pembelajaran terawasi , algoritme pembelajaran mesin dilatih untuk menjawab pertanyaan terkait vektor fitur. Untuk melatih algoritme, algoritme diberi sekumpulan vektor fitur dan label terkait. Label terkait diberikan oleh seseorang (guru) dan berisi “jawaban” yang benar atas pertanyaan yang diajukan. Algoritme pembelajaran menganalisis vektor fitur dan label yang benar untuk menemukan struktur internal dan hubungan di antara keduanya. Dengan cara ini mesin belajar menjawab pertanyaan dengan benar. Sebagai contoh, kita dapat mempertimbangkan aplikasi cerdas tertentu untuk perdagangan real estate. Hal ini dapat dilatih menggunakan vektor fitur termasuk ukuran, jumlah ruangan, dan tahun pembangunan untuk sekumpulan rumah. Seseorang harus memberi label pada setiap rumah dengan harga rumah yang benar berdasarkan faktor-faktor ini. Dengan menganalisis data ini, aplikasi pintar harus melatih dirinya untuk menjawab pertanyaan, “Berapa banyak uang yang bisa saya peroleh untuk rumah ini?”
Setelah proses persiapan selesai, data masukan baru tidak lagi ditandai. Mesin harus mampu menjawab pertanyaan dengan benar, bahkan untuk vektor fitur yang tidak diketahui dan tidak berlabel. Dalam pembelajaran tanpa pengawasan, algoritme dirancang untuk memprediksi jawaban tanpa memberi label pada manusia (atau bahkan tanpa mengajukan pertanyaan). Alih-alih menentukan label atau hasil, algoritme pembelajaran tanpa pengawasan menggunakan kumpulan data dan daya komputasi yang besar untuk menemukan hubungan yang sebelumnya tidak diketahui. Misalnya, dalam pemasaran produk konsumen, pembelajaran tanpa pengawasan dapat digunakan untuk mengidentifikasi hubungan atau pengelompokan pelanggan yang tersembunyi, yang pada akhirnya dapat membantu meningkatkan program pemasaran atau membuat program baru. Pada artikel ini, kami akan fokus pada pembelajaran mesin yang diawasi; ini adalah pendekatan yang paling umum digunakan saat ini.
Pembelajaran Mesin yang Diawasi
Semua pembelajaran mesin didasarkan pada data. Untuk proyek pembelajaran mesin yang diawasi, Anda perlu menandai data dengan penanda sedemikian rupa sehingga memberikan jawaban yang bermakna atas pertanyaan yang diajukan. Di bawah ini, pada Tabel-1, setiap catatan informasi rumah diberi label “harga rumah”. Dengan mengidentifikasi hubungan antara data rekaman dan harga rumah, algoritme pada akhirnya akan mampu memprediksi harga pasar untuk rumah yang tidak termasuk dalam daftar yang diberikan. (Harap dicatat bahwa luas rumah ditunjukkan dalam meter persegi, dan harga rumah dalam euro).
Tabel 1. Daftar rumah
|
Tanda |
Tanda |
Tanda |
Label |
Daerah rumah |
Jumlah ruangan |
Usia rumah |
Harga rumah yang diharapkan |
90 m2 / 295 kaki |
2 kamar |
23 tahun |
€249.000 |
101 m2 / 331 kaki |
3 kamar |
tidak ada |
€338.000 |
1330 m2 / 4363 kaki |
11 kamar |
12 tahun |
6.500.000€ |
Pada tahap awal, Anda mungkin akan memberi label pada data secara manual, namun pada akhirnya Anda akan mengajarkan program Anda untuk melakukannya sendiri. Anda mungkin pernah melihat pendekatan ini berhasil dengan klien email, di mana untuk memindahkan email ke folder Spam, Anda menjawab pertanyaan "Apakah email ini spam?" Saat Anda membalas, Anda melatih program untuk mengenali email yang tidak ingin Anda lihat. Filter spam aplikasi dilatih untuk menandai pesan dari sumber yang sama atau berisi konten yang sama dan mengelolanya sesuai aturan yang sesuai. Kumpulan data berlabel diperlukan untuk tujuan persiapan dan pengujian saja. Setelah langkah ini selesai, algoritme pembelajaran mesin bekerja pada data yang tidak berlabel. Misalnya, Anda dapat memberikan algoritme prediksi catatan data baru yang tidak diberi label tentang sebuah rumah, dan algoritme tersebut akan secara otomatis memprediksi harga yang diharapkan dari rumah tersebut berdasarkan “pengetahuan” yang diperoleh dari data persiapan.
Bagaimana mesin belajar memprediksi
Tantangan dalam pembelajaran mesin yang diawasi adalah menemukan fungsi prediksi yang sesuai untuk pertanyaan tertentu. Secara matematis, kesulitannya adalah menemukan fungsi yang mengambil variabel sebagai masukan
х
dan mengembalikan nilai prediksi
у
. Fungsi hipotesis ini
(hθ)
merupakan hasil dari suatu proses persiapan. Seringkali fungsi hipotesis disebut juga fungsi tujuan atau fungsi prediksi.
kamu = h θ (x)
Dalam kebanyakan kasus,
х
ini adalah array data. Dalam contoh kita, ini adalah susunan elemen dua dimensi yang mendefinisikan sebuah rumah, yang terdiri dari jumlah ruangan dan luas rumah. Array dengan nilai tersebut adalah vektor fitur. Dengan menentukan fungsi tujuan tertentu, kita dapat menggunakannya untuk memprediksi setiap vektor fitur
х
. Untuk memprediksi harga sebuah rumah, Anda harus memanggil fungsi tujuan menggunakan vektor fitur
{101.0, 3.0}
yang terdiri dari luas rumah dan jumlah ruangan:
Function<Double[], Double> h = ...;
Double[] x = new Double[] { 101.0, 3.0 };
double y = h.apply(x);
Dalam kode sumber dari Contoh-1, nilai dalam array
х
mewakili vektor fitur rumah. Nilai
у
yang dikembalikan oleh fungsi tujuan adalah prediksi harga rumah. Tujuan pembelajaran mesin adalah untuk menentukan fungsi tujuan yang akan bekerja seakurat mungkin dengan parameter masukan yang tidak diketahui. Dalam pembelajaran mesin, fungsi tujuan
(hθ)
terkadang disebut model. Model ini merupakan hasil suatu proses pembelajaran.
Berdasarkan sampel pelatihan yang diberi label, algoritma pembelajaran mencari struktur atau pola dalam data pelatihan. Jadi dia membangun model yang secara umum bagus untuk datanya. Biasanya, proses pembelajaran bersifat eksploratif. Dalam kebanyakan kasus, proses ini diulang berkali-kali menggunakan varian algoritma dan konfigurasi pembelajaran yang berbeda. Hasilnya, semua model dievaluasi berdasarkan metrik kinerja, di antaranya yang terbaik akan dipilih. Dan model ini digunakan untuk menghitung nilai perkiraan untuk data yang tidak diberi tag di masa depan.
Regresi linier
Untuk mengajarkan mesin “berpikir”, Anda harus terlebih dahulu memilih algoritma pembelajaran yang akan Anda gunakan. Misalnya regresi linier. Ini adalah salah satu algoritma pembelajaran mesin terawasi yang paling sederhana dan populer. Algoritme ini mengasumsikan bahwa hubungan antara fitur masukan dan penanda hasil adalah linier. Fungsi regresi linier umum di bawah ini mengembalikan nilai prediksi dengan menjumlahkan semua elemen vektor fitur dikalikan dengan parameter
θ
(theta) . Parameter ini digunakan selama proses pelatihan untuk mengadaptasi atau “menyesuaikan” fungsi regresi berdasarkan data pelatihan.
h θ (x) = θ 0 * 1 + θ 1 * x 1 + ... θ n * x n
Dalam fungsi regresi linier, parameter theta dan parameter fitur diberi nomor dengan subskrip. Subskrip menentukan posisi parameter
(θ)
dan parameter fitur
(х)
dalam vektor. Perhatikan bahwa fitur x
0 adalah suku pergeseran konstan dan penting
1
untuk tujuan komputasi. Akibatnya, indeks parameter penting seperti luas rumah dimulai dengan x
1 . Jadi, jika x
1 diberi nilai pertama dari vektor ciri (luas rumah), maka x
2 akan mengambil nilai berikutnya (jumlah ruangan) dan seterusnya. Contoh-2 mendemonstrasikan implementasi fungsi regresi linier di Java, yang secara matematis dinotasikan sebagai h
θ (x). Untuk mempermudah, perhitungan dilakukan dengan menggunakan
double
. Dalam metode ini
apply()
, elemen pertama array akan sama dengan 1,0 dan akan disetel di luar fungsi ini.
Contoh 2: Regresi Linier di Java
public class LinearRegressionFunction implements Function<Double[], Double> {
private final double[] thetaVector;
LinearRegressionFunction(double[] thetaVector) {
this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length);
}
public Double apply(Double[] featureVector) {
assert featureVector[0] == 1.0;
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
LinearRegressionFunction
, Anda perlu menentukan parameternya
θ
. Parameter atau vektor ini digunakan untuk menyesuaikan fungsi regresi linier umum dengan data pelatihan yang mendasarinya. Parameter
θ
yang digunakan dalam program akan disesuaikan selama proses pelatihan, berdasarkan contoh pelatihan. Kualitas fungsi target yang dilatih akan bergantung pada kualitas data yang disiapkan untuk pelatihan. Pada contoh di bawah ini kami menggunakan
LinearRegressionFunction
prediksi harga berdasarkan ukuran rumah sebagai ilustrasi. Mengingat x
0 harus berupa konstanta dengan nilai 1,0, maka fungsi tujuan diinisialisasi menggunakan dua parameter
θ
yang merupakan hasil proses pembelajaran. Setelah dibuat contoh baru, maka akan diprediksi harga rumah dengan luas 1330 meter persegi seperti gambar di bawah ini:
double[] thetaVector = new double[] { 1.004579, 5.286822 };
LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector);
Double[] featureVector = new Double[] { 1.0, 1330.0 };
double predictedPrice = targetFunction.apply(featureVector);
Pada gambar di bawah ini Anda dapat melihat grafik fungsi tujuan prediksi (garis biru). Diperoleh dengan menghitung fungsi tujuan semua nilai luas rumah. Grafik juga berisi pasangan area harga yang digunakan untuk pelatihan.
Saat ini grafik prediksi terlihat cukup bagus. Koordinat grafik (posisi dan kemiringan) ditentukan oleh vektor
θ { 1.004579, 5.286822 }
. Tapi bagaimana Anda bisa menentukan
θ
-vector mana yang paling cocok untuk aplikasi Anda? Akankah fungsinya lebih cocok jika Anda mengubah parameter pertama atau mungkin kedua? Untuk menentukan vektor theta yang paling sesuai, Anda memerlukan fungsi utilitas yang mengevaluasi seberapa baik fungsi tujuan melakukan pekerjaannya.
UNTUK DILANJUTKAN Terjemahan dari bahasa Inggris. Penulis: Gregor Roth, Arsitek Perangkat Lunak, JavaWorld.
GO TO FULL VERSION