Skill

বাস্তব উদাহরণ এবং প্রজেক্ট ডেমো

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

382

এখানে একটি বাস্তব K-Nearest Neighbors (KNN) এবং Gaussian Naive Bayes মডেলের সাথে সংযুক্ত একটি সাধারণ প্রজেক্ট ডেমো দেওয়া হবে, যা Iris Dataset (একটি জনপ্রিয় ডেটাসেট) ব্যবহার করবে। এই ডেটাসেটটি ফুলের প্রজাতি শ্রেণীবিভাগ করতে ব্যবহৃত হয় এবং এতে ৪টি বৈশিষ্ট্য (sepal length, sepal width, petal length, petal width) সহ ৩টি শ্রেণী (Setosa, Versicolor, Virginica) রয়েছে।

প্রকল্পের লক্ষ্য:

  • KNN এবং Gaussian Naive Bayes মডেল ব্যবহার করে Iris Dataset এর উপর ক্লাসিফিকেশন সমস্যা সমাধান করা।

১. ডেটাসেট লোড এবং প্রস্তুতি

আমরা প্রথমে Iris Dataset লোড করব এবং ডেটাকে প্রশিক্ষণ (training) এবং পরীক্ষণ (testing) সেটে ভাগ করব।

# প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler

# Iris ডেটাসেট লোড করা
iris = load_iris()
X = iris.data  # বৈশিষ্ট্যগুলি
y = iris.target  # লক্ষ্য বা শ্রেণী

# ডেটা ভাগ করা (80% ট্রেনিং, 20% টেস্ট)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# ডেটার স্কেলিং
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

২. K-Nearest Neighbors (KNN) মডেল তৈরি ও মূল্যায়ন

KNN মডেলটি তৈরি করে এবং ডেটার উপর মূল্যায়ন করা।

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# KNN মডেল তৈরি করা
knn = KNeighborsClassifier(n_neighbors=3)  # K=3

# মডেল প্রশিক্ষণ
knn.fit(X_train, y_train)

# মডেল দ্বারা প্রেডিকশন
y_pred_knn = knn.predict(X_test)

# KNN মডেলের পারফরম্যান্স মূল্যায়ন
knn_accuracy = accuracy_score(y_test, y_pred_knn)
print(f"KNN Model Accuracy: {knn_accuracy * 100:.2f}%")

৩. Gaussian Naive Bayes মডেল তৈরি ও মূল্যায়ন

Gaussian Naive Bayes মডেলটি তৈরি করে এবং ডেটার উপর মূল্যায়ন করা।

from sklearn.naive_bayes import GaussianNB

# Gaussian Naive Bayes মডেল তৈরি
gnb = GaussianNB()

# মডেল প্রশিক্ষণ
gnb.fit(X_train, y_train)

# মডেল দ্বারা প্রেডিকশন
y_pred_gnb = gnb.predict(X_test)

# Gaussian Naive Bayes মডেলের পারফরম্যান্স মূল্যায়ন
gnb_accuracy = accuracy_score(y_test, y_pred_gnb)
print(f"Gaussian Naive Bayes Model Accuracy: {gnb_accuracy * 100:.2f}%")

৪. ফলাফল তুলনা

print(f"KNN Model Accuracy: {knn_accuracy * 100:.2f}%")
print(f"Gaussian Naive Bayes Model Accuracy: {gnb_accuracy * 100:.2f}%")

৫. ফলাফল বিশ্লেষণ

  • KNN মডেল এবং Gaussian Naive Bayes মডেল উভয়ের সঠিকতা (accuracy) পরীক্ষণের জন্য পরিসংখ্যান প্রদান করবে।
  • এখানে আপনি দেখতে পাবেন, কোন মডেলটি এই ডেটাসেটের জন্য ভালো কাজ করছে।

বাস্তব উদাহরণে কী শেখা যাবে:

  1. KNN মডেল: এই মডেলটি ক্লাসিফিকেশন টাস্কের জন্য খুবই সহজ এবং কাজ করে, যেখানে ডেটার মধ্যে সম্পর্ক তৈরি না করে, শুধু প্রতিবেশী ফিচারগুলির উপর ভিত্তি করে সিদ্ধান্ত নেওয়া হয়। এটি সাধারণত মানুষের কার্যকলাপ, বাজার বিশ্লেষণ, স্প্যাম ডিটেকশন ইত্যাদি ক্ষেত্রে ব্যবহৃত হয়।
  2. Gaussian Naive Bayes মডেল: এটি গাউসিয়ান ডিস্ট্রিবিউশন ভিত্তিক একটি সহজ ক্লাসিফিকেশন অ্যালগরিদম, যা অত্যন্ত দ্রুত এবং কার্যকরী। এটি ইমেইল স্প্যাম ডিটেকশন, রোগ শনাক্তকরণ, মনোজগত বিশ্লেষণ ইত্যাদিতে ব্যবহার করা যেতে পারে।

৬. Conclusion (উপসংহার)

এই প্রকল্পের মাধ্যমে, আপনি দুটি জনপ্রিয় মডেল KNN এবং Gaussian Naive Bayes ব্যবহারের প্রক্রিয়া শিখেছেন এবং তাদের পারফরম্যান্স তুলনা করতে পারলেন। এটি আপনাকে বিভিন্ন ক্লাসিফিকেশন সমস্যা সমাধানে সাহায্য করতে পারে, বিশেষত যখন আপনার কাছে সঠিক এবং কার্যকরী মডেল নির্বাচন করতে হয়।

প্রকল্প ডেমো:

  • KNN মডেলটি গৌণ রিগ্রেশন বা শ্রেণীবিভাগ সমস্যাগুলির জন্য ব্যবহৃত হতে পারে, যেখানে প্রতিবেশী পদ্ধতিতে সিদ্ধান্ত নেওয়া হয়।
  • Gaussian Naive Bayes মডেলটি দ্রুত ফলাফল দিতে পারে, তবে এটি ত্রুটি বা ভুল অনুমান করতে পারে যদি ফিচারগুলির মধ্যে সম্পর্ক থাকে, যদিও এটি অনেক বাস্তব প্রয়োগে কার্যকর।

এই ধরনের মডেলগুলির মাধ্যমে মডেল টিউনিং, ক্রস ভ্যালিডেশন, পারফরম্যান্স মেট্রিক্স ব্যবহার করে আপনার মডেলের কার্যকারিতা আরও বৃদ্ধি করা সম্ভব।

Content added By

মেশিন লার্নিং প্রজেক্টের মাধ্যমে আপনি বাস্তব সমস্যার সমাধান করতে পারেন। এখানে দুটি উদাহরণ দেওয়া হলো: একটি Classification সমস্যা এবং একটি Regression সমস্যা।

১. Classification Problem: ইমেইল স্প্যাম ডিটেকশন

Goal: একটি মেশিন লার্নিং মডেল তৈরি করা, যা ইমেইলগুলিকে স্প্যাম (Spam) বা নন-স্প্যাম (Non-Spam) শ্রেণীতে বিভক্ত করবে।

Steps:

  1. ডেটাসেট:
    • আমাদের ডেটাসেটটি ইমেইলসের বিষয়বস্তু এবং ট্যাগ সহ হবে (স্প্যাম বা নন-স্প্যাম)।
    • sklearn.datasets.fetch_20newsgroups বা Enron dataset ব্যবহার করা যেতে পারে।
  2. ডেটা প্রক্রিয়াকরণ:
    • টেক্সট ডেটার জন্য CountVectorizer বা TF-IDF ব্যবহার করে ফিচার তৈরি করা হবে।
    • শব্দের গতি এবং প্রাসঙ্গিকতা বুঝে, ফিচার নির্বাচিত করা হবে।
  3. মডেল তৈরি:
    • Naive Bayes বা Logistic Regression ক্লাসিফিকেশন অ্যালগরিদম ব্যবহার করা যেতে পারে।
    • মডেলটি স্প্যাম এবং নন-স্প্যাম ইমেইল শনাক্ত করতে প্রশিক্ষিত হবে।

উদাহরণ কোড:

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, confusion_matrix

# ডেটাসেট লোড করা
newsgroups = fetch_20newsgroups(subset='train', categories=['rec.sport.baseball', 'soc.religion.christian'])

# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(newsgroups.data, newsgroups.target, test_size=0.3, random_state=42)

# CountVectorizer ব্যবহার করে টেক্সট ভেক্টরাইজেশন
vectorizer = CountVectorizer(stop_words='english')
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)

# Naive Bayes মডেল তৈরি করা
model = MultinomialNB()
model.fit(X_train_vec, y_train)

# মডেল মূল্যায়ন
y_pred = model.predict(X_test_vec)
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)

print("Accuracy:", accuracy)
print("Confusion Matrix:\n", cm)

২. Regression Problem: বাড়ির দাম পূর্বানুমান

Goal: একটি মেশিন লার্নিং মডেল তৈরি করা যা বাড়ির দাম (Price) পূর্বানুমান করতে সক্ষম হবে।

Steps:

  1. ডেটাসেট:
    • এখানে একটি Boston Housing ডেটাসেট ব্যবহার করা যেতে পারে, যেখানে বিভিন্ন বৈশিষ্ট্য (ফিচার) থাকে যেমন বাড়ির সাইজ, অপরিচিত এলাকার অবস্থান, ইত্যাদি, এবং লক্ষ্য মান হল বাড়ির দাম।
  2. ডেটা প্রক্রিয়াকরণ:
    • Feature Scaling (যেমন StandardScaler) ব্যবহার করা হবে যাতে মডেলটির প্রশিক্ষণ দ্রুত হয় এবং ভিন্ন স্কেলের বৈশিষ্ট্যগুলি সমান গুরুত্বে আনা যায়।
  3. মডেল তৈরি:
    • Linear Regression বা Random Forest Regression ব্যবহার করা যেতে পারে।
    • মডেলটি প্রশিক্ষণ পাবে এবং তারপর বাড়ির দাম পূর্বানুমান করবে।

উদাহরণ কোড:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Boston Housing ডেটাসেট লোড করা
boston = load_boston()
X = boston.data
y = boston.target

# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Feature Scaling (স্ট্যান্ডার্ডাইজেশন)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# Linear Regression মডেল তৈরি করা
model = LinearRegression()
model.fit(X_train_scaled, y_train)

# মডেল মূল্যায়ন
y_pred = model.predict(X_test_scaled)
mse = mean_squared_error(y_test, y_pred)
rmse = mse ** 0.5

print("Root Mean Squared Error (RMSE):", rmse)

৩. প্রজেক্ট বিশ্লেষণ

Classification Example (ইমেইল স্প্যাম ডিটেকশন):

  • মডেল: Naive Bayes
  • মূল্যায়ন মেট্রিক্স: Accuracy, Precision, Recall, F1-Score, Confusion Matrix
  • অফার: একটি শক্তিশালী টুল যা দ্রুত এবং কার্যকরভাবে স্প্যাম শনাক্ত করতে সক্ষম।

Regression Example (বাড়ির দাম পূর্বানুমান):

  • মডেল: Linear Regression
  • মূল্যায়ন মেট্রিক্স: RMSE (Root Mean Squared Error)
  • অফার: মডেলটি ব্যবহার করে বাড়ির দাম নির্ধারণ করা সম্ভব, যা রিয়েল এস্টেট ক্ষেত্রে অত্যন্ত কার্যকরী।

সারাংশ:

  • Classification এবং Regression হল মেশিন লার্নিং এর দুটি প্রধান সমস্যার ধরন।
  • Classification সমস্যা গুলি শ্রেণীবিভাগের (যেমন স্প্যাম ডিটেকশন) জন্য ব্যবহৃত হয়, যেখানে আউটপুট একটি নির্দিষ্ট শ্রেণীতে (যেমন 0 বা 1, স্প্যাম বা নন-স্প্যাম) বিভক্ত হয়।
  • Regression সমস্যা গুলি পূর্বানুমান (যেমন বাড়ির দাম, তাপমাত্রা) করার জন্য ব্যবহৃত হয়, যেখানে আউটপুট একটি ক্রমবর্ধমান সংখ্যা (যেমন 2000, 5.6) হয়।
  • আপনি scikit-learn লাইব্রেরি ব্যবহার করে সহজেই এই ধরনের প্রজেক্ট তৈরি এবং বিশ্লেষণ করতে পারেন।
Content added By

Clustering এবং Dimensionality Reduction হল মেশিন লার্নিং এবং ডেটা সায়েন্সের দুটি গুরুত্বপূর্ণ কৌশল, যা ডেটা বিশ্লেষণ, শ্রেণীবিভাগ এবং ভিজ্যুয়ালাইজেশনের জন্য ব্যবহৃত হয়।

১. Clustering

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

২. Dimensionality Reduction

Dimensionality Reduction একটি পদ্ধতি যা ডেটার ফিচার সংখ্যা কমানোর জন্য ব্যবহৃত হয়, যাতে ডেটা কম্পিউটেশনে আরও দ্রুত প্রসেস করা যায় এবং ভিজ্যুয়ালাইজেশনের জন্য সহজ হয়। এটি একটি নতুন কম্প্যাক্ট উপস্থাপন তৈরি করতে সহায়তা করে, যাতে মূল ডেটার বড় অংশ সংরক্ষিত থাকে।


Clustering এবং Dimensionality Reduction এর সাথে একটি প্রজেক্ট উদাহরণ

এই প্রজেক্টে আমরা K-Means Clustering এবং Principal Component Analysis (PCA) ব্যবহার করে ডেটা বিশ্লেষণ করব। এখানে আমরা Iris ডেটাসেট ব্যবহার করব এবং ডেটার ক্লাস্টারিং এবং ডাইমেনশনালিটি রিডাকশন করে ডেটার ভিজ্যুয়ালাইজেশন দেখব।

প্রয়োজনীয় লাইব্রেরি:

pip install scikit-learn matplotlib seaborn

কোড উদাহরণ:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import seaborn as sns

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

# ডেটাকে স্ট্যান্ডার্ডাইজ করা (বিশেষ করে ক্লাস্টারিং এর জন্য গুরুত্বপূর্ণ)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# **Dimensionality Reduction**: PCA ব্যবহার করে ডেটার মাত্রা কমানো
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# **Clustering**: KMeans ব্যবহার করে ডেটার ক্লাস্টার তৈরি করা
kmeans = KMeans(n_clusters=3)
y_kmeans = kmeans.fit_predict(X_pca)

# PCA দিয়ে রিডাক্ট করা ডেটার ভিজ্যুয়ালাইজেশন
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X_pca[:, 0], y=X_pca[:, 1], hue=y_kmeans, palette="Set1", style=y_kmeans, s=100)
plt.title('KMeans Clustering with PCA (2D)')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.legend(title='Cluster', loc='upper right')
plt.show()

# **Clustering** এবং **PCA Explained Variance**
print(f'Explained Variance by 1st Principal Component: {pca.explained_variance_ratio_[0]*100:.2f}%')
print(f'Explained Variance by 2nd Principal Component: {pca.explained_variance_ratio_[1]*100:.2f}%')

# **Original Iris Labels vs KMeans Clusters**
print("Original Iris labels (actual class labels):", y)
print("Predicted KMeans clusters:", y_kmeans)

কোডের ব্যাখ্যা:

  1. ডেটাসেট লোড করা:
    • Iris ডেটাসেট লোড করা হয়েছে যা ৪টি ফিচার (সেপাল লেন্থ, সেপাল উইথ, পেটাল লেন্থ, পেটাল উইথ) এবং ৩টি ক্লাস (Setosa, Versicolor, Virginica) নিয়ে গঠিত।
  2. ডেটা স্কেলিং:
    • StandardScaler ব্যবহার করে ডেটাকে স্কেল করা হয়েছে। ক্লাস্টারিংয়ের ক্ষেত্রে স্কেলিং অত্যন্ত গুরুত্বপূর্ণ, কারণ মডেলটি ডেটার বৈশিষ্ট্যগুলির মধ্যে ব্যবধান বা ফিচারের স্কেলকে গুরুত্ব দেয়।
  3. PCA (Principal Component Analysis):
    • PCA ব্যবহার করে ডেটার মাত্রা ৪ থেকে ২ এ কমিয়ে আনা হয়েছে, যা ডেটার মধ্যে মূল বৈশিষ্ট্য সংরক্ষণ করতে সাহায্য করে এবং ভিজ্যুয়ালাইজেশন সহজতর হয়।
  4. KMeans Clustering:
    • KMeans অ্যালগরিদম ব্যবহার করে ডেটাকে ৩টি ক্লাস্টারে ভাগ করা হয়েছে (Iris ডেটাসেটের প্রকৃত শ্রেণী ৩টি হওয়ায়)।
    • মডেলটি ক্লাস্টারগুলির জন্য পূর্বানুমান তৈরি করেছে, যা পরে ভিজ্যুয়ালাইজেশনের মাধ্যমে দেখা যাবে।
  5. ভিজ্যুয়ালাইজেশন:
    • Matplotlib এবং Seaborn ব্যবহার করে PCA দিয়ে কমপ্রেসড ডেটা ২D আকারে ভিজ্যুয়ালাইজ করা হয়েছে।
    • প্রতিটি পয়েন্টের ক্লাস্টার ভিন্ন ভিন্ন রঙে প্রদর্শিত হবে।
  6. Explained Variance:
    • PCA কতটা তথ্য সংরক্ষণ করেছে, তা বোঝার জন্য explained_variance_ratio_ চেক করা হয়েছে, যা প্রথম দুই Principal Components এর দ্বারা ব্যাখ্যা করা মোট ভেরিয়েন্স দেখায়।
  7. Clustering এবং Labels তুলনা:
    • Iris ডেটাসেটের আসল লেবেলগুলির সাথে KMeans এর ক্লাস্টার তুলনা করা হয়েছে, যা মডেলের দক্ষতা বুঝতে সাহায্য করবে।

ফলাফল:

  • PCA এবং KMeans ক্লাস্টারিংয়ের মাধ্যমে, আপনি সহজেই ডেটাকে ২D প্লটে ভিজ্যুয়ালাইজ করতে পারবেন এবং ক্লাস্টারের গঠন সম্পর্কে ধারণা পাবেন।
  • Explained Variance দেখাবে কতটুকু তথ্য প্রথম দুটি Principal Components ধরে রেখেছে।
  • Confusion between Clusters and Labels: KMeans ক্লাস্টারগুলির সাথে আসল লেবেলগুলির তুলনা করলে মডেলটির পারফরম্যান্স সম্পর্কে একটি ধারণা পাওয়া যাবে।

সারাংশ

এই প্রজেক্টে, আমরা Clustering (KMeans) এবং Dimensionality Reduction (PCA) টেকনিক ব্যবহার করেছি:

  • PCA ডেটার মাত্রা কমানোর মাধ্যমে ডেটার প্যাটার্ন এবং বৈশিষ্ট্যগুলো সহজে বিশ্লেষণ করা যায়।
  • KMeans Clustering ব্যবহার করে ডেটার অজানা ক্লাস্টারগুলো নির্ধারণ করা হয়েছে।
  • ডেটার পারফরম্যান্স এবং শ্রেণীবিভাগ সম্পর্কে আরও ভালো ধারণা পেতে Explained Variance এবং Confusion Matrix বিশ্লেষণ করা হয়েছে।

এই টেকনিকগুলি মেশিন লার্নিং প্রজেক্টে ডেটা ভিজ্যুয়ালাইজেশন এবং শ্রেণীভাগ (clustering) কাজের জন্য খুবই কার্যকর।

Content added By

Deep Learning হল মেশিন লার্নিং এর একটি বিশেষ শাখা, যা নিউরাল নেটওয়ার্ক (Neural Network) ব্যবহার করে মডেল প্রশিক্ষণ ও ভবিষ্যদ্বাণী করে। Deep Learning মডেলগুলি সাধারণত layers এর মাধ্যমে কাজ করে, যেখানে একাধিক hidden layers ব্যবহৃত হয়। এটি supervised learning এবং unsupervised learning উভয় ক্ষেত্রেই ব্যবহৃত হতে পারে, এবং এটি ইমেজ, টেক্সট, সাউন্ড প্রোসেসিং সহ বিভিন্ন ক্ষেত্রে চমৎকার ফলাফল প্রদান করে।

১. Neural Networks (নিউরাল নেটওয়ার্ক)

Neural Networks হল একটি অ্যালগরিদম যা মানুষের মস্তিষ্কের নিউরনের মতো কাজ করে। একটি নিউরাল নেটওয়ার্কে input layer, hidden layers এবং output layer থাকে। Neurons বা units একটি লেয়ার থেকে অন্য লেয়ারে সিগন্যাল প্রেরণ করে। নিউরাল নেটওয়ার্ক মূলত activation functions, weights, biases ইত্যাদি ব্যবহার করে কাজ করে।

Neural Network এর মৌলিক গঠন:

  • Input Layer: মডেলটিতে প্রথমে ইনপুট ডেটা প্রবাহিত হয়।
  • Hidden Layer(s): এখানে ডেটার বিভিন্ন বৈশিষ্ট্য শিখে, সেগুলি পরবর্তী লেয়ারে প্রেরণ করা হয়। একাধিক hidden layers থাকলে এটি deep learning মডেল হিসেবে পরিচিত হয়।
  • Output Layer: অবশেষে, আউটপুট লেয়ার থেকে ফলাফল পাওয়া যায়।

২. Deep Learning Example (Deep Neural Network)

এখন, আমরা Keras ব্যবহার করে একটি সাধারণ Deep Neural Network (DNN) তৈরি করব, যা MNIST ডেটাসেটের হাতের লেখা সংখ্যা সনাক্তকরণের জন্য কাজ করবে।

প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন:

pip install tensorflow numpy matplotlib

MNIST Dataset এর জন্য Deep Learning মডেল উদাহরণ:

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt

# MNIST ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# ডেটা প্রিপ্রসেসিং: 0-255 এর মানকে 0-1 এর মধ্যে স্কেল করা
x_train = x_train / 255.0
x_test = x_test / 255.0

# মডেল তৈরি করা
model = models.Sequential([
    layers.Flatten(input_shape=(28, 28)),       # ইনপুট লেয়ার: 28x28 ছবি একদম একক ভেক্টরে রূপান্তরিত
    layers.Dense(128, activation='relu'),       # Hidden layer: 128 নড এবং ReLU activation function
    layers.Dropout(0.2),                        # Dropout layer: overfitting কমাতে
    layers.Dense(10, activation='softmax')      # Output layer: 10 শ্রেণী (0 থেকে 9)
])

# মডেল কম্পাইল করা
model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy', 
              metrics=['accuracy'])

# মডেল প্রশিক্ষণ (Training the model)
model.fit(x_train, y_train, epochs=5)

# মডেল মূল্যায়ন (Evaluating the model)
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

# টেস্ট ডেটার উপর একটি পূর্বানুমান (Prediction)
predictions = model.predict(x_test)

# প্রথম ছবি এবং তার পূর্বানুমান দেখানো
plt.imshow(x_test[0], cmap=plt.cm.binary)
plt.title(f"Prediction: {predictions[0].argmax()}")
plt.show()

কোড ব্যাখ্যা:

  1. MNIST ডেটাসেট: এটি 28x28 পিক্সেলের হাতের লেখা সংখ্যা (0 থেকে 9) নিয়ে তৈরি একটি ডেটাসেট।
  2. Model Architecture:
    • Flatten Layer: ইনপুট ডেটাকে একক ভেক্টরে রূপান্তরিত করে।
    • Dense Layer: নিউরাল নেটওয়ার্কের জন্য একটি fully connected layer, যেখানে 128 নোড এবং ReLU activation function ব্যবহৃত হয়েছে।
    • Dropout Layer: এটি overfitting কমাতে সহায়ক। এখানে 20% নিউরনকে অক্ষম করা হয়েছে।
    • Output Layer: 10 শ্রেণী জন্য softmax activation function ব্যবহার করা হয়েছে।
  3. Compile and Train: মডেলটি Adam অপটিমাইজার এবং sparse categorical crossentropy loss function এর সাথে প্রশিক্ষণ নেওয়া হয়েছে।
  4. Evaluation and Prediction: মডেলটি পরীক্ষা করা হয়েছে এবং তার পরবর্তী পছন্দের শ্রেণী (0 থেকে 9) পূর্বানুমান করা হয়েছে।

৩. Convolutional Neural Network (CNN) উদাহরণ

CNN হল একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক যা ইমেজ প্রক্রিয়াকরণের জন্য তৈরি করা হয়েছে। এটি ইমেজের স্থানিক (spatial) বৈশিষ্ট্যগুলি শিখতে সক্ষম, এবং এটি বিশেষত ইমেজ এবং ভিডিও ডেটা বিশ্লেষণের জন্য ব্যবহৃত হয়।

CNN উদাহরণ:

# CNN মডেল তৈরি করা
cnn_model = models.Sequential([
    layers.Reshape((28, 28, 1), input_shape=(28, 28)),   # ইনপুট রিসাইজ
    layers.Conv2D(32, (3, 3), activation='relu'),         # প্রথম কনভলিউশনাল লেয়ার
    layers.MaxPooling2D((2, 2)),                          # পুলিং লেয়ার
    layers.Conv2D(64, (3, 3), activation='relu'),         # দ্বিতীয় কনভলিউশনাল লেয়ার
    layers.MaxPooling2D((2, 2)),                          # পুলিং লেয়ার
    layers.Conv2D(64, (3, 3), activation='relu'),         # তৃতীয় কনভলিউশনাল লেয়ার
    layers.Flatten(),                                     # Flatten লেয়ার
    layers.Dense(64, activation='relu'),                  # Hidden Dense লেয়ার
    layers.Dense(10, activation='softmax')                # আউটপুট লেয়ার
])

# মডেল কম্পাইল করা
cnn_model.compile(optimizer='adam', 
                  loss='sparse_categorical_crossentropy', 
                  metrics=['accuracy'])

# মডেল প্রশিক্ষণ
cnn_model.fit(x_train, y_train, epochs=5)

# মডেল মূল্যায়ন
test_loss, test_acc = cnn_model.evaluate(x_test, y_test)
print("Test accuracy:", test_acc)

CNN এর ব্যাখ্যা:

  • Conv2D: কনভলিউশনাল লেয়ার যা ইনপুট ইমেজ থেকে বৈশিষ্ট্য শিখে।
  • MaxPooling2D: পুলিং লেয়ার যা ইমেজের ডাইমেনশন কমিয়ে দেয়, এবং এইভাবে মডেলকে বেশি কার্যকর করে তোলে।
  • Dense: ফাইনাল লেয়ার, যেখানে ফিচারগুলিকে একত্রিত করা হয় এবং আউটপুট ক্লাসের জন্য ফলাফল নির্ধারণ করা হয়।

Deep Learning মডেল গুলো ব্যবহার কেন?

  • Complex Data Patterns: Deep Learning মডেলগুলি বড় ও জটিল ডেটা সেট থেকে প্যাটার্ন শিখতে সক্ষম, যা অন্যান্য সাধারণ মডেল যেমন SVM বা Decision Tree দিয়ে সম্ভব নয়।
  • Feature Learning: Deep Learning মডেলগুলো নিজেই ফিচারগুলো শিখে নেয়, যার ফলে ফিচার ইঞ্জিনিয়ারিং অনেক কম করতে হয়।
  • Image and Speech Recognition: বিশেষভাবে CNNs ইমেজ রিকগনিশন এবং RNNs (Recurrent Neural Networks) ভাষা বা সিকোয়েন্স ভিত্তিক কাজের জন্য খুব কার্যকরী।

সারাংশ:

  • Deep Learning হল একটি মেশিন লার্নিং পদ্ধতি যা Neural Networks ব্যবহার করে complex patterns শিখে এবং বিভিন্ন ধরনের ডেটা যেমন ইমেজ, টেক্সট, এবং সাউন্ডের জন্য কার্যকরী।
  • Neural Networks তে ইনপুট ডেটা প্রথমে লেয়ারে প্রবাহিত হয়, তারপরে hidden layers ব্যবহার করে ফিচার শিখে এবং অবশেষে output layer থেকে সিদ্ধান্ত নেওয়া হয়।
  • CNN হল একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক যা ইমেজ বা ভিডিও ডেটার স্থানিক বৈশিষ্ট্য শিখতে ব্যবহৃত হয়।

Deep Learning এবং Neural Networks মডেলগুলি বর্তমানে বিভিন্ন প্রযুক্তি ও ইন্ডাস্ট্রিতে ব্যাপকভাবে ব্যবহৃত হচ্ছে, যেমন স্বয়ংক্রিয় গাড়ি, স্বাস্থ্যসেবা, ইমেজ বিশ্লেষণ, এবং ভাষা প্রক্রিয়াকরণ।

Content added By

Model Deployment হল মেশিন লার্নিং মডেলকে বাস্তব জীবনে ব্যবহার উপযোগী করার প্রক্রিয়া, যাতে এটি নতুন ইনপুট ডেটা প্রাপ্ত হলে পূর্বানুমান করতে পারে। মডেল ডিপ্লয়মেন্ট সাধারণত দুটি ধাপে বিভক্ত:

  1. মডেল ট্রেনিং এবং প্রস্তুতি
  2. মডেলকে বাস্তব জীবনের পরিবেশে বা সার্ভারে ডিপ্লয় করা

Model Deployment Overview

  1. Model Training: প্রথমে আপনি মডেলটি আপনার ডেটাসেটের উপর প্রশিক্ষিত করেন।
  2. Model Export: প্রশিক্ষিত মডেলটিকে Pickle বা Joblib ফরম্যাটে সংরক্ষণ করা হয় যাতে ভবিষ্যতে পুনরায় ব্যবহার করা যায়।
  3. API Creation: Flask বা FastAPI এর মাধ্যমে একটি API তৈরি করা হয় যা ক্লায়েন্ট থেকে ইনপুট নেয় এবং মডেল থেকে পূর্বানুমান করে ফলাফল ফেরত পাঠায়।
  4. API Deployment: API ডিপ্লয় করা হয় একটি ওয়েব সার্ভারে (যেমন Heroku, AWS, Google Cloud বা Azure) যাতে এটি ইন্টারনেটের মাধ্যমে অ্যাক্সেসযোগ্য হয়।

এখানে আমরা Flask দিয়ে একটি সাধারণ API তৈরি এবং মডেল ডিপ্লয়মেন্ট দেখাব।


১. মডেল তৈরি এবং সংরক্ষণ (Training and Saving the Model)

এখানে একটি সাধারণ Random Forest Classifier মডেল তৈরি করা হবে এবং Pickle ব্যবহার করে সংরক্ষণ করা হবে।

import pickle
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

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

# ডেটাকে ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Random Forest মডেল তৈরি করা
model = RandomForestClassifier(n_estimators=100)

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

# মডেল সংরক্ষণ (Pickle)
with open('random_forest_model.pkl', 'wb') as file:
    pickle.dump(model, file)

এই কোডে, একটি Random Forest Classifier মডেল তৈরি এবং প্রশিক্ষিত হয়েছে এবং পরে এটি Pickle ফাইলে সংরক্ষণ করা হয়েছে।


২. Flask API তৈরি এবং মডেল লোড করা (Creating Flask API and Loading the Model)

এখন, একটি Flask API তৈরি করব যা Random Forest মডেলকে লোড করবে এবং ইউজার ইনপুট অনুযায়ী পূর্বানুমান প্রদান করবে।

from flask import Flask, request, jsonify
import pickle
import numpy as np

# Flask অ্যাপ তৈরি করা
app = Flask(__name__)

# মডেল লোড করা
with open('random_forest_model.pkl', 'rb') as file:
    model = pickle.load(file)

# API রুট তৈরি করা
@app.route('/predict', methods=['POST'])
def predict():
    try:
        # ইনপুট ডেটা গ্রহণ
        data = request.get_json()

        # ইনপুট ডেটাকে নুম্পি অ্যারেতে রূপান্তর
        input_features = np.array(data['features']).reshape(1, -1)

        # পূর্বানুমান করা
        prediction = model.predict(input_features)

        # ফলাফল ফেরত পাঠানো
        return jsonify({'prediction': int(prediction[0])})

    except Exception as e:
        return jsonify({'error': str(e)})

# অ্যাপ চালু করা
if __name__ == '__main__':
    app.run(debug=True)

কোড ব্যাখ্যা:

  1. Flask অ্যাপ তৈরি করা হয়েছে, যা /predict রুটে HTTP POST রিকোয়েস্ট গ্রহণ করবে।
  2. ইনপুট হিসেবে একটি JSON অবজেক্ট নেয়, যেখানে features নামে একটি অ্যারে থাকবে (যেমন আইরিস ডেটাসেটের ফিচারগুলি: পেটাল লেন্থ, পেটাল উইথ, সেপাল লেন্থ, সেপাল উইথ)।
  3. Pickle ফাইল থেকে মডেলটি লোড করা হয় এবং ইনপুটের উপর পূর্বানুমান করা হয়।
  4. ফলাফলটি একটি JSON ফরম্যাটে ফেরত পাঠানো হয়।

৩. API টেস্ট করা

এখন, আপনি Postman অথবা curl ব্যবহার করে API টেস্ট করতে পারেন।

Postman দিয়ে টেস্ট:

  1. URL: http://127.0.0.1:5000/predict
  2. Method: POST
  3. Body: JSON (যেমন):

    {
        "features": [5.1, 3.5, 1.4, 0.2]
    }
    

    এখানে features অ্যারেতে আইরিস ডেটাসেটের একটি উদাহরণ ইনপুট দেওয়া হয়েছে।

curl দিয়ে টেস্ট:

curl -X POST -H "Content-Type: application/json" -d '{"features": [5.1, 3.5, 1.4, 0.2]}' http://127.0.0.1:5000/predict

এটি POST রিকোয়েস্ট পাঠাবে এবং পূর্বানুমান পাওয়া যাবে (যেমন, Iris-setosa, Iris-versicolor ইত্যাদি)।


৪. API Deployment

এখন আপনার Flask API তৈরির পর এটি ডিপ্লয় করা যেতে পারে একটি পাবলিক সার্ভারে, যেমন:

  1. Heroku: Flask অ্যাপকে সহজে Heroku তে ডিপ্লয় করা যায়।
  2. AWS: AWS EC2 অথবা Lambda ফাংশন ব্যবহার করে API ডিপ্লয় করা যায়।
  3. Google Cloud: Google Cloud Run অথবা App Engine ব্যবহার করে API ডিপ্লয় করা যায়।
  4. Docker: Flask অ্যাপকে Docker কনটেইনারে প্যাকেজ করে যে কোনো সার্ভারে ডিপ্লয় করা যায়।

সারাংশ

  1. Model Deployment হল একটি প্রক্রিয়া যেখানে প্রশিক্ষিত মডেলকে বাস্তব জীবনের অ্যাপ্লিকেশনে বা সিস্টেমে প্রয়োগ করা হয়।
  2. Flask API তৈরি করে একটি ওয়েব সার্ভিস তৈরি করা হয়, যা ক্লায়েন্ট থেকে ইনপুট গ্রহণ করে এবং মডেল থেকে পূর্বানুমান প্রদান করে।
  3. মডেল ডিপ্লয়মেন্টের পরে, আপনি আপনার মডেলটি ইন্টারনেটের মাধ্যমে ব্যবহারকারীদের কাছে সরবরাহ করতে পারেন এবং নতুন ডেটার উপর প্রেডিকশন করতে পারেন।
Content added By
Promotion

Are you sure to start over?

Loading...