JavaRush /Java Blog /Random-ID /Pembelajaran Mesin untuk Pengembang Java, Bagian 1

Pembelajaran Mesin untuk Pengembang Java, Bagian 1

Dipublikasikan di grup Random-ID
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. Pembelajaran Mesin untuk Pengembang Java, Bagian 1 - 1Sebagai 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.
Pembelajaran Mesin untuk Pengembang Java, Bagian 1 - 2
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?”
Tertarik membaca tentang Java? Bergabunglah dengan grup Pengembang Java !
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:
// целевая функция h (результат процесса обучения)
Function<Double[], Double> h = ...;

// определяем целевой вектор с площадью дома=101 и количеством комнат=3
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.
Pembelajaran Mesin untuk Pengembang Java, Bagian 1 - 3
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 1untuk 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) {
 // с целью упрощения вычислений первый элемент должен быть equals 1.0
 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 LinearRegressionFunctionprediksi 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);

// создание вектора признаков со значениями x0=1 (для удобства вычислений) и //x1=площадь дома
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.
Pembelajaran Mesin untuk Pengembang Java, Bagian 1 - 4
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.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION