মেশিন লার্নিংয়ে, ডেটা প্রিপারেশন একটি অত্যন্ত গুরুত্বপূর্ণ ধাপ। অনেক সময় ডেটা সেটে থাকা বিভিন্ন বৈশিষ্ট্যের (features) মানগুলো ভিন্ন ভিন্ন স্কেলে থাকে। উদাহরণস্বরূপ, একটি ডেটা সেটে ‘বয়স’ (যা 0-100 এর মধ্যে হতে পারে) এবং ‘আয়’ (যা লক্ষাধিক হতে পারে) থাকতে পারে। এই ধরনের স্কেলের পার্থক্য কিছু মেশিন লার্নিং অ্যালগরিদমের কার্যকারিতাকে নেতিবাচকভাবে প্রভাবিত করতে পারে।
StandardScaler হলো এমন একটি ডেটা প্রিপ্রসেসিং টেকনিক যা এই সমস্যা সমাধানে সাহায্য করে। এটি ডেটার বৈশিষ্ট্যগুলোকে একটি সাধারণ স্কেলে নিয়ে আসে, যাতে সমস্ত বৈশিষ্ট্য অ্যালগরিদমগুলির কাছে সমানভাবে গুরুত্বপূর্ণ হয়। একে ফিচার স্কেলিং (Feature Scaling) বা স্ট্যান্ডার্ডাইজেশন (Standardization) বলা হয়।
StandardScaler কী? (What is StandardScaler?)
StandardScaler হলো একটি ডেটা ট্রান্সফরমেশন টুল যা প্রতিটি বৈশিষ্ট্যের (কলামের) মানকে এমনভাবে রূপান্তর করে যাতে সেই বৈশিষ্ট্যের গড় (mean) 0 হয় এবং স্ট্যান্ডার্ড ডেভিয়েশন (standard deviation) 1 হয়। এই প্রক্রিয়াকে Z-স্কোর নরমালাইজেশন (Z-score Normalization) বলা হয়।
গণিতের ভাষায়, একটি ডেটা পয়েন্ট এর জন্য স্ট্যান্ডার্ডাইজড মান নিম্নোক্ত সূত্র ব্যবহার করে গণনা করা হয়:
যেখানে:
- হলো মূল ডেটা পয়েন্ট
- (মু) হলো বৈশিষ্ট্যের গড় (mean)
- (সিগমা) হলো বৈশিষ্ট্যের স্ট্যান্ডার্ড ডেভিয়েশন (standard deviation)
এই রূপান্তরের ফলে ডেটা একটি স্ট্যান্ডার্ড নরমালাইজড ডিস্ট্রিবিউশনে (standard normal distribution) চলে আসে, যেখানে ডেটার আকৃতি (যেমন আউটলায়ার্স) বজায় থাকে, কিন্তু স্কেল পরিবর্তিত হয়।
StandardScaler এর উদাহরণ (Example of StandardScaler)
ধরা যাক, আমাদের কাছে কিছু শিক্ষার্থীর দুটি ভিন্ন বিষয়ের নম্বর আছে:
1 2 3 |
বিষয় A: [20, 30, 40, 50, 60] (গড়: 40, স্ট্যান্ডার্ড ডেভিয়েশন: 14.14) বিষয় B: [2, 3, 4, 5, 6] (গড়: 4, স্ট্যান্ডার্ড ডেভিয়েশন: 1.41) |
যদি আমরা এই ডেটাগুলোকে সরাসরি কোনো মেশিন লার্নিং মডেলে (যেমন K-Means বা সাপোর্ট ভেক্টর মেশিন) ব্যবহার করি, তাহলে ‘বিষয় A’-এর বড় মানগুলোর কারণে অ্যালগরিদম ‘বিষয় B’-এর চেয়ে ‘বিষয় A’-কে বেশি গুরুত্ব দিতে পারে, যা কাঙ্ক্ষিত নয়। এখন আমরা StandardScaler ব্যবহার করে এই ডেটাগুলোকে রূপান্তর করব।
‘বিষয় A’ এর প্রথম মান (20) এর জন্য:
1 2 3 4 |
mu = 40 sigma = 14.14 z = frac20 − 4014.14 = frac − 2014.14 approx − 1.41 |
‘বিষয় B’ এর প্রথম মান (2) এর জন্য:
1 2 3 4 |
mu = 4 sigma = 1.41 z = frac2 − 41.41 = frac − 21.41 approx − 1.41 |
রূপান্তরের পর:
1 2 3 |
বিষয় A (স্ট্যান্ডার্ডাইজড): [ -1.41, -0.71, 0.00, 0.71, 1.41] (গড়: 0, স্ট্যান্ডার্ড ডেভিয়েশন: 1) বিষয় B (স্ট্যান্ডার্ডাইজড): [ -1.41, -0.71, 0.00, 0.71, 1.41] (গড়: 0, স্ট্যান্ডার্ড ডেভিয়েশন: 1) |
লক্ষ্য করুন, উভয় বিষয়ের জন্য প্রথম মানটি এখন প্রায় -1.41 হয়েছে। এখন উভয় বৈশিষ্ট্যের গড় 0 এবং স্ট্যান্ডার্ড ডেভিয়েশন 1। এর ফলে অ্যালগরিদম উভয় বৈশিষ্ট্যকে সমান গুরুত্ব দেবে।
পাইথন ব্যবহার করে StandardScaler এর উদাহরণ (Python Example of StandardScaler)
আমরা scikit-learn
লাইব্রেরি থেকে StandardScaler
ব্যবহার করে একটি উদাহরণ দেখাবো।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import numpy as np from sklearn.preprocessing import StandardScaler import pandas as pd # 1. ডেমো ডেটা তৈরি # দুটি ভিন্ন স্কেলের বৈশিষ্ট্য সহ ডেটা data = { 'বয়স': [25, 30, 35, 40, 45, 50], 'মাসিক_আয়': [30000, 50000, 70000, 90000, 110000, 130000] } df = pd.DataFrame(data) print("মূল ডেটা:") print(df) print("\n'বয়স' কলামের গড়:", df['বয়স'].mean()) print("'বয়স' কলামের স্ট্যান্ডার্ড ডেভিয়েশন:", df['বয়স'].std()) print("\n'মাসিক_আয়' কলামের গড়:", df['মাসিক_আয়'].mean()) print("'মাসিক_আয়' কলামের স্ট্যান্ডার্ড ডেভিয়েশন:", df['মাসিক_আয়'].std()) # 2. StandardScaler এর অবজেক্ট তৈরি scaler = StandardScaler() # 3. ডেটা ফিট এবং ট্রান্সফর্ম করা # 'fit' ডেটা থেকে গড় এবং স্ট্যান্ডার্ড ডেভিয়েশন শেখে # 'transform' শিখে নেওয়া মান ব্যবহার করে ডেটা পরিবর্তন করে # সাধারণত train/test split থাকলে, fit() শুধু training data তে করা হয় scaled_data = scaler.fit_transform(df) # স্ট্যান্ডার্ডাইজড ডেটা একটি ডেটাফ্রেমে রূপান্তর scaled_df = pd.DataFrame(scaled_data, columns=df.columns) print("\nস্ট্যান্ডার্ডাইজড ডেটা:") print(scaled_df) print("\n'বয়স' কলামের স্ট্যান্ডার্ডাইজড গড় (প্রায় 0):", scaled_df['বয়স'].mean()) print("'বয়স' কলামের স্ট্যান্ডার্ডাইজড স্ট্যান্ডার্ড ডেভিয়েশন (প্রায় 1):", scaled_df['বয়স'].std()) print("\n'মাসিক_আয়' কলামের স্ট্যান্ডার্ডাইজড গড় (প্রায় 0):", scaled_df['মাসিক_আয়'].mean()) print("'মাসিক_আয়' কলামের স্ট্যান্ডার্ডাইজড স্ট্যান্ডার্ড ডেভিয়েশন (প্রায় 1):", scaled_df['মাসিক_আয়'].std()) # একটি একক নতুন ডেটা পয়েন্ট ট্রান্সফর্ম করার উদাহরণ (প্রশিক্ষিত স্কেলার ব্যবহার করে) # মনে রাখবেন, fit_transform() এর পরিবর্তে transform() ব্যবহার করতে হয় নতুন ডেটার জন্য new_data_point = np.array([[32, 60000]]) # একটি নতুন ব্যক্তির বয়স 32, আয় 60000 scaled_new_data = scaler.transform(new_data_point) print("\nএকটি নতুন ডেটা পয়েন্টের স্ট্যান্ডার্ডাইজড মান:", scaled_new_data) |
StandardScaler ইন্টারপ্রেট করা (Interpreting StandardScaler)
StandardScaler প্রয়োগ করার পর, ডেটার মানগুলো সরাসরি তাদের মূল অর্থ হারায়। একটি মান যা আগে ‘৫০ বছর’ ছিল, তা এখন ‘০.৭৫’ (বা এমন কিছু) হতে পারে। এই নতুন মানটি বোঝায় যে মূল মানটি গড়ের থেকে কত স্ট্যান্ডার্ড ডেভিয়েশন উপরে বা নিচে ছিল।
- ধনাত্মক মান: নির্দেশ করে যে মূল ডেটা পয়েন্টটি তার বৈশিষ্ট্যের গড়ের চেয়ে বেশি ছিল।
- ঋণাত্মক মান: নির্দেশ করে যে মূল ডেটা পয়েন্টটি তার বৈশিষ্ট্যের গড়ের চেয়ে কম ছিল।
- 0-এর কাছাকাছি মান: নির্দেশ করে যে মূল ডেটা পয়েন্টটি তার বৈশিষ্ট্যের গড়ের কাছাকাছি ছিল।
- বৃহত্তর পরম মান: নির্দেশ করে যে মূল ডেটা পয়েন্টটি গড় থেকে অনেক দূরে ছিল (হয় অনেক বেশি বা অনেক কম)।
গুরুত্বপূর্ণ বিষয় হলো, স্ট্যান্ডার্ডাইজড ডেটা পয়েন্টগুলো সরাসরি ইন্টারপ্রেট করার চেয়ে তাদের সম্পর্ক এবং মেশিন লার্নিং অ্যালগরিদমগুলির জন্য তাদের উপযোগিতা বোঝা বেশি গুরুত্বপূর্ণ। এই মানগুলো এখন বিভিন্ন বৈশিষ্ট্য জুড়ে তুলনামূলক, যা অ্যালগরিদমগুলোকে পক্ষপাতহীনভাবে কাজ করতে সাহায্য করে।
StandardScaler এর গুরুত্ব (Importance of StandardScaler)
StandardScaler এর গুরুত্ব বহুবিধ:
- অ্যালগরিদমের কার্যকারিতা বৃদ্ধি: অনেক মেশিন লার্নিং অ্যালগরিদম, বিশেষ করে দূরত্ব-ভিত্তিক অ্যালগরিদম যেমন K-Means, K-Nearest Neighbors (KNN), সাপোর্ট ভেক্টর মেশিন (SVM), এবং নিউরাল নেটওয়ার্ক, ফিচারের স্কেলিং ছাড়া খারাপভাবে পারফর্ম করতে পারে। StandardScaler সমস্ত বৈশিষ্ট্যকে একই স্কেলে এনে অ্যালগরিদমগুলির কর্মক্ষমতা উন্নত করে।
- কনভারজেন্সের গতি বাড়ানো: গ্রেডিয়েন্ট ডিসেন্ট (Gradient Descent) এর উপর ভিত্তি করে কাজ করে এমন অ্যালগরিদমগুলোতে (যেমন লজিস্টিক রিগ্রেশন, নিউরাল নেটওয়ার্ক), স্ট্যান্ডার্ডাইজেশন কনভারজেন্স প্রক্রিয়াকে দ্রুততর করে। কারণ, অপটিমাইজেশন ল্যান্ডস্কেপ আরও গোলাকার হয়ে ওঠে, যা অপটিমাইজারকে দ্রুত সর্বনিম্ন বিন্দু খুঁজে পেতে সাহায্য করে।
- আউটলায়ার্স এর প্রভাব কমানো (কিছু ক্ষেত্রে): যদিও StandardScaler আউটলায়ার্সকে সরাসরি মোকাবিলা করে না, তবে এটি ডেটাকে একটি সীমিত পরিসরে নিয়ে আসে, যা চরম মানগুলির আপেক্ষিক প্রভাব কমাতে পারে যদি অন্য বৈশিষ্ট্যগুলি স্কেল করা না হয়।
- মডেলের ব্যাখ্যাযোগ্যতা উন্নত করা (কিছু ক্ষেত্রে): কিছু মডেলে, স্কেল করা বৈশিষ্ট্যগুলি সহগগুলির (coefficients) ব্যাখ্যাকে আরও সহজ করতে পারে, কারণ প্রতিটি বৈশিষ্ট্য এখন একটি তুলনামূলক ভিত্তিতে রয়েছে।
StandardScaler একটি অপরিহার্য টুল যখন আপনি মেশিন লার্নিং মডেল তৈরি করছেন এবং ডেটার স্কেলিং গুরুত্বপূর্ণ হয়ে ওঠে। ডেটাকে সঠিকভাবে স্কেল করা হলে মডেলের accuracy ও convergence অনেক ভালো হয়।
Leave a Comment