PySpark loģistikas regresija

Pyspark Logistikas Regresija



Šajā PySpark rokasgrāmatā mēs apspriedīsim, kā veikt loģistikas regresiju, lai prognozētu, vai cilvēku ir skārusi insults vai nē. Kopumā insults rodas, ja cilvēks ir atkarīgs no smēķēšanas/dzēriena. Citi iemesli, piemēram, sirds slimības un augsts glikozes līmenis asinīs (diabēts), arī izraisa insultu. Ar loģistikas regresijas mašīnmācīšanās modeļa palīdzību mēs prognozēsim un parādīsim mūsu modeļa precizitāti parauga datos.

Šajā rokasgrāmatā mēs vispirms redzēsim pieeju un pēc tam prognozēsim katras personas insultu, soli pa solim analizējot datus.

Loģistiskā regresija

Loģistisko regresiju, ko sauc arī par “Logit modeli”, izmanto prognozēšanas analīzē klasifikācijas problēmām. Šis ir mašīnmācīšanās modelis, kas darbojas tikai uz klasifikāciju, lai klasificētu klases (kategorijas). Piemēram, mūsu scenārijā ir divas kategorijas (persona, kuru skārusi insults, un persona, kas nav skārusi insultu). Modeļa labākie pielietojumi ir sirds slimību prognozēšana, dzimuma prognozēšana, ražas dzīves prognoze utt.







Darbības:

1. Datu vākšana: Dati ir nepieciešami, lai veiktu jebkādas prognozes/analīzi. Tas var būt arī CSV/XLSX formātā. Mēs to varam ielādēt Spark vidē (DataFrame), izmantojot metodi spark.read.csv().



2. Datu analīze : Atribūtu/kolonnu analīze ir pazīstama kā “datu analīze”. Kolonnas, kas palīdz paredzēt klasi, sauc par “neatkarīgiem atribūtiem”. Kolonna, kas rada prognozi, ir pazīstama kā “atkarīgais vai mērķa atribūts”. Šajā scenārijā mēs varam izmantot rekvizītu kolonnas, lai parādītu visas kolonnas. Atšķirīgo () metodi izmanto, lai redzētu unikālās vērtības.



3. Datu priekšapstrāde: Nulles/trūkstošo vērtību filtrēšana ir pazīstama kā “priekšapstrāde”. Šajā posmā mēs noņemam visas trūkstošās vērtības. Mašīna zina tikai bināro valodu. Tātad visas virkņu kategorijas ir jāpārvērš par skaitliskām kategoriskām vērtībām. Programmā PySpark mēs varam izmantot “StringIndexer”, kas ir pieejamā klase modulī pyspark.ml.feature, lai virkņu kategorijas pārvērstu par skaitliskām. Tas automātiski pārvērš tos iekšēji. Mums nav jāsniedz vērtības. Varat izmantot šādu sintaksi:





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

4. Vektoru salikšana: Tagad jums ir dati, ko iekārta var saprast. Šajā posmā visi neatkarīgie atribūti ir vektorizēti vienā kolonnā. To var izdarīt, izmantojot VectorAssembler klasi. Tam nepieciešami divi parametri: pirmais parametrs ir inputCols, kas ņem neatkarīgu atribūtu sarakstu. Otrais parametrs ir outputCol, kas vektorizē visas inputCols šajā mainīgajā.

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

5. Pārveidošana: Tagad sagatavojiet savus datus, pārveidojot atjauninātās kolonnas (3. darbība), izmantojot funkciju transform().



assembler.transform(inxed_data)

6. Datu sagatavošana apmācībai un pārbaudei: Šajā posmā mēs sadalām datus “apmācībā” un “pārbaudē”. Būs labāk, ja mēs sadalīsim 70% datu, lai apmācītu modeli, un 30% datu, lai pārbaudītu modeli. To var panākt, izmantojot randomSplit() metodi. Tas aizņem sarakstu, kurā ir divas peldošās vērtības: viena testa sadalījumam un otra vilciena sadalīšanai.

train_data,test_data=final_data.select([ 'Iespējas' ,target_column]).randomSplit([0.70.0.30])

7. Modeļu pielāgošana un novērtēšana : Ir pienācis laiks pielāgot loģistikas regresijas modeli. Loģistikas regresijas modelis ir pieejams modulī pyspark.ml.classification. Tas aizņem klases etiķeti/mērķa kolonnu. Tas rada neapstrādātas prognozes, varbūtības un prognožu kolonnas. Mūsu rezultāti tiek saglabāti prognožu kolonnā.

# Modeļa pielāgošana

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

# Modeļa novērtēšana

train_results=logistic_regression_model.evaluate(train_data).predictions

8. Precizitāte un rezultāti: Šis ir pēdējais posms, kurā mēs pārbaudām modeļa precizitāti, izmantojot jebkādas testēšanas metodes.

Apskatīsim šo projektu, kurā mēs prognozējam, vai cilvēku ir skārusi insults vai nē, izmantojot loģistikas regresijas modeli.

Insulta prognozēšana

9. Instalējiet PySpark moduli savā vidē. Tālāk ir norādīta instalēšanas komanda:

pip instalēt pyspark

10. Izveidosim PySpark DataFrame ar 10 ierakstiem, kas ir saistīti ar 10 personu insulta informāciju. Demonstrēšanai mēs izveidojam DataFrame bez CSV. Šajā DataFrame ir 7 kolonnas. “Dzimums”, “Glikozes_līmenis”, “precējies”, “vecums”, “sirdsslimība”, “hipertensija” ir neatkarīgi atribūti, un “Insults” ir klases apzīmējums vai atkarīgais atribūts. Tas nozīmē, ka cilvēka insults ir atkarīgs no šīm neatkarīgajām īpašībām.

importēt pyspark

no pyspark.sql importēt SparkSession

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

stoke_data =[

{ 'Dzimums' : 'sieviete' , 'vecums' : piecdesmit , 'sirds slimība' : 'Jā' ,

'hipertensija' : 'Jā' , 'precējies' : 'Jā' , 'Glucose_level' : 130 , 'insults' : 1 },

{ 'Dzimums' : 'Vīrietis' , 'vecums' : divdesmit , 'sirds slimība' : 'Nē' ,

'hipertensija' : 'Jā' , 'precējies' : 'Nē' , 'Glucose_level' : 97 , 'insults' : 0 },

{ 'Dzimums' : 'Vīrietis' , 'vecums' : 12 , 'sirds slimība' : 'Nē' ,

'hipertensija' : 'Nē' , 'precējies' : 'Nē' , 'Glucose_level' : 98 , 'insults' : 0 },

{ 'Dzimums' : 'sieviete' , 'vecums' : 90 , 'sirds slimība' : 'Nē' ,

'hipertensija' : 'Nē' , 'precējies' : 'Jā' , 'Glucose_level' : 170 , 'insults' : 1 },

{ 'Dzimums' : 'Vīrietis' , 'vecums' : 43 , 'sirds slimība' : 'Jā' ,

'hipertensija' : 'Jā' , 'precējies' : 'Jā' , 'Glucose_level' : 150 , 'insults' : 1 },

{ 'Dzimums' : 'sieviete' , 'vecums' : divdesmitviens , 'sirds slimība' : 'Nē' ,

'hipertensija' : 'Nē' , 'precējies' : 'Jā' , 'Glucose_level' : 110 , 'insults' : 0 },

{ 'Dzimums' : 'sieviete' , 'vecums' : piecdesmit , 'sirds slimība' : 'Jā' ,

'hipertensija' : 'Nē' , 'precējies' : 'Jā' , 'Glucose_level' : 100 , 'insults' : 0 },

{ 'Dzimums' : 'Vīrietis' , 'vecums' : 3. 4 , 'sirds slimība' : 'Nē' ,

'hipertensija' : 'Jā' , 'precējies' : 'Jā' , 'Glucose_level' : 190 , 'insults' : 1 },

{ 'Dzimums' : 'Vīrietis' , 'vecums' : 10 , 'sirds slimība' : 'Nē' ,

'hipertensija' : 'Nē' , 'precējies' : 'Nē' , 'Glucose_level' : 90 , 'insults' : 0 },

{ 'Dzimums' : 'sieviete' , 'vecums' : 56 , 'sirds slimība' : 'Jā' ,

'hipertensija' : 'Jā' , 'precējies' : 'Jā' , 'Glucose_level' : 145 , 'insults' : 1 }

]

# izveidojiet datu rāmi no iepriekšminētajiem datiem

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# Faktiskais stoke_df

stroke_df.show()

Izvade:

11. Parādiet neatkarīgās kolonnas, izmantojot atlases() metodi.

# Parādīt neatkarīgus atribūtus

stroke_df.select(stroke_df[ 'Dzimums' ],stroke_df[ 'Glikozes_līmenis' ],stroke_df[ 'precējies' ],stroke_df[ 'vecums' ],stroke_df[ 'sirds slimība' ],stroke_df[ 'hipertensija' ]).show()

Izvade:

12. Parādiet unikālās vērtības, kas atrodas mērķa atribūtā (Stroke).

# mērķa atribūta unikālas vērtības

stroke_df.select(stroke_df[ 'Insults' ]).atšķirīgs().show()

Izvade:

13. Atgrieziet visu kolonnu datu tipu, izmantojot funkciju printSchema().

# Atgriezt visu kolonnu datu tipu.

stroke_df.printSchema()

Izvade:

Mēs redzam, ka 4 kolonnas ir virknes tipa. Pārveidosim tos kategoriskās skaitliskās vērtībās.

14. Pārvērsīsim virknes kategoriskās vērtības par skaitliskām kategoriskām vērtībām, izmantojot StringIndexer kolonnās “Dzimums”, “sirdsslimība”, “hiper_spriedze” un “precējies”, un ierakstīsim tās kategoriju_dzimums, kategoriju_sirdsslimības, kategoriju_hipertēzijas_ un kategoriju_hiperts. Saglabājiet kolonnas mapē indexed_data DataFrame, izmantojot metodi fit().

no pyspark.ml.feature importēšanas StringIndexer

# Konvertējiet virknes kategoriskās vērtības uz skaitliskām kategoriskām vērtībām kolonnā 'Dzimums'.

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

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

# Konvertējiet virknes kategoriskās vērtības uz skaitliskām kategoriskām vērtībām kolonnā 'heart_disease'.

indexer_data=StringIndexer(inputCol= 'sirds slimība' ,outputCol= Kategotiskā_sirdsslimība )

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

# Konvertējiet virknes kategoriskās vērtības uz skaitliskām kategoriskām vērtībām kolonnā 'hyper_tension'.

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

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

# Konvertējiet virknes kategoriskās vērtības uz skaitliskām kategoriskām vērtībām kolonnā 'precējies'.

indexer_data=StringIndexer(inputCol= 'precējies' ,outputCol= 'Categotical_married' )

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

# Parādīt atjaunināto

indexed_data.show()

Izvade:

15. Pārveidojiet neatkarīgās kolonnas par vektoru, izmantojot vektoru montētāju. Vektora nosaukums ir “funkcijas”.

no pyspark.ml.feature importa VectorAssembler

assembler= VectorAssembler(inputCols=[ 'Categotical_Gender' , Kategotiskā_sirdsslimība , 'Categotical_hyper_tension' , 'Categotical_married' , 'vecums' ,

'Glucose_level' ],outputCol= 'Iespējas' )

16. Pārveidojiet iepriekšējos datus galīgajā DataFrame, izmantojot transform() funkciju, un parādiet tos, izmantojot funkciju show().

Izvade:

17. Sagatavojiet datus apmācībai un testēšanai, sadalot tos 70-30. 'Funkcijas' tiek saglabātas tranzīta_datos, un 'Stroke' tiek saglabātas test_data.

# Sagatavojiet datus apmācībai un testēšanai

train_data,test_data=final.select([ 'Iespējas' , 'insults' ]).randomSplit([ 0,70 , 0.30 ])

18. Ievietojiet loģistikas regresijas modeli un novērtējiet to.

no pyspark.ml.classification importa LogisticRegression

# Modeļa pielāgošana

logistic_regression_model=LogisticRegression(labelCol= 'insults' ).fit(train_data)

# Modeļa novērtēšana

train_results=logistic_regression_model.evaluate(train_data).predictions

train_results.show()

Izvade:

19. Izmantojiet BinaryClassificationEvaluator, lai pārbaudītu modeļa precizitāti. Mēs redzam, ka mūsu modelis ir 100% precīzs.

no pyspark.ml.evaluation importa BinaryClassificationEvaluator

# izsauciet BinaryClassificationEvaluator

rezultāti = BinaryClassificationEvaluator(rawPredictionCol= 'prognoze' ,labelCol= 'insults' )

ROC_AUC = rezultāti.novērtēt(apmācīt_rezultātus)

drukāt (ROC_AUC * 100 , '% precizitāte' )

Secinājums

Jūs varat paredzēt reālās flīžu klasifikācijas problēmu, izmantojot PySpark loģistikas regresijas modeli. Nulles/trūkstošo vērtību noņemšana ir svarīga, jo tās samazina modeļa novērtējumu un precizitāti. Pirms jebkura mašīnmācīšanās modeļa uzstādīšanas ir jāveic priekšapstrāde. Pārliecinieties, ka veicat šo darbību pareizi un precīzi.