JavaRush /Java blogi /Random-UZ /Java dasturchilari uchun mashinani o'rganish, 1-qism

Java dasturchilari uchun mashinani o'rganish, 1-qism

Guruhda nashr etilgan
Mashinani o'rganish algoritmini sozlang va Java yordamida birinchi bashorat qilish funksiyangizni ishlab chiqing. Oʻzi boshqaradigan avtomobillar, yuzni tanish tizimlari va ovozli yordamchilarning barchasi mashinani oʻrganish texnologiyalari va ramkalari yordamida ishlab chiqilgan. Va bu faqat birinchi to'lqin. Kelgusi 10 yil ichida mahsulotlarning yangi avlodi bizning dunyomizni o'zgartirib, dasturlar, mahsulotlar va ilovalarni ishlab chiqishda yangi yondashuvlarni keltirib chiqaradi. Java dasturchilari uchun mashinani o'rganish, 1 - 1 qismJava dasturchisi sifatida siz texnologiya kompaniyalari mashinani o'rganishga katta sarmoya kiritishni boshlagan paytda ushbu to'lqinni qo'lga olishni xohlaysiz. Bugun o'rgangan narsangizdan keyingi besh yil davomida foydalanishingiz mumkin. Lekin qaerdan boshlash kerak? Ushbu maqola ushbu savolga javob berishga qaratilgan. Mashinani o'rganish algoritmini amalga oshirish va tayyorlash bo'yicha qisqa qo'llanmamizga amal qilish orqali siz mashinani o'rganish tamoyillari haqida birinchi taassurotga ega bo'lasiz. O'rganish algoritmining tuzilishi va uni o'rgatish, uni baholash va eng yaxshi bashorat aniqligini ta'minlaydigan funksiyani tanlashda foydalanishingiz mumkin bo'lgan xususiyatlar bilan tanishganingizdan so'ng, siz JVM ramkasidan (Weka) qanday foydalanish haqida tushunchaga ega bo'lasiz. mashina o'rganish yechimlarini yaratish. Ushbu maqola boshqariladigan mashinalarni o'rganishga qaratilgan, chunki bu aqlli ilovalarni ishlab chiqishda eng ko'p qo'llaniladigan printsipdir.

Mashinani o'rganish va sun'iy intellekt

Mashinani o'rganish sun'iy intellekt sohasidan kelib chiqqan bo'lib, u inson aqliga taqlid qila oladigan mashinalarni yaratishga qaratilgan. "Mashinani o'rganish" atamasi kompyuter fanida paydo bo'lgan bo'lsa-da, sun'iy intellekt fanning yangi sohasi emas. 20-asrning 50-yillari boshlarida matematik Alan Tyuring tomonidan ishlab chiqilgan Tyuring testi hisoblash mashinasining haqiqiy intellektga ega ekanligini aniqlash uchun moʻljallangan birinchi testlardan biridir. Tyuring testiga ko'ra, kompyuter odamning taqlid qilish orqali inson aqlining mavjudligini, u mashina bilan gaplashayotganini anglamasdan isbotlaydi.
Java dasturchilari uchun mashinani o'rganish, 1-2 qism
Mashinani o'rganishning ko'plab mashhur yondashuvlari bugungi kunda o'nlab yillar davomida mavjud bo'lgan g'oyalarga asoslangan. Ammo so'nggi o'n yillikda hisoblash (va taqsimlangan hisoblash platformalari) mashinani o'rganish algoritmlarini qo'llash uchun etarli kuch keltirdi. Ularning ko'pchiligi katta miqdordagi matritsalarni ko'paytirish va boshqa matematik hisoblarni talab qiladi. Yigirma yil oldin bunday hisob-kitoblarni amalga oshirishga imkon beradigan hisoblash texnologiyalari mavjud emas edi, ammo hozir ular haqiqatga aylandi. Mashinani o'rganish algoritmlari dasturlarga sifatni yaxshilash jarayonini amalga oshirish va inson aralashuvisiz o'z imkoniyatlarini kengaytirish imkonini beradi. Mashinani o'rganish yordamida ishlab chiqilgan dastur o'z kodini mustaqil ravishda yangilash yoki kengaytirishga qodir.

Nazorat ostidagi o'rganish va nazoratsiz o'rganish

Nazorat ostidagi va nazoratsiz o'rganish - bu mashinani o'rganishning eng mashhur ikkita usuli. Ikkala variant ham aloqalarni o'rnatish va o'rganish uchun mashinaga katta hajmdagi ma'lumotlar yozuvlarini berishni talab qiladi. Bunday to'plangan ma'lumotlar odatda "xususiyat vektori" deb ataladi . Misol uchun, bizda ma'lum bir turar-joy binosi bor. Bunday holda, xususiyat vektori quyidagi xususiyatlarni o'z ichiga olishi mumkin: uyning umumiy maydoni, xonalar soni, uy qurilgan yil va boshqalar. Nazorat ostidagi o'rganishda mashinani o'rganish algoritmi xususiyat vektorlari bilan bog'liq savollarga javob berishga o'rgatiladi. Algoritmni o'rgatish uchun unga xususiyat vektorlari va tegishli teglar to'plami beriladi. Bog'langan yorliq shaxs (o'qituvchi) tomonidan taqdim etiladi va unda berilgan savolga to'g'ri "javob" mavjud. O'rganish algoritmi ichki tuzilmani va ular orasidagi munosabatlarni topish uchun xususiyat vektorlarini va to'g'ri teglarni tahlil qiladi. Shunday qilib, mashina savollarga to'g'ri javob berishni o'rganadi. Misol tariqasida, biz ko'chmas mulk savdosi uchun ma'lum bir aqlli dasturni ko'rib chiqishimiz mumkin. Uni o'lcham, xonalar soni va uylar to'plami uchun qurilgan yilni o'z ichiga olgan xususiyat vektori yordamida o'rgatish mumkin. Bir kishi har bir uyga ushbu omillardan kelib chiqqan holda uyning to'g'ri narxini ko'rsatadigan yorliqni belgilashi kerak. Ushbu ma'lumotlarni tahlil qilib, aqlli dastur o'zini "Bu uy uchun qancha pul olsam bo'ladi?" Degan savolga javob berishga o'rgatishi kerak.
Java haqida o'qishga qiziqasizmi? Java Developer guruhiga qo'shiling !
Tayyorgarlik jarayoni tugagandan so'ng, yangi kiritilgan ma'lumotlar endi belgilanmaydi. Mashina noma'lum, yorliqsiz xususiyat vektorlari uchun ham savollarga to'g'ri javob bera olishi kerak. Nazoratsiz o'rganishda algoritm javoblarni inson belgilarisiz (yoki hatto savol bermasdan) bashorat qilish uchun mo'ljallangan. Yorliq yoki natijani aniqlash o'rniga, nazoratsiz o'rganish algoritmlari ilgari noma'lum munosabatlarni aniqlash uchun katta ma'lumotlar to'plamlari va hisoblash quvvatidan foydalanadi. Misol uchun, iste'mol tovarlari marketingida nazoratsiz o'rganish mijozlarning yashirin aloqalarini yoki guruhlarini aniqlash uchun ishlatilishi mumkin, bu esa oxir-oqibat marketing dasturini yaxshilashga yoki yangisini yaratishga yordam beradi. Ushbu maqolada biz boshqariladigan mashinalarni o'rganishga e'tibor qaratamiz; bu hozirda eng ko'p qo'llaniladigan yondashuv.

Nazorat ostidagi mashinalarni o'rganish

Barcha mashinalarni o'rganish ma'lumotlarga asoslangan. Nazorat qilinadigan mashinani o'rganish loyihasi uchun siz ma'lumotlarni markerlar bilan so'ralgan savolga mazmunli javob beradigan tarzda belgilashingiz kerak. Quyida, 1-jadvalda har bir uy haqidagi ma'lumot yozuvi "uy narxi" deb belgilangan. Rekord ma'lumotlari va uyning narxi o'rtasidagi bog'liqlikni aniqlash orqali algoritm oxir-oqibat ushbu ro'yxatga kiritilmagan uylar uchun bozor narxini taxmin qilish imkoniyatiga ega bo'lishi kerak. (E'tibor bering, uyning maydoni kvadrat metrda, uyning narxi esa evroda ko'rsatilgan).
Jadval 1. Uylar ro'yxati
Imzo Imzo Imzo Yorliq
Uy maydoni Xonalar soni Uyning yoshi Uyning kutilayotgan narxi
90 m2 / 295 fut 2 xonali 23 yoshda 249 000 evro
101 m2 / 331 fut 3 xonali yo'q 338 000 evro
1330 m2 / 4363 fut 11 xona 12 yil 6 500 000 €
Dastlabki bosqichlarda siz ma'lumotlarni qo'lda belgilashingiz mumkin, ammo oxir-oqibat siz dasturingizni buni mustaqil ravishda bajarishga o'rgatasiz. Ehtimol, siz ushbu yondashuvning elektron pochta mijozlari bilan ishlashini allaqachon ko'rgansiz, bu erda xatni Spam jildiga ko'chirish uchun siz "Bu elektron pochta spammi?" Degan savolga javob berasiz. Javob berganingizda, siz dasturni ko'rishni istamaydigan elektron pochta xabarlarini taniy olishga o'rgatasiz. Ilovaning spam-filtri bir xil manbadan yoki bir xil tarkibga ega bo'lgan xabarlarni belgilash va ularni tegishli qoidalarga muvofiq boshqarishga o'rgatilgan. Belgilangan ma'lumotlar to'plami faqat tayyorgarlik va sinov maqsadlarida talab qilinadi. Ushbu qadam tugallangandan so'ng, mashinani o'rganish algoritmi etiketlanmagan ma'lumotlarda ishlaydi. Misol uchun, siz bashorat qilish algoritmiga uy haqidagi ma'lumotlarning yangi, yorliqsiz yozuvini berishingiz mumkin va u tayyorgarlik ma'lumotlaridan olingan "ma'lumotlar" asosida uyning kutilayotgan narxini avtomatik ravishda bashorat qilishi kerak.

Mashina qanday qilib bashorat qilishni o'rganadi

Nazorat ostidagi mashinani o'rganish muammosi berilgan savol uchun mos bashorat funktsiyasini topishdir. хMatematik jihatdan qiyinchilik o'zgaruvchini kirish sifatida qabul qiladigan va taxmin qilingan qiymatni qaytaradigan funktsiyani topishdir у. Gipotezalarning bu funksiyasi (hθ)tayyorgarlik jarayonining natijasidir. Ko'pincha gipoteza funktsiyasi maqsad funktsiyasi yoki bashorat funktsiyasi deb ham ataladi.
y = h th (x)
Aksariyat hollarda хbu ma'lumotlar massividir. Bizning misolimizda bu xonalar soni va uyning maydonidan iborat bo'lgan uyni belgilaydigan ikki o'lchovli elementlar majmuasi. Bunday qiymatlar massivi xususiyat vektoridir. Muayyan maqsad funktsiyasini belgilash orqali biz undan har bir xususiyat vektorini bashorat qilish uchun foydalanishimiz mumkin х. Uyning narxini taxmin qilish uchun siz {101.0, 3.0}uyning maydoni va xonalar sonidan iborat xususiyat vektoridan foydalangan holda maqsad funktsiyasini chaqirishingiz kerak:
// целевая функция h (результат процесса обучения)
Function<Double[], Double> h = ...;

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

// и предсказываем цену дома (метка)
double y = h.apply(x);
1-misoldagi manba kodida massivdagi qiymatlar хuy xususiyatlarining vektorini ifodalaydi. Maqsad funktsiyasi tomonidan qaytarilgan qiymat уuyning taxmin qilingan narxidir. Mashinani o'rganishning maqsadi noma'lum kirish parametrlarini hisobga olgan holda iloji boricha aniq ishlaydigan maqsad funktsiyasini aniqlashdir. Mashinani o'rganishda maqsad funktsiyasi (hθ)ba'zan model deb ataladi. Ushbu model o'quv jarayonining natijasidir.
Java dasturchilari uchun mashinani o'rganish, 1-3 qism
Belgilangan o'quv namunalari asosida o'rganish algoritmi o'quv ma'lumotlaridagi tuzilmalar yoki naqshlarni qidiradi. Shunday qilib, u odatda ma'lumotlar uchun yaxshi bo'lgan modelni yaratadi. Qoidaga ko'ra, o'quv jarayoni kashfiyot xarakteriga ega. Ko'pgina hollarda, jarayon o'rganish algoritmlari va konfiguratsiyasining turli xil variantlari yordamida ko'p marta takrorlanadi. Natijada, barcha modellar ishlash ko'rsatkichlari asosida baholanadi, ular orasidan eng yaxshisi tanlanadi. Va bu model kelajakdagi belgilanmagan ma'lumotlar uchun taxminiy qiymatlarni hisoblash uchun ishlatiladi.

Chiziqli regressiya

Mashinani "o'ylashga" o'rgatish uchun avval siz foydalanadigan o'rganish algoritmini tanlashingiz kerak. Masalan, chiziqli regressiya. Bu nazorat ostidagi mashinani o'rganishning eng oddiy va eng mashhur algoritmlaridan biridir. Algoritm kiritish xususiyatlari va natija belgilari o'rtasidagi munosabatlar chiziqli deb taxmin qiladi. Quyidagi umumiy chiziqli regressiya funktsiyasi xususiyat vektorining barcha elementlarini parametr θ (teta) bilan ko'paytirib yig'ish orqali bashorat qilingan qiymatni qaytaradi . Ushbu parametr mashg'ulot jarayonida o'quv ma'lumotlari asosida regressiya funktsiyasini moslashtirish yoki "sozlash" uchun ishlatiladi.
h th (x) = th 0 * 1 + th 1 * x 1 + ... th n * x n
Chiziqli regressiya funktsiyasida teta parametri va xususiyat parametrlari pastki belgilar bilan raqamlangan. Pastki belgisi parametr (θ)va xususiyat parametrining (х)vektordagi o'rnini aniqlaydi. E'tibor bering, x 01 xususiyati doimiy siljish atamasi bo'lib, hisoblash maqsadlari uchun muhimdir . Natijada, uyning maydoni kabi muhim parametrlar indeksi x 1 dan boshlanadi . Shunday qilib, agar x 1 ga xususiyat vektorining birinchi qiymati (uy maydoni) tayinlangan bo'lsa, u holda x 2 keyingi qiymatni (xonalar soni) oladi va hokazo. 2-misol matematik tarzda h th (x) sifatida belgilangan chiziqli regressiya funksiyasining Java dasturini ko'rsatadi . Oddiylik uchun hisob-kitoblar yordamida amalga oshiriladi double. Usulda apply()massivning birinchi elementi 1,0 ga teng bo'lishi va ushbu funktsiyadan tashqarida o'rnatilishi nazarda tutilgan. 2-misol: Java tilidagi chiziqli regressiya
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);
 }
}
Yangi misol yaratish uchun LinearRegressionFunctionparametrni ko'rsatishingiz kerak θ. Ushbu parametr yoki vektor umumiy chiziqli regressiya funktsiyasini asosiy o'quv ma'lumotlariga moslashtirish uchun ishlatiladi. Dasturda qo'llaniladigan parametr θo'qitish jarayonida, o'qitish misollari asosida o'rnatiladi. O'qitilgan maqsadli funktsiyaning sifati o'qitish uchun tayyorlangan ma'lumotlarning sifatiga bog'liq bo'ladi. Quyidagi misolda biz LinearRegressionFunctiontasvirlash uchun uyning o'lchamiga asoslangan narx bashoratlaridan foydalanamiz. X 0 1,0 qiymati bilan doimiy bo'lishi kerakligini hisobga olsak, maqsad funktsiyasi ikkita parametr yordamida ishga tushiriladi θ, bu erda ular o'quv jarayonining natijasidir. Yangi misol yaratgandan so'ng, 1330 kvadrat metr maydonga ega uyning narxi quyida ko'rsatilgandek prognoz qilinadi:
// тета вектор, используемый в этом примере, является результатом процесса обучения
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);
Quyidagi rasmda siz bashorat qilish maqsadi funktsiyasining grafigini ko'rishingiz mumkin (ko'k chiziq). Bu uy maydonining barcha qiymatlari uchun maqsad funktsiyasini hisoblash yo'li bilan olinadi. Grafikda shuningdek, o'qitish uchun ishlatiladigan narx-hudud juftliklari mavjud.
Java dasturchilari uchun mashinani o'rganish, 1 - 4 qism
Hozirda bashorat jadvali juda yaxshi ko'rinadi. Grafikning koordinatalari (joylashuvi va qiyaligi) vektor tomonidan aniqlanadi θ { 1.004579, 5.286822 }. θLekin qaysi -vektor ilovangiz uchun eng mos ekanligini qanday aniqlash mumkin ? Agar siz birinchi yoki ikkinchi parametrni o'zgartirsangiz, funktsiya yaxshiroq mos keladimi? Eng mos teta vektorini aniqlash uchun maqsad funksiyasi vazifani qanchalik yaxshi bajarishini baholovchi yordamchi funksiya kerak. DAVOM ETILADI Ingliz tilidan tarjima . Muallif: Gregor Roth, Software Architect, JavaWorld.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION