Skill

ডেটা ম্যানিপুলেশন এবং প্রি-প্রসেসিং

পাইথন দিয়ে মেশিন লার্নিং (Machine Learning with Python) - Machine Learning

312

ডেটা ম্যানিপুলেশন এবং প্রি-প্রসেসিং হলো মেশিন লার্নিং বা ডেটা সায়েন্সের গুরুত্বপূর্ণ ধাপ। এই ধাপগুলি ডেটা বিশ্লেষণের আগে ডেটাকে সঠিক এবং ব্যবহারযোগ্য ফরম্যাটে রূপান্তরিত করতে সহায়তা করে। এখানে ডেটা ম্যানিপুলেশন এবং প্রি-প্রসেসিং এর বিভিন্ন কৌশল এবং পদ্ধতি আলোচনা করা হলো।

১. ডেটা ম্যানিপুলেশন (Data Manipulation)

ডেটা ম্যানিপুলেশন হলো ডেটার উপর বিভিন্ন অপারেশন বা কাজ করা, যেমন ডেটা নির্বাচন, ফিল্টারিং, সংযোজন, বিভাজন, বা রূপান্তর। এটি ডেটাকে আরো সঠিক, পরিষ্কার, এবং সংজ্ঞাবদ্ধ ফরম্যাটে প্রস্তুত করে।

১.১. ডেটা লোড করা

প্রথমে ডেটা লোড করা হয়, যা সাধারণত CSV, Excel, JSON, বা SQL ডাটাবেস থেকে আসে।

import pandas as pd

# CSV ফাইল থেকে ডেটা লোড করা
df = pd.read_csv('data.csv')

১.২. ডেটা নির্বাচন (Data Selection)

ডেটার নির্দিষ্ট অংশ নির্বাচন করার জন্য আমরা Pandas ব্যবহার করতে পারি। যেমন:

  • একটি কলাম নির্বাচন:
df['column_name']
  • একাধিক কলাম নির্বাচন:
df[['col1', 'col2']]
  • রো নির্বাচন:
df.iloc[0]  # প্রথম রো নির্বাচন
df.iloc[0:5]  # প্রথম ৫টি রো নির্বাচন

১.৩. ডেটা ফিল্টারিং (Data Filtering)

ডেটা ফিল্টারিং এর মাধ্যমে নির্দিষ্ট শর্তের ভিত্তিতে ডেটা নির্বাচন করা যায়। উদাহরণস্বরূপ, কিছু শর্ত অনুসারে ডেটা নির্বাচন:

# যেখানে 'Age' কলামের মান 30 এর চেয়ে বড়
filtered_data = df[df['Age'] > 30]

১.৪. ডেটা গ্রুপিং (Data Grouping)

groupby() ফাংশন ব্যবহার করে ডেটাকে নির্দিষ্ট মান বা শ্রেণীতে গ্রুপ করা যায়।

grouped_data = df.groupby('Category').mean()

১.৫. নতুন কলাম তৈরি (Creating New Columns)

আপনি বিদ্যমান কলামের ভিত্তিতে নতুন কলাম তৈরি করতে পারেন।

df['new_column'] = df['col1'] + df['col2']

২. ডেটা প্রি-প্রসেসিং (Data Preprocessing)

ডেটা প্রি-প্রসেসিং হল ডেটাকে বিশ্লেষণের জন্য প্রস্তুত করার প্রক্রিয়া। এটি মূলত ডেটার অপ্রয়োজনীয় বা অসম্পূর্ণ অংশ দূর করে এবং মডেল তৈরি করার জন্য পরিষ্কার, নরমালাইজড এবং স্কেলড ডেটা তৈরি করে।

২.১. শূন্য মান (Missing Values) মেটানো

ডেটাতে শূন্য মান থাকতে পারে, যা মডেল প্রশিক্ষণের সময় সমস্যা সৃষ্টি করতে পারে। শূন্য মান দূর করার জন্য কয়েকটি উপায় রয়েছে:

  • শূন্য মান বাদ দেওয়া:
df.dropna(inplace=True)
  • শূন্য মান পূর্ণ করা:
df.fillna(df['col_name'].mean(), inplace=True)

এটি col_name কলামের শূন্য মানগুলি তার গড় দিয়ে পূর্ণ করবে।

২.২. ক্যাটেগোরিক্যাল ডেটার এনকোডিং (Categorical Data Encoding)

ক্যাটেগোরিক্যাল ডেটা (যেমন লিঙ্গ, শহর নাম) মডেল প্রশিক্ষণের জন্য সংখ্যায় রূপান্তরিত করতে হয়। এর জন্য LabelEncoder বা One-Hot Encoding ব্যবহার করা হয়:

  • Label Encoding:
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
df['Gender'] = encoder.fit_transform(df['Gender'])
  • One-Hot Encoding:
df = pd.get_dummies(df, columns=['Category'])

২.৩. ডেটা স্কেলিং (Data Scaling)

ডেটা স্কেলিংয়ের মাধ্যমে বিভিন্ন কলামের মানের স্কেল সমান করা হয়, যাতে কোন একটি ফিচার অন্যটির তুলনায় প্রভাবশালী না হয়ে পড়ে। StandardScaler বা MinMaxScaler ব্যবহার করা হয়:

  • StandardScaler:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['col1', 'col2']] = scaler.fit_transform(df[['col1', 'col2']])
  • MinMaxScaler:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['col1', 'col2']] = scaler.fit_transform(df[['col1', 'col2']])

২.৪. আউটলার্স রিমুভাল (Outliers Removal)

ডেটার মধ্যে কিছু আউটলার (অস্বাভাবিক মান) থাকতে পারে, যা মডেলের কার্যকারিতায় প্রভাব ফেলতে পারে। সাধারণত আউটলার্স সরানোর জন্য Z-Score বা IQR পদ্ধতি ব্যবহার করা হয়।

  • Z-Score পদ্ধতি:
from scipy import stats
df = df[(np.abs(stats.zscore(df['col1'])) < 3)]
  • IQR পদ্ধতি:
Q1 = df['col1'].quantile(0.25)
Q3 = df['col1'].quantile(0.75)
IQR = Q3 - Q1
df = df[(df['col1'] >= (Q1 - 1.5 * IQR)) & (df['col1'] <= (Q3 + 1.5 * IQR))]

২.৫. ডেটা ট্রান্সফরমেশন (Data Transformation)

কখনও কখনও ডেটাকে ট্রান্সফর্ম বা রূপান্তরিত করা প্রয়োজন যাতে এটি মডেলের জন্য উপযুক্ত হয়। যেমন লগ ট্রান্সফরমেশন বা পাওয়ার ট্রান্সফরমেশন

df['col1'] = np.log(df['col1'])

২.৬. ফিচার সিলেকশন (Feature Selection)

ফিচার সিলেকশন পদ্ধতির মাধ্যমে গুরুত্বপূর্ণ ফিচারগুলিই নির্বাচন করা হয়, যা মডেলের কার্যকারিতা উন্নত করতে সাহায্য করে। এটি Recursive Feature Elimination (RFE) বা Feature Importance এর মাধ্যমে করা হয়।

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
rfe = RFE(model, 5)
X_rfe = rfe.fit_transform(X, y)

সারাংশ

ডেটা ম্যানিপুলেশন এবং প্রি-প্রসেসিং মেশিন লার্নিং প্রকল্পের গুরুত্বপূর্ণ ধাপ। এর মাধ্যমে ডেটাকে বিশ্লেষণের জন্য প্রস্তুত করা হয়:

  • ডেটা ম্যানিপুলেশন: ডেটা নির্বাচন, ফিল্টারিং, গ্রুপিং, এবং রূপান্তর করা।
  • ডেটা প্রি-প্রসেসিং: শূন্য মান পূর্ণ করা, ক্যাটেগোরিক্যাল ডেটা এনকোডিং, স্কেলিং, আউটলার্স রিমুভাল, এবং ফিচার সিলেকশন করা।

এই পদক্ষেপগুলি মডেলের কার্যকারিতা বাড়াতে সহায়ক এবং সঠিকভাবে ডেটা বিশ্লেষণ করার জন্য অত্যন্ত গুরুত্বপূর্ণ।

Content added By

ডেটা ম্যানিপুলেশন হল মেশিন লার্নিং এবং ডেটা সায়েন্সের একটি গুরুত্বপূর্ণ অংশ। ডেটা বিশ্লেষণ, প্রক্রিয়াকরণ এবং পরিষ্কার করার জন্য NumPy এবং Pandas দুটি অত্যন্ত জনপ্রিয় লাইব্রেরি। এখানে, আমরা NumPy এবং Pandas এর মাধ্যমে ডেটা ম্যানিপুলেশন করার কৌশলগুলি আলোচনা করব।


১. NumPy ব্যবহার

NumPy একটি শক্তিশালী লাইব্রেরি যা গাণিতিক কাজ এবং মাল্টি-ডাইমেনশনাল অ্যারে নিয়ে কাজ করার জন্য ব্যবহৃত হয়। এটি দ্রুত গাণিতিক গণনা এবং ডেটার সাথে কাজ করতে সাহায্য করে।

NumPy এর বৈশিষ্ট্য:

  • এ্যারেস (Arrays): NumPy এর মূল উপাদান হলো ndarray, যা মাল্টি-ডাইমেনশনাল অ্যারে সমর্থন করে।
  • গণনা: গাণিতিক কাজ যেমন যোগফল, গুণফল, স্কেলার পণ্য, রৈখিক গাণিতিক কাজ ইত্যাদি।
  • পারফরমেন্স: এটি C এবং Fortran ভিত্তিক হওয়ায় গতি অত্যন্ত দ্রুত।

NumPy দিয়ে ডেটা ম্যানিপুলেশন:

  1. অ্যারে তৈরি করা: NumPy দিয়ে একটি সিম্পল অ্যারে তৈরি করা খুবই সহজ:

    import numpy as np
    
    # একক ডাইমেনশনাল অ্যারে
    arr = np.array([1, 2, 3, 4, 5])
    print(arr)
    
  2. এ্যারেতে গণনা: NumPy এর সাহায্যে অ্যারের উপর গাণিতিক অপারেশন করা যায়:

    arr = np.array([1, 2, 3, 4, 5])
    
    # অ্যারের উপর গাণিতিক অপারেশন
    print(arr + 2)  # প্রতিটি উপাদানে ২ যোগ করা
    print(arr * 2)  # প্রতিটি উপাদানকে ২ দিয়ে গুণ করা
    
  3. ডাইমেনশন পরিবর্তন: NumPy এর মাধ্যমে অ্যারের ডাইমেনশন পরিবর্তন করা যায়:

    arr = np.array([1, 2, 3, 4, 5, 6])
    reshaped_arr = arr.reshape(2, 3)  # ২x৩ ম্যাট্রিক্সে রূপান্তর
    print(reshaped_arr)
    
  4. ডেটা ফিল্টারিং: একটি শর্ত ভিত্তিক ফিল্টার প্রয়োগ করা:

    arr = np.array([1, 2, 3, 4, 5])
    filtered_arr = arr[arr > 3]  # যেসব উপাদান ৩ এর বেশি
    print(filtered_arr)
    

২. Pandas ব্যবহার

Pandas লাইব্রেরি হল ডেটা ম্যানিপুলেশন এবং বিশ্লেষণের জন্য একটি অত্যন্ত শক্তিশালী টুল। এটি DataFrame এবং Series নামক ডেটা স্ট্রাকচার ব্যবহার করে ডেটার সাথে কাজ করতে সাহায্য করে।

Pandas এর বৈশিষ্ট্য:

  • DataFrame: টেবিল আকারে ডেটা ধারণ করে এবং লাইন ও কলামের মাধ্যমে ডেটার অ্যাক্সেস প্রদান করে।
  • Series: একটি একক কলামের ডেটা।
  • ইউটিলিটি: ডেটা ফিল্টারিং, গ্রুপিং, যোগফল, ক্লাস্টারিং, শূন্য মান পূর্ণ করা ইত্যাদি।

Pandas দিয়ে ডেটা ম্যানিপুলেশন:

  1. DataFrame তৈরি করা:

    import pandas as pd
    
    # ডেটা তৈরি করা
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Age': [25, 30, 35],
            'City': ['New York', 'Los Angeles', 'Chicago']}
    df = pd.DataFrame(data)
    print(df)
    
  2. DataFrame এর কলাম এক্সেস করা:

    # Age কলাম এক্সেস করা
    print(df['Age'])
    
  3. DataFrame এর উপাদান পরিবর্তন:

    df['Age'] = df['Age'] + 5  # Age কলামে ৫ যোগ করা
    print(df)
    
  4. নতুন কলাম যোগ করা:

    df['Country'] = ['USA', 'USA', 'USA']  # নতুন কলাম যোগ করা
    print(df)
    
  5. ফিল্টারিং: Age কলামে ৩০ এর বেশি বয়সের ব্যক্তি নির্বাচন করা:

    filtered_df = df[df['Age'] > 30]
    print(filtered_df)
    
  6. গ্রুপিং এবং অ্যাগ্রিগেশন: Age অনুযায়ী গ্রুপিং এবং গড় বের করা:

    # গড় বয়স বের করা
    avg_age = df['Age'].mean()
    print("Average Age:", avg_age)
    
  7. শূন্য মান পূর্ণ করা: Pandas ব্যবহার করে শূন্য মান (NaN) পূর্ণ করা:

    df['Age'].fillna(df['Age'].mean(), inplace=True)
    print(df)
    

NumPy এবং Pandas তুলনা

বৈশিষ্ট্যNumPyPandas
ডেটা স্ট্রাকচারndarray (নম্বর ভিত্তিক মাল্টি-ডাইমেনশনাল অ্যারে)DataFrame এবং Series (টেবিল আকারে ডেটা)
গণনাদ্রুত গাণিতিক কাজ, ম্যাট্রিক্স অপারেশন, রৈখিক অ্যালজেবরাডেটা ম্যানিপুলেশন, ক্লাস্টারিং, গ্রুপিং
ফিচারগাণিতিক এবং সংখ্যা ভিত্তিক কাজডেটার উপর উচ্চ স্তরের অপারেশন
প্রধান ব্যবহারগাণিতিক ও বৈজ্ঞানিক গণনাডেটা বিশ্লেষণ এবং ম্যানিপুলেশন

সারাংশ

  • NumPy হল গাণিতিক এবং সংখ্যা ভিত্তিক কাজের জন্য আদর্শ, যা মাল্টি-ডাইমেনশনাল অ্যারে এবং ম্যাট্রিক্স অপারেশনকে সমর্থন করে।
  • Pandas হল টেবিল আকারে ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণের জন্য ব্যবহৃত শক্তিশালী লাইব্রেরি। এটি ডেটা ফ্রেমের মাধ্যমে ডেটাকে সহজভাবে ম্যানিপুলেট ও বিশ্লেষণ করতে সাহায্য করে।
  • NumPy গাণিতিক কাজের জন্য এবং Pandas ডেটা ম্যানিপুলেশন এবং বিশ্লেষণের জন্য বিশেষভাবে ব্যবহৃত হয়।

এই দুটি লাইব্রেরি একসাথে ব্যবহার করা ডেটা সায়েন্স এবং মেশিন লার্নিং প্রজেক্টের জন্য অত্যন্ত কার্যকরী।

Content added By

ডেটা প্রি-প্রসেসিং হল মেশিন লার্নিং বা ডেটা সায়েন্স প্রজেক্টের প্রথম এবং গুরুত্বপূর্ণ ধাপ। এই প্রক্রিয়া ডেটাকে পরিষ্কার, সমন্বিত এবং মডেল ট্রেনিংয়ের জন্য প্রস্তুত করতে সাহায্য করে। ডেটা প্রি-প্রসেসিং এর মধ্যে বিভিন্ন ধাপ অন্তর্ভুক্ত থাকে, যেমন মিসিং ডেটা হ্যান্ডলিং, কেটেগোরিক্যাল ভেরিয়েবলের এনকোডিং, স্কেলিং, স্ট্যান্ডার্ডাইজেশন ইত্যাদি। এই প্রসেসগুলি মডেলিংয়ের ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা রাখে এবং সঠিক ফলাফল পাওয়ার সম্ভাবনা বাড়ায়।

১. Missing Data (মিসিং ডেটা)

মিসিং ডেটা হল সেই সমস্ত মান যা কোনো কারণে ডেটাসেট থেকে অনুপস্থিত থাকে। মিসিং ডেটা খুব সাধারণ একটি সমস্যা এবং মেশিন লার্নিং মডেল ট্রেনিংয়ের জন্য এটি খুবই গুরুত্বপূর্ণ। মিসিং ডেটার কারণে মডেল সঠিকভাবে প্রশিক্ষিত হতে পারে না এবং এর ফলস্বরূপ মডেলের পারফরম্যান্স কমে যেতে পারে।

মিসিং ডেটা হ্যান্ডলিং এর পদ্ধতি:

  1. মিসিং ডেটা চিহ্নিত করা:
    • প্রথমে মিসিং ডেটা চিহ্নিত করতে হবে। সাধারণত NaN (Not a Number) বা null মানকে মিসিং ডেটা হিসেবে চিহ্নিত করা হয়।
  2. মিসিং ডেটা পূরণ (Imputation):

    • ক্যাটেগোরিক্যাল ডেটা: ক্যাটেগোরিক্যাল কলামে, মিসিং মানটি সাধারণত সবচেয়ে সাধারণ মান (Mode) দিয়ে পূর্ণ করা হয়।
    • নমেরিক ডেটা: নমেরিক কলামে, মিসিং মানটি গড় (Mean), মধ্যম (Median), বা সর্বাধিক মান (Mode) দিয়ে পূর্ণ করা যায়।

    উদাহরণ:

    import pandas as pd
    from sklearn.impute import SimpleImputer
    
    # ডেটাসেট তৈরি করা
    data = {'Age': [25, 30, None, 35, 40], 'Salary': [50000, 60000, 70000, None, 80000]}
    df = pd.DataFrame(data)
    
    # Imputer তৈরি করা এবং Age ও Salary কলামে গড় দিয়ে মিসিং ডেটা পূর্ণ করা
    imputer = SimpleImputer(strategy='mean')
    df[['Age', 'Salary']] = imputer.fit_transform(df[['Age', 'Salary']])
    
    print(df)
    
  3. মিসিং ডেটা সরানো:

    • যদি ডেটার মধ্যে মিসিং মান বেশি পরিমাণে থাকে, তবে আপনি ওই সারি বা কলামগুলো বাদ দিতে পারেন। তবে, এটি সাধারণত যখন মিসিং ডেটা খুব বেশি পরিমাণে থাকে, তখন ব্যবহার করা হয়।
    df.dropna(inplace=True)
    

২. Encoding Categorical Variables (কেটেগোরিক্যাল ভেরিয়েবলের এনকোডিং)

মেশিন লার্নিং মডেলগুলির জন্য সাধারণত কেটেগোরিক্যাল ভেরিয়েবলগুলি (যেমন 'লিঙ্গ', 'দেশ', 'শ্রেণী') সঠিকভাবে এনকোড (সংকেত) করতে হয়। কারণ অধিকাংশ মডেল শুধুমাত্র সংখ্যাগত ডেটা নিয়ে কাজ করতে পারে, কেটেগোরিক্যাল ডেটাকে সংখ্যায় রূপান্তর করতে হবে।

কেটেগোরিক্যাল ভেরিয়েবলের এনকোডিং পদ্ধতি:

  1. Label Encoding:

    • এই পদ্ধতিতে, প্রতিটি কেটেগোরিক্যাল মানকে একটি অনন্য সংখ্যা দিয়ে উপস্থাপন করা হয়। উদাহরণস্বরূপ, 'Male' কে 0 এবং 'Female' কে 1 দিয়ে এনকোড করা যেতে পারে। তবে, এই পদ্ধতিটি কোনো ধরণের শ্রেণীভিত্তিক সম্পর্ক তৈরি করতে পারে না, এবং কখনও কখনও তা মডেলকে বিভ্রান্ত করতে পারে।

    উদাহরণ:

    from sklearn.preprocessing import LabelEncoder
    
    # ডেটাসেট
    data = {'Gender': ['Male', 'Female', 'Female', 'Male']}
    df = pd.DataFrame(data)
    
    # লেবেল এনকোডিং
    encoder = LabelEncoder()
    df['Gender'] = encoder.fit_transform(df['Gender'])
    
    print(df)
    
  2. One-Hot Encoding:

    • এই পদ্ধতিতে, প্রতিটি কেটেগোরিক্যাল ভেরিয়েবলকে নতুন কলামে রূপান্তর করা হয়। একেকটি কেটেগোরিক্যাল মানের জন্য একেকটি কলাম তৈরি করা হয় এবং ওই মানের জন্য 1 বা 0 দেওয়া হয়। এটি শ্রেণীভিত্তিক সম্পর্ক তৈরিতে সহায়ক এবং যখন কেটেগোরিক্যাল মানগুলি ধারাবাহিক না হয় তখন ব্যবহার করা হয়।

    উদাহরণ:

    df = pd.DataFrame({'Gender': ['Male', 'Female', 'Female', 'Male']})
    
    # One-Hot Encoding
    df = pd.get_dummies(df, columns=['Gender'])
    
    print(df)
    
  3. Binary Encoding:
    • এটি একটি উন্নত পদ্ধতি যেখানে কেটেগোরিক্যাল মানকে বাইনারি কোডের মাধ্যমে এনকোড করা হয়, সাধারণত উচ্চ সংখ্যক শ্রেণীভিত্তিক কেটেগোরিক্যাল ডেটার জন্য এটি ব্যবহৃত হয়।

সারাংশ

ডেটা প্রি-প্রসেসিং হল মেশিন লার্নিং মডেল তৈরির প্রথম পদক্ষেপ এবং সঠিক ডেটা প্রক্রিয়াকরণ মডেল প্রশিক্ষণ ও পারফরম্যান্সে বড় প্রভাব ফেলে। এর মধ্যে দুটি প্রধান ধাপ হলো:

  1. Missing Data Handling: মিসিং ডেটা পূরণ বা সরানোর মাধ্যমে ডেটা পরিষ্কার করা।
  2. Encoding Categorical Variables: কেটেগোরিক্যাল ভেরিয়েবলগুলিকে সংখ্যায় রূপান্তর (এনকোডিং) করে মডেলের জন্য প্রস্তুত করা।

এছাড়া, ডেটা প্রি-প্রসেসিংয়ে স্কেলিং, স্ট্যান্ডার্ডাইজেশন এবং আউটলায়ার ডিটেকশনও গুরুত্বপূর্ণ ভূমিকা পালন করে।

Content added By

Feature Scaling হল মেশিন লার্নিং-এর একটি গুরুত্বপূর্ণ প্রক্রিয়া যা ডেটার বৈশিষ্ট্যগুলিকে একটি সাধারণ স্কেলে আনার জন্য ব্যবহৃত হয়, যাতে মডেলটি সঠিকভাবে শিখতে পারে এবং দ্রুত কনভার্জ করতে পারে। Normalization এবং Standardization হল দুটি জনপ্রিয় পদ্ধতি যা ফিচার স্কেলিং করতে ব্যবহৃত হয়। এই দুটি পদ্ধতি বৈশিষ্ট্যের স্কেল বা পরিসীমা পরিবর্তন করে, যাতে মেশিন লার্নিং অ্যালগরিদমগুলি আরও কার্যকরভাবে কাজ করতে পারে।

১. Normalization (Min-Max Scaling)

Normalization বা Min-Max Scaling হল একটি স্কেলিং পদ্ধতি যেখানে ডেটার সমস্ত ফিচারের মানকে একটি নির্দিষ্ট পরিসীমায় রূপান্তরিত করা হয়, সাধারণত [0, 1] এর মধ্যে। এর মাধ্যমে, ডেটার বিভিন্ন বৈশিষ্ট্যের মান একে অপরের তুলনায় সমান স্কেলে চলে আসে।

ফর্মুলা:

Normalization এর জন্য সাধারণত ব্যবহৃত ফর্মুলা:

Xnormalized=XXminXmaxXminX_{\text{normalized}} = \frac{X - X_{\text{min}}}{X_{\text{max}} - X_{\text{min}}}

এখানে:

  • XX হল মূল বৈশিষ্ট্যের মান,
  • XminX_{\text{min}} এবং XmaxX_{\text{max}} হল বৈশিষ্ট্যের সর্বনিম্ন এবং সর্বোচ্চ মান।

বৈশিষ্ট্য:

  • স্কেল [0, 1]: ডেটা 0 এবং 1 এর মধ্যে স্কেল করা হয়।
  • কাজের ক্ষেত্র: যখন ডেটার মান একটি নির্দিষ্ট পরিসীমার মধ্যে সীমাবদ্ধ রাখা দরকার।

ইনস্টলেশন:

pip install scikit-learn

ব্যবহার উদাহরণ:

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# ডেটা তৈরি করা
data = np.array([[10], [20], [30], [40], [50]])

# Min-Max Normalization
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)

print("Normalized Data:\n", normalized_data)

এটি ডেটার মানগুলিকে [0, 1] স্কেলে রূপান্তরিত করবে।


২. Standardization (Z-score Normalization)

Standardization বা Z-score normalization হল একটি পদ্ধতি যেখানে ডেটার মানকে গড় এবং স্ট্যান্ডার্ড ডেভিয়েশন ব্যবহার করে স্কেল করা হয়, যাতে ডেটার নতুন মানের গড় 0 এবং স্ট্যান্ডার্ড ডেভিয়েশন 1 হয়।

ফর্মুলা:

Standardization এর জন্য সাধারণত ব্যবহৃত ফর্মুলা:

Xstandardized=XμσX_{\text{standardized}} = \frac{X - \mu}{\sigma}

এখানে:

  • XX হল মূল বৈশিষ্ট্যের মান,
  • μ\mu হল বৈশিষ্ট্যের গড়,
  • σ\sigma হল বৈশিষ্ট্যের স্ট্যান্ডার্ড ডেভিয়েশন।

বৈশিষ্ট্য:

  • গড় 0 এবং স্ট্যান্ডার্ড ডেভিয়েশন 1: ডেটা গড় 0 এবং স্ট্যান্ডার্ড ডেভিয়েশন 1 এর মধ্যে থাকে।
  • কাজের ক্ষেত্র: যখন ডেটা বিভিন্ন স্কেলে থাকে এবং দূরত্বের ভিত্তিতে অ্যালগরিদম যেমন কিমপ্লেক্স কনভার্জেন্স (k-NN, SVM) বা রিগ্রেশন অ্যালগরিদমে ব্যবহৃত হয়।

ইনস্টলেশন:

pip install scikit-learn

ব্যবহার উদাহরণ:

from sklearn.preprocessing import StandardScaler
import numpy as np

# ডেটা তৈরি করা
data = np.array([[10], [20], [30], [40], [50]])

# Standardization (Z-score Normalization)
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)

print("Standardized Data:\n", standardized_data)

এটি ডেটার মানগুলিকে গড় 0 এবং স্ট্যান্ডার্ড ডেভিয়েশন 1 এর মধ্যে রূপান্তরিত করবে।


কোন পদ্ধতি কখন ব্যবহার করবেন?

  • Normalization:
    • যখন ডেটার মান একে অপরের তুলনায় বড় বা ছোট নয়, অর্থাৎ স্কেল বড় বা ছোট হতে পারে।
    • যখন আমরা ডেটার স্কেল বা পরিসীমা নির্দিষ্ট করতে চাই, যেমন [0, 1]।
    • এই পদ্ধতি বিশেষভাবে উপযোগী যখন মডেলগুলির মধ্যে দূরত্ব বা নিকটতা হিসাব করা হয়, যেমন k-NN বা Neural Networks
  • Standardization:
    • যখন ডেটার গড় বা মান মাঝেমধ্যে বড় হতে পারে এবং Gaussian distribution (নরমাল ডিস্ট্রিবিউশন) এর ওপর ভিত্তি করে কাজ করতে চাই।
    • যখন মডেলগুলো গড় এবং স্ট্যান্ডার্ড ডেভিয়েশন ব্যবহার করে (যেমন Linear Regression, Logistic Regression, SVM, PCA ইত্যাদি)।
    • যখন আউটলিয়ার (outliers) ডেটা থাকে এবং তারা প্রভাব ফেলতে পারে না, তখন Standardization বেছে নেওয়া ভাল।

সারাংশ

  • Normalization: এটি ডেটার মান [0, 1] পরিসীমায় স্কেল করে, যা বিশেষত অ্যালগরিদম যেমন k-NN এবং Neural Networks এর জন্য উপযুক্ত।
  • Standardization: এটি ডেটার গড় 0 এবং স্ট্যান্ডার্ড ডেভিয়েশন 1 করে, যা Linear Regression, Logistic Regression, SVM ইত্যাদির জন্য উপযুক্ত।

মেশিন লার্নিং মডেলগুলির কার্যকারিতা এবং কনভার্জেন্সের জন্য feature scaling অত্যন্ত গুরুত্বপূর্ণ।

Content added By

Train/Test Split এবং Cross Validation হল মেশিন লার্নিং মডেল প্রশিক্ষণ এবং মূল্যায়নের দুটি গুরুত্বপূর্ণ কৌশল। এদের উদ্দেশ্য হল মডেলকে যথাযথভাবে প্রশিক্ষণ দেওয়া এবং তার কার্যকারিতা মূল্যায়ন করা, যাতে মডেলটি নতুন, অদেখা ডেটার উপর ভালভাবে কাজ করতে পারে।

১. Train/Test Split

Train/Test Split হল একটি সাধারণ কৌশল যেখানে ডেটাকে দুটি ভাগে ভাগ করা হয়: একটি Training Set এবং একটি Testing Set। মডেলটি Training Set ব্যবহার করে প্রশিক্ষিত হয় এবং পরে Testing Set ব্যবহার করে মূল্যায়ন করা হয়।

Train/Test Split এর প্রক্রিয়া:

  1. Training Set: এটি সেই ডেটা যা মডেল প্রশিক্ষণের জন্য ব্যবহৃত হয়। সাধারণত, ডেটার ৭০% থেকে ৮০% অংশকে ট্রেনিং ডেটা হিসেবে ব্যবহার করা হয়।
  2. Testing Set: এটি সেই ডেটা যা মডেলটি প্রশিক্ষিত হওয়ার পর মডেলটির কার্যকারিতা যাচাই করতে ব্যবহৃত হয়। সাধারণত, ডেটার ২০% থেকে ৩০% অংশকে টেস্ট ডেটা হিসেবে ব্যবহার করা হয়।

উপকারিতা:

  • সহজ এবং দ্রুত বাস্তবায়ন।
  • বড় ডেটাসেটের জন্য ভালো কাজ করে।

অবশিষ্ট:

  • যদি ডেটার পরিমাণ কম হয়, তবে টেস্ট সেটের মডেল গঠন করার জন্য পর্যাপ্ত ডেটা নাও থাকতে পারে।

উদাহরণ:

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

# Iris ডেটাসেট লোড
data = load_iris()
X = data.data
y = data.target

# Train/Test Split (80% ট্রেনিং, 20% টেস্ট)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# মডেল প্রশিক্ষণ
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# মডেল মূল্যায়ন
accuracy = model.score(X_test, y_test)
print("Test Accuracy:", accuracy)

২. Cross Validation

Cross Validation একটি শক্তিশালী কৌশল যেখানে ডেটাকে একাধিক ভাগে ভাগ করা হয় এবং প্রতিটি ভাগে মডেল প্রশিক্ষিত এবং মূল্যায়ন করা হয়। এটি মডেলের কার্যকারিতা আরও নির্ভুলভাবে মূল্যায়ন করার জন্য ব্যবহৃত হয়, কারণ এটি ডেটার প্রতিটি অংশকে প্রশিক্ষণ এবং টেস্ট উভয় ক্ষেত্রেই ব্যবহার করে।

Cross Validation এর প্রক্রিয়া:

  1. ডেটা কেএফোল্ডে (K-fold) ভাগ করা হয়, যেমন ৫-fold বা ১০-fold।
  2. প্রতিটি ফোল্ড একবার Testing Set হিসেবে কাজ করে, এবং অন্য সব ফোল্ড মিলিয়ে Training Set হিসেবে কাজ করে।
  3. প্রতিটি ফোল্ডের জন্য মডেল প্রশিক্ষণ এবং মূল্যায়ন করা হয়, এবং শেষে সব ফোল্ডের মধ্যে গড়ে আউটপুট নেয়া হয়।

উপকারিতা:

  • মডেলটি ডেটার বিভিন্ন অংশে পরীক্ষা করা হয়, তাই এটি মডেলটির সাধারণীকরণ ক্ষমতা (generalization ability) বৃদ্ধি করে।
  • ছোট ডেটাসেটের জন্য কার্যকরী।

অবশিষ্ট:

  • এটি প্রশিক্ষণ এবং মূল্যায়ন করার জন্য বেশি সময় নেয়।

উদাহরণ:

from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

# Iris ডেটাসেট লোড
data = load_iris()
X = data.data
y = data.target

# মডেল তৈরি
model = LogisticRegression(max_iter=200)

# ৫-fold cross-validation
scores = cross_val_score(model, X, y, cv=5)

# Cross-validation এর ফলাফল
print("Cross-validation scores:", scores)
print("Average Accuracy:", scores.mean())

Cross Validation এর ধরন:

  1. K-Fold Cross Validation:
    • ডেটাকে Kটি ভাগে ভাগ করা হয় এবং প্রতিটি ভাগ একবার টেস্ট সেট হিসেবে ব্যবহার করা হয়। এটি সবচেয়ে সাধারণ ধরনের ক্রস-ভ্যালিডেশন।
  2. Stratified K-Fold Cross Validation:
    • K-Fold এর একটি উন্নত সংস্করণ যেখানে ক্লাসের ভারসাম্য বজায় রাখার জন্য ডেটাকে ভাগ করা হয়। এটি ক্লাস ইমব্যালেন্স থাকলে আরও কার্যকর।
  3. Leave-One-Out Cross Validation (LOOCV):
    • যেখানে প্রতিটি ডেটা পয়েন্ট একবার টেস্ট ডেটা হিসেবে ব্যবহৃত হয় এবং বাকি সব ডেটা প্রশিক্ষণ ডেটা হিসেবে ব্যবহৃত হয়। এটি বেশ সময়সাপেক্ষ হতে পারে, তবে ছোট ডেটাসেটের জন্য কার্যকর।
  4. Leave-P-Out Cross Validation:
    • এখানে প্রতি ব্যাচে P সংখ্যক ডেটা পয়েন্ট টেস্ট হিসেবে ব্যবহার করা হয়।

সারাংশ:

  • Train/Test Split: ডেটাকে দুটি ভাগে ভাগ করে প্রশিক্ষণ এবং মূল্যায়ন করা হয়, সাধারণত ৭০% ট্রেনিং এবং ৩০% টেস্ট ডেটা থাকে।
  • Cross Validation: ডেটাকে একাধিক ভাগে ভাগ করে, প্রতিটি অংশে প্রশিক্ষণ ও মূল্যায়ন করা হয়, যা মডেলের কার্যকারিতা আরও নির্ভুলভাবে পর্যালোচনা করতে সাহায্য করে।

Cross Validation সাধারণত Train/Test Split এর তুলনায় বেশি নির্ভুল ফলাফল দেয়, বিশেষত যখন ডেটা সাইজ ছোট বা ক্লাস ইমব্যালেন্স থাকে।

Content added By
Promotion

Are you sure to start over?

Loading...