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.
Minangka 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.
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?"
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:
Function<Double[], Double> h = ...;
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.
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
1
kanggo 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) {
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
LinearRegressionFunction
prediksi 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);
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.
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.
GO TO FULL VERSION