Ողջույն, իմ վերջին գրառում-ում ես ցույց տվեցի, թե ինչպես կարելի է Ջուլիային օգտագործել դասակարգման առաջադրանք կատարելու համար: Այդ դեպքում մենք հիվանդներին դասակարգում էինք երկու կատեգորիայի, ուստի դա դասակարգում էր, որը մեթոդ է կանխատեսելու, կռահեցիք, կատեգորիկ ելքը։ Բայց հիմա մենք պատրաստվում ենք ռեգրեսիա անել, որտեղ արդյունքի փոփոխականը շարունակական է:
Ասված է, եկեք փորձենք ստեղծել մի մոդել, որը կարող է կանխատեսել իրադարձությունների ժամանակը: Թեև դա կարող է տարբեր կերպ վարվել, այդ նպատակով մենք պատրաստվում ենք այս արդյունքի կանխատեսումը վերաբերվել որպես պարզ շարունակական փոփոխականի:
Տվյալների հավաքածուն հասանելի է այստեղ: Այս ձեռնարկի համար մեզ անհրաժեշտ կլինեն մի քանի փաթեթներ: Դրանք օգտագործելու համար ստուգեք ստորև նշված կոդը:
Եթե դուք չունեք տեղադրված փաթեթներ, գործարկեք
using Pkg; Pkd.add(“<PackageName>")
Տվյալների բեռնում և ստուգում
Տվյալների հավաքածուն ձեր միջավայրում բեռնելու համար մենք կարող ենք դա անել հղման միջոցով:
Այնուհետև մենք պետք է ստուգենք տվյալների բազան, որպեսզի ստուգենք, թե արդյոք ամեն ինչ ընթացել է այնպես, ինչպես սպասվում էր: Այնուհետև մենք կարող ենք վերլուծել տվյալների հավաքածուի որոշ նկարագրական վիճակագրություն, ինչպիսիք են կենտրոնական վիճակագրությունը և դիսպերսիան: Այս ամենը կարող ենք ամփոփել հետևյալում.
Այսօրվա համար մենք կփորձենք կանխատեսել ժամանակ փոփոխականը: Այս փոփոխականը իրադարձության ժամանակն է, որը կարող է լինել մահ կամ ոչ: Այսպիսով, ժամանակը այն ժամանակն է, որն անհրաժեշտ է մինչև այդ իրադարձությունը, լինի դա մահը, թե հետագա շրջանը:
Այսպիսով, մենք պետք է ավելի մանրամասն գնահատենք թիրախային փոփոխականը որոշ պատկերացումներով:
Դեպի իրադարձության ժամանակն ունի +- 110 միջին և 125 միջքառորդական: Այժմ հաճախականության գծապատկերը:
Մենք ունենք ժամանակի հաճախականության առնվազն երկու գագաթ՝ 90-ի և 210-ի շուրջ:
Հետագա ստուգման համար մենք գծեցինք տարիքն ընդդեմ ժամանակի: Նրանց միջև կա բացասական հարաբերակցություն (թեկուզ ցածր), ինչպես և սպասելի էր։ Հիմա իրադարձություն ընդդեմ ժամանակի:
Ինչպես և սպասվում էր, Իրադարձությունը ժամանակի արժեքի հիմնական տարբերակիչն է: Այսպիսով, բնական կլինի, որ փոփոխական իրադարձությունը մեծ ազդեցություն ունենա մեր մոդելի վրա: Այժմ մոդելների կիրառման համար տվյալները պատրաստելու համար մենք կպարտադրենք կոնկրետ տիպեր՝ մոդելների կողմից ավելի լավ մշակման համար: Լրացուցիչ տեղեկություններ scitypes-ի մասին այստեղ:
coerce!(dataset, Count=>MLJ.Continuous);
Մոդելների ստեղծում
Տվյալների պատրաստումը կարևոր է մոդելի ստեղծումը սկսելու համար, ուստի մենք տվյալները կբաժանենք թիրախի (y) և մնացած հատկանիշների (X)
Դրա համար մենք պատրաստվում ենք գնահատել ուսուցման տվյալների բազայի մոդելները կրկնակի խաչաձև վավերացմամբ, որպեսզի բավականին լավ պատկերացում կազմենք թեստային հավաքածուի վրա մոդելի կատարողականի մասին: Բոլոր մոդելների համար մենք պատրաստվում ենք.
- Բեռնման մոդել:
- Ստեղծեք մեքենան (որը նման է դասի օրինակին)
- Մարզում 3x 10 անգամ խաչաձև վավերացումով և վերադարձրեք գնահատման չափանիշը:
- Պահպանեք չափորոշիչները բառարանում՝ հետագա օգտագործման համար:
Այսպիսով, մենք պատրաստվում ենք օգտագործել գծային մոդել, որոշումների ծառ, 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 գործակցով:
Վերջնական մոդելի գնահատում
Մոդելը հարմարեցվել է տվյալներին և գնահատվել է թեստային հավաքածուի վրա, մենք գիտենք, թե որքան լավ է այն գործել, բայց մենք կարող ենք դա ավելի խորը ուսումնասիրել: Այն պետք է գնահատի թեստային հավաքածուի յուրաքանչյուր շարքի սխալները՝ դրանք ավելի մանրակրկիտ ստուգելու համար:
Սխալները պատահական են թվում և չեն հետևում որևէ օրինաչափության, ինչը լավ է:
Թեստային սխալը կարծես հետևում է նորմալ բաշխմանը, ինչը ցանկալի է:
Եզրակացություն
Այս գնահատումներով մենք մի փոքր ավելի վստահ ենք ասելու, որ մեր մոդելը հասկացել է տվյալների իրականությունը՝ ժամանակի փոփոխականը կանխատեսելու համար: Հետագա աշխատանք կարող է իրականացվել պարամետրերը կարգավորելու կամ մեր մոդելները բարելավելու համար փոփոխականներ ստեղծելու համար:
Հուսով եմ, որ սա օգտակար էր ձեզ թույլ տալու Ջուլիա Լանգի հետ ռեգրեսիայի առաջադրանք կատարել: