Data Preprocessing হলো মেশিন লার্নিং এবং ডেটা সায়েন্সের একটি গুরুত্বপূর্ণ পদক্ষেপ, যার মাধ্যমে কাঁচা ডেটাকে বিশ্লেষণ এবং মডেলিংয়ের জন্য উপযোগী তৈরি করা হয়। কাঁচা ডেটা সাধারণত বিশৃঙ্খল, অপরিষ্কার বা অসম্পূর্ণ থাকে, তাই তার আগে ডেটা প্রি-প্রসেসিং করতে হয়, যাতে মডেলটি আরও ভালভাবে শিখতে পারে এবং সঠিক ফলাফল প্রদান করতে পারে।
ডেটা প্রি-প্রসেসিং এর মধ্যে বেশ কিছু স্টেপ অন্তর্ভুক্ত থাকে, যা নিম্নে আলোচনা করা হলো:
ডেটা ক্লিনিং হলো ডেটার অপ্রয়োজনীয় বা ভুল তথ্য পরিষ্কার করা। এটি অন্তর্ভুক্ত:
ডেটা ট্রান্সফর্মেশন দ্বারা ডেটার মানের পরিবর্তন বা ট্রান্সফর্ম করা হয়, যাতে তা মডেলিংয়ের জন্য উপযোগী হয়।
ক্যাটেগরিক্যাল ডেটা মেশিন লার্নিং মডেলে সরাসরি ব্যবহৃত হতে পারে না, তাই সেগুলি সংখ্যায় রূপান্তর করতে হয়।
ফিচার সিলেকশন হলো অপ্রয়োজনীয় বা কম গুরুত্বপূর্ণ ফিচারগুলি বাদ দেওয়া, যাতে মডেলটি কম জটিল হয় এবং পারফরম্যান্স বৃদ্ধি পায়।
ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা হয় যাতে মডেলটি ট্রেনিং ডেটাতে শিখতে পারে এবং টেস্ট ডেটাতে পরীক্ষা করা যায়।
ডেটা স্যাম্পলিং হলো ডেটার একটি ছোট অংশ নির্বাচন করা, যাতে মডেলটি দ্রুত প্রশিক্ষিত হতে পারে। এটি সাধারণত বড় ডেটাসেটের ক্ষেত্রে ব্যবহৃত হয়।
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
# ডেটা লোড এবং ট্রেন-টেস্ট স্প্লিট
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# মিসিং ভ্যালু পূর্ণ করা
imputer = SimpleImputer(strategy='mean')
X_train = imputer.fit_transform(X_train)
X_test = imputer.transform(X_test)
# ডেটা স্কেলিং
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# ক্যাটেগরিক্যাল ডেটা এনকোডিং
encoder = OneHotEncoder()
X_train = encoder.fit_transform(X_train)
X_test = encoder.transform(X_test)
ডেটা প্রি-প্রসেসিং হলো মেশিন লার্নিং প্রক্রিয়ার প্রথম এবং গুরুত্বপূর্ণ পদক্ষেপ, যা মডেল প্রশিক্ষণের জন্য ডেটাকে পরিষ্কার, স্কেল এবং রূপান্তরিত করে। এটি মডেলের পারফরম্যান্স এবং নির্ভুলতা উন্নত করতে সহায়ক। Scikit-Learn এবং অন্যান্য টুলস ব্যবহার করে এই প্রক্রিয়া সহজভাবে সম্পন্ন করা যায়।
ডেটা সায়েন্স এবং মেশিন লার্নিং প্রজেক্টে সঠিক ডেটা লোড করা একটি গুরুত্বপূর্ণ পদক্ষেপ। এটি বিভিন্ন ফরম্যাটে হতে পারে, যেমন CSV (Comma Separated Values), Excel (XLS, XLSX), অথবা ডেটাবেস থেকে ডেটা লোড করা। এখানে আমরা Python ব্যবহার করে এই ফরম্যাটগুলো থেকে ডেটা লোড করার উপায় সম্পর্কে আলোচনা করব।
CSV (Comma Separated Values) ফাইল হলো সবচেয়ে সাধারণ ডেটা ফরম্যাট যেখানে তথ্য কমা দ্বারা পৃথক করা থাকে। pandas
লাইব্রেরি ব্যবহার করে আমরা খুব সহজেই CSV ফাইল থেকে ডেটা লোড করতে পারি।
import pandas as pd
# CSV ফাইল থেকে ডেটা লোড করা
df = pd.read_csv('data.csv')
# ডেটা দেখানো
print(df.head()) # প্রথম ৫টি সারি দেখাবে
pd.read_csv()
ফাংশন ব্যবহার করে CSV ফাইলটি লোড করা হয়।df.head()
ফাংশন প্রথম ৫টি সারি প্রদর্শন করবে।Excel ফাইলগুলি সাধারণত .xls
অথবা .xlsx
এক্সটেনশনে থাকে। pandas
লাইব্রেরি দিয়ে Excel ফাইল থেকে ডেটা লোড করা যায়, তবে এজন্য openpyxl
বা xlrd
লাইব্রেরি ইনস্টল করা থাকতে হবে (যদি তা না থাকে, pip install openpyxl
কমান্ড দিয়ে এটি ইনস্টল করা যায়)।
import pandas as pd
# Excel ফাইল থেকে ডেটা লোড করা
df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # sheet_name দ্বারা সুনির্দিষ্ট শীট নির্বাচন করা যায়
# ডেটা দেখানো
print(df.head())
pd.read_excel()
ফাংশন ব্যবহার করে Excel ফাইল থেকে ডেটা লোড করা হয়।sheet_name
প্যারামিটার দিয়ে নির্দিষ্ট শীট থেকে ডেটা লোড করা যায়।ডেটাবেস থেকে ডেটা লোড করার জন্য SQLAlchemy বা sqlite3 মতো লাইব্রেরি ব্যবহার করা যেতে পারে। এখানে sqlite3
দিয়ে একটি সহজ উদাহরণ দেখানো হলো।
import sqlite3
import pandas as pd
# SQLite ডেটাবেস সংযোগ তৈরি করা
conn = sqlite3.connect('database.db')
# SQL কোয়েরি চালানো এবং ডেটা লোড করা
df = pd.read_sql_query('SELECT * FROM table_name', conn)
# ডেটা দেখানো
print(df.head())
# সংযোগ বন্ধ করা
conn.close()
sqlite3.connect()
ফাংশন ডেটাবেসে সংযোগ তৈরি করে।pd.read_sql_query()
ফাংশন SQL কোয়েরি চালিয়ে ডেটাবেস থেকে ডেটা লোড করে।conn.close()
দিয়ে ডেটাবেস সংযোগ বন্ধ করা হয়।pandas.read_csv()
ফাংশন ব্যবহার করে।pandas.read_excel()
ফাংশন ব্যবহার করে, যেখানে openpyxl
বা xlrd
প্রয়োজন।sqlite3
বা SQLAlchemy ব্যবহার করে, এবং SQL কোয়েরি চালিয়ে ডেটা লোড করা যায়।এই উপায়গুলো ব্যবহার করে আপনি বিভিন্ন সোর্স থেকে ডেটা খুব সহজেই লোড করতে পারেন।
ডেটা বিশ্লেষণের সময়, প্রায়শই কিছু মান বা ডেটা অনুপস্থিত থাকে, যা "Missing Data" নামে পরিচিত। Missing Data যদি সঠিকভাবে পরিচালনা না করা হয়, তবে এটি মডেলের পারফরম্যান্স এবং বিশ্লেষণের নির্ভুলতা নষ্ট করতে পারে। এই সমস্যা মোকাবিলার জন্য বিভিন্ন Imputation Techniques (ডেটার অনুপস্থিত মান পূর্ণ করার পদ্ধতি) রয়েছে, যা ডেটার গুণমান বজায় রেখে সমস্যাটি সমাধান করতে সাহায্য করে।
Missing Data তখন ঘটে যখন ডেটাসেটে কিছু তথ্য পাওয়া যায় না বা অনুপস্থিত থাকে। এটি সাধারণত বিভিন্ন কারণে হতে পারে:
Missing Data Imputation এর বিভিন্ন পদ্ধতি রয়েছে, যার মধ্যে কিছু সহজ এবং কিছু জটিল পদ্ধতি হতে পারে। নিচে কিছু জনপ্রিয় Imputation Techniques আলোচনা করা হলো:
এটি Missing Data Imputation এর সবচেয়ে সাধারণ পদ্ধতি। এটি numerical (সংখ্যামূলক) ডেটার জন্য Mean বা Median, এবং ক্যাটেগরিক্যাল ডেটার জন্য Mode ব্যবহার করে Missing Data পূর্ণ করা হয়।
উদাহরণ:
from sklearn.impute import SimpleImputer
# Mean Imputation
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)
বিভাগ:
KNN Imputation হল একটি উন্নত পদ্ধতি যেখানে Missing Data পূর্ণ করার জন্য ডেটার কাছাকাছি নিকটতম k-টি প্রতিবেশী ব্যবহার করা হয়। এটি সংখ্যামূলক এবং ক্যাটেগরিক্যাল উভয় ধরনের ডেটার জন্য কার্যকরী। Missing মানের জন্য, এটি নিকটতম প্রতিবেশীদের মানের গড় বা মোড ব্যবহার করে।
উদাহরণ:
from sklearn.impute import KNNImputer
# KNN Imputation
imputer = KNNImputer(n_neighbors=3)
X_imputed = imputer.fit_transform(X)
বিভাগ:
Regression Imputation পদ্ধতিতে, একটি রিগ্রেশন মডেল ব্যবহার করা হয়, যেখানে অন্যান্য বৈশিষ্ট্য (features) এর ভিত্তিতে Missing Data পূর্বাভাস করা হয়। এটি linear regression বা logistic regression মডেল হতে পারে। অন্য কথায়, Missing ডেটা পূর্ববর্তী ডেটার সম্পর্ক অনুসারে পূর্ণ করা হয়।
উদাহরণ:
from sklearn.linear_model import LinearRegression
# Regression Imputation
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
বিভাগ:
Multiple Imputation একটি শক্তিশালী পদ্ধতি, যেখানে একাধিক ইম্পুটেশন তৈরি করা হয় এবং তারপর তাদের একটি গড়ের মাধ্যমে অচল বা অনুপস্থিত মান পূর্ণ করা হয়। এটি ডেটাতে অনিশ্চয়তা এবং বিভিন্ন ধরনের ইম্পুটেশন হ্যান্ডেল করতে সহায়ক।
উদাহরণ:
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
# Multiple Imputation
imputer = IterativeImputer()
X_imputed = imputer.fit_transform(X)
বিভাগ:
Interpolation পদ্ধতিতে, ডেটার মধ্যে Missing মানের জন্য সন্নিহিত মানগুলির উপর ভিত্তি করে পূর্ণতা প্রদান করা হয়। এটি সাধারণত টাইম সিরিজ ডেটার জন্য ব্যবহৃত হয়, যেখানে পূর্ববর্তী এবং পরবর্তী মানের মধ্যে একটি ধারাবাহিকতা থাকে।
উদাহরণ:
# Interpolation (Example for time series data)
X_imputed = X.interpolate(method='linear')
বিভাগ:
Deep Learning পদ্ধতির মাধ্যমে মিসিং ডেটা পূর্ণ করা যেতে পারে, যেমন Autoencoders ব্যবহার করে। Autoencoders একটি নিউরাল নেটওয়ার্ক মডেল, যা ইনপুট ডেটার সংকুচিত (compressed) রূপ তৈরি করে এবং পরে সেই রূপ থেকে Missing মান পূর্ণ করে।
Missing Data Imputation ডেটা বিশ্লেষণ এবং মডেলিংয়ে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। বিভিন্ন Imputation Techniques ব্যবহার করে Missing Data পূর্ণ করার পদ্ধতিগুলি বিভিন্ন ধরনের ডেটার জন্য উপযুক্ত হতে পারে। উপযুক্ত পদ্ধতি নির্বাচন করা ডেটার প্রকৃতি এবং গবেষণার প্রয়োজনীয়তার উপর নির্ভর করে।
Data Scaling এবং Normalization ডেটা প্রি-প্রসেসিং এর গুরুত্বপূর্ণ অংশ, যা মেশিন লার্নিং মডেলগুলোর পারফরম্যান্স উন্নত করতে সাহায্য করে। ডেটার স্কেলিং বা নরমালাইজেশন বিশেষভাবে গুরুত্বপূর্ণ যখন বিভিন্ন ফিচারের মানের মধ্যে পার্থক্য থাকে। যদি বিভিন্ন ফিচারের স্কেল অনেক বড় বা ছোট হয়, তবে কিছু মডেল সঠিকভাবে কাজ নাও করতে পারে। তাই এই প্রক্রিয়াগুলি মডেল ট্রেনিংয়ের আগে ডেটার পরিসীমা সামঞ্জস্যপূর্ণ করে।
Data Scaling বা স্কেলিং হচ্ছে ডেটার বৈশিষ্ট্যগুলোর মান পরিবর্তন করে তাদের একটি নির্দিষ্ট পরিসরে নিয়ে আসা। এটি সাধারণত দুইভাবে করা হয়: Normalization এবং Standardization।
MinMax Scaling বা Normalization হল একটি পদ্ধতি যা ডেটার মানকে একটি নির্দিষ্ট সীমার মধ্যে পরিবর্তন করে, সাধারণত 0 এবং 1 এর মধ্যে। এর মাধ্যমে, সকল ফিচারের মান একই স্কেলে চলে আসে।
ফর্মুলা:
Xnorm=X−XminXmax−Xmin
যেখানে,
এই পদ্ধতি ব্যবহার করা হয় যখন ডেটার মধ্যে প্রাথমিক স্কেল পার্থক্য বড় হয় এবং তা একটি কমন স্কেলে নিয়ে আসা দরকার।
উদাহরণ:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X) # X হল আপনার ইনপুট ডেটা
উপকারিতা:
সীমাবদ্ধতা:
Standard Scaling বা Standardization, ডেটার ফিচারগুলিকে এমনভাবে স্কেল করে যে তাদের mean 0 এবং standard deviation 1 হয়। এটি ডেটার আছড়ে পড়া অথবা Gaussian Distribution অনুসরণ করে। এই পদ্ধতি অধিকাংশ মডেলে ভালো কাজ করে।
ফর্মুলা:
Xscaled=X−μσ
যেখানে,
উদাহরণ:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # X হল আপনার ইনপুট ডেটা
উপকারিতা:
সীমাবদ্ধতা:
মেশিন লার্নিংয়ে, ডেটা প্রি-প্রসেসিং একটি গুরুত্বপূর্ণ পদক্ষেপ, বিশেষ করে যখন ডেটায় ক্যাটেগরিক্যাল (ক্যাটাগরি বা শ্রেণীভিত্তিক) বৈশিষ্ট্য থাকে। ক্যাটেগরিক্যাল বৈশিষ্ট্য মেশিন লার্নিং মডেলে সরাসরি ব্যবহৃত হতে পারে না, তাই এগুলোকে সংখ্যাগত (নমেরিক) ফর্মে রূপান্তর করতে হয়। Feature Encoding এই কাজটি করে, যা ক্যাটেগরিক্যাল ডেটাকে একটি সংখ্যায় রূপান্তরিত করে, যাতে মডেল এটি বুঝতে পারে এবং সঠিকভাবে কাজ করতে পারে।
বিভিন্ন ধরনের ফিচার এনকোডিং পদ্ধতি রয়েছে, তবে সবচেয়ে জনপ্রিয় দুটি হল Label Encoding এবং One-Hot Encoding। আসুন, এদের সম্পর্কে বিস্তারিত আলোচনা করি:
Label Encoding একটি সোজা পদ্ধতি, যেখানে প্রতিটি ক্যাটেগরিক্যাল মানকে একটি ইউনিক সংখ্যা দ্বারা রূপান্তরিত করা হয়। উদাহরণস্বরূপ, যদি একটি বৈশিষ্ট্য Color
থাকে এবং এর মধ্যে Red
, Green
, এবং Blue
এই মানগুলো থাকে, তাহলে প্রতিটি মানকে একটি সংখ্যা দিয়ে প্রতিস্থাপন করা হয়:
Red
-> 0Green
-> 1Blue
-> 2এই প্রক্রিয়ায় প্রতিটি ক্যাটেগরিক্যাল ভ্যালু একটি নির্দিষ্ট সংখ্যা দ্বারা প্রতিস্থাপিত হয়। তবে, Label Encoding সাধারণত শুধুমাত্র একধরনের ক্যাটেগরিক্যাল বৈশিষ্ট্যের জন্য ভাল কাজ করে, যেগুলোতে অর্ডার বা ধারাবাহিকতা থাকে (যেমন, Low
, Medium
, High
)। যদি ক্যাটেগরিক্যাল ডেটার মধ্যে কোনো প্রাকৃতিক অর্ডার না থাকে, তবে Label Encoding মডেলের পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে।
from sklearn.preprocessing import LabelEncoder
# ডেটা তৈরি
categories = ['Red', 'Green', 'Blue', 'Green', 'Red']
# LabelEncoder অবজেক্ট তৈরি
encoder = LabelEncoder()
# ডেটা এনকোডিং
encoded_categories = encoder.fit_transform(categories)
print(encoded_categories) # আউটপুট: [2 1 0 1 2]
One-Hot Encoding একটি জনপ্রিয় পদ্ধতি যেখানে প্রতিটি ক্যাটেগরিক্যাল মানের জন্য একটি নতুন কলাম তৈরি করা হয় এবং একটি নির্দিষ্ট ক্যাটেগরি উপস্থিত থাকলে সেই কলামে 1
প্রদান করা হয়, অন্যথায় 0
প্রদান করা হয়।
উদাহরণস্বরূপ, যদি একটি বৈশিষ্ট্য Color
থাকে এবং এর মধ্যে Red
, Green
, এবং Blue
এই মানগুলো থাকে, তখন One-Hot Encoding এইভাবে কাজ করবে:
Color | Red | Green | Blue |
---|---|---|---|
Red | 1 | 0 | 0 |
Green | 0 | 1 | 0 |
Blue | 0 | 0 | 1 |
Green | 0 | 1 | 0 |
Red | 1 | 0 | 0 |
এখানে, Color
বৈশিষ্ট্যের জন্য তিনটি নতুন কলাম তৈরি করা হয়েছে (Red
, Green
, Blue
), এবং ডেটার মধ্যে প্রতিটি ক্যাটেগরিক্যাল মানের জন্য একটি 1
দেয়া হয়েছে, এবং অন্যান্য কলামে 0
রাখা হয়েছে।
One-Hot Encoding সাধারণত সেইসব ক্যাটেগরিক্যাল বৈশিষ্ট্যের জন্য উপযুক্ত, যেগুলোর মধ্যে কোনো প্রাকৃতিক অর্ডার নেই এবং প্রতিটি ক্যাটেগরি সমান গুরুত্ব বহন করে।
from sklearn.preprocessing import OneHotEncoder
import numpy as np
# ডেটা তৈরি
categories = [['Red'], ['Green'], ['Blue'], ['Green'], ['Red']]
# OneHotEncoder অবজেক্ট তৈরি
encoder = OneHotEncoder(sparse=False)
# ডেটা এনকোডিং
encoded_categories = encoder.fit_transform(categories)
print(encoded_categories)
আউটপুট:
[[0. 0. 1.]
[0. 1. 0.]
[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
বৈশিষ্ট্য | Label Encoding | One-Hot Encoding |
---|---|---|
ডেটা রূপান্তর | একটি সংখ্যায় রূপান্তর করা হয় | নতুন কলাম তৈরি করে প্রতিটি মানকে 1 অথবা 0 এ রূপান্তর করা হয় |
যেমন সমস্যা | অর্ডার বা র্যাঙ্কিংয়ের জন্য ভালো | যখন কোনো প্রাকৃতিক অর্ডার না থাকে |
অতিরিক্ত কলাম | কোনো অতিরিক্ত কলাম তৈরি হয় না | প্রতিটি ক্যাটেগরি জন্য একটি কলাম তৈরি হয় |
ব্যবহারযোগ্যতা | ক্যাটেগরি যদি অর্ডার থাকে তবে ভালো | ক্যাটেগরি যদি অর্ডার না থাকে তবে ভালো |
গুরুত্ব | কখনও কখনও মডেল অস্বাভাবিক আচরণ করতে পারে | মডেল প্যারামিটারগুলি একে অপরের সাথে প্রতিযোগিতার সৃষ্টি করতে পারে না |
Low
, Medium
, High
।Read more