JavaRush /Blog Java /Random-MS /Pembelajaran Mesin untuk Pembangun Java, Bahagian 1

Pembelajaran Mesin untuk Pembangun Java, Bahagian 1

Diterbitkan dalam kumpulan
Sediakan algoritma pembelajaran mesin dan bangunkan fungsi ramalan pertama anda menggunakan Java. Kereta pandu sendiri, sistem pengecaman muka dan pembantu suara semuanya dibangunkan menggunakan teknologi dan rangka kerja pembelajaran mesin. Dan ini hanya gelombang pertama. Dalam tempoh 10 tahun akan datang, generasi baru produk akan mengubah dunia kita, menimbulkan pendekatan baharu kepada pembangunan program, produk dan aplikasi. Pembelajaran Mesin untuk Pembangun Java, Bahagian 1 - 1Sebagai pengaturcara Java, anda ingin menangkap gelombang ini sekarang kerana syarikat teknologi mula melabur banyak dalam pembelajaran mesin. Apa yang anda pelajari hari ini boleh anda gunakan untuk lima tahun akan datang. Tetapi di mana untuk bermula? Artikel ini bertujuan untuk menjawab soalan ini. Anda akan mendapat gambaran pertama tentang prinsip pembelajaran mesin dengan mengikuti panduan ringkas kami untuk melaksanakan dan menyediakan algoritma pembelajaran mesin. Selepas mempelajari tentang struktur algoritma pembelajaran dan ciri yang boleh anda gunakan untuk melatihnya, menilai dan memilih fungsi yang memberikan ketepatan ramalan terbaik, anda akan mendapat pemahaman tentang cara menggunakan rangka kerja JVM (Weka) untuk membina penyelesaian pembelajaran mesin. Artikel ini memfokuskan pada pembelajaran mesin yang diselia kerana ia merupakan prinsip yang paling biasa digunakan dalam membangunkan aplikasi pintar.

Pembelajaran mesin dan kecerdasan buatan

Pembelajaran mesin berkembang daripada bidang kecerdasan buatan, yang bertujuan untuk mencipta mesin yang boleh meniru kecerdasan manusia. Walaupun istilah "pembelajaran mesin" berasal dari sains komputer, kecerdasan buatan bukanlah satu bidang sains yang baru. Ujian Turing , yang dibangunkan oleh ahli matematik Alan Turing pada awal lima puluhan abad ke-20, adalah salah satu ujian pertama yang direka untuk menentukan sama ada mesin pengkomputeran mempunyai kecerdasan sebenar. Menurut ujian Turing, mesin pengkomputeran membuktikan kehadiran kecerdasan manusia dengan menyamar sebagai seseorang tanpa menyedari bahawa dia sedang bercakap dengan mesin itu.
Pembelajaran Mesin untuk Pembangun Java, Bahagian 1 - 2
Banyak pendekatan pembelajaran mesin yang popular hari ini adalah berdasarkan idea-idea yang berusia beberapa dekad. Tetapi dekad terakhir dalam pengkomputeran (dan platform pengkomputeran teragih) telah membawa kuasa yang mencukupi untuk menggunakan algoritma pembelajaran mesin. Kebanyakannya memerlukan sejumlah besar pendaraban matriks dan pengiraan matematik lain. Dua puluh tahun yang lalu, teknologi pengkomputeran yang membolehkan pengiraan sedemikian tidak wujud, tetapi kini ia telah menjadi kenyataan. Algoritma pembelajaran mesin membolehkan program menjalankan proses peningkatan kualiti dan mengembangkan keupayaannya tanpa campur tangan manusia. Program yang dibangunkan menggunakan pembelajaran mesin dapat mengemas kini atau melanjutkan kodnya sendiri secara bebas.

Pembelajaran diselia vs pembelajaran tanpa pengawasan

Pembelajaran diselia dan tidak diselia ialah dua pendekatan paling popular untuk pembelajaran mesin. Kedua-dua pilihan memerlukan menyuapkan mesin sejumlah besar rekod data untuk membina perhubungan dan belajar daripadanya. Data yang dikumpul sedemikian biasanya dipanggil "vektor ciri" . Sebagai contoh, kita mempunyai bangunan kediaman tertentu. Dalam kes ini, vektor ciri mungkin mengandungi ciri-ciri seperti: jumlah kawasan rumah, bilangan bilik, tahun rumah itu dibina, dan sebagainya. Dalam pembelajaran terselia , algoritma pembelajaran mesin dilatih untuk menjawab soalan yang berkaitan dengan vektor ciri. Untuk melatih algoritma, ia diberi satu set vektor ciri dan label yang berkaitan. Label yang berkaitan disediakan oleh seseorang (guru) dan ia mengandungi "jawapan" yang betul kepada soalan yang ditanya. Algoritma pembelajaran menganalisis vektor ciri dan label yang betul untuk mencari struktur dalaman dan hubungan antara mereka. Dengan cara ini mesin belajar menjawab soalan dengan betul. Sebagai contoh, kita boleh mempertimbangkan aplikasi pintar tertentu untuk perdagangan hartanah. Ia boleh dilatih menggunakan vektor ciri termasuk saiz, bilangan bilik dan tahun dibina untuk set rumah. Seseorang mesti menetapkan setiap rumah label dengan harga rumah yang betul berdasarkan faktor-faktor ini. Dengan menganalisis data ini, aplikasi pintar harus melatih dirinya sendiri untuk menjawab soalan, "Berapa banyak wang yang boleh saya perolehi untuk rumah ini?"
Berminat membaca tentang Java? Sertai kumpulan Pembangun Java !
Setelah proses penyediaan selesai, data input baharu tidak lagi ditanda. Mesin mesti boleh menjawab soalan dengan betul, walaupun untuk vektor ciri yang tidak diketahui dan tidak berlabel. Dalam pembelajaran tanpa pengawasan, algoritma direka untuk meramalkan jawapan tanpa pelabelan manusia (atau bahkan tanpa bertanya soalan). Daripada menentukan label atau hasil, algoritma pembelajaran tanpa pengawasan menggunakan set data yang besar dan kuasa pengkomputeran untuk menemui hubungan yang tidak diketahui sebelum ini. Contohnya, dalam pemasaran produk pengguna, pembelajaran tanpa pengawasan boleh digunakan untuk mengenal pasti perhubungan tersembunyi atau kumpulan pelanggan, yang akhirnya boleh membantu meningkatkan program pemasaran atau mencipta yang baharu. Dalam artikel ini, kami akan menumpukan pada pembelajaran mesin yang diselia; ini merupakan pendekatan yang paling biasa digunakan pada masa ini.

Pembelajaran Mesin Diawasi

Semua pembelajaran mesin adalah berdasarkan data. Untuk projek pembelajaran mesin yang diselia, anda perlu menandai data dengan penanda dengan cara yang memberikan jawapan yang bermakna kepada soalan yang ditanya. Di bawah, dalam Jadual-1, setiap rekod maklumat rumah dilabelkan "harga rumah." Dengan mengenal pasti hubungan antara data rekod dan harga rumah, algoritma akhirnya akan dapat meramalkan harga pasaran untuk rumah yang tidak termasuk dalam senarai yang diberikan. (Sila ambil perhatian bahawa keluasan rumah ditunjukkan dalam meter persegi, dan harga rumah adalah dalam euro).
Jadual 1. Senarai rumah
Tanda Tanda Tanda Label
kawasan rumah Nombor bilik Umur rumah Harga rumah yang dijangkakan
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 melabel data secara manual, tetapi akhirnya anda akan mengajar program anda untuk melakukannya sendiri. Anda mungkin telah melihat pendekatan ini berfungsi dengan klien e-mel, di mana untuk memindahkan e-mel ke folder Spam, anda menjawab soalan "Adakah e-mel ini spam?" Apabila anda membalas, anda melatih program untuk mengecam e-mel yang anda tidak mahu lihat. Penapis spam aplikasi dilatih untuk menandakan mesej daripada sumber yang sama atau mengandungi kandungan yang sama dan mengurusnya mengikut peraturan yang sesuai. Set data berlabel diperlukan untuk tujuan penyediaan dan ujian sahaja. Setelah langkah ini selesai, algoritma pembelajaran mesin berfungsi pada data tidak berlabel. Sebagai contoh, anda boleh menyuapkan algoritma ramalan rekod data baharu yang tidak berlabel tentang rumah dan ia harus meramalkan harga rumah yang dijangkakan secara automatik berdasarkan "pengetahuan" yang diperoleh daripada data persediaan.

Bagaimana mesin belajar meramal

Cabaran dengan pembelajaran mesin yang diselia ialah mencari fungsi ramalan yang sesuai untuk soalan tertentu. Secara matematik, kesukarannya adalah untuk mencari fungsi yang mengambil pembolehubah sebagai input хdan mengembalikan nilai yang diramalkan у. Fungsi hipotesis ini (hθ)adalah hasil daripada proses penyediaan. Selalunya fungsi hipotesis juga dipanggil fungsi objektif atau fungsi ramalan.
y = h θ (x)
Dalam kebanyakan kes, хia adalah tatasusunan data. Dalam contoh kami, ini adalah susunan elemen dua dimensi yang menentukan rumah, yang terdiri daripada bilangan bilik dan kawasan rumah. Tatasusunan nilai sedemikian ialah vektor ciri. Dengan menentukan fungsi objektif tertentu, kita boleh menggunakannya untuk meramalkan setiap vektor ciri х. Untuk meramalkan harga rumah, anda mesti memanggil fungsi objektif menggunakan vektor ciri {101.0, 3.0}yang terdiri daripada kawasan rumah dan bilangan bilik:
// целевая функция h (результат процесса обучения)
Function<Double[], Double> h = ...;

// определяем целевой вектор с площадью дома=101 и количеством комнат=3
Double[] x = new Double[] { 101.0, 3.0 };

// и предсказываем цену дома (метка)
double y = h.apply(x);
Dalam kod sumber daripada Contoh-1, nilai dalam tatasusunan хmewakili vektor ciri rumah. Nilai уyang dikembalikan oleh fungsi objektif ialah harga ramalan rumah. Matlamat pembelajaran mesin adalah untuk menentukan fungsi objektif yang akan berfungsi setepat mungkin memandangkan parameter input yang tidak diketahui. Dalam pembelajaran mesin, fungsi objektif (hθ)kadangkala dipanggil model. Model ini adalah hasil daripada proses pembelajaran.
Pembelajaran Mesin untuk Pembangun Java, Bahagian 1 - 3
Berdasarkan sampel latihan berlabel, algoritma pembelajaran mencari struktur atau corak dalam data latihan. Jadi dia membina model yang secara amnya bagus untuk data. Sebagai peraturan, proses pembelajaran bersifat penerokaan. Dalam kebanyakan kes, proses diulang berkali-kali menggunakan variasi algoritma dan konfigurasi pembelajaran yang berbeza. Akibatnya, semua model dinilai berdasarkan metrik prestasi, antaranya yang terbaik dipilih. Dan model ini digunakan untuk mengira nilai anggaran untuk data tidak bertanda masa hadapan.

Regresi linear

Untuk mengajar mesin "berfikir", anda perlu memilih algoritma pembelajaran yang akan anda gunakan terlebih dahulu. Sebagai contoh, regresi linear. Ini adalah salah satu algoritma pembelajaran mesin terselia yang paling mudah dan paling popular. Algoritma menganggap bahawa hubungan antara ciri input dan penanda hasil adalah linear. Fungsi regresi linear umum di bawah mengembalikan nilai ramalan dengan menjumlahkan semua elemen vektor ciri yang didarab dengan parameter θ (theta) . Parameter ini digunakan semasa proses latihan untuk menyesuaikan atau "menala" fungsi regresi berdasarkan data latihan.
h θ (x) = θ 0 * 1 + θ 1 * x 1 + ... θ n * x n
Dalam fungsi regresi linear, parameter theta dan parameter ciri dinomborkan dengan subskrip. Subskrip menentukan kedudukan parameter (θ)dan parameter ciri (х)dalam vektor. Ambil perhatian bahawa ciri x 0 ialah istilah anjakan malar dan penting 1untuk tujuan pengiraan. Akibatnya, indeks parameter penting seperti keluasan rumah bermula dengan x 1 . Jadi, jika x 1 diberikan nilai pertama bagi vektor ciri (kawasan rumah), maka x 2 akan mengambil nilai seterusnya (bilangan bilik) dan seterusnya. Contoh-2 menunjukkan pelaksanaan Java bagi fungsi regresi linear, secara matematik dilambangkan sebagai h θ (x). Untuk kesederhanaan, pengiraan dilakukan menggunakan double. Dalam kaedah apply(), ia disediakan bahawa elemen pertama tatasusunan akan sama dengan 1.0 dan akan ditetapkan di luar fungsi ini. Contoh 2: Regresi Linear dalam 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 mencipta contoh baharu LinearRegressionFunction, anda perlu menentukan parameter θ. Parameter atau vektor ini digunakan untuk menyesuaikan fungsi regresi linear umum kepada data latihan asas. Parameter θyang digunakan dalam program akan dilaraskan semasa proses latihan, berdasarkan contoh latihan. Kualiti fungsi sasaran terlatih akan bergantung pada kualiti data yang disediakan untuk latihan. Dalam contoh di bawah kami menggunakan LinearRegressionFunctionramalan harga berdasarkan saiz rumah untuk menggambarkan. Memandangkan x 0 mestilah pemalar dengan nilai 1.0, fungsi objektif dimulakan menggunakan dua parameter θ, di mana ia adalah hasil daripada proses pembelajaran. Selepas mencipta contoh baru, harga rumah dengan keluasan 1330 meter persegi akan diramalkan seperti yang ditunjukkan di bawah:
// тета вектор, используемый в этом примере, является результатом процесса обучения
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);
Dalam rajah di bawah anda boleh melihat graf fungsi objektif ramalan (garis biru). Ia diperoleh dengan mengira fungsi objektif untuk semua nilai kawasan rumah. Carta juga mengandungi pasangan kawasan harga yang digunakan untuk latihan.
Pembelajaran Mesin untuk Pembangun Java, Bahagian 1 - 4
Sekarang carta ramalan kelihatan agak bagus. Koordinat graf (kedudukan dan cerun) ditentukan oleh vektor θ { 1.004579, 5.286822 }. Tetapi bagaimana anda boleh menentukan θ-vektor yang paling sesuai untuk aplikasi anda? Adakah fungsi itu lebih sesuai jika anda menukar parameter pertama atau mungkin kedua? Untuk menentukan vektor theta yang paling sesuai, anda memerlukan fungsi utiliti yang menilai sejauh mana fungsi objektif menjalankan tugas. BERSAMBUNG Terjemahan daripada Bahasa Inggeris. Pengarang: Gregor Roth, Arkitek Perisian, JavaWorld.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION