Regresia logistică PySpark

Regresia Logistica Pyspark



În acest ghid PySpark, vom discuta cum să efectuăm regresia logistică pentru a prezice dacă o persoană este afectată de un accident vascular cerebral sau nu. În general, accidentul vascular cerebral apare atunci când o persoană este dependentă de fumat/băutură. Alte motive, cum ar fi bolile de inimă și nivelurile ridicate de glucoză din sânge (diabetul), cauzează, de asemenea, accident vascular cerebral. Cu ajutorul modelului de învățare automată a regresiei logistice, vom prezice și vom arăta acuratețea modelului nostru pe datele eșantionului.

În acest ghid, vom vedea mai întâi abordarea și apoi vom prezice accidentul vascular cerebral al fiecărei persoane analizând datele pas cu pas.

Regresie logistică

Regresia logistică, numită și „Modelul Logit”, este folosită în analiza predictivă pentru problemele de clasificare. Acesta este un model de învățare automată care funcționează numai pe clasificare pentru a clasifica clasele (categorii). De exemplu, există două categorii în scenariul nostru (o persoană care este afectată de un accident vascular cerebral și o persoană care nu este afectată de un accident vascular cerebral). Cele mai bune aplicații ale modelului sunt predicția bolilor de inimă, predicția genului, predicția vieții culturilor etc.







Pași:

1. Colectarea datelor: Datele sunt necesare pentru a efectua orice predicții/analize. Poate fi sub formă de CSV/XLSX, printre altele. Putem încărca acest lucru în mediul Spark (DataFrame) folosind metoda spark.read.csv().



2. Analiza datelor : Analiza atributelor/coloanelor este cunoscută sub denumirea de „analiza datelor”. Coloanele care ajută la prezicerea clasei sunt cunoscute ca „atribute independente”. Coloana care are ca rezultat predicție este cunoscută ca „atribut dependent sau țintă”. În acest scenariu, putem folosi proprietatea coloane pentru a afișa toate coloanele. Metoda distinct() este folosită pentru a vedea valorile unice.



3. Preprocesarea datelor: Filtrarea valorilor nule/lipsă este cunoscută sub denumirea de „preprocesare”. Eliminam toate valorile lipsa in aceasta etapa. Mașina știe doar limbajul binar. Deci, toate categoriile de șiruri de caractere ar trebui convertite în valori numerice categoriale. În PySpark, putem folosi „StringIndexer”, care este clasa disponibilă în modulul pyspark.ml.feature pentru a converti categoriile de șiruri în numere. Le convertește automat în interior. Nu trebuie să oferim valorile. Puteți utiliza următoarea sintaxă:





indexer_data=StringIndexer(inputCol= „String_Category_ColumnName” ,outputCol= „New_Column_name” )

4. Asamblarea vectorului: Acum, aveți datele pe care mașina le poate înțelege. În această etapă, toate atributele independente ar trebui să fie vectorizate într-o singură coloană. Acest lucru se poate face folosind clasa VectorAssembler. Este nevoie de doi parametri: Primul parametru este inputCols care preia o listă de atribute independente. Al doilea parametru este outputCol care vectorizează toate inputCols în această variabilă.

assembler=VectorAssembler(inputCols=[coloane…],outputCol=date_vectorizate)

5. Transformare: Acum, pregătiți-vă datele transformând coloanele actualizate (Pasul 3) folosind funcția transform().



assembler.transform(inxed_data)

6. Pregătirea datelor pentru instruire și testare: În această etapă, împărțim datele în „antrenament” și „testare”. Va fi mai bine dacă împărțim datele 70% pentru a antrena modelul și 30% date pentru a testa modelul. Acest lucru poate fi realizat folosind metoda randomSplit(). Este nevoie de o listă care conține două valori flotante: una pentru împărțirea testului și alta pentru împărțirea trenului.

train_data,test_data=final_data.select([ 'Caracteristici' ,coloana_țintă]).randomSplit([0.70.0.30])

7. Ajustarea și evaluarea modelului : Este timpul să se potrivească modelului de regresie logistică. Modelul de regresie logistică este disponibil în modulul pyspark.ml.classification. Este nevoie de eticheta clasei/coloana țintă. Rezultă coloanele rawPrediction, probabilitate și predicție. Rezultatele noastre sunt stocate în coloana de predicții.

# Potrivirea modelului

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

# Evaluarea modelului

rezultate_tren=model_regresiune_logistică.evaluează(date_tren).predicții

8. Acuratețe și rezultate: Aceasta este etapa finală în care testăm precizia modelului folosind orice tehnici de testare.

Să ne uităm la următorul proiect în care prezicem dacă o persoană este afectată de un accident vascular cerebral sau nu folosind modelul de regresie logistică.

Predicția accidentului vascular cerebral

9. Instalați modulul PySpark în mediul dumneavoastră. Următoarea este comanda de instalat:

pip install pyspark

10. Să creăm un PySpark DataFrame cu 10 înregistrări care sunt legate de detaliile accidentului vascular cerebral a 10 persoane. Pentru demonstrație, creăm un DataFrame fără CSV. Există 7 coloane în acest DataFrame. „Gender”, „Glucose_level”, „married”, „varsta”, „heart_disease”, „hiper_tension” sunt atribute independente, iar „Accident vascular cerebral” este eticheta clasei sau atributul dependent. Asta înseamnă că accidentul vascular cerebral al unei persoane depinde de aceste atribute independente.

import pyspark

din pyspark.sql import SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Sugestie Linux” ).getOrCreate()

stoke_data =[

{ 'Gen' : 'Femeie' , 'vârstă' : cincizeci , 'boala de inima' : 'Da' ,

'hipertensiune' : 'Da' , 'căsătorit' : 'Da' , „Glucose_level” : 130 , 'Accident vascular cerebral' : 1 },

{ 'Gen' : 'Masculin' , 'vârstă' : douăzeci , 'boala de inima' : 'Nu' ,

'hipertensiune' : 'Da' , 'căsătorit' : 'Nu' , „Glucose_level” : 97 , 'Accident vascular cerebral' : 0 },

{ 'Gen' : 'Masculin' , 'vârstă' : 12 , 'boala de inima' : 'Nu' ,

'hipertensiune' : 'Nu' , 'căsătorit' : 'Nu' , „Glucose_level” : 98 , 'Accident vascular cerebral' : 0 },

{ 'Gen' : 'Femeie' , 'vârstă' : 90 , 'boala de inima' : 'Nu' ,

'hipertensiune' : 'Nu' , 'căsătorit' : 'Da' , „Glucose_level” : 170 , 'Accident vascular cerebral' : 1 },

{ 'Gen' : 'Masculin' , 'vârstă' : 43 , 'boala de inima' : 'Da' ,

'hipertensiune' : 'Da' , 'căsătorit' : 'Da' , „Glucose_level” : 150 , 'Accident vascular cerebral' : 1 },

{ 'Gen' : 'Femeie' , 'vârstă' : douăzeci și unu , 'boala de inima' : 'Nu' ,

'hipertensiune' : 'Nu' , 'căsătorit' : 'Da' , „Glucose_level” : 110 , 'Accident vascular cerebral' : 0 },

{ 'Gen' : 'Femeie' , 'vârstă' : cincizeci , 'boala de inima' : 'Da' ,

'hipertensiune' : 'Nu' , 'căsătorit' : 'Da' , „Glucose_level” : 100 , 'Accident vascular cerebral' : 0 },

{ 'Gen' : 'Masculin' , 'vârstă' : 3. 4 , 'boala de inima' : 'Nu' ,

'hipertensiune' : 'Da' , 'căsătorit' : 'Da' , „Glucose_level” : 190 , 'Accident vascular cerebral' : 1 },

{ 'Gen' : 'Masculin' , 'vârstă' : 10 , 'boala de inima' : 'Nu' ,

'hipertensiune' : 'Nu' , 'căsătorit' : 'Nu' , „Glucose_level” : 90 , 'Accident vascular cerebral' : 0 },

{ 'Gen' : 'Femeie' , 'vârstă' : 56 , 'boala de inima' : 'Da' ,

'hipertensiune' : 'Da' , 'căsătorit' : 'Da' , „Glucose_level” : 145 , 'Accident vascular cerebral' : 1 }

]

# creați cadrul de date din datele de mai sus

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# Stoke_df real

stroke_df.show()

Ieșire:

11. Afișați coloanele independente folosind metoda select().

# Afișează atribute independente

