PySpark লজিস্টিক রিগ্রেশন

Pyspark Lajistika Rigresana



এই PySpark গাইডে, একজন ব্যক্তি স্ট্রোকে আক্রান্ত কি না তা ভবিষ্যদ্বাণী করার জন্য লজিস্টিক রিগ্রেশন কীভাবে সম্পাদন করা যায় তা আমরা আলোচনা করব। সাধারণভাবে, স্ট্রোক ঘটে যখন একজন ব্যক্তি ধূমপান/পানীয়ে আসক্ত হন। অন্যান্য কারণ যেমন হৃদরোগ এবং রক্তে গ্লুকোজের উচ্চ মাত্রা (ডায়াবেটিস)ও স্ট্রোকের কারণ। লজিস্টিক রিগ্রেশন মেশিন লার্নিং মডেলের সাহায্যে, আমরা ভবিষ্যদ্বাণী করব এবং নমুনা ডেটাতে আমাদের মডেলের যথার্থতা দেখাব।

এই নির্দেশিকাটিতে, আমরা প্রথমে পদ্ধতিটি দেখব এবং তারপর ধাপে ধাপে ডেটা বিশ্লেষণ করে প্রতিটি ব্যক্তির স্ট্রোকের পূর্বাভাস দেব।

পণ্য সরবরাহ সংশ্লেষণ

লজিস্টিক রিগ্রেশন, যাকে 'লজিট মডেল'ও বলা হয়, শ্রেণীবিভাগ সমস্যার জন্য ভবিষ্যদ্বাণীমূলক বিশ্লেষণে ব্যবহৃত হয়। এটি একটি মেশিন লার্নিং মডেল যা শুধুমাত্র শ্রেণীবিভাগে শ্রেণীবদ্ধ করার জন্য কাজ করে (বিভাগ)। উদাহরণস্বরূপ, আমাদের দৃশ্যে দুটি বিভাগ রয়েছে (একজন ব্যক্তি যিনি স্ট্রোকে আক্রান্ত এবং একজন ব্যক্তি যিনি স্ট্রোকে আক্রান্ত হননি)। মডেলের সেরা অ্যাপ্লিকেশন হল হৃদরোগের পূর্বাভাস, লিঙ্গ পূর্বাভাস, ফসলের জীবন ভবিষ্যদ্বাণী ইত্যাদি।







ধাপ:

1. ডেটা সংগ্রহ: কোনো ভবিষ্যদ্বাণী/বিশ্লেষণ করার জন্য ডেটা প্রয়োজনীয়। এটি অন্যদের মধ্যে CSV/XLSX আকারে হতে পারে। আমরা এটিকে spark.read.csv() পদ্ধতি ব্যবহার করে স্পার্ক পরিবেশে (ডেটাফ্রেম) লোড করতে পারি।



2. ডেটা বিশ্লেষণ : গুণাবলী/কলাম বিশ্লেষণ করাকে 'ডেটা বিশ্লেষণ' বলা হয়। যে কলামগুলি ক্লাসের পূর্বাভাস দিতে সাহায্য করে সেগুলিকে 'স্বতন্ত্র বৈশিষ্ট্য' বলা হয়। যে কলামটি ভবিষ্যদ্বাণী করে তা 'নির্ভরশীল বা লক্ষ্য বৈশিষ্ট্য' হিসাবে পরিচিত। এই পরিস্থিতিতে, আমরা সমস্ত কলাম প্রদর্শন করতে কলাম বৈশিষ্ট্য ব্যবহার করতে পারি। স্বতন্ত্র () পদ্ধতিটি অনন্য মান দেখতে ব্যবহৃত হয়।



3. ডেটা প্রিপ্রসেসিং: নাল/অনুপস্থিত মানগুলি ফিল্টার করাকে 'প্রিপ্রসেসিং' বলা হয়। আমরা এই পর্যায়ে সমস্ত অনুপস্থিত মান মুছে ফেলি। মেশিন শুধু বাইনারি ভাষা জানে। সুতরাং, সমস্ত স্ট্রিং বিভাগগুলিকে সাংখ্যিক শ্রেণীগত মানগুলিতে রূপান্তর করা উচিত। PySpark-এ, আমরা 'StringIndexer' ব্যবহার করতে পারি যা pyspark.ml.feature মডিউলে উপলব্ধ ক্লাস স্ট্রিং বিভাগগুলিকে সংখ্যায় রূপান্তর করতে। এটি স্বয়ংক্রিয়ভাবে তাদের অভ্যন্তরীণভাবে রূপান্তরিত করে। আমরা মান প্রদান করতে হবে না. আপনি নিম্নলিখিত সিনট্যাক্স ব্যবহার করতে পারেন:





indexer_data=StringIndexer(inputCol= 'স্ট্রিং_বিভাগ_কলামের নাম' ,আউটপুট কল = 'নতুন_কলামের_নাম' )

4. ভেক্টর অ্যাসেম্বলিং: এখন, আপনার কাছে ডেটা আছে যা মেশিন বুঝতে পারে। এই পর্যায়ে, সমস্ত স্বাধীন বৈশিষ্ট্য একটি একক কলামে ভেক্টরাইজ করা উচিত। এটি VectorAssembler ক্লাস ব্যবহার করে করা যেতে পারে। এটি দুটি পরামিতি নেয়: প্রথম প্যারামিটারটি ইনপুটকলস যা স্বাধীন বৈশিষ্ট্যগুলির একটি তালিকা নেয়। দ্বিতীয় প্যারামিটার হল outputCol যা এই ভেরিয়েবলের মধ্যে সমস্ত ইনপুটকলকে ভেক্টরাইজ করে।

অ্যাসেম্বলার=ভেক্টর অ্যাসেম্বলার(inputCols=[কলাম…],outputCol=vectorized_data)

5. রূপান্তর: এখন, transform() ফাংশন ব্যবহার করে আপডেট হওয়া কলামগুলি (ধাপ 3) রূপান্তর করে আপনার ডেটা প্রস্তুত করুন।



assembler.transform(inxed_data)

6. প্রশিক্ষণ ও পরীক্ষার জন্য ডেটা প্রস্তুত করা: এই পর্যায়ে, আমরা 'প্রশিক্ষণ' এবং 'পরীক্ষা' এ ডেটা বিভক্ত করি। আমরা যদি মডেলকে প্রশিক্ষণের জন্য 70% ডেটা এবং মডেল পরীক্ষা করার জন্য 30% ডেটা বিভক্ত করি তবে এটি আরও ভাল হবে। এটি randomSplit() পদ্ধতি ব্যবহার করে অর্জন করা যেতে পারে। এটি একটি তালিকা নেয় যা দুটি ফ্লোট মান ধারণ করে: একটি টেস্ট স্প্লিটের জন্য এবং আরেকটি ট্রেন স্প্লিটের জন্য।

train_data,test_data=final_data.select([ 'বৈশিষ্ট্য' ,target_column]).randomSplit([0.70.0.30])

7. মডেল ফিটিং এবং মূল্যায়ন : লজিস্টিক রিগ্রেশন মডেলের সাথে মানানসই করার সময় এসেছে। লজিস্টিক রিগ্রেশন মডেলটি pyspark.ml.classification মডিউলে পাওয়া যায়। এটি ক্লাস লেবেল/টার্গেট কলাম নেয়। এর ফলে rawPediction, probability, এবং prediction স্তম্ভ হয়। আমাদের ফলাফল ভবিষ্যদ্বাণী কলামে সংরক্ষণ করা হয়.

# মডেল ফিটিং

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

# মডেল মূল্যায়ন

train_results=logistic_regression_model.evaluate(train_data)।পূর্বাভাস

8. নির্ভুলতা এবং ফলাফল: এটি চূড়ান্ত পর্যায় যেখানে আমরা কোনো পরীক্ষার কৌশল ব্যবহার করে মডেলের নির্ভুলতা পরীক্ষা করি।

আসুন নিম্নলিখিত প্রকল্পটি দেখি যেখানে আমরা ভবিষ্যদ্বাণী করি যে একজন ব্যক্তি স্ট্রোক দ্বারা আক্রান্ত বা লজিস্টিক রিগ্রেশন মডেল ব্যবহার করছেন না।

স্ট্রোক পূর্বাভাস

9. আপনার পরিবেশে PySpark মডিউল ইনস্টল করুন। ইনস্টল করার জন্য নিম্নলিখিত কমান্ড:

পিপ ইনস্টল pyspark

10. আসুন 10টি রেকর্ড সহ একটি PySpark ডেটাফ্রেম তৈরি করি যা 10 জনের স্ট্রোকের বিবরণ সম্পর্কিত। প্রদর্শনের জন্য, আমরা CSV ছাড়াই একটি DataFrame তৈরি করি। এই ডেটাফ্রেমে 7টি কলাম রয়েছে। 'লিঙ্গ', 'গ্লুকোজ_লেভেল', 'বিবাহিত', 'বয়স', 'হৃদরোগ', 'হাইপার_টেনশন' হল স্বাধীন বৈশিষ্ট্য এবং 'স্ট্রোক' হল ক্লাস লেবেল বা নির্ভরশীল বৈশিষ্ট্য। এর মানে হল যে একজন ব্যক্তির স্ট্রোক এই স্বাধীন বৈশিষ্ট্যগুলির উপর নির্ভরশীল।

পাইসপার্ক আমদানি করুন

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 }

]

# উপরের ডেটা থেকে ডেটাফ্রেম তৈরি করুন

stroke_df = linuxhint_spark_app.createDataFrame(stoke_data)

# প্রকৃত স্টোক_ডিএফ

stroke_df.show()

আউটপুট:

11. সিলেক্ট() পদ্ধতি ব্যবহার করে স্বাধীন কলাম প্রদর্শন করুন।

# স্বাধীন গুণাবলী প্রদর্শন করুন

stroke_df.select(stroke_df[ 'লিঙ্গ' ],স্ট্রোক_ডিএফ[ 'গ্লুকোজ_লেভেল' ],স্ট্রোক_ডিএফ[ 'বিবাহিত' ],স্ট্রোক_ডিএফ[ 'বয়স' ],স্ট্রোক_ডিএফ[ 'হৃদরোগ' ],স্ট্রোক_ডিএফ[ 'হাইপার_টেনশন' ]) শো()

আউটপুট:

12. লক্ষ্য বৈশিষ্ট্যে (স্ট্রোক) উপস্থিত অনন্য মানগুলি প্রদর্শন করুন।

# লক্ষ্য বৈশিষ্ট্য অনন্য মান

stroke_df.select(stroke_df[ 'স্ট্রোক' ])।স্পষ্ট().শো()

আউটপুট:

13. printSchema() ফাংশন ব্যবহার করে সমস্ত কলামের ডাটা টাইপ রিটার্ন করুন।

# সমস্ত কলামের ডেটাটাইপ রিটার্ন করুন।

stroke_df.printSchema()

আউটপুট:

আমরা দেখতে পাচ্ছি যে 4টি কলাম স্ট্রিং টাইপের। আসুন সেগুলিকে শ্রেণীবদ্ধ সংখ্যাসূচক মানগুলিতে রূপান্তর করি।

14. আসুন 'জেন্ডার', 'হার্ট_ডিজিজ', 'হাইপার_টেনশন', এবং 'বিবাহিত' কলামে স্ট্রিং ইনডেক্সার ব্যবহার করে স্ট্রিং শ্রেণীগত মানগুলিকে সাংখ্যিক শ্রেণীগত মানগুলিতে রূপান্তর করি এবং এগুলিকে শ্রেণীগত_লিঙ্গ, শ্রেণিগত_হার্ট_ডিজিজ, ক্যাটেগটিক_লমরেন্স, ক্যাটেগটিকাল_মারিক্স, ক্যাটেগটিক্যাল_জেন্ডারে লিখি। fit() পদ্ধতি ব্যবহার করে indexed_data DataFrame-এ কলাম সংরক্ষণ করুন।

pyspark.ml.feature থেকে StringIndexer আমদানি করুন

# 'জেন্ডার' কলামে স্ট্রিং শ্রেণীগত মানগুলিকে সংখ্যাসূচক শ্রেণীগত মানগুলিতে রূপান্তর করুন৷

indexer_data=StringIndexer(inputCol= 'লিঙ্গ' ,আউটপুট কল = 'শ্রেণীগত_লিঙ্গ' )

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

# স্ট্রিং শ্রেণীগত মানগুলিকে 'হৃদরোগ' কলামে সংখ্যাসূচক শ্রেণীগত মানগুলিতে রূপান্তর করুন।

indexer_data=StringIndexer(inputCol= 'হৃদরোগ' ,আউটপুট কল = 'শ্রেণীগত_হৃদরোগ' )

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

# 'হাইপার_টেনশন' কলামে স্ট্রিং শ্রেণীগত মানগুলিকে সংখ্যাসূচক শ্রেণীগত মানগুলিতে রূপান্তর করুন।

indexer_data=StringIndexer(inputCol= 'হাইপার_টেনশন' ,আউটপুট কল = 'শ্রেণীগত_হাইপার_টেনশন' )

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 থেকে VectorAssembler আমদানি করুন

অ্যাসেম্বলার= ভেক্টর অ্যাসেম্বলার(ইনপুটকলস=[ 'শ্রেণীগত_লিঙ্গ' , 'শ্রেণীগত_হৃদরোগ' , 'শ্রেণীগত_হাইপার_টেনশন' , 'শ্রেণীগত_বিবাহিত' , 'বয়স' ,

'গ্লুকোজ_লেভেল' ],আউটপুট কল= 'বৈশিষ্ট্য' )

16. transform() ফাংশন ব্যবহার করে পূর্ববর্তী ডেটাকে একটি চূড়ান্ত ডেটাফ্রেমে রূপান্তর করুন এবং show() ফাংশন ব্যবহার করে প্রদর্শন করুন।

আউটপুট:

17. 70-30 এ বিভক্ত করে প্রশিক্ষণ এবং পরীক্ষার জন্য ডেটা প্রস্তুত করুন। 'বৈশিষ্ট্যগুলি' ট্রেন_ডেটাতে এবং 'স্ট্রোক' টেস্ট_ডেটাতে সংরক্ষিত থাকে।

# প্রশিক্ষণ এবং পরীক্ষার জন্য ডেটা প্রস্তুত করুন

train_data,test_data=final.select([ 'বৈশিষ্ট্য' , 'স্ট্রোক' ]) randomSplit([ 0.70 , 0.30 ])

18. লজিস্টিক রিগ্রেশন মডেল ফিট করুন এবং এটি মূল্যায়ন করুন।

pyspark.ml.classification থেকে LogisticRegression আমদানি করুন

# মডেল ফিটিং

logistic_regression_model=LogisticRegression(labelCol= 'স্ট্রোক' .fit(train_data)

# মডেল মূল্যায়ন

train_results=logistic_regression_model.evaluate(train_data)।পূর্বাভাস

train_results.show()

আউটপুট:

19. মডেলের যথার্থতা পরীক্ষা করতে BinaryClassificationEvaluator ব্যবহার করুন। আমরা দেখতে পাচ্ছি যে আমাদের মডেলটি 100% সঠিক।

pyspark.ml.evaluation থেকে BinaryClassificationEvaluator আমদানি করুন

# BinaryClassificationEvaluator কে কল করুন

ফলাফল = বাইনারি ক্লাসিফিকেশন মূল্যায়নকারী(rawPredictionCol= 'ভবিষ্যদ্বাণী' ,লেবেলকল= 'স্ট্রোক' )

ROC_AUC = results.evaluate(train_results)

মুদ্রণ(ROC_AUC * 100 , '% সঠিকতা' )

উপসংহার

আপনি PySpark এ লজিস্টিক রিগ্রেশন মডেল ব্যবহার করে রিয়েল-টাইল শ্রেণীবিভাগের সমস্যাটি ভবিষ্যদ্বাণী করতে সক্ষম। নাল/অনুপস্থিত মানগুলি সরানো গুরুত্বপূর্ণ কারণ তারা মডেল মূল্যায়ন এবং নির্ভুলতা হ্রাস করে। যেকোনো মেশিন লার্নিং মডেল ফিট করার আগে প্রিপ্রসেসিং একটি প্রয়োজনীয় পদক্ষেপ। নিশ্চিত করুন যে আপনি এই পদক্ষেপটি সঠিকভাবে এবং সঠিকভাবে করেছেন।