PySparki logistiline regressioon

Pysparki Logistiline Regressioon



Selles PySparki juhendis arutame, kuidas teha logistilist regressiooni, et ennustada, kas inimest mõjutab insult või mitte. Üldiselt tekib insult siis, kui inimene on suitsetamisest/joomisest sõltuvuses. Insulti põhjustavad ka muud põhjused, nagu südamehaigused ja kõrge vere glükoosisisaldus (diabeet). Logistilise regressiooni masinõppe mudeli abil ennustame ja näitame näidisandmetel oma mudeli täpsust.

Selles juhendis näeme esmalt lähenemist ja seejärel ennustame iga inimese insulti, analüüsides andmeid samm-sammult.

Logistiline regressioon

Logistilist regressiooni, mida nimetatakse ka 'Logiti mudeliks', kasutatakse klassifitseerimisprobleemide ennustavas analüütikas. See on masinõppemudel, mis töötab ainult klassifitseerimisel klasside (kategooriate) klassifitseerimiseks. Näiteks on meie stsenaariumis kaks kategooriat (inimene, kellel on insult, ja isik, keda insult ei mõjuta). Mudeli parimad rakendused on südamehaiguste ennustamine, soo ennustamine, põllukultuuride eluea prognoosimine jne.







Sammud:

1. Andmete kogumine: Andmed on vajalikud prognooside/analüüside tegemiseks. See võib muu hulgas olla CSV/XLSX-vormingus. Saame selle laadida Sparki keskkonda (DataFrame), kasutades meetodit spark.read.csv().



2. Andmete analüüs : atribuutide/veergude analüüsimist nimetatakse andmeanalüüsiks. Veerge, mis aitavad klassi ennustada, nimetatakse 'sõltumatuteks atribuutideks'. Veerg, mis annab ennustuse, on tuntud kui 'sõltuv või sihtatribuut'. Selle stsenaariumi korral saame kõigi veergude kuvamiseks kasutada atribuuti veerud. Unikaalsete väärtuste nägemiseks kasutatakse meetodit different().



3. Andmete eeltöötlus: Null-/puuduvate väärtuste filtreerimist nimetatakse 'eeltöötluseks'. Selles etapis eemaldame kõik puuduvad väärtused. Masin teab ainult kahendkeelt. Seega tuleks kõik stringikategooriad teisendada numbrilisteks kategooriaväärtusteks. PySparkis saame stringikategooriate numbrilisteks teisendamiseks kasutada moodulis pyspark.ml.feature saadaolevat klassi StringIndexer. See teisendab need automaatselt sisemiselt. Me ei pea väärtusi pakkuma. Võite kasutada järgmist süntaksit:





indexer_data=StringIndexer(inputCol= 'String_kategooria_veeru nimi' ,outputCol= 'Uus_veeru_nimi' )

4. Vektori kokkupanek: Nüüd on teil andmed, millest masin aru saab. Selles etapis tuleks kõik sõltumatud atribuudid vektoriseerida ühte veergu. Seda saab teha VectorAssembleri klassi abil. Selleks on vaja kahte parameetrit: esimene parameeter on inputCols, mis võtab sõltumatute atribuutide loendi. Teine parameeter on outputCol, mis vektoriseerib kõik inputCols sellesse muutujasse.

assembler=VectorAssembler(inputCols=[veerud…],outputCol=vectorized_data)

5. Ümberkujundamine: Nüüd valmistage oma andmed ette, teisendades värskendatud veerud (samm 3), kasutades funktsiooni transform().



assembler.transform(inxed_data)

6. Andmete ettevalmistamine koolituseks ja testimiseks: Selles etapis jagame andmed 'koolituseks' ja 'testimiseks'. Parem on, kui jagame mudeli koolitamiseks 70% andmeid ja mudeli testimiseks 30% andmeid. Seda saab saavutada randomSplit() meetodi abil. Selleks on vaja loendit, mis sisaldab kahte ujuväärtust: üks katsejaotuse jaoks ja teine ​​​​rongi jaotuse jaoks.

train_data,test_data=final_data.select([ 'Funktsioonid' ,target_column]).randomSplit([0.70.0.30])

7. Mudeli sobitamine ja hindamine : On aeg sobitada logistilise regressiooni mudeliga. Logistilise regressiooni mudel on saadaval pyspark.ml.classification moodulis. See võtab klassi sildi / sihtveergu. Selle tulemuseks on toorennustuse, tõenäosuse ja ennustuse veerud. Meie tulemused salvestatakse ennustusveergu.

# Mudeli sobitamine

logistic_regression_model=LogisticRegression(labelCol=target_column).fit(train_data)

# Mudeli hindamine

train_results=logistic_regression_model.evaluate(train_data).predictions

8. Täpsus ja tulemused: See on viimane etapp, kus testime mudeli täpsust mis tahes testimistehnikate abil.

Vaatame järgmist projekti, kus ennustame logistilise regressiooni mudeli abil, kas inimesel on insult või mitte.

Insuldi ennustamine

9. Installige PySparki moodul oma keskkonda. Installimiseks on järgmine käsk:

pip install pyspark

10. Loome PySpark DataFrame 10 kirjega, mis on seotud 10 inimese insuldi üksikasjadega. Demonstreerimiseks loome ilma CSV-ta DataFrame'i. Selles DataFrame'is on 7 veergu. 'Sugu', 'Glükoosi_tase', 'abielus', 'vanus', 'südamehaigus', 'hüpertensioon' on sõltumatud atribuudid ja 'Stroke' on klassi silt või sõltuv atribuut. See tähendab, et inimese insult sõltub nendest sõltumatutest omadustest.

import pyspark

pyspark.sql-st importige SparkSession

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

stoke_data =[

{ 'Sugu' : 'Naine' , 'vanus' : viiskümmend , 'südamehaigus' : 'jah' ,

'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 130 , 'rabandus' : 1 },

{ 'Sugu' : 'mees' , 'vanus' : kakskümmend , 'südamehaigus' : 'ei' ,

'hüpertensioon' : 'jah' , 'abielus' : 'ei' , 'Glükoosi_tase' : 97 , 'rabandus' : 0 },

{ 'Sugu' : 'mees' , 'vanus' : 12 , 'südamehaigus' : 'ei' ,

'hüpertensioon' : 'ei' , 'abielus' : 'ei' , 'Glükoosi_tase' : 98 , 'rabandus' : 0 },

{ 'Sugu' : 'Naine' , 'vanus' : 90 , 'südamehaigus' : 'ei' ,

'hüpertensioon' : 'ei' , 'abielus' : 'jah' , 'Glükoosi_tase' : 170 , 'rabandus' : 1 },

{ 'Sugu' : 'mees' , 'vanus' : 43 , 'südamehaigus' : 'jah' ,

'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 150 , 'rabandus' : 1 },

{ 'Sugu' : 'Naine' , 'vanus' : kakskümmend üks , 'südamehaigus' : 'ei' ,

'hüpertensioon' : 'ei' , 'abielus' : 'jah' , 'Glükoosi_tase' : 110 , 'rabandus' : 0 },

{ 'Sugu' : 'Naine' , 'vanus' : viiskümmend , 'südamehaigus' : 'jah' ,

'hüpertensioon' : 'ei' , 'abielus' : 'jah' , 'Glükoosi_tase' : 100 , 'rabandus' : 0 },

{ 'Sugu' : 'mees' , 'vanus' : 3. 4 , 'südamehaigus' : 'ei' ,

'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 190 , 'rabandus' : 1 },

{ 'Sugu' : 'mees' , 'vanus' : 10 , 'südamehaigus' : 'ei' ,

'hüpertensioon' : 'ei' , 'abielus' : 'ei' , 'Glükoosi_tase' : 90 , 'rabandus' : 0 },

{ 'Sugu' : 'Naine' , 'vanus' : 56 , 'südamehaigus' : 'jah' ,

'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 145 , 'rabandus' : 1 }

]

# looge ülaltoodud andmetest andmeraam

insult_df = linuxhint_spark_app.createDataFrame(stoke_data)

# Tegelik stoke_df

insult_df.show()

Väljund:

11. Kuvage sõltumatud veerud meetodi select() abil.

# Kuva sõltumatud atribuudid

insult_df.select(stroke_df[ 'Sugu' ],stroke_df[ 'Glükoosi_tase' ],stroke_df[ 'abielus' ],stroke_df[ 'vanus' ],stroke_df[ 'südamehaigus' ],stroke_df[ 'hüpertensioon' ]).show()

Väljund:

12. Kuvage unikaalsed väärtused, mis sisalduvad sihtatribuudis (Stroke).

# sihtatribuudi kordumatud väärtused

insult_df.select(stroke_df[ 'Insult' ]).distinct().show()

Väljund:

13. Tagasta kõigi veergude andmetüübid, kasutades funktsiooni printSchema().

# Tagastab kõigi veergude andmetüübi.

insult_df.printSchema()

Väljund:

Näeme, et 4 veergu on stringi tüüpi. Teisendame need kategoorilisteks arvväärtusteks.

14. Teisendame stringi kategooria väärtused numbrilisteks kategooriaväärtusteks, kasutades StringIndexerit veergudes 'Sugu', 'südamehaigus', 'hüpertension' ja 'abielus' ning kirjutame need veergudesse Kategootiline_sugu, Kategootiline_südamehaigus, Kategootiline_südamehaigus, Categotical_hyperedtical. Salvestage veerud kataloogi indexed_data DataFrame, kasutades meetodit fit().

pyspark.ml.feature impordi StringIndexerist

# Teisendage stringi kategooria väärtused veerus 'Sugu' numbrilisteks kategooriaväärtusteks.

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

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

# Teisendage stringi kategooria väärtused numbrilisteks kategooriaväärtusteks veerus 'heart_disease'.

indexer_data=StringIndexer(inputCol= 'südamehaigus' ,outputCol= 'Kategootiline_südamehaigus' )

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

# Teisendage stringi kategooria väärtused numbrilisteks kategooriaväärtusteks veerus 'hyper_tension'.

indexer_data=StringIndexer(inputCol= 'hüpertensioon' ,outputCol= 'Categotical_hyper_tension' )

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

# Teisendage stringi kategooria väärtused numbrilisteks kategooriaväärtusteks veerus 'abielus'.

indexer_data=StringIndexer(inputCol= 'abielus' ,outputCol= 'Categotical_married' )

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

# Kuvage värskendatud

indexed_data.show()

Väljund:

15. Teisendage sõltumatud veerud vektoriks, kasutades vektori kokkupanijat. Vektori nimi on 'omadused'.

pyspark.ml.feature importimisest VectorAssembler

assembler= VectorAssembler(inputCols=[ 'Categotical_Gender' , 'Kategootiline_südamehaigus' , 'Categotical_hyper_tension' , 'Categotical_married' , 'vanus' ,

'Glükoosi_tase' ],väljundVool= 'Funktsioonid' )

16. Teisendage eelmised andmed lõplikuks DataFrame'iks, kasutades funktsiooni transform() ja kuvage need funktsiooni show() abil.

Väljund:

17. Valmistage andmed ette koolituseks ja testimiseks, jagades need 70-30-ks. Funktsioonid salvestatakse kaustas train_data ja Stroke kaustas test_data.

# Valmistage andmed ette koolituseks ja testimiseks

train_data,test_data=final.select([ 'Funktsioonid' , 'rabandus' ]).randomSplit([ 0,70 , 0.30 ])

18. Paigaldage logistilise regressiooni mudel ja hinnake seda.

pyspark.ml.classification import LogisticRegression

# Mudeli sobitamine

logistic_regression_model=Logistiline regressioon(labelCol= 'rabandus' ).fit(train_data)

# Mudeli hindamine

train_results=logistic_regression_model.evaluate(train_data).predictions

train_results.show()

Väljund:

19. Mudeli täpsuse kontrollimiseks kasutage BinaryClassificationEvaluatorit. Näeme, et meie mudel on 100% täpne.

pyspark.ml.evaluation import BinaryClassificationEvaluator

# helistage BinaryClassificationEvaluatorile

tulemused = BinaryClassificationEvaluator(rawPredictionCol= 'ennustus' ,labelCol= 'rabandus' )

ROC_AUC = tulemused.evaluate(treeni_tulemused)

print(ROC_AUC * 100 , '% täpsus' )

Järeldus

PySparki logistilise regressiooni mudeli abil saate ennustada reaalse plaadi klassifitseerimisprobleemi. Null-/puuduvate väärtuste eemaldamine on oluline, kuna need vähendavad mudeli hindamist ja täpsust. Eeltöötlus on vajalik samm enne mis tahes masinõppemudeli sobitamist. Veenduge, et teete seda sammu õigesti ja täpselt.