Ողջույն, իմ վերջին գրառում-ում ես ցույց տվեցի, թե ինչպես կարելի է Ջուլիային օգտագործել դասակարգման առաջադրանք կատարելու համար: Այդ դեպքում մենք հիվանդներին դասակարգում էինք երկու կատեգորիայի, ուստի դա դասակարգում էր, որը մեթոդ է կանխատեսելու, կռահեցիք, կատեգորիկ ելքը։ Բայց հիմա մենք պատրաստվում ենք ռեգրեսիա անել, որտեղ արդյունքի փոփոխականը շարունակական է:
Ասված է, եկեք փորձենք ստեղծել մի մոդել, որը կարող է կանխատեսել իրադարձությունների ժամանակը: Թեև դա կարող է տարբեր կերպ վարվել, այդ նպատակով մենք պատրաստվում ենք այս արդյունքի կանխատեսումը վերաբերվել որպես պարզ շարունակական փոփոխականի:

Տվյալների հավաքածուն հասանելի է այստեղ: Այս ձեռնարկի համար մեզ անհրաժեշտ կլինեն մի քանի փաթեթներ: Դրանք օգտագործելու համար ստուգեք ստորև նշված կոդը:

Եթե ​​դուք չունեք տեղադրված փաթեթներ, գործարկեք

using Pkg; Pkd.add(“<PackageName>")

Տվյալների բեռնում և ստուգում

Տվյալների հավաքածուն ձեր միջավայրում բեռնելու համար մենք կարող ենք դա անել հղման միջոցով:
Այնուհետև մենք պետք է ստուգենք տվյալների բազան, որպեսզի ստուգենք, թե արդյոք ամեն ինչ ընթացել է այնպես, ինչպես սպասվում էր: Այնուհետև մենք կարող ենք վերլուծել տվյալների հավաքածուի որոշ նկարագրական վիճակագրություն, ինչպիսիք են կենտրոնական վիճակագրությունը և դիսպերսիան: Այս ամենը կարող ենք ամփոփել հետևյալում.

Այսօրվա համար մենք կփորձենք կանխատեսել ժամանակ փոփոխականը: Այս փոփոխականը իրադարձության ժամանակն է, որը կարող է լինել մահ կամ ոչ: Այսպիսով, ժամանակը այն ժամանակն է, որն անհրաժեշտ է մինչև այդ իրադարձությունը, լինի դա մահը, թե հետագա շրջանը:

Այսպիսով, մենք պետք է ավելի մանրամասն գնահատենք թիրախային փոփոխականը որոշ պատկերացումներով:

Դեպի իրադարձության ժամանակն ունի +- 110 միջին և 125 միջքառորդական: Այժմ հաճախականության գծապատկերը:

Մենք ունենք ժամանակի հաճախականության առնվազն երկու գագաթ՝ 90-ի և 210-ի շուրջ:

Հետագա ստուգման համար մենք գծեցինք տարիքն ընդդեմ ժամանակի: Նրանց միջև կա բացասական հարաբերակցություն (թեկուզ ցածր), ինչպես և սպասելի էր։ Հիմա իրադարձություն ընդդեմ ժամանակի:

Ինչպես և սպասվում էր, Իրադարձությունը ժամանակի արժեքի հիմնական տարբերակիչն է: Այսպիսով, բնական կլինի, որ փոփոխական իրադարձությունը մեծ ազդեցություն ունենա մեր մոդելի վրա: Այժմ մոդելների կիրառման համար տվյալները պատրաստելու համար մենք կպարտադրենք կոնկրետ տիպեր՝ մոդելների կողմից ավելի լավ մշակման համար: Լրացուցիչ տեղեկություններ scitypes-ի մասին այստեղ:

coerce!(dataset, Count=>MLJ.Continuous);

Մոդելների ստեղծում

Տվյալների պատրաստումը կարևոր է մոդելի ստեղծումը սկսելու համար, ուստի մենք տվյալները կբաժանենք թիրախի (y) և մնացած հատկանիշների (X)

Դրա համար մենք պատրաստվում ենք գնահատել ուսուցման տվյալների բազայի մոդելները կրկնակի խաչաձև վավերացմամբ, որպեսզի բավականին լավ պատկերացում կազմենք թեստային հավաքածուի վրա մոդելի կատարողականի մասին: Բոլոր մոդելների համար մենք պատրաստվում ենք.

  1. Բեռնման մոդել:
  2. Ստեղծեք մեքենան (որը նման է դասի օրինակին)
  3. Մարզում 3x 10 անգամ խաչաձև վավերացումով և վերադարձրեք գնահատման չափանիշը:
  4. Պահպանեք չափորոշիչները բառարանում՝ հետագա օգտագործման համար:

Այսպիսով, մենք պատրաստվում ենք օգտագործել գծային մոդել, որոշումների ծառ, k-մոտակա հարևաններ, պատահական անտառ և գրադիենտ խթան (սա կարելի է անել օղակի միջոցով, բայց լավ 😃): Սերմն օգտագործվում է կոդը վերարտադրելի դարձնելու համար (քանի որ RNG-ն օգտագործվում է խաչաձև վավերացման համար):

Արդյունքների գնահատում

Արդյունքների համար մենք պետք է հավաքենք բոլոր Արմատական ​​միջին քառակուսի սխալը, որը վերադարձվել է խաչաձև վավերացումներով և գնահատել վստահության միջակայքը (95%):

Գծային ռեգրեսիան, Random Forest-ը և GradientBoost-ը կարծես թե մի փոքր ավելի լավ են գործում, քան մյուս 2-ը: Այնուամենայնիվ, քանի որ գծային ռեգրեսիան ավելի լավ բացատրելիություն ունի, մենք դրանով գնում ենք որպես վերջնական մոդել:

MAE: 51.26912864372159 
RMSE: 59.80738088464344 
RMSP: 2.398347880392765 
MAPE: 0.9529914417765525
(coefs = [:age => -0.5600676786856139, :anaemia => -17.379451678818782, :creatinine_phosphokinase => -0.0024220637584861492, :diabetes => 5.5623104572596525, :ejection_fraction => -0.4719281676537811, :high_blood_pressure => -23.336061031579977, :platelets => -2.9328265873457684e-5, :serum_creatinine => 1.80232687559864, :serum_sodium => 0.06127126459720784, :sex => -3.8716177684193114, :smoking => -6.7752701233783705, :DEATH_EVENT => -86.69157019555797],  intercept = 226.6056333198319,)

Ինչպես ավելի վաղ հասկացանք, DEATH_EVENT փոփոխականը մեծ ազդեցություն ունի մոդելի վրա՝ -86 գործակցով:

Վերջնական մոդելի գնահատում

Մոդելը հարմարեցվել է տվյալներին և գնահատվել է թեստային հավաքածուի վրա, մենք գիտենք, թե որքան լավ է այն գործել, բայց մենք կարող ենք դա ավելի խորը ուսումնասիրել: Այն պետք է գնահատի թեստային հավաքածուի յուրաքանչյուր շարքի սխալները՝ դրանք ավելի մանրակրկիտ ստուգելու համար:

Սխալները պատահական են թվում և չեն հետևում որևէ օրինաչափության, ինչը լավ է:

Թեստային սխալը կարծես հետևում է նորմալ բաշխմանը, ինչը ցանկալի է:

Եզրակացություն

Այս գնահատումներով մենք մի փոքր ավելի վստահ ենք ասելու, որ մեր մոդելը հասկացել է տվյալների իրականությունը՝ ժամանակի փոփոխականը կանխատեսելու համար: Հետագա աշխատանք կարող է իրականացվել պարամետրերը կարգավորելու կամ մեր մոդելները բարելավելու համար փոփոխականներ ստեղծելու համար:

Հուսով եմ, որ սա օգտակար էր ձեզ թույլ տալու Ջուլիա Լանգի հետ ռեգրեսիայի առաջադրանք կատարել: