JavaRush /Blog Jawa /Random-JV /Machine Learning kanggo Java Developers, Part 1

Machine Learning kanggo Java Developers, Part 1

Diterbitake ing grup
Nggawe algoritma machine learning lan gawe fungsi prediktif pisanan sampeyan nggunakake Java. Mobil sing nyopir dhewe, sistem pangenalan rai lan asisten swara kabeh dikembangake nggunakake teknologi lan kerangka pembelajaran mesin. Lan iki mung gelombang pisanan. Sajrone 10 taun sabanjure, produk generasi anyar bakal ngowahi jagad kita, nuwuhake pendekatan anyar kanggo pangembangan program, produk lan aplikasi. Machine Learning kanggo Java Developers, Part 1 - 1Minangka programmer Jawa, sampeyan pengin nyekel gelombang iki saiki perusahaan teknologi wiwit nandur modal akeh ing machine learning. Apa sing sampeyan sinau saiki bisa digunakake kanggo limang taun sabanjure. Nanging ngendi kanggo miwiti? Artikel iki arep njawab pitakonan iki. Sampeyan bakal entuk kesan pisanan babagan prinsip machine learning kanthi nuruti pandhuan singkat kanggo ngetrapake lan nyiapake algoritma machine learning. Sawise sinau babagan struktur algoritma pembelajaran lan fitur sing bisa digunakake kanggo nglatih, ngevaluasi, lan milih fungsi sing nyedhiyakake akurasi prediksi sing paling apik, sampeyan bakal entuk pangerten babagan cara nggunakake kerangka JVM (Weka) kanggo mbangun solusi machine learning. Artikel iki fokus ing sinau mesin sing diawasi amarga minangka prinsip sing paling umum digunakake kanggo ngembangake aplikasi cerdas.

Pembelajaran mesin lan intelijen buatan

Pembelajaran mesin berkembang saka bidang intelijen buatan, sing tujuane nggawe mesin sing bisa niru intelijen manungsa. Sanajan istilah "pembelajaran mesin" asale saka ilmu komputer, intelijen buatan dudu bidang ilmu anyar. Tes Turing , sing dikembangake dening matématikawan Alan Turing ing awal lima puluhan abad kaping 20, minangka salah sawijining tes pisanan sing dirancang kanggo nemtokake manawa mesin komputasi nduweni kecerdasan sing bener. Miturut tes Turing, komputer mbuktekake anane intelijen manungsa kanthi niru wong tanpa ngerti yen dheweke lagi ngomong karo mesin kasebut.
Machine Learning kanggo Java Developers, Part 1 - 2
Akeh pendekatan machine learning sing populer saiki adhedhasar gagasan sing wis pirang-pirang dekade. Nanging dasawarsa pungkasan ing komputasi (lan platform komputasi sing disebarake) wis nggawa daya sing cukup kanggo ngetrapake algoritma pembelajaran mesin. Sebagéyan gedhé mbutuhake perkalian matriks lan petungan matématika liyané. Rong puluh taun kepungkur, teknologi komputasi sing ngidini pitungan kasebut mung ora ana, nanging saiki wis dadi kasunyatan. Algoritma pembelajaran mesin ngidini program nindakake proses perbaikan kualitas lan nggedhekake kemampuane tanpa campur tangan manungsa. Program sing dikembangake nggunakake machine learning bisa nganyari utawa ngluwihi kode dhewe.

Pembelajaran sing diawasi vs sinau sing ora diawasi

Pembelajaran sing diawasi lan ora diawasi minangka rong pendekatan sing paling populer kanggo sinau mesin. Loro-lorone pilihan mbutuhake dipakani mesin jumlah ageng cathetan data kanggo mbangun sesambetan lan sinau saka. Data sing diklumpukake kuwi biasane disebut "vektor fitur" . Contone, kita duwe bangunan omah tartamtu. Ing kasus iki, vektor fitur bisa ngemot fitur kayata: total area omah, jumlah kamar, taun omah dibangun, lan liya-liyane. Ing sinau sing diawasi , algoritma pembelajaran mesin dilatih kanggo njawab pitakonan sing ana gandhengane karo vektor fitur. Kanggo nglatih algoritma kasebut, diwenehi set vektor fitur lan label sing gegandhengan. Label sing gegandhengan diwenehake dening wong (guru) lan ngemot "jawaban" sing bener kanggo pitakonan sing ditakoni. Algoritma pembelajaran nganalisa vektor fitur lan label sing bener kanggo nemokake struktur internal lan hubungane. Kanthi cara iki mesin sinau njawab pitakonan kanthi bener. Minangka conto, kita bisa nimbang aplikasi cerdas tartamtu kanggo dagang real estate. Bisa dilatih nggunakake vektor fitur kalebu ukuran, jumlah kamar, lan taun dibangun kanggo sakumpulan omah. Wong kudu menehi label saben omah kanthi rega omah sing bener adhedhasar faktor kasebut. Kanthi nganalisa data kasebut, aplikasi cerdas kudu nglatih dhewe kanggo mangsuli pitakon, "Pinten dhuwit sing bisa daktuku kanggo omah iki?"
Kepengin maca babagan basa Jawa? Gabung karo grup Java Developer !
Sawise proses persiapan rampung, data input anyar ora ditandhani maneh. Mesin kasebut kudu bisa mangsuli pitakon kanthi bener, sanajan kanggo vektor fitur sing ora dingerteni. Ing pembelajaran tanpa pengawasan, algoritma dirancang kanggo prédhiksi jawaban tanpa labeling manungsa (utawa malah tanpa takon). Tinimbang nemtokake label utawa asil, algoritma pembelajaran sing ora diawasi nggunakake set data gedhe lan daya komputasi kanggo nemokake hubungan sing durung dingerteni sadurunge. Contone, ing marketing produk konsumen, sinau tanpa pengawasan bisa digunakake kanggo ngenali hubungan sing didhelikake utawa klompok pelanggan, sing pungkasane bisa mbantu nambah program marketing utawa nggawe sing anyar. Ing artikel iki, kita bakal fokus ing pembelajaran mesin sing diawasi; iki saiki pendekatan sing paling umum digunakake.

Machine Learning sing diawasi

Kabeh machine learning adhedhasar data. Kanggo proyek machine learning sing diawasi, sampeyan kudu menehi tandha data kanthi spidol kanthi cara sing menehi jawaban sing migunani kanggo pitakonan sing ditakoni. Ing ngisor iki, ing Tabel-1, saben cathetan informasi omah diwenehi label "rega omah." Kanthi ngenali hubungan antarane data rekaman lan rega omah, algoritma pungkasane kudu bisa prédhiksi rega pasar kanggo omah sing ora kalebu ing dhaptar sing diwenehake. (Wigati dicathet yen area omah dituduhake ing meter persegi, lan rega omah ing euro).
Tabel 1. Daftar omah
mlebu mlebu mlebu Label
Area omah Jumlah kamar Umur omah Rega omah sing dikarepake
90 m2 / 295 ft 2 kamar 23 taun € 249.000
101 m2 / 331 ft 3 kamar n/a € 338.000
1330 m2 / 4363 ft 11 kamar 12 taun 6.500.000 €
Ing tahap awal, sampeyan bakal menehi label data kanthi manual, nanging pungkasane sampeyan bakal ngajar program sampeyan nindakake dhewe. Sampeyan mbokmenawa wis weruh pendekatan iki bisa digunakake karo klien email, ing ngendi kanggo mindhah email menyang folder Spam, sampeyan njawab pitakonan "Apa email iki spam?" Nalika sampeyan mbales, sampeyan nglatih program kanggo ngenali email sing ora pengin sampeyan deleng. Filter spam aplikasi dilatih kanggo menehi tandha pesen saka sumber sing padha utawa ngemot konten sing padha lan ngatur miturut aturan sing cocog. Dataset sing diwenehi label mung dibutuhake kanggo tujuan nyiapake lan nguji. Sawise langkah iki rampung, algoritma machine learning bisa digunakake ing data tanpa label. Contone, sampeyan bisa Feed algoritma prediksi anyar, unlabeled rekaman data babagan omah, lan kudu kanthi otomatis prédhiksi rega samesthine omah adhedhasar "kawruh" gained saka data preparatory.

Carane mesin sinau kanggo prédhiksi

Tantangan karo sinau mesin sing diawasi yaiku nemokake fungsi prediksi sing cocog kanggo pitakonan tartamtu. Secara matematis, kangelan yaiku nemokake fungsi sing njupuk variabel minangka input хlan ngasilake nilai sing diprediksi у. Fungsi hipotesis iki (hθ)minangka asil saka proses persiapan. Asring fungsi hipotesis kasebut uga diarani fungsi objektif utawa fungsi prediksi.
y = h θ (x)
Ing kasus paling, хiku array data. Ing conto kita, iki minangka susunan unsur rong dimensi sing nemtokake omah, kalebu jumlah kamar lan area omah. Array saka nilai kasebut minangka vektor fitur. Kanthi nemtokake fungsi objektif tartamtu, kita bisa nggunakake fungsi kasebut kanggo prédhiksi saben vektor fitur х. Kanggo prédhiksi rega omah, sampeyan kudu nelpon fungsi objektif nggunakake vektor fitur {101.0, 3.0}sing kalebu area omah lan jumlah kamar:
// целевая функция h (результат процесса обучения)
Function<Double[], Double> h = ...;

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

// и предсказываем цену дома (метка)
double y = h.apply(x);
Ing kode sumber saka Conto-1, nilai-nilai ing array хmakili vektor fitur omah. Nilai уsing dibalekake dening fungsi objektif yaiku rega omah sing diprediksi. Tujuan pembelajaran mesin yaiku kanggo nemtokake fungsi objektif sing bakal bisa digunakake kanthi akurat kanthi parameter input sing ora dingerteni. Ing machine learning, fungsi objektif (hθ)kadhangkala disebut model. Model iki minangka asil saka proses sinau.
Machine Learning kanggo Java Developers, Part 1 - 3
Adhedhasar conto latihan sing dilabeli, algoritma pembelajaran nggoleki struktur utawa pola ing data latihan. Dadi dheweke mbangun model sing umume apik kanggo data. Minangka aturan, proses sinau minangka eksplorasi. Umume kasus, proses kasebut diulang kaping pirang-pirang nggunakake macem-macem variasi algoritma lan konfigurasi sinau. Akibaté, kabeh model dievaluasi adhedhasar metrik kinerja, ing antarane sing paling apik dipilih. Lan model iki digunakake kanggo ngetung nilai perkiraan kanggo data sing ora diwenehi tag ing mangsa ngarep.

Regresi linier

Kanggo ngajar mesin "mikir," sampeyan kudu milih algoritma sinau sing bakal digunakake. Contone, regresi linear. Iki minangka salah sawijining algoritma pembelajaran mesin sing paling gampang lan paling populer sing diawasi. Algoritma nganggep yen hubungan antarane fitur input lan panandha asil linear. Fungsi regresi linear umum ing ngisor iki ngasilake nilai sing diprediksi kanthi nyimpulake kabeh unsur vektor fitur sing dikali parameter θ (theta) . Parameter iki digunakake sajrone proses latihan kanggo adaptasi utawa "tune" fungsi regresi adhedhasar data latihan.
h θ (x) = θ 0 * 1 + θ 1 * x 1 + ... θ n * x n
Ing fungsi regresi linier, paramèter theta lan paramèter fitur diwenehi nomer kanthi subskrip. Subskrip nemtokake posisi parameter (θ)lan parameter fitur (х)ing vektor. Elinga yen fitur x 0 minangka istilah shift konstan lan penting 1kanggo tujuan komputasi. Akibaté, indeks paramèter sing signifikan kayata area omah diwiwiti kanthi x 1 . Dadi, yen x 1 diwenehi nilai pisanan saka vektor fitur (area omah), banjur x 2 bakal njupuk nilai sabanjure (jumlah kamar) lan sateruse. Conto-2 nduduhake implementasine fungsi regresi linier ing Jawa, kanthi matematis dicathet minangka h θ (x). Kanggo gamblang, petungan dileksanakake nggunakake double. Ing cara apply(), kasedhiya yen unsur pisanan saka array bakal padha karo 1.0 lan bakal disetel ing njaba fungsi iki. Tuladha 2: Regresi Linear ing Jawa
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);
 }
}
Kanggo nggawe conto anyar LinearRegressionFunction, sampeyan kudu nemtokake parameter θ. Parameter utawa vektor iki digunakake kanggo ngganti fungsi regresi linier umum menyang data latihan dhasar. Parameter θsing digunakake ing program kasebut bakal disetel sajrone proses latihan, adhedhasar conto latihan. Kualitas fungsi target sing dilatih bakal gumantung marang kualitas data sing disiapake kanggo latihan. Ing conto ing ngisor iki kita nggunakake LinearRegressionFunctionprediksi rega adhedhasar ukuran omah kanggo ilustrasi. Ngelingi yen x 0 kudu dadi konstanta kanthi nilai 1.0, fungsi objektif diinisialisasi kanthi nggunakake rong paramèter θ, sing minangka asil saka proses sinau. Sawise nggawe conto anyar, rega omah sing ambane 1330 meter persegi bakal diprediksi kaya ing ngisor iki:
// тета вектор, используемый в этом примере, является результатом процесса обучения
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);
Ing gambar ing ngisor iki sampeyan bisa ndeleng grafik fungsi objektif prediksi (garis biru). Dipikolehi kanthi ngitung fungsi objektif kanggo kabeh nilai area omah. Bagan kasebut uga ngemot pasangan rega-area sing digunakake kanggo latihan.
Machine Learning kanggo Java Developers, Part 1 - 4
Saiki grafik prediksi katon apik banget. Koordinat grafik (posisi lan kemiringan) ditemtokake dening vektor θ { 1.004579, 5.286822 }. Nanging kepiye sampeyan bisa nemtokake θ-vektor sing paling cocog kanggo aplikasi sampeyan? Bakal fungsi pas luwih apik yen sampeyan ngganti pisanan utawa Mungkin parameter kapindho? Kanggo nemtokake vektor theta sing paling pas, sampeyan butuh fungsi utilitas sing ngevaluasi kepiye fungsi objektif nindakake tugas kasebut. LANJUTAN Terjemahan saka basa Inggris. Pengarang: Gregor Roth, Software Architect, JavaWorld.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION