PySpark Logistic Regression

Pyspark Logistic Regression



I denna PySpark-guide kommer vi att diskutera hur man utför den logistiska regressionen för att förutsäga om en person är drabbad av stroke eller inte. I allmänhet uppstår stroke när en person är beroende av rök/dryck. Andra orsaker som hjärtsjukdomar och höga glukosnivåer i blodet (diabetes) orsakar också stroke. Med hjälp av Logistic Regression Machine Learning-modellen kommer vi att förutsäga och visa noggrannheten i vår modell på provdata.

I den här guiden kommer vi först att se tillvägagångssättet och sedan förutsäga varje persons stroke genom att analysera data steg för steg.

Logistisk tillbakagång

Logistisk regression, även kallad 'Logit Model', används i prediktiv analys för klassificeringsproblem. Detta är en maskininlärningsmodell som endast fungerar på klassificering för att klassificera klasserna (kategorierna). Till exempel finns det två kategorier i vårt scenario (en person som är drabbad av stroke och en person som inte är drabbad av stroke). De bästa tillämpningarna av modellen är förutsägelse av hjärtsjukdom, förutsägelse av kön, förutsägelse av grödor, etc.







Steg:

1. Datainsamling: Uppgifterna är nödvändiga för att utföra alla förutsägelser/analyser. Det kan vara i form av bland annat CSV/XLSX. Vi kan ladda detta till Spark-miljön (DataFrame) med metoden spark.read.csv().



2. Dataanalys : Att analysera attributen/kolumnerna kallas 'dataanalys'. Kolumnerna som hjälper till att förutsäga klassen är kända som 'oberoende attribut'. Kolumnen som resulterar i förutsägelse kallas 'beroende eller målattribut'. I det här scenariot kan vi använda egenskapen columns för att visa alla kolumner. Metoden distinct() används för att se de unika värdena.



3. Dataförbehandling: Att filtrera noll-/saknade värden kallas 'förbearbetning'. Vi tar bort alla saknade värden i detta skede. Maskinen kan bara det binära språket. Så alla strängkategorier bör konverteras till numeriska kategorivärden. I PySpark kan vi använda 'StringIndexer' som är den tillgängliga klassen i modulen pyspark.ml.feature för att konvertera strängkategorierna till numeriska. Den konverterar dem automatiskt internt. Vi behöver inte tillhandahålla värderingarna. Du kan använda följande syntax:





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

4. Vektormontering: Nu har du data som maskinen kan förstå. I detta skede bör alla oberoende attribut vektoriseras till en enda kolumn. Detta kan göras med klassen VectorAssembler. Det krävs två parametrar: Den första parametern är inputCols som tar en lista med oberoende attribut. Den andra parametern är outputCol som vektoriserar alla inputCols till denna variabel.

assembler=VectorAssembler(inputCols=[kolumner...],outputCol=vektoriserade_data)

5. Transformation: Förbered nu dina data genom att transformera de uppdaterade kolumnerna (steg 3) med hjälp av transform()-funktionen.



assembler.transform(inxed_data)

6. Förbereda data för utbildning och testning: I detta skede delar vi upp data i 'träning' och 'testning'. Det blir bättre om vi delar upp 70 % data för att träna modellen och 30 % data för att testa modellen. Detta kan uppnås med metoden randomSplit() . Den tar en lista som innehåller två flytvärden: en för testdelning och en annan för tågdelning.

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

7. Modellanpassning & utvärdering : Det är dags att passa in Logistic Regression-modellen. Logistic Regression-modellen är tillgänglig i modulen pyspark.ml.classification. Det tar klassetiketten/målkolumnen. Detta resulterar i rawPrediction-, sannolikhets- och prediktionskolumner. Våra resultat lagras i prediktionskolumnen.

# Modellmontering

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

# Modellutvärdering

train_results=logistic_regression_model.evaluate(train_data).predictions

8. Noggrannhet och resultat: Detta är det sista steget där vi testar modellens noggrannhet med hjälp av någon testteknik.

Låt oss titta på följande projekt där vi förutsäger om en person är drabbad av stroke eller inte med hjälp av Logistic Regression-modellen.

Förutsägelse av stroke

9. Installera PySpark-modulen i din miljö. Följande är kommandot att installera:

pip installera pyspark

10. Låt oss skapa en PySpark DataFrame med 10 poster som är relaterade till strokedetaljer för 10 personer. För demonstration skapar vi en DataFrame utan CSV. Det finns 7 kolumner i denna DataFrame. 'Kön', 'Glukosnivå', 'gift', 'ålder', 'hjärtsjukdom', 'högspänning' är oberoende attribut och 'Stroke' är klassetiketten eller beroende attribut. Det betyder att en persons stroke är beroende av dessa oberoende attribut.

importera pyspark

från pyspark.sql importera SparkSession

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

stoke_data =[

{ 'Kön' : 'Kvinna' , 'ålder' : femtio , 'hjärtsjukdom' : 'Ja' ,

'hyper_tension' : 'Ja' , 'gift' : 'Ja' , 'Glucose_level' : 130 , 'Stroke' : 1 },

{ 'Kön' : 'Manlig' , 'ålder' : tjugo , 'hjärtsjukdom' : 'Nej' ,

'hyper_tension' : 'Ja' , 'gift' : 'Nej' , 'Glucose_level' : 97 , 'Stroke' : 0 },

{ 'Kön' : 'Manlig' , 'ålder' : 12 , 'hjärtsjukdom' : 'Nej' ,

'hyper_tension' : 'Nej' , 'gift' : 'Nej' , 'Glucose_level' : 98 , 'Stroke' : 0 },

{ 'Kön' : 'Kvinna' , 'ålder' : 90 , 'hjärtsjukdom' : 'Nej' ,

'hyper_tension' : 'Nej' , 'gift' : 'Ja' , 'Glucose_level' : 170 , 'Stroke' : 1 },

{ 'Kön' : 'Manlig' , 'ålder' : 43 , 'hjärtsjukdom' : 'Ja' ,

'hyper_tension' : 'Ja' , 'gift' : 'Ja' , 'Glucose_level' : 150 , 'Stroke' : 1 },

{ 'Kön' : 'Kvinna' , 'ålder' : tjugoett , 'hjärtsjukdom' : 'Nej' ,

'hyper_tension' : 'Nej' , 'gift' : 'Ja' , 'Glucose_level' : 110 , 'Stroke' : 0 },

{ 'Kön' : 'Kvinna' , 'ålder' : femtio , 'hjärtsjukdom' : 'Ja' ,

'hyper_tension' : 'Nej' , 'gift' : 'Ja' , 'Glucose_level' : 100 , 'Stroke' : 0 },

{ 'Kön' : 'Manlig' , 'ålder' : 3. 4 , 'hjärtsjukdom' : 'Nej' ,

'hyper_tension' : 'Ja' , 'gift' : 'Ja' , 'Glucose_level' : 190 , 'Stroke' : 1 },

{ 'Kön' : 'Manlig' , 'ålder' : 10 , 'hjärtsjukdom' : 'Nej' ,

'hyper_tension' : 'Nej' , 'gift' : 'Nej' , 'Glucose_level' : 90 , 'Stroke' : 0 },

{ 'Kön' : 'Kvinna' , 'ålder' : 56 , 'hjärtsjukdom' : 'Ja' ,

'hyper_tension' : 'Ja' , 'gift' : 'Ja' , 'Glucose_level' : 145 , 'Stroke' : 1 }

]

# skapa dataramen från ovanstående data

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# Faktisk stoke_df

stroke_df.show()

Produktion:

11. Visa de oberoende kolumnerna med metoden select().

# Visa oberoende attribut

stroke_df.select(stroke_df[ 'Kön' ],stroke_df[ 'Glukosnivå' ],stroke_df[ 'gift' ],stroke_df[ 'ålder' ],stroke_df[ 'hjärtsjukdom' ],stroke_df[ 'hyper_tension' ]).show()

Produktion:

12. Visa de unika värdena som finns i målattributet (Stroke).

# unika värden för målattribut

stroke_df.select(stroke_df[ 'Stroke' ]).distinct().show()

Produktion:

13. Returnera datatypen för alla kolumner med funktionen printSchema() .

# Returnera datatyp för alla kolumner.

stroke_df.printSchema()

Produktion:

Vi kan se att 4 kolumner är av strängtyp. Låt oss konvertera dem till kategoriska numeriska värden.

14. Låt oss konvertera de kategoriska strängvärdena till numeriska kategorivärden med hjälp av StringIndexer i kolumnerna 'Gender', 'heart_disease', 'hyper_tension' och 'married' och skriv dessa till Categotical_Gender, Categotical_heart_disease, Categotical_mary_gotension. och Categotical_married_gotension. Lagra kolumnerna i indexed_data DataFrame med metoden fit().

från pyspark.ml.feature importera StringIndexer

# Konvertera kategoriska strängvärden till numeriska kategorivärden i kolumnen 'Kön'.

indexer_data=StringIndexer(inputCol= 'Kön' ,outputCol= 'Categotical_Gender' )

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

# Konvertera kategoriska strängvärden till numeriska kategorivärden i kolumnen 'hjärtsjukdom'.

indexer_data=StringIndexer(inputCol= 'hjärtsjukdom' ,outputCol= 'Kategotisk_hjärtsjukdom' )

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

# Konvertera kategoriska strängvärden till numeriska kategorivärden i kolumnen 'hyper_tension'.

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

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

# Konvertera kategoriska strängvärden till numeriska kategorivärden i kolumnen 'gift'.

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

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

# Visa den uppdaterade

indexed_data.show()

Produktion:

15. Konvertera de oberoende kolumnerna till en vektor med hjälp av vektorsammanställaren. Vektornamnet är 'funktioner'.

från pyspark.ml.feature importera VectorAssembler

assembler= VectorAssembler(inputCols=[ 'Categotical_Gender' , 'Kategotisk_hjärtsjukdom' , 'Categotical_hyper_tension' , 'Categotical_married' , 'ålder' ,

'Glucose_level' ],outputCol= 'Funktioner' )

16. Omvandla tidigare data till en slutlig DataFrame med hjälp av transform()-funktionen och visa den med hjälp av show()-funktionen.

Produktion:

17. Förbered data för träning och testning genom att dela upp dem i 70-30. 'Funktioner' lagras i train_data och 'Stroke' lagras i test_data.

# Förbered data för träning och testning

train_data,test_data=final.select([ 'Funktioner' , 'Stroke' ]).randomSplit([ 0,70 , 0,30 ])

18. Passa in Logistic Regression-modellen och utvärdera den.

från pyspark.ml.classification import LogisticRegression

# Modellmontering

logistic_regression_model=LogisticRegression(labelCol= 'Stroke' ).fit(tågdata)

# Modellutvärdering

train_results=logistic_regression_model.evaluate(train_data).predictions

train_results.show()

Produktion:

19. Använd BinaryClassificationEvaluator för att kontrollera modellens noggrannhet. Vi kan se att vår modell är 100 % korrekt.

från pyspark.ml.evaluation import BinaryClassificationEvaluator

# anropa BinaryClassificationEvaluator

resultat = BinaryClassificationEvaluator(rawPredictionCol= 'förutsägelse' ,labelCol= 'Stroke' )

ROC_AUC = results.evaluate(train_results)

print(ROC_AUC * 100 , '% noggrannhet' )

Slutsats

Du kan förutsäga klassificeringsproblemet med verkliga kakel med hjälp av Logistic Regression-modellen i PySpark. Det är viktigt att ta bort noll-/saknade värden eftersom de minskar modellutvärderingen och noggrannheten. Förbearbetning är ett nödvändigt steg innan någon maskininlärningsmodell anpassas. Se till att du gör detta steg korrekt och korrekt.