Î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 modeluluilogistic_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 pysparkdin 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 independentestroke_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 VectorAssemblerasamblator= 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 testaretrain_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.