PySpark रसद प्रतिगमन

Pyspark Rasada Pratigamana



इस PySpark गाइड में, हम चर्चा करेंगे कि किसी व्यक्ति को स्ट्रोक से प्रभावित होने या न होने का अनुमान लगाने के लिए लॉजिस्टिक रिग्रेशन कैसे करें। सामान्य तौर पर, स्ट्रोक तब होता है जब कोई व्यक्ति धूम्रपान/शराब पीने का आदी होता है। अन्य कारण जैसे हृदय रोग और रक्त में उच्च ग्लूकोज स्तर (मधुमेह) भी स्ट्रोक का कारण बनते हैं। लॉजिस्टिक रिग्रेशन मशीन लर्निंग मॉडल की मदद से, हम सैंपल डेटा पर अपने मॉडल की सटीकता का अनुमान लगाएंगे और दिखाएंगे।

इस गाइड में, हम पहले दृष्टिकोण देखेंगे और फिर चरण दर चरण डेटा का विश्लेषण करके प्रत्येक व्यक्ति के स्ट्रोक का अनुमान लगाएंगे।

संभार तन्त्र परावर्तन

लॉजिस्टिक रिग्रेशन, जिसे 'लॉगिट मॉडल' भी कहा जाता है, का उपयोग वर्गीकरण समस्याओं के लिए भविष्य कहनेवाला विश्लेषण में किया जाता है। यह एक मशीन लर्निंग मॉडल है जो क्लासेस (श्रेणियों) को वर्गीकृत करने के लिए केवल वर्गीकरण पर काम करता है। उदाहरण के लिए, हमारे परिदृश्य में दो श्रेणियां हैं (एक व्यक्ति जो स्ट्रोक से प्रभावित है और एक व्यक्ति जो स्ट्रोक से प्रभावित नहीं है)। मॉडल के सर्वोत्तम अनुप्रयोग हृदय रोग की भविष्यवाणी, लिंग की भविष्यवाणी, फसल जीवन की भविष्यवाणी आदि हैं।







कदम:

1. डेटा संग्रह: किसी भी पूर्वानुमान/विश्लेषण को करने के लिए डेटा आवश्यक है। यह दूसरों के बीच सीएसवी/एक्सएलएसएक्स के रूप में हो सकता है। हम इसे Spark.read.csv() विधि का उपयोग करके स्पार्क वातावरण (डेटाफ़्रेम) में लोड कर सकते हैं।



2. डेटा विश्लेषण : विशेषताओं/स्तंभों का विश्लेषण करना 'डेटा विश्लेषण' के रूप में जाना जाता है। कॉलम जो वर्ग की भविष्यवाणी करने में मदद करते हैं उन्हें 'स्वतंत्र गुण' के रूप में जाना जाता है। वह स्तंभ जिसके परिणामस्वरूप भविष्यवाणी होती है, उसे 'आश्रित या लक्ष्य विशेषता' के रूप में जाना जाता है। इस परिदृश्य में, हम सभी कॉलम प्रदर्शित करने के लिए कॉलम गुण का उपयोग कर सकते हैं। अद्वितीय मान देखने के लिए विशिष्ट () विधि का उपयोग किया जाता है।



3. डेटा प्रीप्रोसेसिंग: अशक्त / लापता मानों को फ़िल्टर करना 'प्रीप्रोसेसिंग' के रूप में जाना जाता है। हम इस चरण में सभी लापता मानों को हटा देते हैं। मशीन केवल बाइनरी भाषा जानती है। तो, सभी स्ट्रिंग श्रेणियों को संख्यात्मक श्रेणीबद्ध मानों में परिवर्तित किया जाना चाहिए। PySpark में, हम 'StringIndexer' का उपयोग कर सकते हैं जो स्ट्रिंग श्रेणियों को न्यूमेरिक में बदलने के लिए pyspark.ml.feature मॉड्यूल में उपलब्ध क्लास है। यह स्वचालित रूप से उन्हें आंतरिक रूप से रूपांतरित करता है। हमें मूल्य प्रदान करने की आवश्यकता नहीं है। आप निम्न सिंटैक्स का उपयोग कर सकते हैं:





indexer_data=StringIndexer(inputCol= 'स्ट्रिंग_श्रेणी_स्तंभनाम' ,आउटपुटकोल= 'नया_स्तंभ_नाम' )

4. वेक्टर कोडांतरण: अब, आपके पास वह डेटा है जिसे मशीन समझ सकती है। इस चरण में, सभी स्वतंत्र विशेषताओं को एक स्तंभ में सदिशीकृत किया जाना चाहिए। यह वेक्टरएसेम्बलर वर्ग का उपयोग करके किया जा सकता है। यह दो पैरामीटर लेता है: पहला पैरामीटर इनपुटकॉल है जो स्वतंत्र विशेषताओं की सूची लेता है। दूसरा पैरामीटर OutputCol है जो इस वेरिएबल में सभी इनपुट कॉल्स को सदिश बनाता है।

असेम्बलर=वेक्टरएसेम्बलर(इनपुट कॉल्स=[कॉलम...],आउटपुटकोल=वेक्टराइज्ड_डाटा)

5. परिवर्तन: अब, ट्रांसफ़ॉर्म () फ़ंक्शन का उपयोग करके अपडेट किए गए कॉलम (चरण 3) को बदलकर अपना डेटा तैयार करें।



असेंबलर.ट्रांसफॉर्म (inxed_data)

6. प्रशिक्षण और परीक्षण के लिए डेटा तैयार करना: इस चरण में, हम डेटा को 'प्रशिक्षण' और 'परीक्षण' में विभाजित करते हैं। बेहतर होगा कि हम मॉडल को प्रशिक्षित करने के लिए 70% डेटा और मॉडल का परीक्षण करने के लिए 30% डेटा विभाजित करें। यह randomSplit () पद्धति का उपयोग करके प्राप्त किया जा सकता है। यह एक सूची लेता है जिसमें दो फ्लोट मान होते हैं: एक टेस्ट स्प्लिट के लिए और दूसरा ट्रेन स्प्लिट के लिए।

train_data, test_data = final_data.select ([ 'विशेषताएँ' ,target_column]).randomSplit([0.70.0.30])

7. मॉडल फिटिंग और मूल्यांकन : लॉजिस्टिक रिग्रेशन मॉडल को फिट करने का समय आ गया है। लॉजिस्टिक रिग्रेशन मॉडल pyspark.ml.classification मॉड्यूल में उपलब्ध है। यह क्लास लेबल/टारगेट कॉलम लेता है। इसका परिणाम कच्ची भविष्यवाणी, संभावना और भविष्यवाणी कॉलम में होता है। हमारे परिणाम भविष्यवाणी कॉलम में संग्रहीत हैं।

# मॉडल फिटिंग

Logistic_regression_model=LogisticRegression(लेबलकोल=target_column).fit(train_data)

# मॉडल मूल्यांकन

train_results=logistic_regression_model.evaluate(train_data).predictions

8. सटीकता और परिणाम: यह अंतिम चरण है जहां हम किसी परीक्षण तकनीक का उपयोग करके मॉडल सटीकता का परीक्षण करते हैं।

आइए निम्नलिखित प्रोजेक्ट को देखें जहां हम भविष्यवाणी करते हैं कि कोई व्यक्ति स्ट्रोक से प्रभावित है या लॉजिस्टिक रिग्रेशन मॉडल का उपयोग नहीं कर रहा है।

स्ट्रोक भविष्यवाणी

9. अपने वातावरण में PySpark मॉड्यूल स्थापित करें। निम्नलिखित स्थापित करने का आदेश है:

पिप पाइस्पार्क स्थापित करें

10. चलिए 10 रिकॉर्ड के साथ एक PySpark DataFrame बनाते हैं जो 10 व्यक्तियों के स्ट्रोक विवरण से संबंधित हैं। प्रदर्शन के लिए, हम CSV के बिना एक DataFrame बनाते हैं। इस DataFrame में 7 कॉलम हैं। 'लिंग', 'ग्लूकोज_लेवल', 'विवाहित', 'आयु', 'हृदय_रोग', 'हाइपर_टेंशन' स्वतंत्र गुण हैं और 'स्ट्रोक' वर्ग लेबल या आश्रित विशेषता है। इसका अर्थ है कि किसी व्यक्ति का स्ट्रोक इन स्वतंत्र गुणों पर निर्भर है।

pyspark आयात करें

pyspark.sql से SparkSession आयात करें

linuxhint_spark_app = SparkSession.builder.appName ( 'लिनक्स संकेत' .getOrCreate()

स्टोक_डाटा = [

{ 'लिंग' : 'महिला' , 'आयु' : पचास , 'दिल की बीमारी' : 'हाँ' ,

'हाइपर_टेंशन' : 'हाँ' , 'विवाहित' : 'हाँ' , 'ग्लूकोज_लेवल' : 130 , 'आघात' : 1 },

{ 'लिंग' : 'नर' , 'आयु' : बीस , 'दिल की बीमारी' : 'नहीं' ,

'हाइपर_टेंशन' : 'हाँ' , 'विवाहित' : 'नहीं' , 'ग्लूकोज_लेवल' : 97 , 'आघात' : 0 },

{ 'लिंग' : 'नर' , 'आयु' : 12 , 'दिल की बीमारी' : 'नहीं' ,

'हाइपर_टेंशन' : 'नहीं' , 'विवाहित' : 'नहीं' , 'ग्लूकोज_लेवल' : 98 , 'आघात' : 0 },

{ 'लिंग' : 'महिला' , 'आयु' : 90 , 'दिल की बीमारी' : 'नहीं' ,

'हाइपर_टेंशन' : 'नहीं' , 'विवाहित' : 'हाँ' , 'ग्लूकोज_लेवल' : 170 , 'आघात' : 1 },

{ 'लिंग' : 'नर' , 'आयु' : 43 , 'दिल की बीमारी' : 'हाँ' ,

'हाइपर_टेंशन' : 'हाँ' , 'विवाहित' : 'हाँ' , 'ग्लूकोज_लेवल' : 150 , 'आघात' : 1 },

{ 'लिंग' : 'महिला' , 'आयु' : इक्कीस , 'दिल की बीमारी' : 'नहीं' ,

'हाइपर_टेंशन' : 'नहीं' , 'विवाहित' : 'हाँ' , 'ग्लूकोज_लेवल' : 110 , 'आघात' : 0 },

{ 'लिंग' : 'महिला' , 'आयु' : पचास , 'दिल की बीमारी' : 'हाँ' ,

'हाइपर_टेंशन' : 'नहीं' , 'विवाहित' : 'हाँ' , 'ग्लूकोज_लेवल' : 100 , 'आघात' : 0 },

{ 'लिंग' : 'नर' , 'आयु' : 3. 4 , 'दिल की बीमारी' : 'नहीं' ,

'हाइपर_टेंशन' : 'हाँ' , 'विवाहित' : 'हाँ' , 'ग्लूकोज_लेवल' : 190 , 'आघात' : 1 },

{ 'लिंग' : 'नर' , 'आयु' : 10 , 'दिल की बीमारी' : 'नहीं' ,

'हाइपर_टेंशन' : 'नहीं' , 'विवाहित' : 'नहीं' , 'ग्लूकोज_लेवल' : 90 , 'आघात' : 0 },

{ 'लिंग' : 'महिला' , 'आयु' : 56 , 'दिल की बीमारी' : 'हाँ' ,

'हाइपर_टेंशन' : 'हाँ' , 'विवाहित' : 'हाँ' , 'ग्लूकोज_लेवल' : 145 , 'आघात' : 1 }

]

# उपरोक्त डेटा से डेटाफ़्रेम बनाएं

स्ट्रोक_डीएफ = linuxhint_spark_app.createDataFrame (stoke_data)

# वास्तविक स्टोक_डीएफ

स्ट्रोक_डीएफ.शो ()

आउटपुट:

11. चयन () विधि का उपयोग करके स्वतंत्र कॉलम प्रदर्शित करें।

# स्वतंत्र गुण प्रदर्शित करें

स्ट्रोक_डीएफ.चयन करें (स्ट्रोक_डीएफ [ 'लिंग' ], स्ट्रोक_डीएफ [ 'ग्लूकोज_लेवल' ], स्ट्रोक_डीएफ [ 'विवाहित' ], स्ट्रोक_डीएफ [ 'आयु' ], स्ट्रोक_डीएफ [ 'दिल की बीमारी' ], स्ट्रोक_डीएफ [ 'हाइपर_टेंशन' ])।दिखाना()

आउटपुट:

12. लक्ष्य विशेषता (स्ट्रोक) में मौजूद अद्वितीय मान प्रदर्शित करें।

# लक्ष्य विशेषता अद्वितीय मान

स्ट्रोक_डीएफ.चयन करें (स्ट्रोक_डीएफ [ 'आघात' ]).अलग().दिखाएँ()

आउटपुट:

13. प्रिंटस्केमा () फ़ंक्शन का उपयोग करके सभी स्तंभों का डेटा प्रकार लौटाएं।

# सभी स्तंभों का डेटा प्रकार लौटाएं।

स्ट्रोक_डीएफ.प्रिंटस्केमा ()

आउटपुट:

हम देख सकते हैं कि 4 कॉलम स्ट्रिंग प्रकार के हैं। आइए उन्हें श्रेणीबद्ध संख्यात्मक मानों में परिवर्तित करें।

14. आइए 'लिंग', 'हृदय_रोग', 'हाइपर_टेंशन', और 'विवाहित' कॉलम में स्ट्रिंगइंडेक्सर का उपयोग करके स्ट्रिंग श्रेणीबद्ध मानों को संख्यात्मक श्रेणीबद्ध मानों में परिवर्तित करें और इन्हें Categotical_Gender, Categotical_heart_disease, Categotical_hyper_tension, और Categotical_married कॉलम में लिखें। फ़िट () विधि का उपयोग करके कॉलम को indexed_data DataFrame में संग्रहीत करें।

pyspark.ml.feature आयात StringIndexer से

# 'लिंग' कॉलम में स्ट्रिंग श्रेणीगत मानों को संख्यात्मक श्रेणीगत मानों में बदलें।

indexer_data=StringIndexer(inputCol= 'लिंग' ,आउटपुटकोल= 'श्रेणीबद्ध_लिंग' )

indexed_data = indexer_data.fit (स्ट्रोक_डीएफ) .ट्रांसफॉर्म (स्ट्रोक_डीएफ)

# 'heart_disease' कॉलम में स्ट्रिंग श्रेणीगत मानों को संख्यात्मक श्रेणीगत मानों में बदलें।

indexer_data=StringIndexer(inputCol= 'दिल की बीमारी' ,आउटपुटकोल= 'श्रेणीबद्ध_हृदय_रोग' )

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

# 'हाइपर_टेंशन' कॉलम में स्ट्रिंग श्रेणीगत मानों को संख्यात्मक श्रेणीगत मानों में बदलें।

indexer_data=StringIndexer(inputCol= 'हाइपर_टेंशन' ,आउटपुटकोल= 'Categotical_hyper_tension' )

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

# 'विवाहित' कॉलम में स्ट्रिंग श्रेणीगत मानों को संख्यात्मक श्रेणीगत मानों में बदलें।

indexer_data=StringIndexer(inputCol= 'विवाहित' ,आउटपुटकोल= 'श्रेणीबद्ध_विवाहित' )

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

# अद्यतन प्रदर्शित करें

indexed_data.show ()

आउटपुट:

15. वेक्टर असेंबलर का उपयोग करके स्वतंत्र कॉलम को वेक्टर में परिवर्तित करें। वेक्टर का नाम 'फीचर्स' है।

pyspark.ml.feature से वेक्टर एसेम्बलर आयात करें

असेंबलर = वेक्टर एसेम्बलर (इनपुट कॉल्स = [ 'श्रेणीबद्ध_लिंग' , 'श्रेणीबद्ध_हृदय_रोग' , 'Categotical_hyper_tension' , 'श्रेणीबद्ध_विवाहित' , 'आयु' ,

'ग्लूकोज_लेवल' ], आउटपुटकोल = 'विशेषताएँ' )

16. ट्रांसफ़ॉर्म () फ़ंक्शन का उपयोग करके पिछले डेटा को अंतिम डेटाफ़्रेम में बदलें और इसे शो () फ़ंक्शन का उपयोग करके प्रदर्शित करें।

आउटपुट:

17. प्रशिक्षण और परीक्षण के लिए डेटा को 70-30 में विभाजित करके तैयार करें। 'फीचर्स' को train_data में स्टोर किया जाता है और 'Stroke' को test_data में स्टोर किया जाता है।

# प्रशिक्षण और परीक्षण के लिए डेटा तैयार करें

train_data, test_data = final.select ([ 'विशेषताएँ' , 'आघात' ]).रैंडमस्प्लिट([ 0.70 , 0.30 ])

18. लॉजिस्टिक रिग्रेशन मॉडल को फिट करें और उसका मूल्यांकन करें।

pyspark.ml.classification आयात LogisticRegression से

# मॉडल फिटिंग

लॉजिस्टिक_रिग्रेशन_मॉडल = लॉजिस्टिक रिग्रेशन (लेबलकोल = 'आघात' .फिट (ट्रेन_डाटा)

# मॉडल मूल्यांकन

train_results=logistic_regression_model.evaluate(train_data).predictions

train_results.show ()

आउटपुट:

19. मॉडल सटीकता की जांच के लिए बाइनरी क्लासिफिकेशन इवैल्यूएटर का उपयोग करें। हम देख सकते हैं कि हमारा मॉडल 100% सही है।

pyspark.ml.evaluation से बाइनरी क्लासिफिकेशन इवैल्यूएटर आयात करें

# बाइनरीक्लासिफिकेशनइवैल्यूएटर को कॉल करें

परिणाम = बाइनरी क्लासिफिकेशन इवैल्यूएटर (कच्चा प्रिडिक्शनकोल = 'भविष्यवाणी' , लेबलकोल = 'आघात' )

ROC_AUC = परिणाम। मूल्यांकन (train_results)

प्रिंट (आरओसी_एयूसी * 100 , '% शुद्धता' )

निष्कर्ष

आप PySpark में लॉजिस्टिक रिग्रेशन मॉडल का उपयोग करके वास्तविक-टाइल वर्गीकरण समस्या की भविष्यवाणी करने में सक्षम हैं। अशक्त/अनुपलब्ध मूल्यों को हटाना महत्वपूर्ण है क्योंकि वे मॉडल मूल्यांकन और सटीकता को कम करते हैं। किसी मशीन लर्निंग मॉडल को फिट करने से पहले प्रीप्रोसेसिंग एक आवश्यक कदम है। सुनिश्चित करें कि आप इस कदम को ठीक से और सटीक रूप से करते हैं।