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 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.
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.
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 :
Function<Double[], Double> h = ...;
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.
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ə
1
hesablama 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) {
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
LinearRegressionFunction
parametri 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
LinearRegressionFunction
tə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);
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.
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.
GO TO FULL VERSION