stroke_df.select(stroke_df[ 'Gen' ],stroke_df[ „Glucose_level” ],stroke_df[ 'căsătorit' ],stroke_df[ 'vârstă' ],stroke_df[ 'boala de inima' ],stroke_df[ 'hipertensiune' ]).spectacol()

Ieșire:

12. Afișați valorile unice care sunt prezente în atributul țintă (Stroke).

# valori unice ale atributului țintă

stroke_df.select(stroke_df[ 'Accident vascular cerebral' ]).distinct().show()

Ieșire:

13. Returnați tipul de date al tuturor coloanelor folosind funcția printSchema().

# Returnează tipul de date al tuturor coloanelor.

stroke_df.printSchema()

Ieșire:

Putem vedea că 4 coloane sunt de tip șir. Să le transformăm în valori numerice categorice.

14. Să convertim valorile categorice șir în valori numerice categoriale utilizând StringIndexer în coloanele „Gender”, „heart_disease”, „hyper_tension” și „married” și le scriem în coloanele Categotical_Gender, Categotical_heart_disease, Categotical_hyper_married și Categotical_married. Stocați coloanele în indexed_data DataFrame folosind metoda fit().

din pyspark.ml.feature import StringIndexer

# Convertiți valorile categorice șir în valori numerice categoriale în coloana „Sex”.

indexer_data=StringIndexer(inputCol= 'Gen' ,outputCol= „Categotical_Gender” )

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

# Convertiți valorile categorice șir în valori numerice categoriale în coloana „heart_disease”.

indexer_data=StringIndexer(inputCol= 'boala de inima' ,outputCol= „boală_inimă_categotică” )

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

# Convertiți valorile categorice șir în valori categoriale numerice în coloana „hiper_tension”.

indexer_data=StringIndexer(inputCol= 'hipertensiune' ,outputCol= „Hipertensiune_categotică” )

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

# Convertiți valorile categorice șir în valori numerice categoriale în coloana „căsătorit”.

indexer_data=StringIndexer(inputCol= 'căsătorit' ,outputCol= „Căsătorit_categotic” )

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

# Afișează actualizat

indexed_data.show()

Ieșire:

15. Convertiți coloanele independente într-un vector folosind asamblatorul vectorial. Numele vectorului este „caracteristici”.

din pyspark.ml.feature import VectorAssembler

asamblator= VectorAssembler(inputCols=[ „Categotical_Gender” , „boală_inimă_categotică” , „Hipertensiune_categotică” , „Căsătorit_categotic” , 'vârstă' ,

„Glucose_level” ],outputCol= 'Caracteristici' )

16. Transformați datele anterioare într-un DataFrame final folosind funcția transform() și afișați-l folosind funcția show().

Ieșire:

17. Pregătiți datele pentru antrenament și testare împărțindu-le în 70-30. „Caracteristicile” sunt stocate în train_data, iar „Stroke” este stocat în test_data.

# Pregătiți datele pentru instruire și testare

train_data,test_data=final.select([ 'Caracteristici' , 'Accident vascular cerebral' ]).randomSplit([ 0,70 , 0,30 ])

18. Potriviți modelul de regresie logistică și evaluați-l.

din pyspark.ml.classification import LogisticRegression

# Potrivirea modelului

logistic_regression_model=LogisticRegression(labelCol= 'Accident vascular cerebral' ).fit(datele_trenului)

# Evaluarea modelului

rezultate_tren=model_regresiune_logistică.evaluează(date_tren).predicții

train_results.show()

Ieșire:

19. Utilizați BinaryClassificationEvaluator pentru a verifica acuratețea modelului. Putem vedea că modelul nostru este 100% precis.

din pyspark.ml.evaluation import BinaryClassificationEvaluator

# apelați BinaryClassificationEvaluator

rezultate = BinaryClassificationEvaluator(rawPredictionCol= 'predictie' ,labelCol= 'Accident vascular cerebral' )

ROC_AUC = results.evaluate(train_results)

print(ROC_AUC * 100 , „% acuratețe” )

Concluzie

Puteți prezice problema de clasificare reală folosind modelul de regresie logistică din PySpark. Eliminarea valorilor nule/lipsă este importantă, deoarece acestea scad evaluarea și acuratețea modelului. Preprocesarea este un pas necesar înainte de adaptarea oricărui model de învățare automată. Asigurați-vă că faceți acest pas corect și precis.