Logistická regresia PySpark

Logisticka Regresia Pyspark



V tejto príručke PySpark budeme diskutovať o tom, ako vykonať logistickú regresiu, aby sme predpovedali, či je osoba postihnutá mŕtvicou alebo nie. Vo všeobecnosti sa mŕtvica vyskytuje, keď je osoba závislá od fajčenia/pitia. Iné dôvody, ako sú srdcové choroby a vysoké hladiny glukózy v krvi (diabetes), tiež spôsobujú mŕtvicu. Pomocou modelu Logistic Regression Machine Learning predpovedáme a ukážeme presnosť nášho modelu na vzorových dátach.

V tejto príručke najprv uvidíme prístup a potom predpovedáme mozgovú príhodu každej osoby pomocou analýzy údajov krok za krokom.

Logistická regresia

Logistická regresia, nazývaná aj „Logit Model“, sa používa v prediktívnej analýze klasifikačných problémov. Toto je model strojového učenia, ktorý funguje iba na klasifikácii na klasifikáciu tried (kategórií). Napríklad v našom scenári existujú dve kategórie (osoba, ktorá je postihnutá mŕtvicou a osoba, ktorá nie je postihnutá mŕtvicou). Najlepšími aplikáciami modelu sú predpoveď srdcových chorôb, predpoveď pohlavia, predpoveď života plodín atď.







Kroky:

1. Zhromažďovanie údajov: Údaje sú potrebné na vykonanie akýchkoľvek predpovedí/analýz. Môže byť okrem iného vo forme CSV/XLSX. To môžeme načítať do prostredia Spark (DataFrame) pomocou metódy spark.read.csv().



2. Analýza údajov : Analýza atribútov/stĺpcov je známa ako „analýza údajov“. Stĺpce, ktoré pomáhajú predpovedať triedu, sú známe ako „nezávislé atribúty“. Stĺpec, ktorý vedie k predikcii, je známy ako „závislý alebo cieľový atribút“. V tomto scenári môžeme použiť vlastnosť columns na zobrazenie všetkých stĺpcov. Metóda different() sa používa na zobrazenie jedinečných hodnôt.



3. Predspracovanie údajov: Filtrovanie nulových/chýbajúcich hodnôt je známe ako „predspracovanie“. V tejto fáze odstránime všetky chýbajúce hodnoty. Stroj pozná iba binárny jazyk. Všetky kategórie reťazcov by sa teda mali previesť na číselné kategorické hodnoty. V PySpark môžeme použiť „StringIndexer“, čo je dostupná trieda v module pyspark.ml.feature na konverziu kategórií reťazcov na číselné. Automaticky ich interne konvertuje. Nemusíme poskytovať hodnoty. Môžete použiť nasledujúcu syntax:





indexer_data=StringIndexer(inputCol= 'String_Category_ColumnName' ,outputCol= 'New_Column_name' )

4. Zostavenie vektorov: Teraz máte údaje, ktorým stroj rozumie. V tejto fáze by mali byť všetky nezávislé atribúty vektorizované do jedného stĺpca. Dá sa to urobiť pomocou triedy VectorAssembler. Má dva parametre: Prvý parameter je inputCols, ktorý má zoznam nezávislých atribútov. Druhý parameter je outputCol, ktorý vektorizuje všetky inputCols do tejto premennej.

assembler=VectorAssembler(inputCols=[stĺpce…],outputCol=vektorizované_údaje)

5. Transformácia: Teraz pripravte svoje údaje transformáciou aktualizovaných stĺpcov (krok 3) pomocou funkcie transform().



assembler.transform(inxed_data)

6. Príprava údajov na školenie a testovanie: V tejto fáze rozdeľujeme údaje na „tréning“ a „testovanie“. Bude lepšie, ak rozdelíme 70 % údajov na trénovanie modelu a 30 % údajov na testovanie modelu. Dá sa to dosiahnuť pomocou metódy randomSplit(). Vyžaduje si zoznam, ktorý obsahuje dve plávajúce hodnoty: jednu pre testovacie rozdelenie a druhú pre vlakové rozdelenie.

train_data,test_data=final_data.select([ 'Vlastnosti' ,cieľový_stĺpec]).randomSplit([0.70.0.30])

7. Montáž a hodnotenie modelu : Je čas prispôsobiť sa modelu logistickej regresie. Model logistickej regresie je dostupný v module pyspark.ml.classification. Trvá to štítok triedy/cieľový stĺpec. Výsledkom sú stĺpce rawPrediction, pravdepodobnosti a predpovede. Naše výsledky sú uložené v stĺpci predikcie.

# Modelová montáž

logistic_regression_model=LogisticRegression(labelCol=cieľový_stĺpec).fit(údaje o vlaku)

# Hodnotenie modelu

train_results=logistic_regression_model.evaluate(train_data).predpovede

8. Presnosť a výsledky: Toto je posledná fáza, v ktorej testujeme presnosť modelu pomocou akýchkoľvek testovacích techník.

Pozrime sa na nasledujúci projekt, v ktorom pomocou modelu logistickej regresie predpovedáme, či je osoba postihnutá mozgovou príhodou alebo nie.

Predikcia mŕtvice

9. Nainštalujte modul PySpark do svojho prostredia. Nasleduje príkaz na inštaláciu:

pip install pyspark

10. Vytvorme PySpark DataFrame s 10 záznamami, ktoré súvisia s detailmi úderov 10 osôb. Pre demonštráciu vytvoríme DataFrame bez CSV. V tomto DataFrame je 7 stĺpcov. „Pohlavie“, „Hladina glukózy“, „ženatý“, „vek“, „choroba srdca“, „hyper_tenzia“ sú nezávislé atribúty a „mŕtvica“ je označenie triedy alebo závislý atribút. To znamená, že mŕtvica človeka závisí od týchto nezávislých atribútov.

importovať pyspark

z pyspark.sql importujte SparkSession

linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()

stoke_data =[

{ 'Rod' : 'Žena' , 'Vek' : päťdesiat , 'ochorenie srdca' : 'Áno' ,

'hyper_tension' : 'Áno' , 'ženatý' : 'Áno' , 'Glucose_level' : 130 , 'Mŕtvica' : 1 },

{ 'Rod' : 'Muž' , 'Vek' : dvadsať , 'ochorenie srdca' : 'nie' ,

'hyper_tension' : 'Áno' , 'ženatý' : 'nie' , 'Glucose_level' : 97 , 'Mŕtvica' : 0 },

{ 'Rod' : 'Muž' , 'Vek' : 12 , 'ochorenie srdca' : 'nie' ,

'hyper_tension' : 'nie' , 'ženatý' : 'nie' , 'Glucose_level' : 98 , 'Mŕtvica' : 0 },

{ 'Rod' : 'Žena' , 'Vek' : 90 , 'ochorenie srdca' : 'nie' ,

'hyper_tension' : 'nie' , 'ženatý' : 'Áno' , 'Glucose_level' : 170 , 'Mŕtvica' : 1 },

{ 'Rod' : 'Muž' , 'Vek' : 43 , 'ochorenie srdca' : 'Áno' ,

'hyper_tension' : 'Áno' , 'ženatý' : 'Áno' , 'Glucose_level' : 150 , 'Mŕtvica' : 1 },

{ 'Rod' : 'Žena' , 'Vek' : dvadsaťjeden , 'ochorenie srdca' : 'nie' ,

'hyper_tension' : 'nie' , 'ženatý' : 'Áno' , 'Glucose_level' : 110 , 'Mŕtvica' : 0 },

{ 'Rod' : 'Žena' , 'Vek' : päťdesiat , 'ochorenie srdca' : 'Áno' ,

'hyper_tension' : 'nie' , 'ženatý' : 'Áno' , 'Glucose_level' : 100 , 'Mŕtvica' : 0 },

{ 'Rod' : 'Muž' , 'Vek' : 3. 4 , 'ochorenie srdca' : 'nie' ,

'hyper_tension' : 'Áno' , 'ženatý' : 'Áno' , 'Glucose_level' : 190 , 'Mŕtvica' : 1 },

{ 'Rod' : 'Muž' , 'Vek' : 10 , 'ochorenie srdca' : 'nie' ,

'hyper_tension' : 'nie' , 'ženatý' : 'nie' , 'Glucose_level' : 90 , 'Mŕtvica' : 0 },

{ 'Rod' : 'Žena' , 'Vek' : 56 , 'ochorenie srdca' : 'Áno' ,

'hyper_tension' : 'Áno' , 'ženatý' : 'Áno' , 'Glucose_level' : 145 , 'Mŕtvica' : 1 }

]

# vytvorte dátový rámec z vyššie uvedených údajov

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# Skutočný stoke_df

stroke_df.show()

Výkon:

11. Zobrazte nezávislé stĺpce pomocou metódy select().

# Zobrazenie nezávislých atribútov

stroke_df.select(stroke_df[ 'Rod' ],stroke_df[ 'Hladina glukózy' ],stroke_df[ 'ženatý' ],stroke_df[ 'Vek' ],stroke_df[ 'ochorenie srdca' ],stroke_df[ 'hyper_tension' ]).šou()

Výkon:

12. Zobrazte jedinečné hodnoty, ktoré sú prítomné v cieľovom atribúte (Stroke).

# jedinečné hodnoty cieľového atribútu

stroke_df.select(stroke_df[ 'Mŕtvica' ]).distinct().show()

Výkon:

13. Vráťte typ údajov všetkých stĺpcov pomocou funkcie printSchema().

# Vráti dátový typ všetkých stĺpcov.

stroke_df.printSchema()

Výkon:

Vidíme, že 4 stĺpce sú typu reťazec. Preveďme ich na kategorické číselné hodnoty.

14. Skonvertujme kategorické hodnoty reťazca na číselné kategorické hodnoty pomocou StringIndexer v stĺpcoch „Gender“, „heart_disease“, „hyper_tension“ a „married“ a zapíšme ich do stĺpcov Categotical_Gender, Categotical_heart_disease, Categotical_hypertical_ried a Categotical_ried. Uložte stĺpce do dátového rámca indexed_data pomocou metódy fit().

z pyspark.ml.feature import StringIndexer

# Preveďte kategorické hodnoty reťazca na číselné kategorické hodnoty v stĺpci 'Pohlavie'.

indexer_data=StringIndexer(inputCol= 'Rod' ,outputCol= 'Categotical_Gender' )

indexed_data=indexer_data.fit(stroke_df).transform(stroke_df)

# Preveďte kategorické hodnoty reťazca na číselné kategorické hodnoty v stĺpci „choroba srdca“.

indexer_data=StringIndexer(inputCol= 'ochorenie srdca' ,outputCol= 'Categotical_heart_disease' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Preveďte kategorické hodnoty reťazca na číselné kategorické hodnoty v stĺpci 'hyper_tension'.

indexer_data=StringIndexer(inputCol= 'hyper_tension' ,outputCol= 'Categotical_hyper_tension' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Preveďte kategorické hodnoty reťazca na číselné kategorické hodnoty v stĺpci „ženatý“.

indexer_data=StringIndexer(inputCol= 'ženatý' ,outputCol= 'Categotical_married' )

indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)

# Zobrazte aktualizované

indexed_data.show()

Výkon:

15. Preveďte nezávislé stĺpce na vektor pomocou vektorového assembleru. Názov vektora je „vlastnosti“.

z pyspark.ml.feature import VectorAssembler

assembler= VectorAssembler(inputCols=[ 'Categotical_Gender' , 'Categotical_heart_disease' , 'Categotical_hyper_tension' , 'Categotical_married' , 'Vek' ,

'Glucose_level' ],outputCol= 'Vlastnosti' )

16. Transformujte predchádzajúce údaje na konečný DataFrame pomocou funkcie transform() a zobrazte ho pomocou funkcie show().

Výkon:

17. Pripravte údaje na tréning a testovanie tak, že ich rozdelíte na 70-30. „Features“ sú uložené v train_data a „Stroke“ je uložené v test_data.

# Pripravte údaje na školenie a testovanie

train_data,test_data=final.select([ 'Vlastnosti' , 'Mŕtvica' ]).randomSplit([ 0,70 , 0,30 ])

18. Nasaďte model logistickej regresie a vyhodnoťte ho.

z pyspark.ml.klasifikácia import LogisticRegression

# Modelová montáž

logistic_regression_model=LogisticRegression(labelCol= 'Mŕtvica' ).fit(údaje o_vlaku)

# Hodnotenie modelu

train_results=logistic_regression_model.evaluate(train_data).predpovede

train_results.show()

Výkon:

19. Na kontrolu presnosti modelu použite BinaryClassificationEvaluator. Vidíme, že náš model je 100% presný.

z pyspark.ml.evaluation import BinaryClassificationEvaluator

# zavolajte BinaryClassificationEvaluator

výsledky = BinaryClassificationEvaluator(rawPredictionCol= 'predpoveď' ,labelCol= 'Mŕtvica' )

ROC_AUC = results.evaluate(train_results)

tlač (ROC_AUC * 100 , '% Accuracy' )

Záver

Pomocou modelu logistickej regresie v PySpark ste schopní predpovedať problém klasifikácie v reálnom svete. Odstránenie nulových/chýbajúcich hodnôt je dôležité, pretože znižujú hodnotenie a presnosť modelu. Predspracovanie je nevyhnutným krokom pred nasadením akéhokoľvek modelu strojového učenia. Uistite sa, že tento krok robíte správne a presne.