বৈশ্বিক ডেটা বিজ্ঞান অনুশীলনকারীদের আরও দক্ষ এবং শক্তিশালী মডেল তৈরি করতে সহায়তা করার জন্য সাইকিট-লার্নের বৈশিষ্ট্য নির্বাচন কৌশলগুলির একটি বিস্তৃত গাইড।
সাইকিট-লার্ন বৈশিষ্ট্য নির্বাচন: বৈশ্বিক ডেটাসেটের জন্য মাত্রা হ্রাসকরণে দক্ষতা অর্জন
ডেটার ক্রমবর্ধমান মহাবিশ্বে, বৈশিষ্ট্যের বিশাল পরিমাণ সবচেয়ে পরিশীলিত মেশিন লার্নিং মডেলগুলিকেও অভিভূত করতে পারে। এই ঘটনাটি, প্রায়শই "ডাইমেনশনালিটির অভিশাপ" হিসাবে উল্লেখ করা হয়, যা বর্ধিত গণনামূলক খরচ, হ্রাসকৃত মডেল নির্ভুলতা এবং ব্যাখ্যার জন্য একটি হ্রাসকৃত ক্ষমতা তৈরি করতে পারে। সৌভাগ্যক্রমে, বৈশিষ্ট্য নির্বাচন এবং মাত্রা হ্রাসকরণ কৌশল শক্তিশালী সমাধান সরবরাহ করে। পাইথনের মেশিন লার্নিং ইকোসিস্টেমের ভিত্তি সাইকিট-লার্ন, কার্যকরভাবে এই চ্যালেঞ্জগুলি মোকাবেলা করার জন্য সরঞ্জামগুলির একটি সমৃদ্ধ স্যুট সরবরাহ করে, যা এটিকে বিশ্বব্যাপী ডেটা বিজ্ঞানীদের জন্য একটি অপরিহার্য সংস্থান করে তুলেছে।
এই বিস্তৃত গাইডটি মাত্রা হ্রাসের উপর দৃষ্টি নিবদ্ধ করে সাইকিট-লার্নের বৈশিষ্ট্য নির্বাচন ক্ষমতার জটিলতা নিয়ে আলোচনা করবে। আমরা বিভিন্ন পদ্ধতি, তাদের অন্তর্নিহিত নীতি, কোড উদাহরণ সহ বাস্তব প্রয়োগ এবং বিভিন্ন বৈশ্বিক ডেটাসেটের জন্য বিবেচ্য বিষয়গুলি অন্বেষণ করব। আমাদের লক্ষ্য হল আপনাকে, আমাদের উচ্চাকাঙ্ক্ষী এবং অভিজ্ঞ ডেটা অনুশীলনকারীদের বৈশ্বিক দর্শকদের, বৈশিষ্ট্য নির্বাচন সম্পর্কে অবগত সিদ্ধান্ত নেওয়ার জ্ঞান দিয়ে সজ্জিত করা, যা আরও দক্ষ, নির্ভুল এবং ব্যাখ্যাযোগ্য মেশিন লার্নিং মডেলের দিকে পরিচালিত করবে।
মাত্রা হ্রাসকরণ বোঝা
সাইকিট-লার্নের নির্দিষ্ট সরঞ্জামগুলিতে ডুব দেওয়ার আগে, মাত্রা হ্রাসের মৌলিক ধারণাগুলি উপলব্ধি করা অত্যন্ত গুরুত্বপূর্ণ। এই প্রক্রিয়াটিতে উচ্চ-মাত্রিক স্থান থেকে নিম্ন-মাত্রিক স্থানে ডেটা রূপান্তর করা জড়িত, যতটা সম্ভব গুরুত্বপূর্ণ তথ্য সংরক্ষণ করা হয়। এর সুবিধাগুলি অনেক:
- হ্রাসকৃত অতিরিক্ত ফিটিং: কম বৈশিষ্ট্য মানে একটি সরল মডেল, প্রশিক্ষণ ডেটাতে নয়েজ শেখার প্রবণতা কম।
- দ্রুত প্রশিক্ষণের সময়: কম বৈশিষ্ট্যযুক্ত মডেলগুলি উল্লেখযোগ্যভাবে দ্রুত প্রশিক্ষণ দেয়।
- উন্নত মডেল ইন্টারপ্রেটেবিলিটি: কম বৈশিষ্ট্যের মধ্যে সম্পর্ক বোঝা সহজ।
- হ্রাসকৃত স্টোরেজ স্পেস: নিম্ন মাত্রার জন্য কম মেমরির প্রয়োজন হয়।
- নয়েজ হ্রাস: অপ্রাসঙ্গিক বা অতিরিক্ত বৈশিষ্ট্যগুলি সরানো যেতে পারে, যার ফলে পরিষ্কার ডেটা পাওয়া যায়।
মাত্রা হ্রাসকরণকে মূলত দুটি প্রধান উপায়ে শ্রেণীবদ্ধ করা যেতে পারে:
1. বৈশিষ্ট্য নির্বাচন
এই পদ্ধতিতে মূল বৈশিষ্ট্যগুলির একটি উপসেট নির্বাচন করা জড়িত যা হাতের সমস্যার জন্য সবচেয়ে প্রাসঙ্গিক। মূল বৈশিষ্ট্যগুলি ধরে রাখা হয়, তবে তাদের সংখ্যা হ্রাস করা হয়। এটিকে একটি রেসিপির জন্য সবচেয়ে প্রভাবশালী উপাদানগুলি সনাক্তকরণ এবং বাকিগুলি বাতিল করার মতো মনে করুন।
2. বৈশিষ্ট্য নিষ্কাশন
এই পদ্ধতিতে মূল বৈশিষ্ট্যগুলিকে নতুন, ছোট বৈশিষ্ট্যগুলির একটি সেটে রূপান্তরিত করা হয়। এই নতুন বৈশিষ্ট্যগুলি মূল বৈশিষ্ট্যগুলির সংমিশ্রণ বা অভিক্ষেপ, যা ডেটার সবচেয়ে গুরুত্বপূর্ণ প্রকরণ বা তথ্য ক্যাপচার করার লক্ষ্যে কাজ করে। এটি মূল উপাদানগুলির একটি পাতিত সার তৈরি করার মতো।
সাইকিট-লার্ন এই উভয় পদ্ধতির জন্য শক্তিশালী সরঞ্জাম সরবরাহ করে। আমরা সেই কৌশলগুলির উপর দৃষ্টি নিবদ্ধ করব যা প্রায়শই বৈশিষ্ট্য নির্বাচন বা নিষ্কাশনের মাধ্যমে মাত্রা হ্রাসে অবদান রাখে।
সাইকিট-লার্নে বৈশিষ্ট্য নির্বাচন পদ্ধতি
বৈশিষ্ট্য নির্বাচন করার জন্য সাইকিট-লার্ন বেশ কয়েকটি উপায় সরবরাহ করে। এগুলি মূলত তিনটি বিভাগে বিভক্ত করা যেতে পারে:
1. ফিল্টার পদ্ধতি
ফিল্টার পদ্ধতিগুলি কোনও নির্দিষ্ট মেশিন লার্নিং মডেল থেকে স্বতন্ত্রভাবে তাদের অন্তর্নিহিত বৈশিষ্ট্যগুলির ভিত্তিতে বৈশিষ্ট্যগুলির প্রাসঙ্গিকতা মূল্যায়ন করে। এগুলি সাধারণত দ্রুত এবং গণনামূলকভাবে সস্তা, যা তাদের প্রাথমিক ডেটা অনুসন্ধানের জন্য বা খুব বড় ডেটাসেটের সাথে কাজ করার সময় আদর্শ করে তোলে। সাধারণ মেট্রিকগুলির মধ্যে রয়েছে পারস্পরিক সম্পর্ক, পারস্পরিক তথ্য এবং পরিসংখ্যানগত পরীক্ষা।
a) পারস্পরিক সম্পর্ক-ভিত্তিক বৈশিষ্ট্য নির্বাচন
যে বৈশিষ্ট্যগুলি টার্গেট ভেরিয়েবলের সাথে অত্যন্ত সম্পর্কযুক্ত তাদের গুরুত্বপূর্ণ হিসাবে বিবেচনা করা হয়। বিপরীতে, যে বৈশিষ্ট্যগুলি একে অপরের সাথে অত্যন্ত সম্পর্কযুক্ত (মাল্টিকোলিনিয়ারিটি) অতিরিক্ত হতে পারে এবং অপসারণের জন্য বিবেচনা করা যেতে পারে। সাইকিট-লার্নের feature_selection মডিউল এটিতে সহায়তা করার জন্য সরঞ্জাম সরবরাহ করে।
উদাহরণ: ভেরিয়েন্স থ্রেশহোল্ড
খুব কম ভেরিয়েন্সযুক্ত বৈশিষ্ট্যগুলি খুব বেশি পার্থক্যমূলক শক্তি সরবরাহ করতে পারে না। VarianceThreshold ক্লাস সেই বৈশিষ্ট্যগুলি সরিয়ে দেয় যার ভেরিয়েন্স একটি নির্দিষ্ট থ্রেশহোল্ড পূরণ করে না। এটি সংখ্যাগত বৈশিষ্ট্যগুলির জন্য বিশেষভাবে কার্যকর।
from sklearn.feature_selection import VarianceThreshold
import numpy as np
X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
selector = VarianceThreshold(threshold=0.0)
selector.fit_transform(X)
# Output: array([[2, 0, 3], [1, 4, 3], [1, 1, 3]])
এই উদাহরণে, প্রথম বৈশিষ্ট্যটির (সমস্ত শূন্য) শূন্য ভেরিয়েন্স রয়েছে এবং এটি সরানো হয়েছে। ধ্রুবক বা প্রায় ধ্রুবক বৈশিষ্ট্যগুলি বাতিল করার এটি একটি মৌলিক তবে কার্যকর উপায় যা কোনও ভবিষ্যদ্বাণীমূলক শক্তি সরবরাহ করে না।
উদাহরণ: টার্গেটের সাথে পারস্পরিক সম্পর্ক (পান্ডাস এবং সাইপি ব্যবহার করে)
যদিও সাইকিট-লার্নের সমস্ত বৈশিষ্ট্য প্রকারের মধ্যে টার্গেটের সাথে পারস্পরিক সম্পর্কের জন্য সরাসরি উচ্চ-স্তরের ফাংশন নেই, তবে এটি একটি সাধারণ প্রিপrocessing পদক্ষেপ। এর জন্য আমরা পান্ডাস এবং সাইপি ব্যবহার করতে পারি।
import pandas as pd
import numpy as np
from scipy.stats import pearsonr
# Sample data
data = {
'feature1': np.random.rand(100),
'feature2': np.random.rand(100) * 2,
'feature3': np.random.rand(100) - 1,
'target': np.random.randint(0, 2, 100)
}
df = pd.DataFrame(data)
# Calculate Pearson correlation with the target
correlations = df.corr()['target'].drop('target')
# Select features with correlation above a certain threshold (e.g., 0.2)
selected_features = correlations[abs(correlations) > 0.2].index.tolist()
print(f"Features correlated with target: {selected_features}")
এই স্নিপেটটি কীভাবে সেই বৈশিষ্ট্যগুলি সনাক্ত করতে হয় তা প্রদর্শন করে যা টার্গেট ভেরিয়েবলের সাথে একটি লিনিয়ার সম্পর্কযুক্ত। বাইনারি টার্গেটের জন্য, পয়েন্ট-বাইসেরিয়াল সম্পর্ক প্রাসঙ্গিক, এবং শ্রেণীবদ্ধ টার্গেটের জন্য, অন্যান্য পরিসংখ্যানগত পরীক্ষাগুলি আরও উপযুক্ত।
b) পরিসংখ্যানগত পরীক্ষা
বৈশিষ্ট্য এবং টার্গেট ভেরিয়েবলের মধ্যে নির্ভরতা পরিমাপ করতে ফিল্টার পদ্ধতিগুলি পরিসংখ্যানগত পরীক্ষাও ব্যবহার করতে পারে। শ্রেণীবদ্ধ বৈশিষ্ট্যগুলির সাথে কাজ করার সময় বা ডেটা বিতরণ সম্পর্কে নির্দিষ্ট অনুমান করা যেতে পারে তখন এগুলি বিশেষভাবে কার্যকর।
সাইকিট-লার্নের feature_selection মডিউল সরবরাহ করে:
f_classif: শ্রেণিবদ্ধকরণ কাজের জন্য লেবেল/বৈশিষ্ট্যের মধ্যে ANOVA F-মান। ধরে নেওয়া হয় বৈশিষ্ট্যগুলি সংখ্যাগত এবং টার্গেট শ্রেণীবদ্ধ।f_regression: রিগ্রেশন কাজের জন্য লেবেল/বৈশিষ্ট্যের মধ্যে F-মান। ধরে নেওয়া হয় বৈশিষ্ট্যগুলি সংখ্যাগত এবং টার্গেট সংখ্যাগত।mutual_info_classif: একটি পৃথক টার্গেট ভেরিয়েবলের জন্য পারস্পরিক তথ্য। অ-লিনিয়ার সম্পর্ক পরিচালনা করতে পারে।mutual_info_regression: একটি ক্রমাগত টার্গেট ভেরিয়েবলের জন্য পারস্পরিক তথ্য।chi2: শ্রেণিবদ্ধকরণ কাজের জন্য অ-নেতিবাচক বৈশিষ্ট্যগুলির চি-স্কোয়ার পরিসংখ্যান। শ্রেণীবদ্ধ বৈশিষ্ট্যগুলির জন্য ব্যবহৃত হয়।
উদাহরণ: `f_classif` এবং `SelectKBest` ব্যবহার করে
SelectKBest হল একটি মেটা-ট্রান্সফরমার যা আপনাকে একটি নির্বাচিত স্কোরিং ফাংশনের (যেমন f_classif) ভিত্তিতে বৈশিষ্ট্যগুলি নির্বাচন করতে দেয়।
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, f_classif
iris = load_iris()
X, y = iris.data, iris.target
# Select the top 2 features using f_classif
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
print(f"Selected feature names: {[iris.feature_names[i] for i in selected_indices]}")
এই উদাহরণটি শ্রেণিবদ্ধকরণের জন্য তাদের পরিসংখ্যানগত তাৎপর্যের ভিত্তিতে কীভাবে 'k' সেরা বৈশিষ্ট্যগুলি বেছে নিতে হয় তা দেখায়। f_classif-এ F-মান মূলত দলগুলির (ক্লাস) মধ্যে প্রকরণকে গোষ্ঠীগুলির মধ্যে প্রকরণের সাপেক্ষে পরিমাপ করে। একটি উচ্চ F-মান বৈশিষ্ট্য এবং টার্গেটের মধ্যে একটি শক্তিশালী সম্পর্ক নির্দেশ করে।
বৈশ্বিক বিবেচনা: বিভিন্ন অঞ্চল থেকে ডেটাসেটের সাথে কাজ করার সময় (যেমন, বিভিন্ন জলবায়ু থেকে সেন্সর ডেটা, বিভিন্ন অর্থনৈতিক ব্যবস্থা থেকে আর্থিক ডেটা), বৈশিষ্ট্যগুলির পরিসংখ্যানগত বৈশিষ্ট্যগুলি উল্লেখযোগ্যভাবে পরিবর্তিত হতে পারে। এই পরিসংখ্যানগত পরীক্ষাগুলির অনুমানগুলি বোঝা (যেমন, ANOVA-র জন্য স্বাভাবিকতা) অত্যন্ত গুরুত্বপূর্ণ, এবং পারস্পরিক তথ্যের মতো অ-প্যারামেট্রিক পরীক্ষাগুলি বিভিন্ন পরিস্থিতিতে আরও শক্তিশালী হতে পারে।
2. র্যাপার পদ্ধতি
র্যাপার পদ্ধতিগুলি বৈশিষ্ট্য উপসেটের গুণমান মূল্যায়ন করতে একটি নির্দিষ্ট মেশিন লার্নিং মডেল ব্যবহার করে। তারা বৈশিষ্ট্যগুলির সর্বোত্তম সেট খুঁজে বের করার জন্য একটি অনুসন্ধান কৌশলের মধ্যে একটি মডেল প্রশিক্ষণ প্রক্রিয়া 'র্যাপ' করে। ফিল্টার পদ্ধতির চেয়ে সাধারণত আরও নির্ভুল হলেও, পুনরাবৃত্ত মডেল প্রশিক্ষণের কারণে এগুলি গণনামূলকভাবে অনেক বেশি ব্যয়বহুল।
a) পুনরাবৃত্ত বৈশিষ্ট্য অপসারণ (RFE)
আরএফই পুনরাবৃত্তভাবে বৈশিষ্ট্যগুলি সরিয়ে কাজ করে। এটি পুরো বৈশিষ্ট্য সেটে একটি মডেল প্রশিক্ষণ দিয়ে শুরু করে, তারপরে মডেলের সহগ বা বৈশিষ্ট্য গুরুত্বের উপর ভিত্তি করে সর্বনিম্ন গুরুত্বপূর্ণ বৈশিষ্ট্য(গুলি) সরিয়ে দেয়। কাঙ্ক্ষিত সংখ্যক বৈশিষ্ট্য না পৌঁছানো পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি করা হয়।
from sklearn.datasets import make_classification
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# Generate synthetic data
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
# Use a Logistic Regression model (can be any model that supports coef_ or feature_importances_)
estimator = LogisticRegression(solver='liblinear')
# Initialize RFE to select top 5 features
selector = RFE(estimator, n_features_to_select=5, step=1)
selector = selector.fit(X, y)
X_new = selector.transform(X)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
আরএফই শক্তিশালী কারণ এটি নির্বাচিত মডেল দ্বারা মূল্যায়ন করা বৈশিষ্ট্যগুলির মধ্যে মিথস্ক্রিয়া বিবেচনা করে। step প্যারামিটার প্রতিটি পুনরাবৃত্তিতে কতগুলি বৈশিষ্ট্য সরানো হয় তা নিয়ন্ত্রণ করে।
b) ক্রমানুসারে বৈশিষ্ট্য নির্বাচন (SFS)
যদিও সাইকিট-লার্নের মূল feature_selection-এ সরাসরি কোনও ক্লাস নেই, ক্রমানুসারে বৈশিষ্ট্য নির্বাচন একটি ধারণাগত পদ্ধতি যা প্রায়শই সাইকিট-লার্ন Estimator ব্যবহার করে প্রয়োগ করা হয়। এটির মধ্যে ফরোয়ার্ড সিলেকশন (একটি খালি সেট দিয়ে শুরু করা এবং একের পর এক বৈশিষ্ট্য যুক্ত করা) বা ব্যাকওয়ার্ড এলিমিনেশন (সমস্ত বৈশিষ্ট্য দিয়ে শুরু করা এবং একের পর এক সেগুলি সরিয়ে দেওয়া) জড়িত। সাইকিট-লার্নের SequentialFeatureSelector sklearn.feature_selection-এ এটি প্রয়োগ করে।
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
estimator = LogisticRegression(solver='liblinear')
# Forward selection: add features until desired number is reached
sfs_forward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='forward', cv=5)
sfs_forward.fit(X, y)
X_new_forward = sfs_forward.transform(X)
print(f"Forward Selection - Reduced shape: {X_new_forward.shape}")
# Backward selection: start with all features and remove
sfs_backward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='backward', cv=5)
sfs_backward.fit(X, y)
X_new_backward = sfs_backward.transform(X)
print(f"Backward Selection - Reduced shape: {X_new_backward.shape}")
SequentialFeatureSelector-এর cv প্যারামিটার ক্রস-ভ্যালিডেশনকে বোঝায়, যা বৈশিষ্ট্য নির্বাচনকে আরও শক্তিশালী করতে এবং প্রশিক্ষণ ডেটাতে অতিরিক্ত ফিটিংয়ের প্রবণতা কমাতে সহায়তা করে। বিশ্বব্যাপী এই পদ্ধতিগুলি প্রয়োগ করার সময় এটি একটি গুরুত্বপূর্ণ বিবেচনা, কারণ ডেটার গুণমান এবং বিতরণ অত্যন্ত ভিন্ন হতে পারে।
3. এম্বেডেড পদ্ধতি
এম্বেডেড পদ্ধতিগুলি মডেল প্রশিক্ষণ প্রক্রিয়ার অংশ হিসাবে বৈশিষ্ট্য নির্বাচন করে। বৈশিষ্ট্য মিথস্ক্রিয়া বিবেচনা করার সময়ও wrapper পদ্ধতির চেয়ে গণনামূলকভাবে কম ব্যয়বহুল হওয়ার সুবিধা তাদের রয়েছে। অনেক নিয়মিত মডেল এই বিভাগে পড়ে।
a) L1 নিয়মিতকরণ (লাসো)
লিনিয়ার মডেলের Lasso (লিস্ট অ্যাবসোলুট শ্রিনকেজ অ্যান্ড সিলেকশন অপারেটর)-এর মতো মডেলগুলি L1 নিয়মিতকরণ ব্যবহার করে। এই কৌশলটি সহগের পরম মানের উপর একটি পেনাল্টি যুক্ত করে, যা কিছু সহগকে একেবারে শূন্যে নিয়ে যেতে পারে। শূন্য সহগযুক্ত বৈশিষ্ট্যগুলি কার্যকরভাবে সরানো হয়।
from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, n_informative=10, random_state=42, noise=10)
# Lasso with alpha (regularization strength)
# A higher alpha leads to more regularization and potentially more zero coefficients
lasso = Lasso(alpha=0.1, random_state=42)
lasso.fit(X, y)
# Get the number of non-zero coefficients (selected features)
non_zero_features = np.sum(lasso.coef_ != 0)
print(f"Number of features selected by Lasso: {non_zero_features}")
# To get the actual selected features:
selected_features_mask = lasso.coef_ != 0
X_new = X[:, selected_features_mask]
print(f"Reduced shape: {X_new.shape}")
ক্রস-ভ্যালিডেশনের মাধ্যমে স্বয়ংক্রিয়ভাবে সর্বোত্তম আলফা মান খুঁজে পেতে LassoCV ব্যবহার করা যেতে পারে।
b) ট্রি-ভিত্তিক বৈশিষ্ট্য গুরুত্ব
RandomForestClassifier, GradientBoostingClassifier, এবং ExtraTreesClassifier-এর মতো এনসেম্বল পদ্ধতিগুলি সহজাতভাবে বৈশিষ্ট্য গুরুত্ব সরবরাহ করে। এইগুলি গণনা করা হয় প্রতিটি বৈশিষ্ট্য এনসেম্বলের গাছগুলিতে অশুচিতা বা ত্রুটি হ্রাস করতে কতটা অবদান রাখে তার ভিত্তিতে। কম গুরুত্বযুক্ত বৈশিষ্ট্যগুলি সরানো যেতে পারে।
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
# Get feature importances
importances = model.feature_importances_
# Sort features by importance
indices = np.argsort(importances)[::-1]
print("Feature ranking:")
for f in range(X.shape[1]):
print(f"{f + 1}. feature {indices[f]} ({cancer.feature_names[indices[f]]}) - {importances[indices[f]]:.4f}")
# Select top N features (e.g., top 10)
N = 10
selected_features_mask = np.zeros(X.shape[1], dtype=bool)
selected_features_mask[indices[:N]] = True
X_new = X[:, selected_features_mask]
print(f"Reduced shape after selecting top {N} features: {X_new.shape}")
ট্রি-ভিত্তিক পদ্ধতিগুলি শক্তিশালী কারণ তারা অ-লিনিয়ার সম্পর্ক এবং বৈশিষ্ট্য মিথস্ক্রিয়া ক্যাপচার করতে পারে। এগুলি বিভিন্ন ডোমেনে ব্যাপকভাবে প্রযোজ্য, চিকিৎসা নির্ণয় (উদাহরণে হিসাবে) থেকে শুরু করে বিভিন্ন বাজারে আর্থিক জালিয়াতি সনাক্তকরণ পর্যন্ত।
মাত্রা হ্রাসের জন্য বৈশিষ্ট্য নিষ্কাশন
বৈশিষ্ট্য নির্বাচন মূল বৈশিষ্ট্যগুলি রাখে, বৈশিষ্ট্য নিষ্কাশন নতুন, হ্রাসকৃত বৈশিষ্ট্যগুলির সেট তৈরি করে। এটি বিশেষভাবে কার্যকর যখন মূল বৈশিষ্ট্যগুলি অত্যন্ত সম্পর্কযুক্ত বা আপনি যখন ডেটাকে একটি নিম্ন-মাত্রিক স্থানে প্রজেক্ট করতে চান যা সর্বাধিক প্রকরণ ক্যাপচার করে।
1. প্রধান উপাদান বিশ্লেষণ (PCA)
PCA হল একটি লিনিয়ার রূপান্তর কৌশল যার লক্ষ্য হল অর্থোগোনাল অক্ষগুলির (প্রধান উপাদান) একটি সেট খুঁজে বের করা যা ডেটার সর্বাধিক প্রকরণ ক্যাপচার করে। প্রথম প্রধান উপাদান সর্বাধিক প্রকরণ ক্যাপচার করে, দ্বিতীয়টি পরবর্তী সর্বাধিক (প্রথমটির অর্থোগোনাল) ক্যাপচার করে এবং আরও অনেক কিছু। শুধুমাত্র প্রথম 'k' প্রধান উপাদানগুলিকে রেখে, আমরা মাত্রা হ্রাস অর্জন করি।
গুরুত্বপূর্ণ দ্রষ্টব্য: PCA বৈশিষ্ট্যের স্কেলের প্রতি সংবেদনশীল। PCA প্রয়োগ করার আগে আপনার ডেটা স্কেল করা (যেমন, StandardScaler ব্যবহার করে) অত্যন্ত গুরুত্বপূর্ণ।
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.datasets import load_wine
wine = load_wine()
X, y = wine.data, wine.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after PCA: {X_pca.shape}")
# The explained variance ratio shows how much variance each component captures
print(f"Explained variance ratio: {pca.explained_variance_ratio_}")
print(f"Total explained variance: {np.sum(pca.explained_variance_ratio_):.4f}")
PCA ২ বা ৩ মাত্রায় হ্রাস করে উচ্চ-মাত্রিক ডেটা ভিজ্যুয়ালাইজ করার জন্য চমৎকার। এটি অনুসন্ধানী ডেটা বিশ্লেষণে একটি মৌলিক কৌশল এবং পরবর্তী মডেলিং পদক্ষেপগুলিকে উল্লেখযোগ্যভাবে গতি বাড়িয়ে তুলতে পারে। এর কার্যকারিতা ইমেজ প্রসেসিং এবং জেনেটিক্সের মতো ডোমেনগুলিতে পরিলক্ষিত হয়।
2. লিনিয়ার ডিসক্রিমিন্যান্ট অ্যানালাইসিস (LDA)
PCA-এর বিপরীতে, যা তত্ত্বাবধানহীন এবং বৈকল্পিকতা সর্বাধিক করার লক্ষ্যে কাজ করে, LDA হল একটি তত্ত্বাবধান কৌশল যার লক্ষ্য হল একটি নিম্ন-মাত্রিক উপস্থাপনা খুঁজে বের করা যা ক্লাসগুলির মধ্যে পৃথকীকরণকে সর্বাধিক করে। এটি প্রাথমিকভাবে শ্রেণিবদ্ধকরণ কাজের জন্য ব্যবহৃত হয়।
গুরুত্বপূর্ণ দ্রষ্টব্য: LDA-এর জন্য বৈশিষ্ট্যগুলি স্কেল করাও প্রয়োজন। তদুপরি, LDA-তে উপাদানের সংখ্যা সর্বাধিক n_classes - 1-এর মধ্যে সীমাবদ্ধ।
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize LDA. Number of components cannot exceed n_classes - 1 (which is 2 for Iris)
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after LDA: {X_lda.shape}")
# LDA also has explained_variance_ratio_ but it's class separability
print(f"Explained variance ratio (class separability): {lda.explained_variance_ratio_}")
LDA বিশেষভাবে উপযোগী যখন লক্ষ্য হল একটি শ্রেণীবদ্ধকারী তৈরি করা যা আপনার ডেটার বিভিন্ন বিভাগের মধ্যে ভালভাবে পার্থক্য করতে পারে, যা গ্রাহক বিভাজন বা রোগ শ্রেণিবদ্ধকরণের মতো অনেক বৈশ্বিক অ্যাপ্লিকেশনে একটি সাধারণ চ্যালেঞ্জ।
3. টি-ডিস্ট্রিবিউটেড স্টোকাস্টিক নেইবার এম্বেডিং (টি-এসএনই)
টি-এসএনই হল একটি অ-লিনিয়ার মাত্রা হ্রাসকরণ কৌশল যা প্রাথমিকভাবে উচ্চ-মাত্রিক ডেটাসেটগুলি ভিজ্যুয়ালাইজ করার জন্য ব্যবহৃত হয়। এটি উচ্চ-মাত্রিক ডেটা পয়েন্টগুলিকে নিম্ন-মাত্রিক স্থানে (সাধারণত 2D বা 3D) ম্যাপ করে কাজ করে যেমন অনুরূপ পয়েন্টগুলিকে নিম্ন-মাত্রিক স্থানে অনুরূপ দূরত্ব দ্বারা মডেল করা হয়। এটি ডেটার মধ্যে স্থানীয় কাঠামো এবং ক্লাস্টার প্রকাশে পারদর্শী।
গুরুত্বপূর্ণ দ্রষ্টব্য: টি-এসএনই গণনামূলকভাবে ব্যয়বহুল এবং সাধারণত মডেল প্রশিক্ষণের জন্য প্রিপrocessing পদক্ষেপের পরিবর্তে ভিজ্যুয়ালাইজেশনের জন্য ব্যবহৃত হয়। ফলাফলগুলি বিভিন্ন র্যান্ডম ইনিশিয়ালাইজেশন এবং প্যারামিটার সেটিংসের সাথেও পরিবর্তিত হতে পারে।
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()
X, y = digits.data, digits.target
# For demonstration, we'll use a subset of the data as t-SNE can be slow
subset_indices = np.random.choice(len(X), 1000, replace=False)
X_subset = X[subset_indices]
y_subset = y[subset_indices]
# Initialize t-SNE with 2 components
# perplexity is related to the number of nearest neighbors (e.g., 30 is common)
# n_iter is the number of iterations for optimization
tsne = TSNE(n_components=2, perplexity=30, n_iter=300, random_state=42)
X_tsne = tsne.fit_transform(X_subset)
print(f"Original subset shape: {X_subset.shape}")
print(f"Reduced shape after t-SNE: {X_tsne.shape}")
# Plotting the results (optional, for visualization)
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y_subset, cmap='viridis', alpha=0.7)
plt.title('t-SNE visualization of Digits dataset')
plt.xlabel('t-SNE component 1')
plt.ylabel('t-SNE component 2')
plt.legend(*scatter.legend_elements(), title='Classes')
plt.show()
জিনোমিক্স বা সোশ্যাল নেটওয়ার্ক বিশ্লেষণের মতো ক্ষেত্রগুলিতে সম্মুখীন হওয়া জটিল, উচ্চ-মাত্রিক ডেটার অন্তর্নিহিত কাঠামো বোঝার জন্য টি-এসএনই অমূল্য, যা এমন নিদর্শনগুলির চাক্ষুষ অন্তর্দৃষ্টি প্রদান করে যা অন্যথায় লুকানো থাকতে পারে।
বৈশ্বিক ডেটাসেটের জন্য সঠিক কৌশল নির্বাচন করা
উপযুক্ত বৈশিষ্ট্য নির্বাচন বা নিষ্কাশন পদ্ধতি নির্বাচন করা কোনও এক আকারের সাথে মানানসই সিদ্ধান্ত নয়। বেশ কয়েকটি কারণ, বিশেষত বৈশ্বিক ডেটাসেটের জন্য গুরুত্বপূর্ণ, এই পছন্দটিকে প্রভাবিত করে:
- ডেটার প্রকৃতি: আপনার ডেটা কি সংখ্যাগত, শ্রেণীবদ্ধ বা মিশ্র? পরিচিত বিতরণ আছে কি? উদাহরণস্বরূপ,
chi2অ-ঋণাত্মক শ্রেণীবদ্ধ বৈশিষ্ট্যের জন্য উপযুক্ত, যেখানেf_classifসংখ্যাগত বৈশিষ্ট্য এবং একটি শ্রেণীবদ্ধ লক্ষ্যের জন্য। - মডেলের প্রকার: লিনিয়ার মডেলগুলি L1 নিয়মিতকরণ থেকে উপকৃত হতে পারে, যেখানে ট্রি-ভিত্তিক মডেলগুলি স্বাভাবিকভাবেই গুরুত্ব প্রদান করে।
- গণনামূলক সংস্থান: ফিল্টার পদ্ধতিগুলি দ্রুততম, তারপরে এম্বেডেড পদ্ধতিগুলি এবং তারপরে wrapper পদ্ধতি এবং t-SNE।
- ব্যাখ্যাযোগ্যতার প্রয়োজনীয়তা: যদি কোনও ভবিষ্যদ্বাণী *কেন* করা হয়েছে তা ব্যাখ্যা করা অত্যাবশ্যক হয়, তবে বৈশিষ্ট্য নির্বাচন পদ্ধতি যা মূল বৈশিষ্ট্যগুলি ধরে রাখে (যেমন RFE বা L1) প্রায়শই বৈশিষ্ট্য নিষ্কাশন পদ্ধতির (যেমন PCA) চেয়ে পছন্দ করা হয় যা বিমূর্ত উপাদান তৈরি করে।
- লিনিয়ারিটি বনাম অ-লিনিয়ারিটি: PCA এবং লিনিয়ার মডেলগুলি লিনিয়ার সম্পর্ক ধরে নেয়, যেখানে টি-এসএনই এবং ট্রি-ভিত্তিক পদ্ধতিগুলি অ-লিনিয়ার প্যাটার্নগুলি ক্যাপচার করতে পারে।
- তত্ত্বাবধানে বনাম তত্ত্বাবধানহীন: LDA তত্ত্বাবধানে (লক্ষ্য পরিবর্তনশীল ব্যবহার করে), যেখানে PCA তত্ত্বাবধানহীন।
- স্কেল এবং ইউনিট: PCA এবং LDA-এর জন্য বৈশিষ্ট্য স্কেলিং অপরিহার্য। বিভিন্ন বৈশ্বিক অঞ্চল থেকে সংগৃহীত ডেটাতে স্কেলের পার্থক্য বিবেচনা করুন। উদাহরণস্বরূপ, মুদ্রা মান বা সেন্সর রিডিংয়ের দেশ বা সেন্সর প্রকারগুলিতে অত্যন্ত ভিন্ন স্কেল থাকতে পারে।
- সাংস্কৃতিক এবং আঞ্চলিক সূক্ষ্মতা: বিভিন্ন সাংস্কৃতিক প্রেক্ষাপট থেকে মানুষের আচরণ, জনসংখ্যা বা অনুভূতি জড়িত ডেটাসেটের সাথে কাজ করার সময়, বৈশিষ্ট্যগুলির ব্যাখ্যা জটিল হতে পারে। একটি বৈশিষ্ট্য যা একটি অঞ্চলে অত্যন্ত ভবিষ্যদ্বাণীপূর্ণ, তা ভিন্ন সামাজিক নিয়ম, অর্থনৈতিক অবস্থা বা ডেটা সংগ্রহের পদ্ধতির কারণে অন্য অঞ্চলে অপ্রাসঙ্গিক বা এমনকি বিভ্রান্তিকরও হতে পারে। বিভিন্ন জনসংখ্যার মধ্যে বৈশিষ্ট্যের গুরুত্ব মূল্যায়ন করার সময় সর্বদা ডোমেন দক্ষতা বিবেচনা করুন।
কার্যকরী অন্তর্দৃষ্টি:
- সহজভাবে শুরু করুন: একটি দ্রুত মূল্যায়নের জন্য এবং স্পষ্ট নয়েজ অপসারণ করতে ফিল্টার পদ্ধতিগুলি (যেমন ভেরিয়েন্স থ্রেশহোল্ড, পরিসংখ্যানগত পরীক্ষা) দিয়ে শুরু করুন।
- পুনরাবৃত্তি করুন এবং মূল্যায়ন করুন: বিভিন্ন পদ্ধতি নিয়ে পরীক্ষা করুন এবং উপযুক্ত মেট্রিক এবং ক্রস-ভ্যালিডেশন ব্যবহার করে আপনার মডেলের কর্মক্ষমতার উপর তাদের প্রভাব মূল্যায়ন করুন।
- ভিজ্যুয়ালাইজ করুন: নিম্ন মাত্রায় আপনার ডেটা ভিজ্যুয়ালাইজ করতে PCA বা t-SNE-এর মতো কৌশল ব্যবহার করুন, যা অন্তর্নিহিত কাঠামো প্রকাশ করতে পারে এবং আপনার বৈশিষ্ট্য নির্বাচন কৌশলকে জানাতে পারে।
- ডোমেন দক্ষতা চাবিকাঠি: বৈশিষ্ট্যের অর্থ এবং প্রাসঙ্গিকতা বুঝতে ডোমেন বিশেষজ্ঞদের সাথে সহযোগিতা করুন, বিশেষ করে জটিল বৈশ্বিক ডেটা নিয়ে কাজ করার সময়।
- এনসেম্বল পদ্ধতি বিবেচনা করুন: একাধিক বৈশিষ্ট্য নির্বাচন কৌশল একত্রিত করা কখনও কখনও একক পদ্ধতির উপর নির্ভর করার চেয়ে ভাল ফলাফল দিতে পারে।
সংহত ওয়ার্কফ্লোর জন্য সাইকিট-লার্নের পাইপলাইন
বৈশিষ্ট্য নির্বাচন/নিষ্কাশন সহ প্রিপrocessing পদক্ষেপগুলিকে মডেল প্রশিক্ষণের সাথে একত্রিত করার জন্য সাইকিট-লার্নের Pipeline অবজেক্টটি বিশেষভাবে উপযোগী। এটি নিশ্চিত করে যে আপনার বৈশিষ্ট্য নির্বাচন ক্রস-ভ্যালিডেশনের প্রতিটি ভাঁজের মধ্যে ধারাবাহিকভাবে সঞ্চালিত হয়, ডেটা লিক্যাজ প্রতিরোধ করে এবং আরও নির্ভরযোগ্য ফলাফল তৈরি করে। বিভিন্ন বৈশ্বিক বাজারে স্থাপন করা হবে এমন মডেল তৈরির সময় এটি বিশেষভাবে গুরুত্বপূর্ণ।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.datasets import load_breast_cancer
bc = load_breast_cancer()
X, y = bc.data, bc.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Create a pipeline that first scales, then selects features, then trains a classifier
pipe = Pipeline([
('scaler', StandardScaler()),
('selector', SelectKBest(score_func=f_classif, k=10)),
('classifier', LogisticRegression(solver='liblinear'))
])
# Train the pipeline
pipe.fit(X_train, y_train)
# Evaluate the pipeline using cross-validation
cv_scores = cross_val_score(pipe, X_train, y_train, cv=5)
print(f"Cross-validation scores: {cv_scores}")
print(f"Average CV score: {np.mean(cv_scores):.4f}")
# Make predictions on the test set
accuracy = pipe.score(X_test, y_test)
print(f"Test set accuracy: {accuracy:.4f}")
পাইপলাইন ব্যবহার নিশ্চিত করে যে পুরো প্রক্রিয়া - স্কেলিং থেকে শুরু করে বৈশিষ্ট্য নির্বাচন থেকে শ্রেণীবদ্ধকরণ পর্যন্ত - একটি একক সত্তা হিসাবে বিবেচিত হয়। এটি শক্তিশালী মডেল বিকাশের জন্য একটি সর্বোত্তম অনুশীলন, বিশেষত যখন মডেলগুলি বিশ্বব্যাপী স্থাপনের জন্য তৈরি করা হয় যেখানে বিভিন্ন ডেটা বিতরণে ধারাবাহিক কর্মক্ষমতা গুরুত্বপূর্ণ।
উপসংহার
বৈশিষ্ট্য নির্বাচন এবং নিষ্কাশনের মাধ্যমে মাত্রা হ্রাসকরণ দক্ষ, শক্তিশালী এবং ব্যাখ্যাযোগ্য মেশিন লার্নিং মডেল তৈরির একটি অত্যাবশ্যক পদক্ষেপ। সাইকিট-লার্ন এই চ্যালেঞ্জগুলি মোকাবেলার জন্য একটি বিস্তৃত টুলকিট সরবরাহ করে, যা বিশ্বব্যাপী ডেটা বিজ্ঞানীদের ক্ষমতায়ন করে। বিভিন্ন পদ্ধতি - ফিল্টার, wrapper, এম্বেডেড পদ্ধতি এবং PCA এবং LDA-এর মতো বৈশিষ্ট্য নিষ্কাশন কৌশলগুলি বোঝার মাধ্যমে - আপনি আপনার নির্দিষ্ট ডেটাসেট এবং উদ্দেশ্যগুলির জন্য তৈরি তথ্যপূর্ণ সিদ্ধান্ত নিতে পারেন।
আমাদের বৈশ্বিক দর্শকদের জন্য, বিবেচনাগুলি কেবলমাত্র অ্যালগরিদমিক পছন্দগুলির বাইরেও প্রসারিত। ডেটার প্রমাণীকরণ, বিভিন্ন অঞ্চলে বৈশিষ্ট্য সংগ্রহের মাধ্যমে প্রবর্তিত সম্ভাব্য পক্ষপাতিত্ব এবং স্থানীয় স্টেকহোল্ডারদের নির্দিষ্ট ব্যাখ্যাযোগ্যতার প্রয়োজনীয়তা বোঝা অত্যন্ত গুরুত্বপূর্ণ। সাইকিট-লার্নের Pipeline-এর মতো সরঞ্জামগুলি ব্যবহার করা একটি কাঠামোগত এবং পুনরুত্পাদনযোগ্য ওয়ার্কফ্লো নিশ্চিত করে, যা বিভিন্ন আন্তর্জাতিক প্রেক্ষাপটে নির্ভরযোগ্য এআই সমাধান স্থাপনের জন্য অপরিহার্য।
আপনি যখন আধুনিক ডেটা বিজ্ঞানের জটিলতাগুলি নেভিগেট করেন, তখন সাইকিট-লার্নের বৈশিষ্ট্য নির্বাচন ক্ষমতাগুলি আয়ত্ত করা নিঃসন্দেহে একটি গুরুত্বপূর্ণ সম্পদ হবে, যা আপনাকে আপনার ডেটার উত্স নির্বিশেষে এর সম্পূর্ণ সম্ভাবনা উন্মোচন করতে সক্ষম করবে।