মেশিন লার্নিং নিয়ে কাজ করা কঠিন কিছু না। আমরা ছোট্ট একটা মেশিন লার্নিং প্রোগ্রাম লিখব। ৫ লাইনের মত মাত্র। নিজেরাই দেখব, কত সহজ একটা মেশিন লার্নিং প্রোগ্রাম লেখা যায়। প্রোগ্রামটা লিখব আমরা পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে। সাথে ব্যবহার করব scikit-learn।
scikit-learn হচ্ছে পাইথনের মেশিন লার্নিং লাইব্রেরী। পাইথন নিয়ে এই ব্লগে অনেক লেখা রয়েছে। পাইথনের ব্যাসিক ধারণা নেওয়ার জন্য সেগুলো দেখতে পারেন।
পাইথন যদি ইন্সটল করা না থাকে, তাহলে পাইথন ইন্সটল করে নিতে হবে। এরপর আমরা scikit-learn ইন্সটল করব। অনেক ভাবেই ইন্সটল করা যায়। PyPy এর সাহায্য ইন্সটল করতে টার্মিনাল বা কমান্ডলাইনে গিয়ে নিচের কমান্ডটা লিখলেই হবেঃ
pip install -U scikit-learn
PyPy হচ্ছে প্যাকেজ ম্যানেজার। PyPy কিভাবে ইন্সটল করতে হয়, তা সম্পর্কে জানা যাবে পাইথনের মডিউল এবং প্যাকেজ নামক লেখাটিতে। http://jakir.me/modules-package
নরমলা যে কোন টেক্সট এডিটরেই আমরা কোড লিখতে পারি। অথবা যে কোন পাইথন IDE ব্যবহার করতে পারি। পাইথনের জন্য আমার প্রিয় IDE হচ্ছে PyCharm. এখানে গিয়ে PyCharm এর কমিউনিটি এডিশনটা ডাউনলোড করে নেওয়া যাবে।
আমরা চাইলে Anaconda ও ব্যবহার করেও। scikit-learn ইন্সটল করতে পারি। তার জন্য প্রথমে Anaconda ইন্সটল করতে হবে। এরপর কমান্ড লাইন অথবা টার্মিনালে গিয়ে লিখতে হবেঃ
conda install scikit-learn
এতটুকু করলে আমরা প্রথম মেশিন লার্নিং প্রোগ্রাম লেখার জন্য প্রস্তুত। মেশিন লার্নিং সম্পর্কে ধারণা না থাকলে এই লেখা দুইটি দেখতে পারেনঃ
আপনাকে এমন একটা প্রোগ্রাম লিখতে বলল, যেখানে একটা ছবি দিয়ে বলা হলো এটা ছেলের ছবি না কি মেয়ের ছবি, তা বের করে দিতে হবে। তখন আপনি কি করবেন? যদি আমরা এ প্রোগ্রাম লেখার জন্য ম্যানুয়াল রুল লিখি, তাহলে সিম্পল এ কাজের জন্য কয়েক হাজার কোড লিখতে হতে পারে। আবার একটা মেয়ে যদি ছেলের মত করে চুল কাটে, তাহলে প্রোগ্রামটি ভুল রেজাল্ট দিতে পারে। ছেলে যদি বড় চুল রাখে, তাহলেও হয়তো প্রোগ্রামটি ভুল রেজাল্ট দিবে। এরকম প্রতিটা পরিস্থিতির কথা মাথায় রেখে কোড লিখতে হবে। যত প্রিসাইস করেই আমরা কোড লিখি না কেন, দেখা যাবে কোন না কোন পরিস্থিতিতে আমাদের প্রোগ্রাম ভুল রেজাল্ট দিচ্ছে।
এরকম সমস্যা সমাধানের জন্য আমাদের এমন অ্যালগরিদম ডিজাইন করা দরকার, যে আমাদের হয়ে প্রতিটা পরিস্থিতির কথা চিন্তা করে রুল বা লজিক গুলো সাজাবে। আমরা শুধু আমাদের অ্যালগরিদমকে কিছু ডেটা দিয়ে ট্রেইন করে নিব।
মানুষের একটা ছবি আমরা ইনপুট হিসেবে দিব, আউটপুট হিসেবে আমাদের দিবে ঐটা ছেলে নাকি মেয়ের ছবি। ছবিকে আমরা ক্লাসিফাই করছি। আলাদা আলাদা ক্লাসে সাজাচ্ছি। বিষয়টাকে আমরা ফাংশনের সাথে তুলনা করতে পারি। আর এই ফাংশনটিকে বলা হয় ক্লাসিফিয়ার। আর অটোমেটিকেলি কোন ক্লাসিফায়ার লেখাকে বলা হয় Supervised Learning।
Supervised Learning লার্নিং এ আমরা কিছু উদাহরণ বা ট্রেইনিং ডেটা দিয়ে দেই। ট্রেনিং ডেটা দিয়ে আমাদের ক্লাসিফায়ারকে ট্রেইন করি। যেমন আমরা বলি কোন ছবিতে যদি মানুষটির চুল বড় থাকে এবং ওজন কম হয়, তাহলে তা মেয়ে হবে। এটা শুধু একটা ডেটা। এমন আরো অনেক গুলো ডেটা দেওয়া থাকে। তখন ক্লাসিফায়ারটা ঐ ডেটা গুলো দেখে নিজে নিজে চিন্তা করতে পারে। এরপর আমরা যদি একটা ছবি দিয়ে বলি, বল তো এই ছবিটা কি মেয়ের ছবি নাকি ছেলের ছবি, তখন সে সুন্দর করে বলে দেয়। আমরা এখন সিম্পল একটা প্রোগ্রাম লিখব।
তার জন্য আমরা কিছু ট্রেইনিং ডেটা সংগ্রহ করব। ডেটার দুইটা অংশ থাকে, ফিচার এবং লেভেল। আমাদের সিম্পল প্রোগ্রাম লেখার জন্য আমরা এই ডেটা গুলো ব্যবহার করতে পারিঃ
Feature 1: Hair
|
Feature 2: Weight
|
Label
|
Long
|
50
|
Female
|
Short
|
60
|
Male
|
Long
|
45
|
Female
|
Short
|
70
|
Male
|
একটা মানুষের বিভিন্ন বৈশিষ্ট্য গুল হচ্ছে ফিচার। আর তা ছেলে, নাকি মেয়ে তাকে আমরা বলি লেভেল। একটা অবজেক্টের অনেক গুলো ফিচার থাকতে পারে। আমরা সিমপ্লিসিটির জন্য দুইটা ফিচার নিয়ে কাজ করব। Hair Size এবং ওজন। যত বেশি ট্রেনিং ডেটা থাকবে, ক্লাসিফায়ার তত ভালো কাজ করবে।
ক্লাসিফায়ার হচ্ছে অনেক গুলো রুল এর কালেকশন। আমরা আমাদের ক্লাসিফায়ারে ব্যবহার করব Decision Tree. নাম থেকেই বোঝা যাচ্ছে Decision Tree কি জিনিস। ডিসিশন ট্রি ছাড়াও আরো অনেক ধরনের ক্লাসিফায়ার রয়েছে। যেমন Artifical Nural Nework, Support Vector Machine ইত্যাদি।
সিম্পল প্রোগ্রাম লেখার জন্য আমরা long = 1 ধরব এবং short = 0 ধরব।
from sklearn import tree features = [[1, 50], [0, 60], [1, 45], [0, 70]] labels = ['Female', 'Male', 'Female', 'Male'] clf = tree.DecisionTreeClassifier() clf = clf.fit(features, labels) print (clf.predict([[1,55]]))
দুইটা ভ্যারিয়েবল নিয়েছি আমরা। একটাতে রেখেছি ফিচার গুলো, আরেকটাতে লেভেল গুলো।
ফিচার হচ্ছে আমাদের ইনপুট, আর লেভেল হচ্ছে আমাদের আউটপুট। প্রোগ্রামকে আমরা একটা মানুষের ফিচার দিয়ে বলব তা ছেলে না মেয়ে, তা বলে দিতে। আর তা করার জন্য আমরা ডিসিশন ট্রি ব্যবহার করব। sikit learn এ ডিসিশন ট্রি অ্যালগরিদম ইমপ্লিমেন্ট করা রয়েছে। আমরা তা ব্যবহার করব। তার জন্য আমাদের প্রথমে আমরা DecisionTreeClassifier টা ইনিশিয়ালাইজ করে নিব এবং এর মধ্যে আমাদের ট্রেনিং ডেটা পাস করব।
ট্রেনিং ডেটা থেকে ডিসিশন ট্রি এর মাধ্যমে প্রোগ্রামটা একটা লজিক দাড় করিয়ে নিবে নিজে নিজে। এরপর যদি আমরা কোন মানুষের চুলের সাইজ এবং ওজন ইনপুট হিসেবে দেই, প্রোগ্রামটা আমাদের বলে দিবে সে ছেলে নাকি মেয়ে।
Yes! আমরা আমাদের প্রথম মেশিন লার্নিং প্রোগ্রাম তৈরি করেছি। এরপর? নিজে একটা সমস্যা বের করে মেশিন লার্নিং এর মাধ্যমে সমাধান করার চেষ্টা করতে পারেন।
রিলেটেড লেখাঃ
চমৎকার লেখার জন্য ধন্যবাদ। আমরা feature গুল ম্যানুয়ালি ইনপুট দিয়েছি। কিন্তু আপনি লেখার শুরুতে বলেছেন আমরা একটা ছবি ইনপুট দেব সেটা দেখে প্রোগ্রাম বলে দেবে ছবিটি ছেলের / মেয়ের । এই কাজটি কিভাবে করা যেতে পারে বিশদ লেখার জন্য অগ্রিম ধন্যবাদ
এই প্রোগ্রামটা বলা যায় ML এ Hello Wolrd! তাই কমপ্লেক্সিটি না বাড়ানোর জন্যই আমরা সিম্পল ডেটা নিয়ে কাজ করেছি। শুধু বুঝার সুবিধার্থে সামনের দিকে আমরা দেখব কিভাবে ইমেজ বা আরো কমপ্লেক্স ডেটা নিয়ে কাজ করা যায়। অনলাইনে প্রচুর টিউটোরিয়াল রয়েছে। আপনি টেনসর ফ্লো ব্যবহার করতে পারেন। উদাহরণঃ
https://www.tensorflow.org/versions/r0.11/tutorials/image_recognition/index.html
পাইথন এখনো সুরু করি নাই। তাই দেইখা গেলাম।
মেশিন লার্নিং শেখার জন্য কি জানতে হবে এইটা একটু জানতে চাচ্ছি