Logistická regrese PySpark

Logisticka Regrese Pyspark



V tomto průvodci PySpark budeme diskutovat o tom, jak provést logistickou regresi, abychom předpověděli, zda je osoba postižena mrtvicí nebo ne. Obecně k mozkové mrtvici dochází, když je člověk závislý na kouření/pití. Jiné důvody, jako je srdeční onemocnění a vysoké hladiny glukózy v krvi (diabetes), také způsobují mrtvici. Pomocí modelu Logistic Regression Machine Learning předpovídáme a ukážeme přesnost našeho modelu na vzorových datech.

V této příručce nejprve uvidíme přístup a poté předpovídáme mrtvici každé osoby pomocí analýzy dat krok za krokem.

Logistická regrese

Logistická regrese, nazývaná také „Logit Model“, se používá v prediktivní analýze klasifikačních problémů. Toto je model strojového učení, který pracuje pouze na klasifikaci pro klasifikaci tříd (kategorií). Například v našem scénáři existují dvě kategorie (osoba, která je postižena mrtvicí, a osoba, která není postižena mrtvicí). Nejlepšími aplikacemi modelu jsou predikce srdečních chorob, predikce pohlaví, predikce života plodin atd.







kroky:

1. Sběr dat: Data jsou nezbytná k provádění jakýchkoli předpovědí/analýz. Může být mimo jiné ve formě CSV/XLSX. To můžeme načíst do prostředí Spark (DataFrame) pomocí metody spark.read.csv().



2. Analýza dat : Analýza atributů/sloupců je známá jako „analýza dat“. Sloupce, které pomáhají předpovědět třídu, jsou známé jako „nezávislé atributy“. Sloupec, který vede k predikci, se nazývá „závislý nebo cílový atribut“. V tomto scénáři můžeme použít vlastnost columns k zobrazení všech sloupců. K zobrazení jedinečných hodnot se používá metoda different() .



3. Předzpracování dat: Filtrování hodnot null/chybějících hodnot se nazývá „předzpracování“. V této fázi odstraníme všechny chybějící hodnoty. Stroj zná pouze binární jazyk. Všechny kategorie řetězců by tedy měly být převedeny na číselné kategorické hodnoty. V PySpark můžeme použít „StringIndexer“, což je dostupná třída v modulu pyspark.ml.feature pro převod kategorií řetězců na číselné. Automaticky je interně převádí. Nemusíme poskytovat hodnoty. Můžete použít následující syntaxi:





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

4. Sestavení vektoru: Nyní máte data, kterým stroj rozumí. V této fázi by měly být všechny nezávislé atributy vektorizovány do jednoho sloupce. To lze provést pomocí třídy VectorAssembler. Vyžaduje dva parametry: První parametr je inputCols, který přebírá seznam nezávislých atributů. Druhý parametr je outputCol, který vektorizuje všechny inputCols do této proměnné.

assembler=VectorAssembler(inputCols=[sloupce…],outputCol=vektorizovaná_data)

5. Transformace: Nyní připravte data transformací aktualizovaných sloupců (krok 3) pomocí funkce transform().



assembler.transform(inxed_data)

6. Příprava dat pro školení a testování: V této fázi rozdělujeme data na „trénink“ a „testování“. Bude lepší, když rozdělíme 70 % dat pro trénování modelu a 30 % dat pro testování modelu. Toho lze dosáhnout pomocí metody randomSplit(). Vyžaduje seznam, který obsahuje dvě plovoucí hodnoty: jednu pro testovací rozdělení a druhou pro rozdělení vlaku.

train_data,test_data=final_data.select([ 'funkce' ,cílový_sloupec]).randomSplit([0.70.0.30])

7. Model Fitting & Evaluation : Je čas přizpůsobit model logistické regrese. Model logistické regrese je dostupný v modulu pyspark.ml.classification. Trvá sloupec štítku třídy/cíl. Výsledkem jsou sloupce rawPrediction, pravděpodobnost a předpověď. Naše výsledky jsou uloženy ve sloupci predikce.

# Montáž modelu

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

# Hodnocení modelu

train_results=logistic_regression_model.evaluate(train_data).předpovědi

8. Přesnost a výsledky: Toto je poslední fáze, kdy testujeme přesnost modelu pomocí jakýchkoli testovacích technik.

Podívejme se na následující projekt, kde pomocí modelu logistické regrese predikujeme, zda je osoba postižena mrtvicí či nikoli.

Predikce mrtvice

9. Nainstalujte modul PySpark do vašeho prostředí. Následuje příkaz k instalaci:

pip nainstalovat pyspark

10. Vytvořme PySpark DataFrame s 10 záznamy, které se týkají detailů mrtvice 10 osob. Pro demonstraci vytvoříme DataFrame bez CSV. V tomto DataFrame je 7 sloupců. „Pohlaví“, „Hladina glukózy“, „ženatý“, „věk“, „onemocnění srdce“, „hyper_tenze“ jsou nezávislé atributy a „mrtvice“ je označení třídy nebo závislý atribut. To znamená, že mrtvice člověka závisí na těchto nezávislých atributech.

importovat pyspark

z pyspark.sql importujte SparkSession

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

stoke_data =[

{ 'Rod' : 'Ženský' , 'stáří' : padesáti , 'srdeční choroba' : 'Ano' ,

'hyper_tension' : 'Ano' , 'ženatý' : 'Ano' , 'Glucose_level' : 130 , 'Mrtvice' : 1 },

{ 'Rod' : 'Mužský' , 'stáří' : dvacet , 'srdeční choroba' : 'Ne' ,

'hyper_tension' : 'Ano' , 'ženatý' : 'Ne' , 'Glucose_level' : 97 , 'Mrtvice' : 0 },

{ 'Rod' : 'Mužský' , 'stáří' : 12 , 'srdeční choroba' : 'Ne' ,

'hyper_tension' : 'Ne' , 'ženatý' : 'Ne' , 'Glucose_level' : 98 , 'Mrtvice' : 0 },

{ 'Rod' : 'Ženský' , 'stáří' : 90 , 'srdeční choroba' : 'Ne' ,

'hyper_tension' : 'Ne' , 'ženatý' : 'Ano' , 'Glucose_level' : 170 , 'Mrtvice' : 1 },

{ 'Rod' : 'Mužský' , 'stáří' : 43 , 'srdeční choroba' : 'Ano' ,

'hyper_tension' : 'Ano' , 'ženatý' : 'Ano' , 'Glucose_level' : 150 , 'Mrtvice' : 1 },

{ 'Rod' : 'Ženský' , 'stáří' : dvacet jedna , 'srdeční choroba' : 'Ne' ,

'hyper_tension' : 'Ne' , 'ženatý' : 'Ano' , 'Glucose_level' : 110 , 'Mrtvice' : 0 },

{ 'Rod' : 'Ženský' , 'stáří' : padesáti , 'srdeční choroba' : 'Ano' ,

'hyper_tension' : 'Ne' , 'ženatý' : 'Ano' , 'Glucose_level' : 100 , 'Mrtvice' : 0 },

{ 'Rod' : 'Mužský' , 'stáří' : 3. 4 , 'srdeční choroba' : 'Ne' ,

'hyper_tension' : 'Ano' , 'ženatý' : 'Ano' , 'Glucose_level' : 190 , 'Mrtvice' : 1 },

{ 'Rod' : 'Mužský' , 'stáří' : 10 , 'srdeční choroba' : 'Ne' ,

'hyper_tension' : 'Ne' , 'ženatý' : 'Ne' , 'Glucose_level' : 90 , 'Mrtvice' : 0 },

{ 'Rod' : 'Ženský' , 'stáří' : 56 , 'srdeční choroba' : 'Ano' ,

'hyper_tension' : 'Ano' , 'ženatý' : 'Ano' , 'Glucose_level' : 145 , 'Mrtvice' : 1 }

]

# vytvořte datový rámec z výše uvedených dat

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# Aktuální stoke_df

stroke_df.show()

Výstup:

11. Zobrazte nezávislé sloupce pomocí metody select().

# Zobrazení nezávislých atributů

stroke_df.select(stroke_df[ 'Rod' ],stroke_df[ 'Hladina_glukózy' ],stroke_df[ 'ženatý' ],stroke_df[ 'stáří' ],stroke_df[ 'srdeční choroba' ],stroke_df[ 'hyper_tenze' ]).ukázat()

Výstup:

12. Zobrazte jedinečné hodnoty, které jsou přítomny v cílovém atributu (Stroke).

# jedinečné hodnoty cílového atributu

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

Výstup:

13. Vraťte datový typ všech sloupců pomocí funkce printSchema().

# Vrátit datový typ všech sloupců.

stroke_df.printSchema()

Výstup:

Vidíme, že 4 sloupce jsou typu string. Převedeme je na kategorické číselné hodnoty.

14. Převeďme kategorické hodnoty řetězce na číselné kategoriální hodnoty pomocí StringIndexer ve sloupcích „Gender“, „heart_disease“, „hyper_tension“ a „married“ a zapišme je do sloupců Categotical_Gender, Categotical_heart_disease, Categotical_hypertical_ried a Categotical. Uložte sloupce do datového rámce indexed_data pomocí metody fit().

z pyspark.ml.feature import StringIndexer

# Převeďte kategorické hodnoty řetězce na číselné kategorické hodnoty ve sloupci 'Pohlaví'.

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

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

# Převeďte kategorické hodnoty řetězce na číselné kategorické hodnoty ve sloupci 'srdeční_nemoc'.

indexer_data=StringIndexer(inputCol= 'srdeční choroba' ,outputCol= 'Categotical_heart_disease' )

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

# Převeďte kategorické hodnoty řetězce na číselné kategorické hodnoty ve sloupci 'hyper_tension'.

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

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

# Převeďte kategorické hodnoty řetězce na číselné kategorické hodnoty ve sloupci 'ž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ýstup:

15. Převeďte nezávislé sloupce na vektor pomocí vektorového assembleru. Název vektoru je „features“.

z pyspark.ml.feature import VectorAssembler

assembler= VectorAssembler(inputCols=[ 'Categotical_Gender' , 'Categotical_heart_disease' , 'Categotical_hyper_tension' , 'Categotical_married' , 'stáří' ,

'Glucose_level' ],outputCol= 'funkce' )

16. Transformujte předchozí data do konečného DataFrame pomocí funkce transform() a zobrazte je pomocí funkce show().

Výstup:

17. Připravte data pro školení a testování tak, že je rozdělíte na 70-30. „Features“ je uloženo v train_data a „Stroke“ je uloženo v test_data.

# Připravte data pro školení a testování

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

18. Přizpůsobte model logistické regrese a vyhodnoťte jej.

z pyspark.ml.klasifikace import LogisticRegression

# Montáž modelu

logistic_regression_model=LogisticRegression(labelCol= 'Mrtvice' ).fit(data_vlaku)

# Hodnocení modelu

train_results=logistic_regression_model.evaluate(train_data).předpovědi

train_results.show()

Výstup:

19. Ke kontrole přesnosti modelu použijte BinaryClassificationEvaluator. Vidíme, že náš model je 100% přesný.

z pyspark.ml.evaluation import BinaryClassificationEvaluator

# zavolejte BinaryClassificationEvaluator

výsledky = BinaryClassificationEvaluator(rawPredictionCol= 'předpověď' ,labelCol= 'Mrtvice' )

ROC_AUC = results.evaluate(train_results)

tisk (ROC_AUC * 100 , '% Accuracy' )

Závěr

Pomocí modelu logistické regrese v PySpark jste schopni předpovědět problém klasifikace v reálném světě. Odstranění nulových/chybějících hodnot je důležité, protože snižují hodnocení a přesnost modelu. Předzpracování je nezbytným krokem před instalací jakéhokoli modelu strojového učení. Ujistěte se, že tento krok provedete správně a přesně.