Selles juhendis näeme esmalt lähenemist ja seejärel ennustame iga inimese insulti, analüüsides andmeid samm-sammult.
Logistiline regressioon
Logistilist regressiooni, mida nimetatakse ka 'Logiti mudeliks', kasutatakse klassifitseerimisprobleemide ennustavas analüütikas. See on masinõppemudel, mis töötab ainult klassifitseerimisel klasside (kategooriate) klassifitseerimiseks. Näiteks on meie stsenaariumis kaks kategooriat (inimene, kellel on insult, ja isik, keda insult ei mõjuta). Mudeli parimad rakendused on südamehaiguste ennustamine, soo ennustamine, põllukultuuride eluea prognoosimine jne.
Sammud:
1. Andmete kogumine: Andmed on vajalikud prognooside/analüüside tegemiseks. See võib muu hulgas olla CSV/XLSX-vormingus. Saame selle laadida Sparki keskkonda (DataFrame), kasutades meetodit spark.read.csv().
2. Andmete analüüs : atribuutide/veergude analüüsimist nimetatakse andmeanalüüsiks. Veerge, mis aitavad klassi ennustada, nimetatakse 'sõltumatuteks atribuutideks'. Veerg, mis annab ennustuse, on tuntud kui 'sõltuv või sihtatribuut'. Selle stsenaariumi korral saame kõigi veergude kuvamiseks kasutada atribuuti veerud. Unikaalsete väärtuste nägemiseks kasutatakse meetodit different().
3. Andmete eeltöötlus: Null-/puuduvate väärtuste filtreerimist nimetatakse 'eeltöötluseks'. Selles etapis eemaldame kõik puuduvad väärtused. Masin teab ainult kahendkeelt. Seega tuleks kõik stringikategooriad teisendada numbrilisteks kategooriaväärtusteks. PySparkis saame stringikategooriate numbrilisteks teisendamiseks kasutada moodulis pyspark.ml.feature saadaolevat klassi StringIndexer. See teisendab need automaatselt sisemiselt. Me ei pea väärtusi pakkuma. Võite kasutada järgmist süntaksit:
indexer_data=StringIndexer(inputCol= 'String_kategooria_veeru nimi' ,outputCol= 'Uus_veeru_nimi' )
4. Vektori kokkupanek: Nüüd on teil andmed, millest masin aru saab. Selles etapis tuleks kõik sõltumatud atribuudid vektoriseerida ühte veergu. Seda saab teha VectorAssembleri klassi abil. Selleks on vaja kahte parameetrit: esimene parameeter on inputCols, mis võtab sõltumatute atribuutide loendi. Teine parameeter on outputCol, mis vektoriseerib kõik inputCols sellesse muutujasse.
assembler=VectorAssembler(inputCols=[veerud…],outputCol=vectorized_data)5. Ümberkujundamine: Nüüd valmistage oma andmed ette, teisendades värskendatud veerud (samm 3), kasutades funktsiooni transform().
assembler.transform(inxed_data)
6. Andmete ettevalmistamine koolituseks ja testimiseks: Selles etapis jagame andmed 'koolituseks' ja 'testimiseks'. Parem on, kui jagame mudeli koolitamiseks 70% andmeid ja mudeli testimiseks 30% andmeid. Seda saab saavutada randomSplit() meetodi abil. Selleks on vaja loendit, mis sisaldab kahte ujuväärtust: üks katsejaotuse jaoks ja teine rongi jaotuse jaoks.
train_data,test_data=final_data.select([ 'Funktsioonid' ,target_column]).randomSplit([0.70.0.30])7. Mudeli sobitamine ja hindamine : On aeg sobitada logistilise regressiooni mudeliga. Logistilise regressiooni mudel on saadaval pyspark.ml.classification moodulis. See võtab klassi sildi / sihtveergu. Selle tulemuseks on toorennustuse, tõenäosuse ja ennustuse veerud. Meie tulemused salvestatakse ennustusveergu.
# Mudeli sobitaminelogistic_regression_model=LogisticRegression(labelCol=target_column).fit(train_data)
# Mudeli hindamine
train_results=logistic_regression_model.evaluate(train_data).predictions
8. Täpsus ja tulemused: See on viimane etapp, kus testime mudeli täpsust mis tahes testimistehnikate abil.
Vaatame järgmist projekti, kus ennustame logistilise regressiooni mudeli abil, kas inimesel on insult või mitte.
Insuldi ennustamine
9. Installige PySparki moodul oma keskkonda. Installimiseks on järgmine käsk:
pip install pyspark
10. Loome PySpark DataFrame 10 kirjega, mis on seotud 10 inimese insuldi üksikasjadega. Demonstreerimiseks loome ilma CSV-ta DataFrame'i. Selles DataFrame'is on 7 veergu. 'Sugu', 'Glükoosi_tase', 'abielus', 'vanus', 'südamehaigus', 'hüpertensioon' on sõltumatud atribuudid ja 'Stroke' on klassi silt või sõltuv atribuut. See tähendab, et inimese insult sõltub nendest sõltumatutest omadustest.
import pysparkpyspark.sql-st importige SparkSession
linuxhint_spark_app = SparkSession.builder.appName( 'Linux Hint' ).getOrCreate()
stoke_data =[
{ 'Sugu' : 'Naine' , 'vanus' : viiskümmend , 'südamehaigus' : 'jah' ,
'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 130 , 'rabandus' : 1 },
{ 'Sugu' : 'mees' , 'vanus' : kakskümmend , 'südamehaigus' : 'ei' ,
'hüpertensioon' : 'jah' , 'abielus' : 'ei' , 'Glükoosi_tase' : 97 , 'rabandus' : 0 },
{ 'Sugu' : 'mees' , 'vanus' : 12 , 'südamehaigus' : 'ei' ,
'hüpertensioon' : 'ei' , 'abielus' : 'ei' , 'Glükoosi_tase' : 98 , 'rabandus' : 0 },
{ 'Sugu' : 'Naine' , 'vanus' : 90 , 'südamehaigus' : 'ei' ,
'hüpertensioon' : 'ei' , 'abielus' : 'jah' , 'Glükoosi_tase' : 170 , 'rabandus' : 1 },
{ 'Sugu' : 'mees' , 'vanus' : 43 , 'südamehaigus' : 'jah' ,
'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 150 , 'rabandus' : 1 },
{ 'Sugu' : 'Naine' , 'vanus' : kakskümmend üks , 'südamehaigus' : 'ei' ,
'hüpertensioon' : 'ei' , 'abielus' : 'jah' , 'Glükoosi_tase' : 110 , 'rabandus' : 0 },
{ 'Sugu' : 'Naine' , 'vanus' : viiskümmend , 'südamehaigus' : 'jah' ,
'hüpertensioon' : 'ei' , 'abielus' : 'jah' , 'Glükoosi_tase' : 100 , 'rabandus' : 0 },
{ 'Sugu' : 'mees' , 'vanus' : 3. 4 , 'südamehaigus' : 'ei' ,
'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 190 , 'rabandus' : 1 },
{ 'Sugu' : 'mees' , 'vanus' : 10 , 'südamehaigus' : 'ei' ,
'hüpertensioon' : 'ei' , 'abielus' : 'ei' , 'Glükoosi_tase' : 90 , 'rabandus' : 0 },
{ 'Sugu' : 'Naine' , 'vanus' : 56 , 'südamehaigus' : 'jah' ,
'hüpertensioon' : 'jah' , 'abielus' : 'jah' , 'Glükoosi_tase' : 145 , 'rabandus' : 1 }
]
# looge ülaltoodud andmetest andmeraam
insult_df = linuxhint_spark_app.createDataFrame(stoke_data)
# Tegelik stoke_df
insult_df.show()
Väljund:
11. Kuvage sõltumatud veerud meetodi select() abil.
# Kuva sõltumatud atribuudidinsult_df.select(stroke_df[ 'Sugu' ],stroke_df[ 'Glükoosi_tase' ],stroke_df[ 'abielus' ],stroke_df[ 'vanus' ],stroke_df[ 'südamehaigus' ],stroke_df[ 'hüpertensioon' ]).show()
Väljund:
12. Kuvage unikaalsed väärtused, mis sisalduvad sihtatribuudis (Stroke).
# sihtatribuudi kordumatud väärtusedinsult_df.select(stroke_df[ 'Insult' ]).distinct().show()
Väljund:
13. Tagasta kõigi veergude andmetüübid, kasutades funktsiooni printSchema().
# Tagastab kõigi veergude andmetüübi.insult_df.printSchema()
Väljund:
Näeme, et 4 veergu on stringi tüüpi. Teisendame need kategoorilisteks arvväärtusteks.
14. Teisendame stringi kategooria väärtused numbrilisteks kategooriaväärtusteks, kasutades StringIndexerit veergudes 'Sugu', 'südamehaigus', 'hüpertension' ja 'abielus' ning kirjutame need veergudesse Kategootiline_sugu, Kategootiline_südamehaigus, Kategootiline_südamehaigus, Categotical_hyperedtical. Salvestage veerud kataloogi indexed_data DataFrame, kasutades meetodit fit().
pyspark.ml.feature impordi StringIndexerist# Teisendage stringi kategooria väärtused veerus 'Sugu' numbrilisteks kategooriaväärtusteks.
indexer_data=StringIndexer(inputCol= 'Sugu' ,outputCol= 'Categotical_Gender' )
indexed_data=indexer_data.fit(stroke_df).transform(stroke_df)
# Teisendage stringi kategooria väärtused numbrilisteks kategooriaväärtusteks veerus 'heart_disease'.
indexer_data=StringIndexer(inputCol= 'südamehaigus' ,outputCol= 'Kategootiline_südamehaigus' )
indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)
# Teisendage stringi kategooria väärtused numbrilisteks kategooriaväärtusteks veerus 'hyper_tension'.
indexer_data=StringIndexer(inputCol= 'hüpertensioon' ,outputCol= 'Categotical_hyper_tension' )
indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)
# Teisendage stringi kategooria väärtused numbrilisteks kategooriaväärtusteks veerus 'abielus'.
indexer_data=StringIndexer(inputCol= 'abielus' ,outputCol= 'Categotical_married' )
indexed_data=indexer_data.fit(indexed_data).transform(indexed_data)
# Kuvage värskendatud
indexed_data.show()
Väljund:
15. Teisendage sõltumatud veerud vektoriks, kasutades vektori kokkupanijat. Vektori nimi on 'omadused'.
pyspark.ml.feature importimisest VectorAssemblerassembler= VectorAssembler(inputCols=[ 'Categotical_Gender' , 'Kategootiline_südamehaigus' , 'Categotical_hyper_tension' , 'Categotical_married' , 'vanus' ,
'Glükoosi_tase' ],väljundVool= 'Funktsioonid' )
16. Teisendage eelmised andmed lõplikuks DataFrame'iks, kasutades funktsiooni transform() ja kuvage need funktsiooni show() abil.
Väljund:
17. Valmistage andmed ette koolituseks ja testimiseks, jagades need 70-30-ks. Funktsioonid salvestatakse kaustas train_data ja Stroke kaustas test_data.
# Valmistage andmed ette koolituseks ja testimisekstrain_data,test_data=final.select([ 'Funktsioonid' , 'rabandus' ]).randomSplit([ 0,70 , 0.30 ])
18. Paigaldage logistilise regressiooni mudel ja hinnake seda.
pyspark.ml.classification import LogisticRegression# Mudeli sobitamine
logistic_regression_model=Logistiline regressioon(labelCol= 'rabandus' ).fit(train_data)
# Mudeli hindamine
train_results=logistic_regression_model.evaluate(train_data).predictions
train_results.show()
Väljund:
19. Mudeli täpsuse kontrollimiseks kasutage BinaryClassificationEvaluatorit. Näeme, et meie mudel on 100% täpne.
pyspark.ml.evaluation import BinaryClassificationEvaluator# helistage BinaryClassificationEvaluatorile
tulemused = BinaryClassificationEvaluator(rawPredictionCol= 'ennustus' ,labelCol= 'rabandus' )
ROC_AUC = tulemused.evaluate(treeni_tulemused)
print(ROC_AUC * 100 , '% täpsus' )
Järeldus
PySparki logistilise regressiooni mudeli abil saate ennustada reaalse plaadi klassifitseerimisprobleemi. Null-/puuduvate väärtuste eemaldamine on oluline, kuna need vähendavad mudeli hindamist ja täpsust. Eeltöötlus on vajalik samm enne mis tahes masinõppemudeli sobitamist. Veenduge, et teete seda sammu õigesti ja täpselt.