ПиСпарк логистичка регресија

Pispark Logisticka Regresija



У овом ПиСпарк водичу ћемо разговарати о томе како извршити логистичку регресију да бисмо предвидели да ли је особа погођена можданим ударом или не. Генерално, мождани удар се јавља када је особа зависна од пушења/пића. Други разлози као што су болести срца и висок ниво глукозе у крви (дијабетес) такође узрокују мождани удар. Уз помоћ модела машинског учења логистичке регресије, предвидећемо и показати тачност нашег модела на узорку података.

У овом водичу ћемо прво видети приступ, а затим предвидети мождани удар сваке особе анализирајући податке корак по корак.

Логистичка регресија

Логистичка регресија, такође названа “Логит модел”, користи се у предиктивној аналитици за проблеме класификације. Ово је модел машинског учења који ради само на класификацији да би класификовао класе (категорије). На пример, у нашем сценарију постоје две категорије (особа која је погођена можданим ударом и особа која није погођена можданим ударом). Најбоље примене модела су предвиђање срчаних болести, предвиђање пола, предвиђање живота усева итд.







Кораци:

1. Прикупљање података: Подаци су неопходни за обављање било каквог предвиђања/анализе. Може бити у облику ЦСВ/КСЛСКС, између осталог. Ово можемо учитати у Спарк окружење (ДатаФраме) користећи методу спарк.реад.цсв().



2. Анализа података : Анализа атрибута/колона је позната као „анализа података“. Колоне које помажу у предвиђању класе познате су као „независни атрибути“. Колона која резултира предвиђањем је позната као „зависни или циљни атрибут“. У овом сценарију, можемо користити својство цолумнс да прикажемо све колоне. Метода дифферент() се користи да би се виделе јединствене вредности.



3. Претходна обрада података: Филтрирање нултих/недостајућих вредности је познато као „претходна обрада“. У овој фази уклањамо све вредности које недостају. Машина познаје само бинарни језик. Дакле, све категорије стрингова треба да се конвертују у нумеричке категоричке вредности. У ПиСпарк-у можемо да користимо „СтрингИндекер“ који је доступна класа у модулу писпарк.мл.феатуре да претворимо категорије стрингова у нумеричке. Аутоматски их интерно конвертује. Не морамо да пружамо вредности. Можете користити следећу синтаксу:





индекер_дата=СтрингИндекер(инпутЦол= „Стринг_Цатегори_ЦолумнНаме“ ,оутпутЦол= 'Нев_Цолумн_наме' )

4. Састављање вектора: Сада имате податке које машина може да разуме. У овој фази, сви независни атрибути треба да буду векторизовани у једну колону. Ово се може урадити помоћу класе ВецторАссемблер. Потребна су два параметра: Први параметар је инпутЦолс који узима листу независних атрибута. Други параметар је оутпутЦол који векторизује све инпутЦол-ове у ову променљиву.

асемблер=ВецторАссемблер(инпутЦолс=[колоне…],оутпутЦол=векторизовани_подаци)

5. Трансформација: Сада припремите своје податке тако што ћете трансформисати ажуриране колоне (корак 3) помоћу функције трансформ().



асемблер.трансформ(инкед_дата)

6. Припрема података за обуку и тестирање: У овој фази делимо податке на „обуку“ и „тестирање“. Биће боље ако поделимо 70% података за обуку модела и 30% података за тестирање модела. Ово се може постићи коришћењем методе рандомСплит(). Потребна је листа која садржи две флоат вредности: једну за пробну поделу и другу за поделу воза.

траин_дата,тест_дата=финал_дата.селецт([ 'Карактеристике' ,таргет_цолумн]).рандомСплит([0.70.0.30])

7. Прилагођавање модела и евалуација : Време је да се уклопи у модел логистичке регресије. Модел логистичке регресије доступан је у модулу писпарк.мл.цлассифицатион. Заузима ознаку класе/циљ колону. Ово резултира колонама равПредицтион, вероватноће и предвиђања. Наши резултати се чувају у колони предвиђања.

# Уградња модела

логистиц_регрессион_модел=ЛогистицРегрессион(лабелЦол=таргет_цолумн).фит(траин_дата)

# Евалуација модела

траин_ресултс=логистиц_регрессион_модел.евалуате(траин_дата).предицтионс

8. Тачност и резултати: Ово је последња фаза у којој тестирамо тачност модела коришћењем било које технике тестирања.

Погледајмо следећи пројекат где предвиђамо да ли је особа погођена можданим ударом или не користећи модел логистичке регресије.

Предвиђање можданог удара

9. Инсталирајте ПиСпарк модул у своје окружење. Следећа је команда за инсталирање:

пип инсталл писпарк

10. Хајде да направимо ПиСпарк ДатаФраме са 10 записа који се односе на детаље потеза 10 особа. За демонстрацију, креирамо ДатаФраме без ЦСВ-а. У овом ДатаФраме-у постоји 7 колона. „Пол“, „Ниво_глукозе“, „ожењен“, „старост“, „болест срца“, „хипер_тензија“ су независни атрибути, а „Мождани удар“ је ознака класе или зависни атрибут. То значи да мождани удар особе зависи од ових независних атрибута.

импорт писпарк

из писпарк.скл импорт СпаркСессион

линукхинт_спарк_апп = СпаркСессион.буилдер.аппНаме( 'Линук савет' ).гетОрЦреате()

стоке_дата =[

{ 'пол' : 'Женско' , 'старост' : педесет , 'болест срца' : 'Да' ,

'хипер_тенсион' : 'Да' , 'ожењен' : 'Да' , 'ниво_глукозе' : 130 , 'Удар' : 1 },

{ 'пол' : 'Мушки' , 'старост' : двадесет , 'болест срца' : 'Не' ,

'хипер_тенсион' : 'Да' , 'ожењен' : 'Не' , 'ниво_глукозе' : 97 , 'Удар' : 0 },

{ 'пол' : 'Мушки' , 'старост' : 12 , 'болест срца' : 'Не' ,

'хипер_тенсион' : 'Не' , 'ожењен' : 'Не' , 'ниво_глукозе' : 98 , 'Удар' : 0 },

{ 'пол' : 'Женско' , 'старост' : 90 , 'болест срца' : 'Не' ,

'хипер_тенсион' : 'Не' , 'ожењен' : 'Да' , 'ниво_глукозе' : 170 , 'Удар' : 1 },

{ 'пол' : 'Мушки' , 'старост' : 43 , 'болест срца' : 'Да' ,

'хипер_тенсион' : 'Да' , 'ожењен' : 'Да' , 'ниво_глукозе' : 150 , 'Удар' : 1 },

{ 'пол' : 'Женско' , 'старост' : двадесет један , 'болест срца' : 'Не' ,

'хипер_тенсион' : 'Не' , 'ожењен' : 'Да' , 'ниво_глукозе' : 110 , 'Удар' : 0 },

{ 'пол' : 'Женско' , 'старост' : педесет , 'болест срца' : 'Да' ,

'хипер_тенсион' : 'Не' , 'ожењен' : 'Да' , 'ниво_глукозе' : 100 , 'Удар' : 0 },

{ 'пол' : 'Мушки' , 'старост' : 3. 4 , 'болест срца' : 'Не' ,

'хипер_тенсион' : 'Да' , 'ожењен' : 'Да' , 'ниво_глукозе' : 190 , 'Удар' : 1 },

{ 'пол' : 'Мушки' , 'старост' : 10 , 'болест срца' : 'Не' ,

'хипер_тенсион' : 'Не' , 'ожењен' : 'Не' , 'ниво_глукозе' : 90 , 'Удар' : 0 },

{ 'пол' : 'Женско' , 'старост' : 56 , 'болест срца' : 'Да' ,

'хипер_тенсион' : 'Да' , 'ожењен' : 'Да' , 'ниво_глукозе' : 145 , 'Удар' : 1 }

]

# креирајте оквир података од горњих података

строке_дф = линукхинт_спарк_апп.цреатеДатаФраме(стоке_дата)

# Стварни стоке_дф

строке_дф.схов()

Излаз:

11. Прикажите независне колоне користећи метод селецт().

# Прикажи независне атрибуте

строке_дф.селецт(строке_дф[ 'пол' ],строке_дф[ 'ниво_глукозе' ],строке_дф[ 'ожењен' ],строке_дф[ 'старост' ],строке_дф[ 'болест срца' ],строке_дф[ 'хипер_тенсион' ]).Прикажи()

Излаз:

12. Прикажите јединствене вредности које су присутне у циљном атрибуту (Строке).

# јединствене вредности циљног атрибута

строке_дф.селецт(строке_дф[ 'Удар' ]).различит().схов()

Излаз:

13. Вратите тип података свих колона помоћу функције принтСцхема().

# Врати тип података свих колона.

строке_дф.принтСцхема()

Излаз:

Видимо да су 4 колоне стринг типа. Хајде да их претворимо у категоричке нумеричке вредности.

14. Хајде да конвертујемо стрингове категоричке вредности у нумеричке категоричке вредности користећи СтрингИндекер у колонама „Гендер“, „хеарт_дисеасе“, „хипер_тенсион“ и „марриед“ и упишемо их у Цатеготицал_Гендер, Цатеготицал_хеарт_дисеасе, Цатеготицал_хипер_тго колоне. Сачувајте колоне у индекед_дата ДатаФраме користећи фит() метод.

из писпарк.мл.феатуре импорт СтрингИндекер

# Конвертујте стринг категоричке вредности у нумеричке категоричке вредности у колони „Пол“.

индекер_дата=СтрингИндекер(инпутЦол= 'пол' ,оутпутЦол= 'Категотички_пол' )

индекед_дата=индекер_дата.фит(строке_дф).трансформ(строке_дф)

# Претворите стринг категоричке вредности у нумеричке категоричке вредности у колони 'хеарт_дисеасе'.

индекер_дата=СтрингИндекер(инпутЦол= 'болест срца' ,оутпутЦол= 'Цатеготицал_хеарт_дисеасе' )

индекед_дата=индекер_дата.фит(индекед_дата).трансформ(индекед_дата)

# Конвертујте стринг категоричке вредности у нумеричке категоричке вредности у колони 'хипер_тенсион'.

индекер_дата=СтрингИндекер(инпутЦол= 'хипер_тенсион' ,оутпутЦол= 'Цатеготицал_хипер_тенсион' )

индекед_дата=индекер_дата.фит(индекед_дата).трансформ(индекед_дата)

# Конвертујте стринг категоричке вредности у нумеричке категоричке вредности у колони „ожењен“.

индекер_дата=СтрингИндекер(инпутЦол= 'ожењен' ,оутпутЦол= 'Категотички_у браку' )

индекед_дата=индекер_дата.фит(индекед_дата).трансформ(индекед_дата)

# Прикажите ажурирано

индекед_дата.схов()

Излаз:

15. Конвертујте независне колоне у вектор користећи векторски асемблер. Назив вектора је „феатурес“.

из писпарк.мл.феатуре импорт ВецторАссемблер

асемблер= ВецторАссемблер(инпутЦолс=[ 'Категотички_пол' , 'Цатеготицал_хеарт_дисеасе' , 'Цатеготицал_хипер_тенсион' , 'Категотички_у браку' , 'старост' ,

'ниво_глукозе' ],оутпутЦол= 'Карактеристике' )

16. Трансформирајте претходне податке у коначни ДатаФраме помоћу функције трансформ() и прикажите их помоћу функције схов().

Излаз:

17. Припремите податке за обуку и тестирање тако што ћете их поделити на 70-30. „Карактеристике“ се чувају у траин_дата, а „Строке“ се чува у тест_дата.

# Припремите податке за обуку и тестирање

траин_дата,тест_дата=финал.селецт([ 'Карактеристике' , 'Удар' ]).рандомСплит([ 0,70 , 0,30 ])

18. Прилагодите модел логистичке регресије и процените га.

из писпарк.мл.цлассифицатион импорт ЛогистицРегрессион

# Уградња модела

логистиц_регрессион_модел=ЛогистицРегрессион(лабелЦол= 'Удар' ).фит(подаци_воза)

# Евалуација модела

траин_ресултс=логистиц_регрессион_модел.евалуате(траин_дата).предицтионс

траин_ресултс.схов()

Излаз:

19. Користите БинариЦлассифицатионЕвалуатор да проверите тачност модела. Видимо да је наш модел 100% тачан.

из писпарк.мл.евалуатион импорт БинариЦлассифицатионЕвалуатор

# позовите БинариЦлассифицатионЕвалуатор

резултати = БинариЦлассифицатионЕвалуатор(равПредицтионЦол= 'предвиђање' ,лабелЦол= 'Удар' )

РОЦ_АУЦ = ресултс.евалуате(траин_ресултс)

штампа (РОЦ_АУЦ * 100 , '% тачности' )

Закључак

У могућности сте да предвидите проблем класификације стварних плочица користећи модел логистичке регресије у ПиСпарк-у. Уклањање нултих/недостајућих вредности је важно јер смањују процену и тачност модела. Претходна обрада је неопходан корак пре прилагођавања било ког модела машинског учења. Уверите се да сте овај корак урадили исправно и тачно.