JavaRush /Java блогу /Random-KY /Java иштеп чыгуучулары үчүн машинаны үйрөнүү, 1-бөлүк

Java иштеп чыгуучулары үчүн машинаны үйрөнүү, 1-бөлүк

Группада жарыяланган
Машинаны үйрөнүү алгоритмин орнотуңуз жана Java аркылуу биринчи алдын ала айтуу функциясын иштеп чыгуу. Өзү башкарган унаалар, бетти таануу тутумдары жана үн жардамчыларынын бардыгы машина үйрөнүү технологияларын жана алHowтарын колдонуу менен иштелип чыккан. Жана бул биринчи гана толкун. Кийинки 10 жылдын ичинде продуктулардын жаңы мууну программаларды, өнүмдөрдү жана тиркемелерди иштеп чыгууга жаңы ыкмаларды пайда кылып, дүйнөбүздү өзгөртөт. Java иштеп чыгуучулары үчүн машина үйрөнүү, 1 - 1-бөлүкJava программисти катары, сиз технологиялык компаниялар машинаны үйрөнүүгө көп каражат жумшай баштаганда, бул толкунду кармагыңыз келет. Бүгүн үйрөнгөнүңөрдү кийинки беш жылда колдоно аласыңар. Бирок эмнеден баштоо керек? Бул макала ушул суроого жооп берүүгө багытталган. Машинаны үйрөнүү алгоритмин ишке ашыруу жана даярдоо боюнча биздин кыскача колдонмобузду аткаруу менен сиз машинаны үйрөнүү принциптери жөнүндө биринчи таасирге ээ болосуз. Окутуу алгоритминин структурасы жана аны үйрөтүү, баалоо жана алдын ала айтуунун эң жакшы тактыгын камсыз кылуучу функцияны тандоо үчүн колдоно ала турган функциялар менен таанышкандан кийин, сиз JVM алкагын (Weka) кантип колдонуу керектиги жөнүндө түшүнүккө ээ болосуз. машина үйрөнүү чечимдерин түзүү. Бул макала көзөмөлдөнгөн машина үйрөнүүсүнө багытталган, анткени ал акылдуу тиркемелерди иштеп чыгууда эң көп колдонулган принцип.

Машина үйрөнүү жана жасалма интеллект

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

Көзөмөлдөнгөн окууга каршы көзөмөлсүз окуу

Көзөмөлдөнгөн жана көзөмөлсүз окутуу - бул машина үйрөнүүнүн эң популярдуу эки ыкмасы. Эки вариант тең байланыштарды түзүү жана андан үйрөнүү үчүн машинага чоң көлөмдөгү маалымат жазууларын берүүнү талап кылат. Мындай чогултулган маалыматтар, адатта , "функция вектору" деп аталат . Мисалы, бизде белгилүү бир турак-жай имараты бар. Бул учурда, өзгөчөлүк вектору төмөнкүлөрдү камтышы мүмкүн: үйдүн жалпы аянты, бөлмөлөрдүн саны, үй курулган жылы жана башкалар. Көзөмөлдөнгөн окутууда машина үйрөнүү алгоритми өзгөчөлүк векторлоруна байланыштуу суроолорго жооп берүүгө үйрөтүлөт. Алгоритмди үйрөтүү үчүн, ага өзгөчөлүк векторлорунун жана ага тиешелүү энбелгилердин топтому берилет. Тиешелүү энбелги адам (мугалим) тарабынан берилет жана анда берилген суроого туура "жооп" камтылган. Окутуунун алгоритми ички түзүлүштү жана алардын ортосундагы мамилелерди табуу үчүн өзгөчөлүк векторлорун жана туура энбелгилерди талдайт. Ошентип, машина суроолорго туура жооп берүүгө үйрөнөт. Мисал катары, биз кыймылсыз мүлк соодасы үчүн белгилүү бир акылдуу тиркемени карай алабыз. Аны көлөмү, бөлмөлөрдүн саны жана үйлөрдүн жыйындысы үчүн курулган жылы, анын ичинде өзгөчөлүк векторунун жардамы менен үйрөтсө болот. Адам ар бир үйгө ушул факторлордун негизинде үйдүн туура баасы жазылган этикетка ыйгарышы керек. Бул маалыматтарды талдоо менен, акылдуу тиркеме өзүн "Бул үйгө канча акча ала алам?" деген суроого жооп берүүгө үйрөтүшү керек.
Java жөнүндө окууга кызыгасызбы? Java Developer тобуна кошулуңуз !
Даярдоо процесси аяктагандан кийин, жаңы киргизүү маалыматтары мындан ары белгиленбейт. Машина белгисиз, белгиленбеген өзгөчөлүк векторлору үчүн да суроолорго туура жооп бере алышы керек. Көзөмөлсүз окутууда алгоритм жоопторду адамдын этикеткасы жок (же суроо бербей эле) алдын ала айтуу үчүн иштелип чыккан. Белги же жыйынтыкты аныктоонун ордуна, көзөмөлсүз окутуу алгоритмдери мурда белгисиз мамилелерди табуу үчүн чоң маалымат топтомун жана эсептөө күчүн колдонушат. Мисалы, керектөө өнүмдөрүн маркетингде көзөмөлсүз окутуу кардарлардын жашыруун мамилелерин же топторун аныктоо үчүн колдонулушу мүмкүн, бул маркетинг программасын жакшыртууга же жаңысын түзүүгө жардам берет. Бул макалада биз көзөмөлдөнгөн машина үйрөнүүгө басым жасайбыз; бул учурда эң көп колдонулган ыкма.

Көзөмөлдөнгөн машина үйрөнүү

Бардык машина үйрөнүү маалыматтарга негизделген. Көзөмөлдөнгөн машинаны үйрөнүү долбоору үчүн берorштерди маркерлер менен берилүүчү суроого маңыздуу жооп бере тургандай кылып белгилешиңиз керек. Төмөндө, 1-tableда ар бир үй маалымат жазуусу “үй баасы” деп белгиленген. Рекорддук маалыматтар менен үйдүн баасынын ортосундагы байланышты аныктоо менен, алгоритм акыры бул тизмеге кирбеген үйлөрдүн рыноктук баасын алдын ала айта алышы керек. (Үйдүн аянты чарчы метр менен көрсөтүлгөнүн, ал эми үйдүн баасы евродо экенин эске алыңыз).
Таблица 1. Үйлөрдүн тизмеси
Кол коюу Кол коюу Кол коюу Белги
Үй аянты Бөлмөлөрдүн саны Үйдүн жашы Үйдүн күтүлгөн баасы
90 м2 / 295 фут 2 бөлмө 23 жашта €249 000
101 м2 / 331 фут 3 бөлмө жок €338 000
1330 м2 / 4363 фут 11 бөлмө 12 жаш 6 500 000 €
Алгачкы этаптарда сиз маалыматтарды кол менен белгилейсиз, бирок акырында программаңызды аны өз алдынча жасоого үйрөтөсүз. Сиз бул ыкманын электрондук почта кардарлары менен иштешин көргөн чыгарсыз, анда электрондук катты Спам папкасына жылдыруу үчүн "Бул электрондук почта спамыбы?" Жооп бергениңизде, сиз программаны көргүңүз келбеген каттарды таанууга үйрөтөсүз. Колдонмонун спам чыпкасы бир эле булактан келген же бир эле мазмунду камтыган билдирүүлөрдү белгилөө жана аларды тийиштүү эрежелерге ылайык башкаруу үчүн үйрөтүлгөн. Белгиленген маалымат топтомдору даярдоо жана сыноо максатында гана талап кылынат. Бул кадам аяктагандан кийин, машина үйрөнүү алгоритми белгиленбеген маалыматтарда иштейт. Мисалы, сиз болжолдоо алгоритмин үй жөнүндө маалыматтардын жаңы, белгиленбеген жазуусу менен камсыз кыла аласыз жана ал даярдоо маалыматтарынан алынган "бorмдердин" негизинде үйдүн күтүлгөн баасын автоматтык түрдө алдын ала айтышы керек.

Машина алдын ала айтууну кантип үйрөнөт

Көзөмөлдөнгөн машина үйрөнүүдөгү кыйынчылык - берилген суроого ылайыктуу болжолдоо функциясын табуу. хМатематикалык жактан алганда, кыйынчылык - өзгөрмөнү киргизүү катары кабыл алган жана болжолдонгон маанини кайтарган функцияны табуу у. Гипотезалардын бул функциясы (hθ)даярдоо процессинин натыйжасы болуп саналат. Көп учурда гипотеза функциясын максат функциясы же болжолдоо функциясы деп да аташат.
y = h θ (x)
Көпчүлүк учурларда, хбул маалымат массиви. Биздин мисалда, бул бөлмөлөрдүн саны жана үйдүн аянтынан турган үйдү аныктоочу элементтердин эки өлчөмдүү массив. Мындай маанилердин массиви өзгөчөлүк вектору болуп саналат. Белгилүү бир максаттуу функцияны көрсөтүү менен, биз аны ар бир өзгөчөлүк векторун болжолдоо үчүн колдоно алабыз х. Үйдүн баасын болжолдоо үчүн, {101.0, 3.0}үйдүн аянтынан жана бөлмөлөрдүн санынан турган өзгөчөлүк векторунун жардамы менен an objectивдүү функцияны чакыруу керек:
// целевая функция 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 тorнде сызыктуу регрессия
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 }. θБирок кайсы -вектор колдонмоңузга эң ылайыктуу экенин кантип аныктай аласыз ? Эгер сиз биринчи же балким экинчи параметрди өзгөртсөңүз, функция жакшыраак туура келеби? Эң туура келген тета векторун аныктоо үчүн, максаттуу функциянын ишти канчалык жакшы аткарып жатканын баалаган пайдалуу функция керек. УЛАНТЫЛУУДА Англис тorнен котормо . Author: Грегор Рот, программалык камсыздоонун архитектору, JavaWorld.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION