JavaRush /Java блогы /Random-KK /Java әзірлеушілеріне арналған машиналық оқыту, 1 бөлім

Java әзірлеушілеріне арналған машиналық оқыту, 1 бөлім

Топта жарияланған
Машиналық оқыту алгоритмін орнатыңыз және Java арқылы алғашқы болжау функциясын жасаңыз. Өзін-өзі басқаратын көліктер, бет-әлпетті тану жүйелері және дауыс көмекшілерінің барлығы машиналық оқыту технологиялары мен фреймверктері арқылы жасалған. Ал бұл тек бірінші толқын. Алдағы 10 жыл ішінде өнімдердің жаңа буыны бағдарламаларды, өнімдерді және қосымшаларды әзірлеуге жаңа тәсілдер тудыратын әлемді өзгертеді. Java әзірлеушілеріне арналған машиналық оқыту, 1 - 1 бөлімJava бағдарламашысы ретінде сіз технологиялық компаниялар машиналық оқытуға көп қаражат сала бастаған кезде осы толқынды ұстағыңыз келеді. Бүгін алған біліміңізді келесі бес жылда пайдалана аласыз. Бірақ неден бастау керек? Бұл мақала осы сұраққа жауап беруге бағытталған. Сіз машиналық оқыту алгоритмін енгізу және дайындау бойынша қысқаша нұсқаулықты орындау арқылы машиналық оқыту принциптері туралы алғашқы әсер аласыз. Оқыту алгоритмінің құрылымы және оны үйрету, бағалау және ең жақсы болжау дәлдігін қамтамасыз ететін функцияны таңдау үшін пайдалануға болатын мүмкіндіктер туралы білгеннен кейін, сіз JVM құрылымын (Weka) пайдалану туралы түсінік аласыз. машиналық оқыту шешімдерін құру. Бұл мақала бақыланатын машиналық оқытуға бағытталған, себебі бұл смарт қолданбаларды әзірлеуде жиі қолданылатын принцип.

Машиналық оқыту және жасанды интеллект

Машиналық оқыту адам интеллектіне еліктей алатын машиналарды жасауға бағытталған жасанды интеллект саласынан дамыды. «Машиналық оқыту» термині информатикада пайда болғанымен, жасанды интеллект ғылымның жаңа саласы емес. 20 ғасырдың елуінші жылдарының басында математик Алан Тьюринг жасаған Тьюринг сынағы есептеуіш машинаның шынайы интеллектінің бар-жоғын анықтауға арналған алғашқы сынақтардың бірі болып табылады. Тьюринг сынағы бойынша есептеуіш машина адамның интеллектінің бар екенін, оның машинамен сөйлесіп жатқанын түсінбей, адамның кейпіне келтіру арқылы дәлелдейді.
Java әзірлеушілеріне арналған машиналық оқыту, 1 - 2 бөлім
Бүгінгі таңда көптеген танымал машиналық оқыту тәсілдері ондаған жылдар бойы қалыптасқан идеяларға негізделген. Бірақ есептеулердегі соңғы онжылдық (және таратылған есептеу платформалары) машиналық оқыту алгоритмдерін қолдану үшін жеткілікті қуат әкелді. Олардың көпшілігі матрицаны көбейтудің орасан зор көлемін және басқа да математикалық есептеулерді қажет етеді. Жиырма жыл бұрын мұндай есептеулерге мүмкіндік беретін есептеуіш технологиялар жай ғана жоқ еді, бірақ қазір олар шындыққа айналды. Машиналық оқыту алгоритмдері бағдарламаларға сапаны жақсарту процесін жүргізуге және адамның араласуынсыз олардың мүмкіндіктерін кеңейтуге мүмкіндік береді. Машиналық оқытуды қолдану арқылы жасалған бағдарлама өз codeын дербес жаңартуға немесе кеңейтуге қабілетті.

Бақыланатын оқыту және бақылаусыз оқыту

Бақыланатын және бақылаусыз оқыту - машиналық оқытудың ең танымал екі тәсілі. Екі опция да қарым-қатынас орнату және одан үйрену үшін құрылғыға үлкен көлемдегі деректер жазбаларын беруді талап етеді. Мұндай жиналған деректер әдетте «функция векторы» деп аталады . Мысалы, бізде белгілі бір тұрғын үй бар. Бұл жағдайда ерекшелік векторында мыналар болуы мүмкін: үйдің жалпы ауданы, бөлмелер саны, үй салынған жылы және т.б. Бақыланатын оқытуда машиналық оқыту алгоритмі мүмкіндік векторларына қатысты сұрақтарға жауап беруге үйретіледі. Алгоритмді үйрету үшін оған мүмкіндік векторлары мен байланысты белгілер жиынтығы беріледі. Байланысты белгіні адам (мұғалім) береді және ол қойылған сұраққа дұрыс «жауапты» қамтиды. Оқыту алгоритмі ішкі құрылым мен олардың арасындағы қатынастарды табу үшін мүмкіндік векторлары мен дұрыс белгілерді талдайды. Осылайша машина сұрақтарға дұрыс жауап беруге үйренеді. Мысал ретінде біз жылжымайтын мүлік саудасына арналған белгілі бір интеллектуалды қосымшаны қарастыра аламыз. Оны өлшемді, бөлмелер санын және үйлер жинағы үшін салынған жылды қамтитын мүмкіндік векторы арқылы үйретуге болады. Адам әр үйге осы факторларға байланысты үйдің дұрыс бағасы жазылған белгіні тағайындауы керек. Осы деректерді талдай отырып, смарт қолданба «Мен бұл үйге қанша ақша ала аламын?» Деген сұраққа жауап беруге үйретуі керек.
Java туралы оқығыңыз келе ме? Java әзірлеушілер тобына қосылыңыз !
Дайындау процесі аяқталғаннан кейін жаңа енгізу деректері енді белгіленбейді. Құрылғы белгісіз, таңбаланбаған мүмкіндік векторлары үшін де сұрақтарға дұрыс жауап бере алуы керек. Бақылаусыз оқытуда алгоритм жауаптарды адам таңбалаусыз (немесе тіпті сұрақ қоймастан) болжауға арналған. Белгі немесе нәтижені анықтаудың орнына, бақыланbyteын оқыту алгоритмдері бұрын белгісіз қарым-қатынастарды табу үшін үлкен деректер жиынын және есептеу қуатын пайдаланады. Мысалы, тұтынушылық өнім маркетингінде бақылаусыз оқытуды тұтынушылардың жасырын қарым-қатынастарын немесе топтарын анықтау үшін пайдалануға болады, бұл ақыр соңында маркетинг бағдарламасын жақсартуға немесе жаңасын жасауға көмектеседі. Бұл мақалада біз бақыланатын машиналық оқытуға назар аударамыз; бұл қазіргі уақытта ең жиі қолданылатын әдіс.

Бақыланатын машиналық оқыту

Барлық машиналық оқыту деректерге негізделген. Бақыланатын машиналық оқыту жобасы үшін деректерді сұралған сұраққа мағыналы жауап беретіндей маркерлермен белгілеу керек. Төменде, 1-кестеде әрбір үй туралы ақпарат жазбасы «үй бағасы» деп белгіленген. Жазба деректері мен үйдің бағасы арасындағы байланысты анықтау арқылы алгоритм ақыр соңында берілген тізімге кірмеген үйлердің нарықтық бағасын болжай алуы керек. (Үйдің ауданы шаршы метрмен, ал үйдің бағасы еуромен көрсетілгенін ескеріңіз).
Кесте 1. Үйлер тізімі
Қол қою Қол қою Қол қою Заттаңба
Үй ауданы Бөлмелер саны Үйдің жасы Үйдің күтілетін бағасы
90 м2 / 295 фут 2 бөлме 23 жаста 249 000 еуро
101 м2 / 331 фут 3 бөлме жоқ €338 000
1330 м2 / 4363 фут 11 бөлме 12 жыл 6 500 000 €
Бастапқы кезеңде сіз деректерді қолмен белгілеуіңіз мүмкін, бірақ соңында бағдарламаңызды оны өздігінен жасауға үйретесіз. Сіз бұл тәсілдің электрондық пошта клиенттерімен жұмыс істейтінін көрген боларсыз, мұнда электрондық поштаны Спам қалтасына жылжыту үшін «Бұл электрондық пошта спам ма?» Деген сұраққа жауап бересіз. Жауап бергенде, сіз бағдарламаны көргіңіз келмейтін электрондық пошталарды тануға үйретесіз. Қолданбаның спам сүзгісі бір көзден немесе бірдей мазмұнды қамтитын хабарламаларды белгілеуге және оларды тиісті ережелерге сәйкес басқаруға үйретілген. Белгіленген деректер жиыны тек дайындық және сынақ мақсаттары үшін қажет. Бұл қадам аяқталғаннан кейін машиналық оқыту алгоритмі таңбаланбаған деректерде жұмыс істейді. Мысалы, болжау алгоритмін үй туралы деректердің жаңа, белгіленбеген жазбасын беруге болады және ол дайындық деректерінен алынған «білімге» негізделген үйдің күтілетін бағасын автоматты түрде болжауы керек.

Машина болжауды қалай үйренеді

Бақыланатын машиналық оқытудың қиындығы берілген сұраққа сәйкес болжау функциясын табу болып табылады. хМатематикалық тұрғыдан қиындық - айнымалыны кіріс ретінде қабылдайтын және болжамды мәнді қайтаратын функцияны табу у. Гипотезалардың бұл қызметі (hθ)дайындық процесінің нәтижесі болып табылады. Көбінесе гипотеза функциясын мақсат функциясы немесе болжау функциясы деп те атайды.
y = h θ (x)
Көп жағдайда хбұл деректер массиві. Біздің мысалда бұл бөлмелер саны мен үйдің ауданынан тұратын үйді анықтайтын элементтердің екі өлшемді массиві. Мұндай мәндердің массиві мүмкіндік векторы болып табылады. Нақты мақсаттық функцияны көрсету арқылы біз оны әрбір мүмкіндік векторын болжау үшін пайдалана аламыз х. Үйдің бағасын болжау үшін {101.0, 3.0}үй ауданы мен бөлмелер санынан тұратын функция векторын пайдаланып мақсат функциясын шақыру керек:
// целевая функция h (результат процесса обучения)
Function<Double[], Double> h = ...;

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

// и предсказываем цену дома (метка)
double y = h.apply(x);
1-мысалдағы бастапқы codeта массивтегі мәндер хүй мүмкіндіктерінің векторын білдіреді. Мақсат функциясымен қайтарылатын мән уүйдің болжамды бағасы болып табылады. Машиналық оқытудың мақсаты белгісіз кіріс параметрлерін ескере отырып, мүмкіндігінше дәл жұмыс істейтін мақсаттық функцияны анықтау болып табылады. Машиналық оқытуда мақсат функциясын (hθ)кейде модель деп те атайды. Бұл модель оқу процесінің нәтижесі болып табылады.
Java әзірлеушілеріне арналған машиналық оқыту, 1 - 3 бөлім
Белгіленген оқыту үлгілеріне негізделген оқу алгоритмі оқу деректеріндегі құрылымдарды немесе үлгілерді іздейді. Сондықтан ол деректер үшін әдетте жақсы үлгіні құрады. Әдетте, оқу процесі ізденіс сипатында болады. Көп жағдайда оқыту алгоритмдері мен конфигурацияларының әртүрлі нұсқаларын қолдану арқылы процесс бірнеше рет қайталанады. Нәтижесінде барлық үлгілер өнімділік көрсеткіштері негізінде бағаланады, олардың арасынан ең жақсысы таңдалады. Және бұл модель болашақта белгіленбеген деректердің болжалды мәндерін есептеу үшін қолданылады.

Сызықтық регрессия

Машинаны «ойлауға» үйрету үшін алдымен қолданатын оқу алгоритмін таңдау керек. Мысалы, сызықтық регрессия. Бұл бақыланатын машинаны оқытудың ең қарапайым және ең танымал алгоритмдерінің бірі. Алгоритм енгізу мүмкіндіктері мен нәтиже маркерлері арасындағы қатынас сызықтық деп болжайды. θ Төмендегі жалпы сызықтық регрессия функциясы (тета) параметріне көбейтілген мүмкіндік векторының барлық элементтерін қосу арқылы болжамды мәнді қайтарады . Бұл параметр жаттығу деректеріне негізделген регрессия функциясын бейімдеу немесе «баптау» үшін оқу процесі кезінде пайдаланылады.
h θ (x) = θ 0 * 1 + θ 1 * x 1 + ... θ n * x n
Сызықтық регрессия функциясында тета параметрі мен мүмкіндік параметрлері төменгі белгілермен нөмірленеді. Жазба параметр (θ)мен функция параметрінің (х)вектордағы орнын анықтайды. x 0 мүмкіндігі тұрақты ауысым термині және 1есептеу мақсаттары үшін маңызды екенін ескеріңіз. Нәтижесінде, үйдің ауданы сияқты маңызды параметрлердің индексі x 1 -ден басталады . Сонымен, егер x 1 мүмкіндік векторының бірінші мәні (үй ауданы) тағайындалса, онда x 2 келесі мәнді (бөлмелердің саны) қабылдайды және т.б. Мысал-2 математикалық түрде h θ (x) ретінде белгіленген сызықтық регрессия функциясының Java орындалуын көрсетеді . Қарапайымдылық үшін есептеулер көмегімен орындалады double. Әдісінде apply()массивтің бірінші элементі 1,0-ге тең болады және осы функциядан тыс орнатылады. 2-мысал: Java тіліндегі сызықтық регрессия
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);
 }
}
Жаңа дананы жасау үшін LinearRegressionFunctionпараметрді көрсету керек θ. Бұл параметр немесе вектор жалпы сызықтық регрессия функциясын негізгі оқыту деректеріне бейімдеу үшін пайдаланылады. θБағдарламада пайдаланылған параметр оқыту мысалдарына сүйене отырып, оқу процесінде реттеледі. Оқытылатын мақсатты функцияның сапасы оқытуға дайындалған деректердің сапасына байланысты болады. Төмендегі мысалда біз LinearRegressionFunctionсуреттеу үшін үйдің көлеміне негізделген баға болжамдарын қолданамыз. x 0 1,0 мәні бар тұрақты болуы керек екенін ескере отырып, мақсат функциясы екі параметрді пайдаланып инициализацияланады θ, мұнда олар оқу процесінің нәтижесі болып табылады. Жаңа мысалды жасағаннан кейін ауданы 1330 шаршы метр болатын үйдің бағасы төменде көрсетілгендей болжанады:
// тета вектор, используемый в этом примере, является результатом процесса обучения
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);
Төмендегі суретте болжау мақсаты функциясының графигін (көк сызық) көруге болады. Ол үй ауданының барлық мәндері үшін мақсаттық функцияны есептеу арқылы алынады. Диаграммада оқыту үшін пайдаланылатын баға-аумақ жұптары да бар.
Java әзірлеушілеріне арналған машиналық оқыту, 1 - 4 бөлім
Дәл қазір болжау диаграммасы өте жақсы көрінеді. Графиктің координаталары (орны мен еңісі) вектор арқылы анықталады θ { 1.004579, 5.286822 }. θБірақ қай -вектор қолданбаңызға ең қолайлы екенін қалай анықтауға болады ? Бірінші немесе екінші параметрді өзгертсеңіз, функция жақсырақ болады ма? Ең қолайлы тета векторын анықтау үшін мақсат функциясының тапсырманы қаншалықты жақсы орындайтынын бағалайтын қызметтік функция қажет. ЖАЛҒАСЫ Ағылшын тілінен аудармасы . Authorы: Грегор Рот, бағдарламалық жасақтаманың сәулетшісі, JavaWorld.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION