JavaRush /Java Blogu /Random-AZ /Java Tərtibatçıları üçün Maşın Öyrənmə, 1-ci hissə

Java Tərtibatçıları üçün Maşın Öyrənmə, 1-ci hissə

Qrupda dərc edilmişdir
Maşın öyrənmə alqoritmini qurun və Java istifadə edərək ilk proqnozlaşdırıcı funksiyanızı inkişaf etdirin. Özünü idarə edən avtomobillər, üz tanıma sistemləri və səs köməkçiləri hamısı maşın öyrənmə texnologiyaları və çərçivələrindən istifadə etməklə hazırlanır. Və bu yalnız birinci dalğadır. Növbəti 10 il ərzində yeni nəsil məhsullar proqramların, məhsulların və tətbiqlərin işlənib hazırlanmasına yeni yanaşmalar yaradaraq dünyamızı dəyişdirəcək. Java Tərtibatçıları üçün Maşın Öyrənməsi, 1-ci Hissə - 1Java proqramçısı olaraq, texnoloji şirkətlərin maşın öyrənməsinə böyük sərmayə qoymağa başladığı bir vaxtda bu dalğanı tutmaq istəyirsiniz. Bu gün öyrəndiklərinizi növbəti beş il ərzində istifadə edə bilərsiniz. Bəs haradan başlamaq lazımdır? Bu məqalə bu suala cavab vermək məqsədi daşıyır. Maşın öyrənməsi alqoritmini həyata keçirmək və hazırlamaq üçün qısa bələdçimizə əməl etməklə siz maşın öyrənməsinin prinsipləri haqqında ilk təəssürat əldə edəcəksiniz. Öyrənmə alqoritminin strukturu və onu öyrətmək, qiymətləndirmək və ən yaxşı proqnozlaşdırma dəqiqliyini təmin edən funksiyanı seçmək üçün istifadə edə biləcəyiniz funksiyalar haqqında öyrəndikdən sonra siz JVM çərçivəsini (Weka) necə istifadə edəcəyinizi başa düşəcəksiniz. maşın öyrənmə həlləri qurun. Bu məqalə nəzarət edilən maşın öyrənməsinə diqqət yetirir, çünki bu, ağıllı proqramların hazırlanmasında ən çox istifadə olunan prinsipdir.

Maşın öyrənməsi və süni intellekt

Maşın öyrənməsi insan intellektini təqlid edə bilən maşınlar yaratmaq məqsədi daşıyan süni intellekt sahəsindən inkişaf etmişdir. “Maşın öyrənmə” termini kompüter elmində yaransa da, süni intellekt yeni elm sahəsi deyil. 20-ci əsrin 50-ci illərinin əvvəllərində riyaziyyatçı Alan Turinq tərəfindən hazırlanmış Turinq testi hesablama maşınının həqiqi intellektə malik olub-olmadığını müəyyən etmək üçün hazırlanmış ilk testlərdən biridir. Turing testinə görə, hesablama maşını insan zəkasının mövcudluğunu sübut edir ki, insan onun maşınla danışdığını dərk etmədən insanı təqlid edir.
Java Tərtibatçıları üçün Maşın Öyrənməsi, 1-2-ci hissə
Bu gün bir çox məşhur maşın öyrənmə yanaşmaları onilliklər köhnə fikirlərə əsaslanır. Lakin hesablamada (və paylanmış hesablama platformalarında) son onillik maşın öyrənmə alqoritmlərini tətbiq etmək üçün kifayət qədər güc gətirdi. Onların əksəriyyəti böyük miqdarda matrisin vurulması və digər riyazi hesablamalar tələb edir. İyirmi il əvvəl bu cür hesablamalar aparmağa imkan verən hesablama texnologiyaları sadəcə mövcud deyildi, indi isə onlar reallığa çevrilib. Maşın öyrənmə alqoritmləri proqramlara insan müdaxiləsi olmadan keyfiyyətin yaxşılaşdırılması prosesini həyata keçirməyə və imkanlarını genişləndirməyə imkan verir. Maşın öyrənməsi ilə hazırlanmış proqram müstəqil olaraq öz kodunu yeniləyə və ya genişləndirə bilir.

Nəzarət olunan öyrənmə və nəzarətsiz öyrənmə

Nəzarət olunan və nəzarətsiz öyrənmə maşın öyrənməsinə ən populyar iki yanaşmadır. Hər iki variant, əlaqələr qurmaq və onlardan öyrənmək üçün maşına çoxlu məlumat qeydlərinin verilməsini tələb edir. Belə toplanmış məlumatlar adətən "xüsusiyyət vektoru" adlanır . Məsələn, bizdə müəyyən yaşayış binası var. Bu halda, xüsusiyyət vektorunda aşağıdakı xüsusiyyətlər ola bilər: evin ümumi sahəsi, otaqların sayı, evin tikildiyi il və s. Nəzarət olunan təlimdə xüsusiyyət vektorları ilə bağlı suallara cavab vermək üçün maşın öyrənmə alqoritmi öyrədilir. Alqoritmi öyrətmək üçün ona bir sıra xüsusiyyət vektorları və əlaqəli etiketlər verilir. Əlaqədar etiket şəxs (müəllim) tərəfindən verilir və orada verilən suala düzgün “cavab” verilir. Öyrənmə alqoritmi daxili strukturu və aralarındakı əlaqələri tapmaq üçün xüsusiyyət vektorlarını və düzgün etiketləri təhlil edir. Bu yolla maşın suallara düzgün cavab verməyi öyrənir. Nümunə olaraq, daşınmaz əmlak ticarəti üçün müəyyən bir ağıllı tətbiqi nəzərdən keçirə bilərik. Ölçü, otaqların sayı və bir sıra evlər üçün tikilən il daxil olmaqla xüsusiyyət vektorundan istifadə etməklə öyrədilə bilər. İnsan bu amillərə əsaslanaraq hər evə evin düzgün qiyməti olan etiket təyin etməlidir. Bu məlumatları təhlil edərək, ağıllı bir tətbiq “Mən bu ev üçün nə qədər pul ala bilərəm?” sualına cavab verməyə öyrəşməlidir.
Java haqqında oxumaq istəyirsiniz? Java Developer qrupuna qoşulun !
Hazırlıq prosesi başa çatdıqdan sonra yeni daxiletmə məlumatları artıq qeyd olunmur. Maşın hətta naməlum, etiketlənməmiş xüsusiyyət vektorları üçün belə suallara düzgün cavab verə bilməlidir. Nəzarətsiz öyrənmədə alqoritm cavabları insan etiketi olmadan (və ya hətta sual vermədən) proqnozlaşdırmaq üçün nəzərdə tutulmuşdur. Nəzarətsiz öyrənmə alqoritmləri etiket və ya nəticəni müəyyən etmək əvəzinə, əvvəllər məlum olmayan əlaqələri aşkar etmək üçün böyük məlumat dəstləri və hesablama gücündən istifadə edir. Məsələn, istehlak məhsullarının marketinqində nəzarətsiz öyrənmə müştərilərin gizli əlaqələrini və ya qruplaşmalarını müəyyən etmək üçün istifadə edilə bilər ki, bu da son nəticədə marketinq proqramını təkmilləşdirməyə və ya yenisini yaratmağa kömək edə bilər. Bu yazıda biz nəzarət edilən maşın öyrənməsinə diqqət yetirəcəyik; bu hal hazırda ən çox istifadə edilən yanaşmadır.

Nəzarət olunan Maşın Öyrənməsi

Bütün maşın öyrənməsi məlumatlara əsaslanır. Nəzarət olunan maşın öyrənməsi layihəsi üçün siz verilən suala mənalı cavablar verəcək şəkildə məlumatları markerlərlə qeyd etməlisiniz. Aşağıda, Cədvəl-1-də hər bir ev haqqında məlumat qeydində “evin qiyməti” qeyd olunur. Rekord məlumatları ilə evin qiyməti arasındakı əlaqəni müəyyən etməklə, alqoritm sonda verilmiş siyahıya daxil edilməyən evlərin bazar qiymətini proqnozlaşdıra bilməlidir. (Qeyd edək ki, evin sahəsi kvadrat metrlə, evin qiyməti isə avro ilə göstərilib).
Cədvəl 1. Evlərin siyahısı
İmza İmza İmza Etiket
Ev sahəsi Otaqların sayı Evin yaşı Gözlənilən ev qiyməti
90 m2 / 295 fut 2 otaq 23 yaş € 249.000
101 m2 / 331 fut 3 otaq yox 338 000 avro
1330 m2 / 4363 fut 11 otaq 12 il 6.500.000 €
İlkin mərhələlərdə, ehtimal ki, məlumatları əl ilə etiketləyəcəksiniz, lakin nəticədə proqramınıza bunu öz başına etməyi öyrədəcəksiniz. Yəqin ki, siz artıq bu yanaşmanın e-poçt müştəriləri ilə işlədiyini görmüsünüz, burada e-poçtu Spam qovluğuna köçürmək üçün “Bu e-poçt spamdır?” sualına cavab verirsiniz. Cavab verdikdə siz proqramı görmək istəmədiyiniz e-poçtları tanımağa öyrədirsiniz. Tətbiqin spam filtri eyni mənbədən gələn və ya eyni məzmunu ehtiva edən mesajları qeyd etmək və müvafiq qaydalara uyğun idarə etmək üçün öyrədilir. Etiketli məlumat dəstləri yalnız hazırlıq və sınaq məqsədləri üçün tələb olunur. Bu addım tamamlandıqdan sonra maşın öyrənmə alqoritmi etiketlənməmiş məlumatlar üzərində işləyir. Məsələn, bir proqnoz alqoritmini bir ev haqqında yeni, etiketlənməmiş məlumat qeydini qidalandıra bilərsiniz və o, hazırlıq məlumatlarından əldə edilən "biliklər" əsasında evin gözlənilən qiymətini avtomatik olaraq proqnozlaşdırmalıdır.

Bir maşın proqnozlaşdırmağı necə öyrənir

Nəzarət olunan maşın öyrənməsi ilə bağlı problem verilən sual üçün uyğun proqnozlaşdırma funksiyasını tapmaqdır. хRiyazi cəhətdən çətinlik dəyişəni giriş kimi qəbul edən və proqnozlaşdırılan dəyəri qaytaran funksiyanı tapmaqdır у. Hipotezlərin bu funksiyası (hθ)hazırlıq prosesinin nəticəsidir. Çox vaxt hipotez funksiyasına məqsəd funksiyası və ya proqnozlaşdırma funksiyası da deyilir.
y = h θ (x)
Əksər hallarda хbu, məlumat massividir. Bizim nümunəmizdə bu, otaqların sayından və evin sahəsindən ibarət evi müəyyən edən iki ölçülü elementlər massividir. Belə dəyərlər massivi xüsusiyyət vektorudur. Müəyyən bir məqsəd funksiyasını təyin etməklə, hər bir xüsusiyyət vektorunu proqnozlaşdırmaq üçün ondan istifadə edə bilərik х. {101.0, 3.0}Bir evin qiymətini proqnozlaşdırmaq üçün evin sahəsindən və otaqların sayından ibarət xüsusiyyət vektorundan istifadə edərək məqsəd funksiyasını çağırmalısınız :
// целевая функция h (результат процесса обучения)
Function<Double[], Double> h = ...;

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

// и предсказываем цену дома (метка)
double y = h.apply(x);
Nümunə-1-dəki mənbə kodunda massivdəki dəyərlər хev xüsusiyyətlərinin vektorunu təmsil edir. Məqsəd funksiyası tərəfindən qaytarılan dəyər уevin proqnozlaşdırılan qiymətidir. Maşın öyrənmənin məqsədi naməlum giriş parametrləri nəzərə alınmaqla mümkün qədər dəqiq işləyəcək məqsəd funksiyasını müəyyən etməkdir. Maşın öyrənməsində məqsəd funksiyası (hθ)bəzən model adlanır. Bu model öyrənmə prosesinin nəticəsidir.
Java Tərtibatçıları üçün Maşın Öyrənməsi, 1-3-cü hissə
Etiketli təlim nümunələrinə əsaslanaraq, öyrənmə alqoritmi təlim məlumatlarında struktur və ya nümunələri axtarır. Beləliklə, o, ümumiyyətlə məlumat üçün yaxşı olan bir model qurur. Bir qayda olaraq, təlim prosesi kəşfiyyat xarakteri daşıyır. Əksər hallarda, öyrənmə alqoritmləri və konfiqurasiyalarının müxtəlif variantlarından istifadə etməklə proses dəfələrlə təkrarlanır. Nəticədə, bütün modellər performans göstəriciləri əsasında qiymətləndirilir, onlardan ən yaxşısı seçilir. Və bu model gələcək etiketlənməmiş məlumatlar üçün təxmin edilən dəyərləri hesablamaq üçün istifadə olunur.

Xətti reqressiya

Maşını “düşünməyi” öyrətmək üçün əvvəlcə istifadə edəcəyiniz öyrənmə alqoritmini seçməlisiniz. Məsələn, xətti reqressiya. Bu, ən sadə və ən populyar nəzarət edilən maşın öyrənmə alqoritmlərindən biridir. Alqoritm giriş xüsusiyyətləri ilə nəticə markerləri arasındakı əlaqənin xətti olduğunu qəbul edir. Aşağıdakı ümumi xətti reqressiya funksiyası xüsusiyyət vektorunun bütün elementlərinin parametrə θ (teta) vurulması ilə cəmlənərək proqnozlaşdırılan dəyəri qaytarır . Bu parametr təlim prosesi zamanı təlim məlumatlarına əsaslanan reqressiya funksiyasını uyğunlaşdırmaq və ya “tənzimləmək” üçün istifadə olunur.
h θ (x) = θ 0 * 1 + θ 1 * x 1 + ... θ n * x n
Xətti reqressiya funksiyasında teta parametri və xüsusiyyət parametrləri alt işarələrlə nömrələnir. Alt simvol vektorda parametr (θ)və xüsusiyyət parametrinin yerini müəyyənləşdirir . (х)Qeyd edək ki, x 0 xüsusiyyəti daimi yerdəyişmə terminidir və 1hesablama məqsədləri üçün əhəmiyyətlidir. Nəticədə, evin sahəsi kimi əhəmiyyətli parametrlərin indeksi x 1 ilə başlayır . Beləliklə, əgər x 1-ə xüsusiyyət vektorunun (ev sahəsi) birinci qiyməti verilirsə, x 2 növbəti dəyəri (otaqların sayı) və s. Nümunə-2 riyazi olaraq h θ (x) kimi işarələnmiş xətti reqressiya funksiyasının Java tətbiqini nümayiş etdirir . Sadəlik üçün hesablamalar istifadə edərək həyata keçirilir double. Metodda apply()massivin birinci elementinin 1.0-a bərabər olması və bu funksiyadan kənara qoyulması nəzərdə tutulur. Nümunə 2: Java-da xətti reqressiya
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);
 }
}
Yeni nümunə yaratmaq üçün LinearRegressionFunctionparametri təyin etməlisiniz θ. Bu parametr və ya vektor ümumi xətti reqressiya funksiyasını əsas təlim məlumatlarına uyğunlaşdırmaq üçün istifadə olunur. Proqramda istifadə olunan parametr θtəlim prosesi zamanı təlim nümunələri əsasında tənzimlənəcək. Təlim edilmiş hədəf funksiyasının keyfiyyəti təlim üçün hazırlanmış məlumatların keyfiyyətindən asılı olacaq. Aşağıdakı nümunədə biz LinearRegressionFunctiontəsvir etmək üçün evin ölçüsünə əsaslanan qiymət proqnozlarından istifadə edirik. Nəzərə alsaq ki, x 0 dəyəri 1.0 olan sabit olmalıdır, məqsəd funksiyası iki parametrdən istifadə edərək işə salınır θ, burada onlar təlim prosesinin nəticəsidir. Yeni bir nümunə yaratdıqdan sonra 1330 kvadrat metr sahəsi olan bir evin qiyməti aşağıda göstərildiyi kimi proqnozlaşdırılacaq:
// тета вектор, используемый в этом примере, является результатом процесса обучения
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);
Aşağıdakı şəkildə siz proqnozlaşdırma məqsədi funksiyasının qrafikini görə bilərsiniz (mavi xətt). Evin sahəsinin bütün dəyərləri üçün məqsəd funksiyasını hesablamaqla əldə edilir. Diaqramda həmçinin təlim üçün istifadə olunan qiymət-sahə cütləri var.
Java Tərtibatçıları üçün Maşın Öyrənməsi, 1-4-cü hissə
Hazırda proqnoz qrafiki olduqca yaxşı görünür. Qrafikin koordinatları (mövqe və yamac) vektorla müəyyən edilir θ { 1.004579, 5.286822 }. θBəs tətbiqiniz üçün hansı vektorun ən uyğun olduğunu necə müəyyən edə bilərsiniz ? Birinci və ya bəlkə ikinci parametri dəyişdirsəniz, funksiya daha yaxşı uyğunlaşacaq? Ən uyğun teta vektorunu müəyyən etmək üçün sizə məqsəd funksiyasının işi nə dərəcədə yaxşı yerinə yetirdiyini qiymətləndirən faydalı funksiya lazımdır. DAVAM EDİLƏCƏK İngilis dilindən tərcümə . Müəllif: Gregor Roth, Software Architect, JavaWorld.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION