Ml-gitbook.pdf

  • Uploaded by: Azizul Huq
  • 0
  • 0
  • July 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Ml-gitbook.pdf as PDF for free.

More details

  • Words: 41,934
  • Pages: 262
সূিচপ ভূিমকা

1.1

মিশন লািনং পিরিচিত

1.2

মিশন লািনং

1.3

িত

পাইথন প ােকজ ই টেলশন মিশন লািনং পাইথন টুলস IPython/ Jupyter Notebook পিরিচিত মিশন লািনং কােজর ধারা কীভােব সিঠক ডটা ি

করেত হয়?

েসিসং - ১

ডটা ি ে সিসং - শষ পব

1.3.1 1.4 1.4.1 1.5 1.5.1 1.5.2 1.5.3

অ ালগিরদম িসেলকশন

1.5.4

মেডল ইিনং

1.5.5

মেডল পারফেম টি ং - ১

1.5.6

মেডল পারফেম টি ং - শষ পব

1.5.7

িলিনয়ার িরে শন

1.6

িলিনয়ার িরে শন াথিমক আেলাচনা

1.6.1

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

1.6.2

মাি ভ ািরেয়বল িলিনয়ার িরে শন

1.6.3

াি ক াল িলিনয়ার িরে শন

1.6.4

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

1.6.5

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম

1.6.6

লিজি ক িরে শন

1.7

লিজি ক িরে শন : পিরিচিত

1.7.1

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

1.7.2

পিরিশ

1.8

Numpy পিরিচিত িমিন েজ

1.8.1 1.9

হােত লখা বাংলা সংখ া িরকগিনশন

1.9.1

কৃি ম িনউরেন অনুরণন পব-১

1.9.1.1

কৃি ম িনউরেন অনুরণন পব-২

1.9.1.2

1

কৃি ম িনউরেন অনুরণন পব-৩

1.9.1.3

2

ভূিমকা

ভূিমকা পাইথন, ম াটল াব ও জাভাি ে িডি ভ মেডল িবি ং ও পারফেম টি ং

সংে প মিশন লািনং কী তা িনেয় পের িব ািরত আেলাচনা করা হেব তেব সংে েপ বলা যেত পাের, যিদ কান মিশন

অিভ তার উপর িভি কের িনেজ িনেজ িশখেত পাের িকংবা ভিবষ ানী করেত পাের তাহেল বলা যায় িসে মিট ইে িলেজ বা ML Activated।

বতমােন যেকান ইি িনয়ািরং িবভােগর জন মিশন লািনং একিট

পূণ িবষয় হেয় দাঁিড়েয়েছ। ডটা

অ ানালাইিসস, ািসিফেকশন, িডকশেনর জন এটা শখা অত জ ির। িবগ ডটা, ডটা সােয় ,

আিটিফিশয়াল ইে িলেজে র সােথ মিশন লািনং ওতে াতভােব জিড়ত। বতমােন সাধারণ ওেয়ব অ াপ িকংবা মাবাইল ফােনও ML এর িবিভ িথওির অ া াই করা হয় যােত আপনার ব বহারকৃত অ াি েকশনিট আরও

ইে িলেজ হয় এবং আপনার মেনর কথা বাঝার মতা অজন করেত পাের। সাধারণ অ াপ ও ML ইি েমে ড অ ােপর মেধ তফাৎ হল এই, সাধারণ অ াি েকশন সব সময় সাধারণই থাকেব িক ML ইি েমে ড অ াপিট হেব

অনন সাধারণ, িতবার ব বহার করার পর আপনার মেন হেব অ াপিট যন আরও ইে িলেজ হে । তেব ML য ধু অ াপেক ইে িলেজ িদেত পাের তাই নয়, রাগ িনণয় থেক

কের যেকান ধরেণর ািসিফেকশন ও িডকশেনর

জন ML এর জুিড় নই। এই বইেয় মূলত মেডল তিরর পাশাপািশ এর িপছেনর ম াথেমিটে রও ব াখ া যথাসাধ সাবলীল ভাষায় উপ াপন করা হেব।

বইিট কােদর জন ? আিটিফিশয়াল ইে িলেজ , িবগ ডটা, ডটা মাইিনং এ আ হী িকংবা ML াকিটশনার , ML হিব ও ML

িবিগনারেদর জন এই বই। আিটিফিশয়াল ইে িলেজ এর নাম েনেছন িক অ া াই করার যােদর শখ তারাও চাইেল বইিট পড়েত পােরন। িব ািরত িনেচ বলা হল।

বইিট পড়া করার আেগ যা যা জানা লাগেব (* িচি ত টিপক আেলাচনা বিহভূত থাকেব) বিসক পাইথন া ািমং*

বিসক MATLAB া ািমং*

বিসক JavaScript া ািমং*

িলিনয়ার অ ালেজ া*

Pythonic Syntactic Sugar

3

ভূিমকা OOP Python পারেল সটােক াস পেয় িহেসেব ধরা যােব ক ালকুলাস (ইি

াল ও িডফােরনিশয়াল)

বিসক পিরসংখ ান ান যমন: Mean, Mode, Median, Variance, Co-Variance, Correlation,

Standard Deviation...

কী কী আেলাচনা করা হেব এই বইেয়? মিশন লািনং আসেল অেনক িব ৃ ত একিট িবষয়। একিট বইেয় এটা কি ট করা স ব নয়। িতিনয়তই ভাল থেক

আরও ভাল মেডল িব করার প িতর িরসাচ চলেছ। এই বইেয় মূলত আপনােক মিশন লািনংেয়র সােথ পিরচয়

কিরেয় দওয়া হেব, তেব অ াডভা ড লেভেল যেত হেব আপনার িনেজরই। তাহেল টিপক েলা এক নজের দখা যাক (স

ূণ টিপক পের আপেডট করা হেব):

েয়াজনীয় সফটওয় ার ই টেলশন Anaconda Python Distribution ই টেলশন

PyCharm IDE এর সােথ পিরচয় ও ই টেলশন

Sublime Text 3 ক Python এর উপেযাগী কের তালা

মিশন লািনং িকক াট

মিশন লািনং কী?

মিশন লািনংেয়র েয়াগ কী?

িরে শন কী?

িলিনয়ার ও পিলনিময়াল িরে সন কী? িস িস

ল িলিনয়ার িরে শন এর মাধ েম িডকশন (Sklearn মিডউল ব বহার কের)

ল িলিনয়ার িরে শন এর মাধ েম িডকশন (Scratch থেক মেডল তির করা)

মিশন লািনং িকক াট ২

Supervised Learning Unsupervised Learning দুইটা েয়াজনীয় িডকশন অ ালগিরদম কন এই দুইটা অ ালগিরদম েয়াজনীয়?

পনালাইজড িরে শন মথড (Penalized Regression Method) কী?

এনেস ল মথড (Ensemble Method) কী? কীভােব অ ালগিরদম িসেল করেবন?

িডি ভ মেডল তির করার সাধারণ রিসিপ

সমস া িচনুন ডটােসট চনার মাধ েম নতুন কান সমস ার ব বে দ

অ াি িবউট ও লেবল কী? সমাথক শ

েলা কী কী?

ডটােসট এর যসব িজিনেসর িদেক খয়াল রাখেত হেব

মেডল ও Cost Function

4

ভূিমকা মেডল িরে েজে শন Cost Function Cost Function Intuition - 1 Cost Function Intuition - 2 Ovefitting - আপনার বানােনা মেডল কী একটু বিশই ভাল পাফম করেছ? Parameter লািনং িডেয় িডেস

িডেয় িডেস ইনটুইশন

িলিনয়ার িরে শেন িডেয় িডেস চলেব

সচরাচর িজ াস

:

মিশন লািনং আমার Career এ কী কােজ লাগেব? মিশন লািনং খুবই িব ৃ ত একিট এিরয়া, আিটিফিশয়াল ইে িলেজ থেক প াটান িরকগিনশন এর অ গত।

িতিদনই চুর পিরমাণ ডটা িনেয় কাজ চেল। প াটান িরকগিনশেনর মাধ েম এই ডটােক গল, মাইে াসফেটর

মত বড় বড় কা

ািন েসস কের। এই কারেণই গল সাচ িদেত এত আরাম। যত ভুলই থাকুক না কন, স

সটােক িঠক কের নয়, ধরা যাক আপিন িনয়িমত া ািমং এর উপের িভিডও দেখন ইউিটউেব। বশ িকছু িদন দখেল স এমন এমন সব িভিডও িরকেমে শেন দেব য মেন হেব এই িভিডওটাই যন আপিন চাইিছেলন।

কিরয়াের লাগেব কী লাগেব না সটা আপনার ব াপার। আপিন যিদ ডা ার হন, হা া পাতলা া ািমং পােরন,

িকছু টা ML, িকছু টা Data Science এবং িকছু টা NLP (Natural Language Processing) বা NLU

(Natural Language Understanding) এর মাধ েম বানােত পােরন আিটিফিশয়াল ইন যটা হয়ত রােগর ল ণ ও রাগ ইনপুট িনেত পাের এবং আউটপুেট িতেষধক িদেত পাের। আপিন যখন কাথাও ঘুরেত যােবন, চ াটবট িহেসেব আপনার তির করা ইন ই ডা ার িহেসেব ছাটখাট রােগর িচিকৎসা করেত পারেব।

কিরয়াের লা ক বা না লা ক, CS এর একিট িবশাল ই ােরি ং এিরয়া হল ML। কমেবিশ সবারই ML এ ব ব ত

িকওয়াড েলা জানা উিচৎ।

মিশন লািনং কােদর জন ? মিশন লািনং শখার জন সােয় ব াক াউ হেল খুবই ভাল। কননা সাধারণ া ািমং করা হয় Explicit

া ািমং এর মাধ েম িক িডকশেনর ব াপার যখােন জিড়ত সখােন Explicit া ািমংেয়র মাধ েম স সমস া

স ভ করা যায় না। যিদ সােয় স

েক িব ুমা আইিডয়া না থােক তাহেল আ ারলাইং কনেস

েলা বুঝেত

সমস া হেত পাের তেব, ম াথ বােদ মেডল ডেভলপ করেত পারেবন, িক মেডেলর য অি মাইেজশন, সটা ম াথ ছাড়া করা অস েবর কাছাকািছ।

5

ভূিমকা

কখন মিশন লািনং ব বহার করা উিচৎ? যিদ মেন হয় আপনার অ ােপ িমউিজক/িভিডও/ গ পা িরকেমে শন সট করা েয়াজন। িকংবা আপনার ওেয়বসাইেট াট

ামার কার েয়াজন। িকংবা কান কান প ারািমটােরর উপর িভি কের আপনার ওেয়বসাইেট

কউ Ad এ ি ক কের ... ইত ািদ।

এই বইিট পড়ার পূবশত কী? উপের বলা আেছ

এত েলা ল া ুেয়জ িনেয় আেলাচনার কারণ কী? যিদ একজন ফুল

াক জাভাি

ডেভলপার তার ওেয়ব অ ােপ ML মথড অ া াই করেত চাইেল তােক নতুন

কের Python িশখেত হেব, এইসব ঝােমলা এড়ােনার জন একই িজিনস িভ িভ াটফেম অ া াই কের দখােনা হেব।

কান কান বই ফেলা করা হেব? Machine Learning in Python : Essential Techniques for Predictive Analysis [Wiley] Michael Bowles Mastering Machine Learning with Scikit-Learn [PACKT] Data Science from Scratch [OREILY] - Joel Grus Building Machine Learning System with Python [PACKT]

মিশন লািনং িনেয় কান কান িটিভ িসিরজ বানােনা হেয়েছ? মিশন লািনং ব াপারটা জিটল ও কাঠেখা া লাগেলও, কান িকছু শখার সময় ধু িথওির জানেল সটা জিটল ও

িনরস থেক যায়। িক আমরা যিদ পাশাপািশ ঔ টিপক িরেলেটড মুিভ বা িসিরজ দিখ তাহেল আমােদর আ হ ব

ণ বেড় যায়। সজন এই সংি

িল ।

Person Of Interest মিশন লািনং ক বজড কের চমৎকার উপেভাগ একিট িটিভ িসিরজ, মিশন লািনং ক ভালবাসার জন এই

একটাই যেথ । এর মূল চিরে থােক চরম িতভাবান া ামার Harold Finch ও তার ডান হাত John Reese। Harold Finch এমন একিট মিশন তির কেরন যটা কান দুঘটনা ঘটার আেগই িড করেত পাের এবং Harold Finch এর কাজ হল সই দুঘটনা িতেরাধ করা।

6

ভূিমকা এটােত দখােনা হেয়েছ Natural Language Understanding ( যখােন Harold তার এই Machine এর সােথ English ল া ুেয়েজর মাধ েম কিমউিনেকট কের)

Image Processing (Facial Recognition, Object Recognition, Optical Character Recognition ... ) Artifical Neural Network: ায়ই দখা যায় বশিকছু ছিব লাইেনর মাধ েম ই ারকােনে ড, এ েলা িদেয় আসেল Artifical Neuron এর কােনকশন বাঝােনা হেয়েছ। এই বইেয়র একিট িবশাল অংশ জুেড় থাকেব ANN।

Silicon Valley িসিরজিট মূলত িতভাবান া ামার ও তার ডটা কে েয়াগটা ৩য় িসজেন বলা হয়।

ডটা কে

শন কা

ািনর কািহনী িনেয় তবুও এখােন ML এর

শন অ ালগিরদেমর মূল কাজ থােক কান একটা ডটােসেট Information কতটা থােক? যিদ

অ ালগিরদম িডেট করেত পাের য Dataset এর একটা িনিদ অংশ Redundant মােন, সটা মুেছ িদেলও িত নই। সই অংশটুকু বাদ িদেল কে

সড ডটার সাইজ আেগর চেয় কম হেব সটাই াভািবক। িক Information

extraction টাই হল আসল চ ােল ।

ধ ন, আপনার ােসর িশ ক ােস ধু 'ক' শ িট উ ারণ কেরন, এটা থেক বুঝা যায় যিদও বা 'ক' এর সমি

ডটােসট িহেসেব হণেযাগ িক এেত Information এর পিরমাণ 0। আমরা এই সম 'ক' এর ি ং িনেয় কে

করেল আউটপুট ফাইেলর সাইজ হেব ০ বাইট। যেহতু এেত আেদৗ কান Information নাই। িক বােজ

েলা স

অ ালগিরদম অ া াই করেল আউটপুট ফাইেলর সাইজ ইনপুেটর সমান বা িকছু টা কম হেত পাের। মিশন লািনংেয়র অন তম অ াি েকশন িড করা। তাই ডটা কে

শেন এটা ব বহার কের আমরা অিত সহেজই

Information extract করেত পাির। িক আমােদর মেডেলর পাফেম যিদ খারাপ হয় সে ে AI িসে মটা Redundant অংশ রেখ Information কেট িদেত পাের। ৩য় িসজেন (নন

য়লার) দখা যায় কান একটা পিরি িতেত Richard ক বলা হয় মিশন লািনং িসে ম ফেল

িদেত, িক স বেল তােত তার কে

শন অ ালগিরদম ইউজেলস হেয় যােব।

আমরা ধারণা করেত পাির এখান থেক ML মথডলিজ অ া াই কের Information Extraction ই িছল Middle Out (কা িনক অ ালগিরদম) এর মূল কাজ।

অত মজার ও Insightful একিট িটিভ িসিরজ Silicon Valley। হয়ত ML এর সােথ পুেরাপুির যু না থাকেলও এর কািহনী েলা আপনার সময় ভালভােব কাটােত সাহায করেব।

লখক স

েক

মানস 7

ভূিমকা

Embedded System Engineer AplombTech BD Ltd.

ওেয়বসাইট | গ | ফসবুক | ইেমইল | িগটহাব স

ূণ িবনামূেল বইিট য কউ পড়েত পােরন ও কে

এবং পযা

িডট িদেয়। কমািশয়াল ব বহার স

শয়ার করেত পােরন িক মূল কে

ূণ িনিষ ।

অিবকৃত রেখ

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

8

মিশন লািনং পিরিচিত

মিশন লািনং পিরিচিত মিশন লািনং কী? মিশন লািনং

করার আেগ কেয়কিট কতািব সং া দখা যাক। এই ব াপাের Arthur Samuel বেলন,

Field of study that gives computers the ability to learn without being explicitely programmed. অথাৎ িকনা, কি

উটােরর যিদ এমন কান অেলৗিকক মতা থােক যার জন স যেকান িকছু আেগ থেক ঔ

িবষয়ক া াম লখা ছাড়াই িশখেত পাের।

ধরা যাক, একটা বাইেপডাল (িহউম ানেয়ড বা দুই পা ওয়ালা) রাবট যিদ িনেজ িনেজ হাঁটা িশখেত পাের কান িনিদ হাঁটার া াম ছাড়াই তেব বলা যােব রাবেট লািনং অ ালগিরদম ব বহার করা হেয়েছ। আমরা একটা বাইেপডাল

রাবেটর হাঁটার জন সহেজই া াম িলেখ িদেত পাির। িক সই হাঁটােক ইে িলেজ বলা যােব না কানভােবই,

একটা এমেবেডড িসে ম য জন া াম করা হয় স যিদ ধু ঔ িনিদ কাজটাই কের তাহেল সটা ইে িলেজ

কীভােব? পিরবতেনর সােথ যিদ িডভাইেসর আচরণ পিরবিতত হয় তাহেলই তােক ইে িলেজ বলা যেত পাের। Tom Michel এর মেত, A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E. হঠাৎ কের সং াটা দখেল একটু সমস া হেত পাের, তাই এেক একটা উদাহরেণর মাধ েম বলা যেত পাের, ধির, আিম এমন একিট মিশন তির করলাম য দাবা (Chess) খলেত পাের, তাহেল িনেচর প ারািমটার েলােক আমরা এভােব িলখেত পাির,

E = ধির মিশনটা ৫০০ টা কি ট সট দাবা খলল T = দাবা খলাটাই মিশেনর Task P = মিশন খলায় িজতল না হারল সং ানুযায়ী, যিদ মিশেনর খলার সংখ ার বৃি র (E) পাশাপািশ তার জতার হার বেড় যায় (P) তাহেল বুঝেত হেব সই মিশন আসেলই িশখেছ।

আর এটা Explicitly া ােমর মাধ েম করা িনতা ই অস ব।

ডটা সােয় , আিটিফিশয়াল ইে িলেজ ও মিশন লািনং 9

মিশন লািনং পিরিচিত

ডটা সােয় (Data Science) ডটা সােয় আসেল পিরসংখ ান, মিশন লািনং ও ডটা িভজুয়ালাইেজশন এর সমি । একজন ডটা সােয়ি ে র

কাজ হে ডটােসট এর মাধ েম িকছু ে র উ র খাঁজা। িব ািরত।

আিটিফিশয়াল ইে িলেজ আিটিফিশয়াল ইে িলেজ িকছু সমস া ও সমস া সমাধােনর প িতর সমি য েলা ব বহার কের জিটল সমস া সমাধান করা যায়। কি

উটারেক তাস, দাবা খলা শখােনা, ন াচারাল ল া ুেয়জ া েলশন, িসিকউিরিট

ােটিজ

ম ােনজেম AI অ গত। AI এর বেলম য বা ব ডটােসট বজড হেত হেব এমন কান কথা নাই, িথওিরিটক াল হেত পাের।

মিশন লািনং মিশন লািনং আিটিফিশয়াল ইে িলেজে র একটা িবভাগ যখােন ইে িলেজ িসে ম তির করা হয় ডটােসট

িকংবা ই ারঅ াি ভ এ েপিরেয়ে র মাধ েম। মিশন লািনং টকেনালিজ Cybersecurity, Bioinformatics, Natural Language Processing, Computer Vision, Robotics ছাড়াও চুর

ে ব বহার করা হে ।

Machine Learning এর সবেচেয় বিসক কাজ হল ডটা ািসিফেকশন, যমন একটা ই- মইল বা ওেয়বসাইেটর কেম

াম িকনা তা চক করা। বতমােন Deep Learning বা Deep Network এর উপের চুর িরসাচ চলেছ,

মূলত Convolution Neural Network এসব

ে ব বহার করা হয়।

বতমােন ই াি য়াল লেভেল মিশন লািনং অত

পূণ একটা িবষয়। িকছু না িকছু মিশন লািনং মথডলিজ

জানা সকেলরই উিচৎ। মিশন লািনংেয়র বশ িকছু িজিনসই ডটা সােয়ে র সােথ ওভারল াপ করেব, িক মিশন লািনংেয়র মূল টােগট হল িডি ভ মেডল িব করা।

একনজের অথাৎ, AI ইে িলেজ মিশন তিরেত সাহায কের, ML হল AI এর সাবিফ যটা মিশনেক কান িকছু িশখেত

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

Data Science, ML ও AI ক ায়ই একই িজিনস মেন হেব কারণ এ লার মেধ পাথক খুবই অ । তেব ডটা সােয় স

েক একটা চিলত কৗতুক হল,

একজন ডটা সােয়ি ে র কি একজন কি

উটার ান একজন পিরসংখ ানিবেদর চেয় বিশ এবং তার পিরসংখ ান ান

উটার সােয়ি ে র চেয় বিশ।

লািনং অ ালগিরদম এর কারেভদ সুপারভাইজড লািনং ( মিশন ক শখােনা)

10

মিশন লািনং পিরিচিত থেম মিশনেক শখােবন, তারপর তার িশ ােক কােজ লাগােবন

আনসুপারভাইজড লািনং ( মিশন িনেজ িনেজই িকছু করা িশখেব) মিশন িনেজ িনেজই িকছু করা িশখেব তারপর সই িশ া কােজ লািগেয় ডটা াকচার ও প াটান বুঝেব যটা িকনা

আপিনও বােঝন না

সুপারভাইজড লািনং (পিরিচিত) Regression ML এর সবেচেয় পিরিচত সমস া িনেয় আেলাচনা ও তার দরদাম।

করা যাক। ধ ন আমার কােছ িকছু ডটা আেছ, ঘেরর সাইজ

এই ডটােসট আিম যিদ ট কির তাহেল িনেচর মত একিট াফ দখেত পাব।

ডটােসট:

এই সমস ার ছিব নওয়া হেয়েছ Andrew Ng এর মিশন লািনং কােসর িরেসাস থেক। সরাসির ব বহার করা হল।

সমস া: উপযু ডটােসট িদেয় আমােক বর করেত বলা হল, যিদ তামার ব ু র বািড়র সাইজ 750 square feet হয়, তাহেল দাম কত?

11

মিশন লািনং পিরিচিত

সমাধান: আিম যিদ এমন একটা ইকু েয়শন বর করেত পাির যটােত Area বসােল Corresponding াইস পাওয়া যায়, তার মােন

y = f(x)

বা, Price = f (Area)

তার মােন আমােদর বর করেত হেব f() ফাংশনটা আসেল কী? আিম এখােন বলব না কীভােব f() বর করেত হেব।

সমস া থেক যসব তথ আমরা পাই এখােন আমরা আমােদর অ লগিরদমেক একটা ডটােসট িদি যখােন 'সিঠক উ র' দওয়া হেয়েছ। ( াফ থেক)

তার মােন আমরা িনিদ সাইেজর বািড়র আসল দাম জািন এই ডটা আমরা অ ালগিরদেম িফড করার মাধ েম ওেক শখােত পাির য এই সাইেজর বািড়র দাম হয় এত। এেক Training Data বলা হয়।

এবার এই Training Data এর উপর িভি কের আমরা এমন সাইেজর বািড়র দাম জানেত পাির য

সাইজিট Training Data ত িছল না। যমন আিম যিদ 3000 sq ft এর বািড়র দাম জানেত চাই সটা

িক ডটােসট এ নই! িক আমার তির করা মেডল আেগর Experience এর উপর িভি কের 3000 sq ft বািড়র দাম অনুমান (Prediction) করেত পাের এই সমস ািট Regression সমস ার অ গত কারণ, পূেবর ব ব ত মান থেক আমরা নতুন একিট মান অনুমান করার চ া করিছ। পরবতী উদাহরণ দখেল পির ার হেব।

Classification এবার আেরক ধরেণর ডটােসট দখা যাক, যখােন িটউমােরর আকােরর সােথ সােথ বলা আেছ ঔ আকােরর িটউমারিট Deadly, Malignant বা াণঘাতী িকনা।

12

মিশন লািনং পিরিচিত

এখােন 1 ক হ াঁ িহেসেব ধরা হেয়েছ এবং 0 ক না িহেসেব। সাধারণ ান অনুসাের বলা যায় য িটউমােরর যিদ আকাের বড় হয় তেব তার াণঘাতী হওয়ার স াবনা বেড় যায়। িক ডটােসট থেক দখা যাে য িকছু িকছু িটউমার আকাের বড় হেলও াণঘাতী নাও হেত পাের। আবার িকছু িকছু ছাট িটউমারও াণঘাতী হেত পাের

সমস া: আমােদর এমন একিট িডি ভ মেডল তির করেত পাের য বলেত পারেব িটউমার াণঘাতী িকনা (আকােরর উপর িভি কের) ডটােসট থেক যসব তথ পাওয়া যায় এটা একটা Classification বেলম, কননা আমরা ইনপুেট িদি Tumor Size এবং আউটপুেট Yes/No টাইপ উ র চাি । কান মান চাি না, যমন বািড়র দােমর টাইপ উ র হণেযাগ িছল না। তাই ওটা িরে শন বেলম

ে আমরা একটা মান চাি লাম, Yes/No

ডটােক দুইভােগ ভাগ করেত হেব, মাঝখােন িকছু ই থাকেব না, 1 ক Malignant এবং 0 ক Not

Malignant িহেসেব আমরা ট াগ িদেত পাির। এটা যিদ িভ ভােব ট করা যায়

এখােন আমরা একটা মা প ারািমটার (Size of Tumor) ব বহার কের বলার চ া করিছ সটা াণঘাতী িক

না? আসেল একধরেণর ইনপুট থাকেব এমন কান কথা নাই, আরও অেনক ইনপুট থাকেত পাের। যমন Age vs Tumor size ইনপুট প ারািমটার যিদ আরও থােক

13

মিশন লািনং পিরিচিত

সমাধােনর উপায়? আমরা একটা

ট লাইন িদেয় এই প দুইটােক আলাদা করেত পাির। যটা িনেয় পের আেলাচনা করা হেব।

পরবতীেত আমরা Unsupervised Learning এর পাশাপািশ েয়াজনীয় পাইথন সফটওয় ার প ােকজ ই টেলশন দখব।

14

পাইথন প ােকজ ই টেলশন

মিশন লািনং পাইথন প ােকজ ই টেলশন মিশন লািনংেয়র জন বশ িকছু পাইথন মিডউল ও লাইে ির েয়াজন। আমরা মেডল

পাশাপািশ দখব কীভােব লাইে ির ব বহােরর মাধ েমও মেডল তির করা যায়।

াচ থেক িব করার

Anaconda প ােকজ ডাউনেলাড ই টেলশন (পাইথন ২.৭) স

ূণ কােস আমরা পাইথন ২.৭ ভাসনিট ব বহার করব। তাই অ ানােকা া প ােকেজর পাইথন ভাসনও ২.৭ হওয়া

বা নীয়।

উইে াজ উইে াজ ৩২ িবেটর জন ডাউনেলাড (335MB) উইে াজ ৬৪ িবেটর জন ডাউনেলাড (281MB)

ডাউনেলাড কের সাধারণ সফটওয় ার ই টল কেরন যভােব সভােব ই টল করেলই হেব। Start Menu ত িগেয় Spyder সাচ িদেলই IDE িট

পেয় যােবন।

OSX ৬৪ িবট ডাউনেলাড

িলনা ৬৪ িবট ডাউনেলাড (392MB)

৩২ িবট ডাউনেলাড (332MB) ডাউনেলাড শেষ ডাউনেলাড িডের িরেত িগেয় িনেচর কমা িদন টািমনােল, bash Anaconda2-4.0.0-Linux-x68_64.sh

Spyder IDE Spyder IDE ওেপন ক

মিশন লািনংেয়র জন

ন ও িনেচর কাডিট রান ক ন, যিদ কাজ কের তাহেল বুঝেত হেব আপনার কি

ত।

উটার

from sklearn.linear_model import LinearRegression print sklearn.__version__

15

পাইথন প ােকজ ই টেলশন

Anaconda Official Website অিফিশয়াল ওেয়বসাইট পরবতী পেব আমরা িরে শন অ ানালাইিসস দখব উদাহরেণর মাধ েম।

16

মিশন লািনং পাইথন টুলস

একনজের পাইথন মিশন লািনং টুলস Pandas ডটা ম লাইে ির Numpy ক ালকুেলশন ও ম াি

লাইে ির (িলিনয়ার অ ালেজ া)

Scikit-learn মিশন লািনং লাইে ির IPython/Jupyter Notebook মিশন লািনং া াম সহজ কের লখার টুল

17

IPython/ Jupyter Notebook পিরিচিত

There are only two kinds of languages: the ones people complain about and the ones nobody uses -- Bjarne Stroustrup

মিশন লািনংেয়র জন পাইথন লাইে ির মিশন লািনংেয়র জন পাইথেনর যসব লাইে ির ব বহার করা হেব: numpy - সােয়ি pandas -

িফক ক ালকুেলশেনর জন

ডটা ম

matplotlib - ি

ও ি মাি ক াফ িটংেয়র জন

scikit-learn

মিশন লািনং অ ালগিরদম ডটা ি েসিসং

িডি ভ মেডল িবি ং ও পারফেম টি ং

... আরও অেনক িকছু IPython Notebook / Jupyter Notebook Painless Machine Learning মেডল তিরর জন

IPython Notebook / Jupyter Notebook Jupyter Notebook আেগ IPython Notebook িহেসেব পিরিচত িছল।

কন IPython Notebook স

েক জানা েয়াজন?

একটা নাটবুক আমরা যসব কােজ ব বহার কের থািক। IPython Notebook ক া ামােরর নাটবুক বলেল ভুল বলা হেব না।

মিশন লািনংেয়র কাজ েলা যেহতু ইটােরবল, মােন কাজ করার পাশাপািশ ায়ই কােজর আেগর অংশ ও

পেরর অংশ চক করেত হয় সজন IPython Notebook মিশন লািনংেয়র জন পােফ টুল। কাড শয়ািরংেয়র

ে আমরা কাড শয়ার কির িক যার সােথ শয়ার করা হয় তােক িন য়ই কাড রান কের

দখেত হয়। IPython Notebook এর

ে ডকুেম

আউটপুট একিট ডকুেমে র মাধ েম শয়ার করা স ব।

েলা শয়ােরবল। িতিট কমাে র বা কমা বা েলর

আেরকিট বড় সুিবধা হল IPython Notebook পুেরাপুির Markdown ফরম ািটং সােপােটড। ই া করেল আপিন নাট আকাের কথাবাতা Markdown Format এ িলেখ িদেত পােরন।

IPython Notebook পাইথেনর পাশাপািশ: C#, Scala, PHP .. ইত ািদ অন ান ল া ুেয়জও সােপাট কের, তেব সে ে ািগন ব বহার করেত হেব।

18

IPython/ Jupyter Notebook পিরিচিত

IPython Notebook রান করা cmd ওেপন কের িলখুন ipython notebook তারপর Enter চাপুন। এেত কাজ না করেল িলখুন jupyter

notebook ।

দুইটার একটা কাজ করেবই, কাজ না করেল Anaconda প ােকজ িরই টল িদন।

নাটবুক ডেমা একটা ছা ডেমা

বিসক ই

াকশন

কাড িলেখ Enter চাপেল নতুন লাইেন লখা যােব Shift + Enter চাপেল একটা Cell এি

িকউট হেব

নাট ও কাড একসােথ (বাংলা সােপােটড!)

19

IPython/ Jupyter Notebook পিরিচিত

আরও একটুখািন IPython Notebook! ইনলাইন াফ িটং! %matplotlib inline from matplotlib import pyplot as plt import numpy as np x = np.array(range(10)) y = np.array(range(10)) plt.plot(x, y) plt.show()

20

IPython/ Jupyter Notebook পিরিচিত

IPython এর কাজ দখােনা এই পয ই! পরবতীেত নতুন প ােকজ েলার সােথ পিরচয় কিরেয় দওয়া হেব।

21

মিশন লািনং কােজর ধারা

মিশন লািনংেয়র কােজর ধারা মিশন লািনং অ া াই করার আেগ বশ িকছু িজিনস স

লািনং অ ালগিরদম চেয়স থেক মাধ েম কাশ করা যায়।

েক আেগ জানেত হয়। আমরা এই চ া াের দখব, মিশন

কের কীভােব িডি ভ মেডল িব করেবন সটা একটা সাধারণ রিসিপর

scikit-learn এর িতনিট অংশ:

মেডল scikit-learn লাইে

ির ব বহার করার সময় সবেচেয় সাধারণ কাজিট হল য ািসফায়ার ব বহার করেবন তার

একটা অবেজ (মেডল) তির করা। যমন, আেগর বািড়র আকার ও দরদাম স

িকত সমস ার

ে ,

from sklearn import LinearRegression #Creating the regression model linear_regression_model = LinearRegression()

আমােদর কাজ হেব এই িলিনয়ার িরে শন মেডলেক ডটা িদেয় ইন করা।

িফট ( ইন) #Let, house_sizes = Contains all size of house #house_price = Contains all price of house #Training the model linear_regression_model.fit(house_sizes, house_prices)

22

মিশন লািনং কােজর ধারা সাধারণত েত কটা মেডল এ fit ও predict এই দুইটা ফাংশন ায়ই থােক।

িড #predicted value """ Here, test_house_size is a variable which is not a member of training data, rather a u nique one """ predicted_price = linear_regression_model.predict(test_house_size)

এই predicted_price ভ ািরেয়বেল আিম য সাইেজর বািড়র দাম জানেত চাি সটা অ াসাইন হেব।

মিশন লািনং ওয়াকে া বলেত কী বাঝায়? কতািব সং ানুসাের, An orchestrated and repeatable pattern which systematically transforms and processes information to create prediction solutions.

An orchestrated and repeatable pattern: এর মােন, একই ওয়াকে া িদেয় আমরা সমস া িডফাইন করব, এবং সই ওয়াকে া িদেয়ই আমরা সলু শন িব করব। Transforms and processes information: ডটা িদেয় মেডল তির করার আেগ সটােক িনংেয়র জন ব বহারেযাগ কের িনেত হেব। ধরা যাক আমরা একটা িডি ভ মেডল তির করেত চাি যটা হ াঁ বা না ত উ র দয়। ইনপুট ডটা যিদ িনউেমিরক াল হয় তাহেল আউটপুটও িনউেমিরক াল হেল সুিবধা। এই কারেণ, িনং ডটার

ে যত হ াঁ/না

ওয়ালা লেবল আেছ ও েলা আমরা িরে স কের 1 ও 0 বিসেয় িদেত পাির। এটােক ইনফেমশন ি

েসিসং বেল।

Create prediction solutions: যেকান মিশন লািনংেয়র সবেশষ ল থােক িড করা। তেব িডকশন যন াহেকর চািহদা মটায় সে ে ও

নজর রাখেত হেব।

যমন, আমার তির একটা মেডেলর নতুন ডটা িনংেয় লােগ ২ িদন সময়, িড করেত লােগ আরও ১ িদন

সময়। এখন ঔ ১ িদেন আরও নতুন ডটা যিদ আেস, স েলা ইন করেত আমার আরও সময় েয়াজন। তত েণ ডটা িড করার টাইম িলিমট আরও বেড় যােব। এই মেডল কী কান সু াভািবক মানুষ হণ করেব? অবশ ই

23

মিশন লািনং কােজর ধারা না, তাই যত কম িনং সমেয় একটা মেডল যত কাছাকািছ উ র িড করেত স ম হয় সই অ ালগিরদম ও মিশন লািনং িসে ম তত ভাল।

মিশন লািনং ওয়াকে া: সিঠক

িজ াসা করা

আিম আসেল কী করেত চাই, এটা িদেয়

হয় কাজ। বািড়র আকার ও দােমর সমস ার

জিটল কাজ সহজ হেত পাের যিদ সিঠক

সট করার পর আমরা তার উ র খুিঁ জ।

চাি বািড়র আকার ক ইনপুট িদেত এবং আউটপুেট চাি সটার দাম।

ে বাঝা যায় আিম

ডটা ছােনা

24

মিশন লািনং কােজর ধারা

এবার আমার সমস া সমাধােনর জন বা মেডল ইন করার জন অবশ ই ডটা িচিনেয় িদেত হেব। একটা মিশন

তখনই একটা ভাল কাজ ও খারাপ কােজর মেধ পাথক বর করেত পারেব যিদ তােক ভাল ও খারাপ কাজ দিখেয় ইন করা হয় তাহেলই পের স নতুন কান ঘটনা দেখ তার িনং ডটা থেক িমিলেয় িনেত পারেব সটা ভাল না

খারাপ কাজ।

অ ালগিরদম িসেল করা

সবেচেয় কিঠনতম কাজই হল অ ালগিরদম িসেল করা। যসব সমস ায় সাধারণ িলিনয়ার িরে শন ব বহার কেরই কাজ করা যায় সসব

ে আিটিফিশয়াল িনউরাল নট ব বহার করার কান মােন হয় না।

25

মিশন লািনং কােজর ধারা যেহতু একই কাজ িবিভ মেডল িদেয় করা যায় তাই য মেডল এরর কম দখােব সটাই সাধারণত িসেল করা হয়। অ ালগিরদম িসেল করার জন অবশ ই বেলমেসট ও অ ােভইল াবল ডটােসট বুঝেত হেব। যমন বািড় ও

দরদােমর সমস ািট একিট িরে শন বেলম, আিম যিদ এখােন া ািরং ( ডটা ািসিফেকশন) অ ালগিরদম অ া াই কির তাহেল অবশ ই এর িডকশন খুবই বােজ আসেব।

মেডল ইিনং

আমার হােত থাকা ডটােসট দুইভােগ ভাগ করব, একটা হল Training Dataset এবং আেরকিট হল Testing Dataset। Testing Dataset এর কান ডটা-ই Training Dataset এ থােক না। যিদ থাকত তাহেল মিশন লািনংেয়র মূল

উে শ ই মািট হেয় যত। (মােন তিরকৃত মেডল নতুন িকছু শখার পিরবেত ডটা মুখ করা িশখত, যমনটা আমরা িনেজরা পরী া দওয়ার সময় কের থািক, তাই না?) এই িনং ডটা মেডেল Feed কের ও লািনং অ ালগিরদম অ া াই করার মাধ েম মেডল িনং স

করা হয়।

মেডল টি ং

26

মিশন লািনং কােজর ধারা

Dataset দুইভােগ ভাগ করার কারণ হ , ইিনং ডটা দওয়ার মাধ েম মেডলেক আেগ িশখােত হেব। তারপর

একটা ইনপুট চেয়স করেত হেব (Testing Dataset) ও ইনপুট িট মেডলেক িদেল তার িডে ড আউটপুট কতটা সিঠক বা ভুল সটা বর করা যােব।

তারমােন আমার হােতর সব ডটাই আিম িনংেয় িদি না, তারমােন িকছু ডটা আমার হােত থেক যাে যটা িদেয় আিম ভিরফাই করেত পারব আেদৗ আমার তির করা মেডলিট িকছু িশখেত পারেছ িকনা।

ব াপারটা অেনকটা এরকম, ধির আমার তির করা ML মেডলেক আিম ৩ এর ঘেরর নামতা শখােত চাই। তাহেল আিম এরকম একিট Dataset তির করব, ô X ò = ô ô X ó = ÷ ô X ô = ú ô X õ = òó ô X ö = òö ô X ÷ = òù ô X ú = óø ô X òñ = ôñ

এবার আিম যিদ এখান থেক িনং ডটা ও টি ং ডটা আলাদা কির তাহেল ডটােসট েলা দাঁড়ােব এরকম, ব : ডটােসট থেক িনং ডটা ও টি ং ডটা আলাদা করার জন ও আলাদা অ ালগিরদম আেছ। ডটােসট

যিদ অেনক কম হয় সসব

আমরা পের িব ািরত দখব।

ে ডটা িসেলকশেনর সিফি েকেটড অ ালগিরদম েলা খুবই ভাল কাজ কের।

িনং ডটা

27

মিশন লািনং কােজর ধারা

ô X ò = ô ô X ó = ÷ ô X ô = ú ô X õ = òó ô X ÷ = òù ô X ú = óø ô X òñ = ôñ

টি ং ডটা ô X ö = òö

এখােন পির ার দখা যাে আিম িনং ডটায় 3 X 5 দই নাই। তার মােন আিম 3 X 5 বােদ বািক ডটা িদেয় মেডল ইন করব। তারপর 3 ও 5 ইনপুট িদেয় দখব মেডলিট আউটপুট ১৫ এর কাছাকািছ িদে িকনা। যিদ দয় তার

মােন আমার মেডেলর অ ালগিরদম িসেলকশন, ডটা ি কের সে ে আমার আবার ডটা ি

েসিসং থেক

েসিসং ও ইিনং যথাযথ হেয়েছ। আর যিদ এটা কাজ না

কের নতুন অ ালগিরদম িদেয় াই করেত হেব।

মেডল তির করা পুেরাটাই ইটােরিটভ েসস, মােন বারংবার করার মাধ েমই পারেফকশন আনেত হয়, একবােরই একটা মেডল পারেফ হেব এমন ধারণা করা িঠক নয়।

ওয়াকে া গাইডলাইন শেষর

প না, মেডল িব করার জন সতক থাকেত হেব

থেকই

28

মিশন লািনং কােজর ধারা মেডল িব করার জন

থেকই সব িচ াভাবনা কের আগােত হেব, কননা িতিট

িনভরশীল। অেনকটা চইন এর মত, একটা অংশ ভুল করেলই আবার থম থেক

প ই পূববতী

েপর উপর

করেত হেব।

তারমােন আি েমট টােগট, হােত থাকা ডটােসট, অ ালগিরদম িসেলকশন সবিকছু ই করেত হেব য ও িচ াভাবনার সােথ।

যেকান সময় আেগর

েপ িফের যেত হেত পাের

ধ ন, আপনার কােছ েণর ডটােসট আেছ িক আপিন আউটপুেট চাে ন দুইিট সংখ ার যােগর ফলাফল।

তারমােন আপিন যা চান তার সােথ ডটােসট এর কান িমল নাই। তাই আমােদর এবার েণর ডটােসট ক িরে স করেত হেব যােগর ডটােসট িদেয় তারপর আবার মেডলেক ইন করেত হেব।

ডটা সাজােনা লাগেবই RAW ডটা কখেনাই আপনার মনমত সাজােনা থাকেব না, মেডল ইিনংেয়র জন সটােক অবশ ই ি করেত হেব। ডটা ি

েসস

েসিসং এই মূলত সবেচেয় বিশ সময় লােগ।

ডটা যত মজা তত আসেল আপিন মেডেল যত ডটা িফড করেত পারেবন তার িডকশন অ াকুেরিস ততটাই বটার হেব। এই িথওির তিস ।

বেলম হাক এটা সটা সলু শন হাক ভাল কখেনাই খারাপ সলু শনেক পা া দেবন না। একটা বেলম স ভ করার সময় অেনক চ ার পেরও যিদ আশানু প পাফেম না পান, সে ে অন ান আিম িক সিঠক

প েলা স

েক

ক ন।

করিছ?

সমস া সমাধান করার মত েয়াজনীয় ডটা িক আমার আেছ? আিম িসেল করা অ ালগিরদম িক সিঠক?

যিদ সে াষজনক উ র না পান তাহেল সমস ার সমাধান না করাই বটার। কারণ য মেডল ৫০% সময় সিঠক উ র দয় আর বািক ৫০% ভুল উ র দয় সটা কনিফউশন তির করার জন ই ভাল, সমস া সমাধােনর জন নয়।

আপাতত এই পয ই। পরবতী পেব আমরা মিশন লািনংেয়র ১ম ধাপ দখব। "কীভােব সিঠক

করেত হয়?"

29

কীভােব সিঠক

করেত হয়?

"There are no right answers to wrong questions." - Ursula K. Le Guin "Ask the right questions if you're going to find the right answers." - Vanessa Redgrave "In school, we're rewarded for having the answer, not for asking a good question." Richard Saul Wurman

মিশন লািনং মেডল তিরর থম সিঠক



করেবন কীভােব?

ওয়াকে া িরিভশন যেহতু আজেকর টিপক 'সিঠক দেখ নওয়া যাক।

িজ াসা করা' বা 'সিঠক

তির করা' সেহতু গত পেবর ওয়াকে া একবার

সমস া আমরা যিদ জনােরল মথড অ া াই করেত চাই তাহেল সব থম দরকার একটা সমস ােক সই মথড েলা িদেয় সমাধান করা। আমােদর বাছাইকৃত সমস ািট একবার দখা যাক, সমস ার িববরণ

30

কীভােব সিঠক

করেত হয়?

একজন লাক ডায়ােবিটস এ আ া হেব িকনা িড ক ন

কােজর

েতই িক সিঠক

পেয় গলাম না?

সমস ার িববরণ দেখ মেন হেত পাের, আমরা তা আমােদর কাি কী? এই সমস াটা স ভ করেলই তা হে ?!

উ র হল, না। মিশন লািনং সমস ােক ধু এক লাইেনর একটা



পেয়ই গলাম, নতুন কের

িদেয় িডফাইন করা ভুল, এই

ু ও িনিদ িকছু ে ভাগ করেত হেব, তারপর স েলা সমাধান করেত হেব।

তাহেল কীরকম হেব

করার মােন েক ভে ু

েলা?

েলা এমন হেত হেব য েলার সমাধান করেল আসেলই আমরা একটা Fully Functional Predictive

Model তির করেত পাির।

ে র উপের িভি কের আমরা িডি ভ মেডল িব করিছ, তাই আমােদর To the point

দরকার। যার

াইেটিরয়ার উপর িভি কের আমরা সলু শন তির করব।

একটা এক লাইন ে র থেক আরও দরকারী হে ে র মেধ থাকা িকছু িব এর

টেম , য েলা আমােদর সলু শন

িডফাইন কের, শষ িডফাইন কের ( যমন, মেডল এর িডকশন সাে স রট কতটা ভাল হেল

আমরা মেডল অি মাইেজশন বাদ িদেয় িড করেত বেস যাব) এবং কীভােব আমরা আমােদর লে প ছাব।

তাহেল Solution Statement Goal েলা দখা যাক ডটা সাস পযেব ণ (Scope & Dataset)

পাফেম

ার ও পাফেম টােগট

যখােন ব বহার করা হেব (Context)

কীভােব সলু শন তির করা হেব এই পেয়

েলা একটার পর একটা যু করেলই আমরা আমােদর কাি



েলা পেয় যাব।

াপ ও ডটা সাস: অ ােমিরকান ডায়ােবিটস ওেয়বসাইট ডটােসট পযেব ণ কের বশ িকছু ডায়ােবিটেস আ া হবার বশ িকছু ফ া র তুেল ধেরেছ যটা আমােদর ডটােসট এর

পূণ ইনপুট ভ ািরেয়বল িচি ত করেত সাহায করেব।

বয়স (Age) বয় েদর ডায়েবিটেস আ া হওয়ার স াবনা বিশ থােক।

31

কীভােব সিঠক

করেত হয়?

জািত (Race) African-American, Asian-American, American-Indian দর ডায়ােবিটস হবার স াবনা বিশ। িল (Gender) ডায়েবিটেস আ া হওয়ার জন িলে র কান ভাব নই।

উপযু Factor েলা কন

পূণ?

ইনপুট ভ ািরেয়বল িফ ািরংেয়: ফ া র েলা থেক দখা যায় য, আমরা 'Race' এর উপর এবং 'Gender' এর



দব বিশ

না িদেলও হেব। যিদ আমরা Gender ক ইনপুট ভ ািরেয়বল িহেসেব নই

তাহেল িডকশন অবশ ই খারাপ আসেব।

ডটােসট বাছেত: যসব ডটােসেট Age, Race (আরও থাকেত পাের) আেছ, সসব ডটােসট আমােদর

বাছাই করেত হেব।

আমরা এই কােজর জন University of California Irvine (UCI) এর িরেপািজটির থেক Pima

Indian Diabetes Study িসেল করব। কারণ এই ডটােসট আমােদর িডমা করা াইেটিরয়া েলা িফলাপ কের।

পিরবিতত

টেম

াপ ও ডটােসট পযেব েণর পর আমােদর পিরবিতত বেলম

টেম

Pima Indian Diabetes ডটােসট ব বহার কের বর করেত হেব ক ক ডায়ােবিটেস আ া হেব

পাফেম

ার ও পারফেম টােগট

সমস ার সমাধান যতই জিটল হাক, আউটপুট আমরা সহেজই ধারণা করেত পারিছ, এই সমস ার সমাধান হ াঁ/ না আকাের আসেব। অথাৎ Binary Result (True or False) মেডল িব করেল তার একটা পাফেম

ার আমরা পাব। মােন আমােদর মেডল কতটা ভাল িড করেত

পাের। িক এই পাফেমে র একটা িলিমট আেছ। সাধারণত ১০০% িডকশন রট হয় না, িক আমােদর চ া থাকেত হেব কতটা ভাল করা যায়।

তাই িব করার সময় আমােদর অ াকুেরিসর কথা িচ া করেত হেব। আমরা চাইেলই য ঔ অ াকুেরিস পাব তার কান গ ারাি নাই।

50% অ াকুেরিসর মত খারাপ আর িকছু নাই। তারমােন আমার তির মেডেলর পাফেম

ার যিদ ৫০% হয়,

এর মােন হল, যিদ মেডলিট কান িডকশন কের তাহেল সটা হওয়ার স াবনা ৫০-৫০। তাই অবশ ই আমােদর ৫০% এর বিশ অ াকুেরিসর িদেক নজর িদেত হেব।

32

কীভােব সিঠক

করেত হয়?

আমরা যখনই রাগ িডকশন করব তখন ৫০% চরম খারাপ পাফেম

ার। জেনিটক িডফাের এখােন

একটা বড় ফ া র। দখা গেছ জমজেদর ও সব একই হল িজনগত পাথক থােকই। এই িভ তার জন ডায়েবিটেস আ া হবার স াবনাও এেকক জেনর এেকক রকম।

সুতরাং ৭০% অ াকুেরিস মাটামুিট িরজেনবল। এখন এটােক End Point ধের আমরা কাজ এেগােত পাির। তাহেল চলুন আমােদর টােগট

পিরবিতত

টেমে আরও িকছু পিরবতন আিন।

টেম

Pima Indian Diabetes ডটােসট ব বহার কের ৭০% বা তার বিশ অ াকুেরিসর মাধ েম বর করেত হেব ক ক ডায়েবিটেস আ া হেব

Context বা াসি ক িফ আমােদর আেলাচ সমস ািট মিডক াল বজড, তাই আমােদর এখােন াসি কতা টানেত হেব। এেত কের সলু শন আরও ভাল হেব।

েত েকই জেনিটক ািল এেক অপেরর থেক আলাদা, তাই এখােন জানা-অজানা িবিভ ফ া র কাজ কের।

আপাতদৃি েত একই ফ া র হওয়ার পেরও দুইজন লােকর একজেনর ডায়েবিটস হেত পাের এবং আেরকজেনর নাও পাের।

এই য আমরা এখােন হেত পারা নামক স াবনাময় একিট বাক ব বহার করিছ। তারমােন আমরা একদম ১০০% িনি ত না, আেদৗ ডায়েবিটস হেব িক না।

হেত পারা বা likelihood যিদ আমরা আমােদর

পিরবিতত

টেমে অ াড কির তাহেল পিরবিতত

টেম হেব,

টেম

Pima Indian Diabetes ডটােসট ব বহার কের 70% বা তারও বিশ অ াকুেরিসর মাধ েম বর করেত হেব ক ক ডায়েবিটেস আ া হেত পাের

সলু শন তির করা আমােদর

টেমে এখেনা পয মিশন লািনংেয়র িসিডউর আেস িন। তাহেল মিশন লািনং ওয়াকে া ব বহার

করেলই আমরা সলু শন তিরর একটা ভাল ধারণা পেয় যাব। মিশন লািনং ওয়াকে া: Pima Indian Data ি

েসিসং

ডটা া ফেমশন (যিদ লােগ) আবার পিরবিতত

পিরবিতত

টেম

টেম 33

কীভােব সিঠক

করেত হয়?

মিশন লািনং ওয়াকে া ব বহার কের Pima Indian Data ক ি

একটা িডি ভ মেডল তির করেত হেব।

েসস ও েয়াজনীয় া ফেমশন করার পর

এবার এই মেডলেক ৭০% বা তারও বিশ অ াকুেরিসর সােথ িনণয় করেত হেব ক ক ডায়েবিটেস আ া হেত পাের।

ফাইনাল

টেম ও

েলা

কান ডটােসট ব বহার করেত হেব? - Pima Indian dataset

টােগট পারফেম কত? - ৭০%

কীভােব সলু শন তির করেত হেব? - Machine Learning Workflow ব বহার কের Data

preprocessing ও transformation এর মাধ েম predictive model তির করেত হেব তারপর ডটােসট ব বহার কের িড করেত হেব।

আেলাচনা থেক দখা গল, এক লাইেনর সামান একিট

আমরা িবিভ ভােব িরসাচ কের বশ কেয়কিট

ে র উ র পেয় গিছ, যটা িদেয় সহেজই আমরা সমস ািটর সমাধান করেত পাির। পরবতী পব েলােত এই

পূণ

ওয়াকে া ব বহার কের আমরা সমস ািটর সমাধান করব।

34

ডটা ি

েসিসং - ১

“Give me six hours to chop down a tree and I will spend the first four sharpening the axe.” ― Abraham Lincoln

ডটা

ত করা ( ডটা কােলকশন ও ি

আমরা আেগর পেব দেখিছ সিঠক ে র মাধ েম আমােদর টােগট

েসিসং) - ১

টেম তির কের কীভােব।

আমরা আজেক মিশন লািনংেয়র ি তীয় ধাপ দখব। ি তীয় ধােপ িছল,

মিশন লািনং মােনই ডটা িনেয় কাজ কারবার, তাই আিম যিদ বিল, ডটা সং হ, েসস করেতই মেডল িবি ংেয়র

সবেচেয় বিশ সময় ব য় হয় সটা আ েযর িকছু নয়।

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

তকরণ যিদ ভাল হয় তেব মেডল তির করা অেনকটা সহজ হেব, বারবার িটউিনংেয়র দরকার হেব না

এবং ডটা ি িনংেয়রও েয়াজন হেব না। যিদ ডটা ভালভােব

ত না করেত পােরন, তাহেল আপনার মেডল তা

ভাল হেবই না, বার বার ডটায় হাত িদেত হেব মেডল িবি ংেয়র জন ।

তাই আেগ ডটা ি ন কের ম ােনেজবল পযােয় িনেয় মেডল িবি ংেয় হাত দওয়া ভাল। দখা যাক এই পেব আমরা কী করব।

ওভারিভউ 35

ডটা ি

েসিসং - ১

ডটা খাঁজা

ডটা পযেব ণ (Inspection) ও অ েয়াজনীয় অংশ বাদ দওয়া (Data Cleaning) ডটা এ ে ার করা (Data Exploration)

ডটা মাি ংেয়র মাধ েম Tidy Data ত কনভাট করা

সবকাজ েলা Jupyter Notebook এ করা আেগ দখা যাক, Tidy Data কী?

Tidy Data য ডটােসট িদেয় সহেজ মেডল তির করা যায়, সহেজ িভজুয়ালাইজ করা যায় এবং যােদর একটা িনিদ াকচার বা

গঠন আেছ স েলাই হে Tidy Data.

Tidy Data এর বিশ েত কটা variable হেব এেককটা column

েত কটা observation হেব এেককটা row

েত কটা observational unit হেব এেককটা table সং হকৃত ডটােসট ক Tidy ফেম নয়া িকছু টা সময়সােপ । মিশন লািনং বজড েজ

েলােত ৫০-৮০% সময় ব য় হয় ডটা সং হ, ি িনং আর অগ ানাইজ করেত।

ডটা সং হ ডটা সং েহর ভাল উৎস কান েলা? Google গেল সাচ িদেল অবশ ই পােবন, তেব একটু সাবধান, হািবজািব, ফক আর বািতল ডটাও সখােন

থাকেত পাের, টি ংেয়র জন স েলা ব বহার করা যেতই পাের। িক কান িসিরয়াস েজ করেল অবশ ই ভিরফাইড ডটা সং হ করার চ া করেবন। সরকাির ডটােবজ ডটা কালেকশেনর জন সরকাির ডটােবজ েলা আসেলই ভাল উৎস। কারণ এখােন আপিন মাটামুিট ভিরফাইড ডটাই পােবন বেল ধরা যায়। িকছু িকছু সরকাির ডটােবেজর সােথ ভাল ডকুেমে শনও

থােক ডটা িচিনেয় দওয়ার জন । েফশনাল বা কা

ািনর ডটা সাস

খুবই ভাল একটা সাস। বশ িকছু ােফশনাল সাসাইিট তােদর ডটােবজ শয়ার কের। টুইটার তােদর

36

ডটা ি

েসিসং - ১ টুইট এর কােলকশন ও সসব টুইেটর িনজ অ ানালাইিসস িরেপাট ও শয়ার কের থােক। ফাইন াি য়াল ডটা পাওয়া যায় কা

আপিন য কা

ািনর ি API থেক, যমন Yahoo! এই ধরেণর ডটােসট শয়ার কের।

ািনেত কাজ কেরন

আপিন য কা

ািনেত আেছন সটাও ডটার একটা ভাল উৎস হেত পাের।

ইউিনভািসিটর ডটা িরেপািজটির বশ িকছু ইউিনভািসিট ি ত ডটােসট িদেয় থােক, যমন University of California Irvine। এেদর

িনজ ডটা িরেপািজটির আেছ যখান থেক আপিন ডটা কােল করেত পারেবন। Kaggle

মিশন লািনং িনেয় কাজ করেবন অথচ Kaggle এর নাম জানেবন না তা হয় না। এেক ডটা সাইি

codeforce বলেত পােরন। ডটা অ ানালাইিসস িনেয় িনয়িমত কে এর জন অতুলনীয়।

েদর

হয় ওখােন। হাই ড ডটােসট

GitHub ি হ াঁ, িগটহােবও চুর পিরমােন ডটা পাওয়া যায়। এই Awesome Dataset Collection চক করেত পােরন

উপের য েলা আেলাচনা করা হেয়েছ সব লাই কখেনা কখেনা একটা সােসর ডটা িদেয় কাজ হয় না, তখন সব লা সাস ই াই করেবন আরিক। তারপর সব ডটা ইি ে ট কের Tidy ডটা বািনেয় কাজ করেত হেব।

আমােদর িনবািচত সমস ার ডটােসট কাথা থেক সং হ করব? Pima Indian Diabetes Data ডটা ফাইল ডটােসট িববরণ আেগই বলা হেয়েছ ডায়েবিটস এর ডটােবজ আমরা সং হ করব UCI Machine Learning িরেপািজটির থেক। এই ডটােসট এর িকছু বিশ : কমপে ২১ বছর বয়েসর Female Patient ৭৬৮ টা অবজারেভশন (৭৬৮ টা Row)

িত Row এর িবপরীেত আেছ ১০ িট কের column

37

ডটা ি

েসিসং - ১ ১০ িট কলােমর ৯ িট হল Feature, মােন : Number of pregnencies, blood pressure, glucose, insuline level ... ইত ািদ

আর বািক ১টা কলাম হল: ডায়েবিটস আেছ িক নাই (True / False) এই ডটােসট ব বহার কের আমরা বেলম এর সলু শন বর করব। তার আেগ িকছু ডটা ল দেখ নয়া যাক।

Data Rule #1 আপিন যা িড করেত চাইেছন, ডটােসট এ সটা যতটা

থাকেব ততটাই ভাল

ল টা পড়েত বা নেত মেন হেত পাের এই ল আর এমনিক, সাধারণ ান িদেয়ই তা বাঝা যায়। আসেল ব াপারটা তা না, আমরা যেহতু বর করেত চাি একজন লােকর ডায়েবিটেস আ া হওয়ার স াবনা কত সেহতু এই ডটােসট আমােদর কােজর জন পােফ , কননা একিট কলােম িডের িল দওয়াই আেছ, য ব ি েক

পরী া করা হেয়েছ িতিন ডায়েবিটেস আ া িকনা?

অেনক সমস ার সমাধান করেত গেল আপিন িঠক য িজিনস টা িড করেত চাে ন সটা ডটােসট এ আলাদা কের নাও পেত পােরন। তখন আপনােক ডটােসট নতুন কের সাজােত হেব এবং এমনভােব সাজােত হেব যটা

আপনার টােগট ভ ািরেয়বল ( য অ াি িবউট িড করেবন, যমন এখােন ডায়েবিটস আেছ িক নাই) এর সােথ িমেল যায় বা কাছাকািছ আেস।

Data Rule #2 ডটােসট দখেত যতটাই সু ী মেন হাক না কন, আপিন যভােব সটা িদেয় কাজ করেত চান সটা কখেনাই

ঔ ফরম ােট থাকেব না।

তাই ডটা সং েহর পরবতী কাজ হল ডটা ি

েসিসং। যটা িনেয় আমরা আজেক আেলাচনা করব।

CSV (Comma Separated Value) ডটা ফাইল ডাউনেলাড ও িনেদশনা যিদ আপিন UCI এর িলে িগেয় িভিসট কের থােকন তাহেল দখেবন সখােন .data ও .name নােমর দুইটা ফাইেলর িল দওয়া আেছ। .data ফাইেল ভ

ালু েলা কমা সপােরেটড আেছ িক ফাইল ফরম াট .csv নয়, আেরকিট ব াপার হল সখােন

ভ ালু কানটার মােন কী সটাও বলা নই (বলা আেছ তেব আলাদা ফাইেল - .name )।

তাই আপনােদর কােজর সুিবধার জন আিম .csv ফাইলিট আপেলাড কের িদেয়িছ। যখােন ভ ালুর পাশাপািশ কান কলাম আসেল কান াপািট িনেদশ কের সটাও বলা আেছ।

38

ডটা ি

েসিসং - ১

দুইটা ফাইল-ই ডাউনেলাড কের আপনার িপিসেত রাখুন। csv pima dataset ডাউনেলাড (original) csv pima dataset ডাউনেলাড (modified) নাট original : এখােন ডায়েবিটস আেছ িক নাই সটা বলা হেয়েছ 1/0 িদেয় modified : সকল 1/0 ক TRUE/FALSE িদেয় িরে স করা হেয়েছ

Pandas লাইে ির িদেয় ডটা এ ে ােরশন ipython notebook স

েক িকছু টা জেনেছন তা? না জেন থাকেল এখান থেক একবার দেখ িনন।

উইে ােজ থাকেল cmd ওেপন ক ন ও িনেচর কমা িদেয় নাটবুক ওেপন ক ন ipython notebook

যিদ ঔ কমা না কাজ কের তাহেল এটা াই ক ন jupyter notebook

আপনার াউজার ওেপন হেল New > Python 2 একিট পাইথন ফাইল ওেপন ক ন আর এখােন দখােনা কাজ েলা কের ফলুন।

39

ডটা ি

েসিসং - ১

েয়াজনীয় লাইে ির ইে কাজ

াট

করার আেগ িনেচর কাড িদেয় আমরা েয়াজনীয় লাইে ির েলা অ াড কের িনলাম

import pandas as pd import matplotlib.pyplot as plt import numpy as np #¦ÆÑÚ¦Æ ÑÛ½¢áÎÏ º Í ºÝÛȽÚÏ áÆÚ½ÊÝá³Ï ÍÚÛº³ ÉÚ¢ÕÆ (¥ÑÚÄÚ ¨¦á ¿Úá ѽ áÕÚ ³Ïá ¸ÚÛ ¹ ÆÚ ¥ÌÏÚ) %matplotlib inline

ডটা লাড ও িরিভউ

40

ডটা ি

েসিসং - ১

pd.read_csv('file_path') আমরা এখােন pandas লাইে ির ক pd িহেসেব ( as ) ইে

াট কেরিছ, তারমােন pandas এর কান ফাংশন

কল করার জন আমার pandas কথাটা পুরা লখার দরকার নাই, pd িলখেলই হেব। আিম যিদ এটা করতাম, import pandas as PANDA

তাহেল ফাংশন কল করার জন PANDA.read_csv('file_path') এভােব িলখতাম। এবার আিস read_csv ফাংশেন, ফাংশন থেক বাঝা যায় এর কাজ হে csv ফাইল িরড করা। এই ফাংশন csv ফাইলেক কনভাট কের Pandas ডটাে ম ফরম ােট পিরণত কের। যটার িবিভ ধরেণর পিরবতন আমরা Pandas লাইে ির িদেয়ই করেত পারব। read_csv('filePath') এখােন আিম আ

িদেয়িছ। আপনার

েমে আমার িপিসর যখােন csv ফাইল িছল সই িডের ির

ে অবশ ই আপনার িপিসর যখােন ফাইলটা আেছ সই িডের ির িদেত হেব।

data_frame.shape

41

ডটা ি

েসিসং - ১

ডটাে েমর ডটা যেহতু একিট ম াি shape ভ

ািরেয়বলিট কল কেরিছ।

(বা 2D Array) তাই আমরা এর Row আর Column সংখ া দখার জন

আউটপুট Row - 768 ( লেবল ছাড়া) আর Column - 10 টা

data_frame.head(number) data_frame.head(3) ফাংশনিট কল করার মাধ

েম আমরা ডটাে েমর থম ৩ িট রা ি

করলাম।

data_frame.tail(number) data_frame.tail(4) ফাংশনিট কল করার মাধ

আজেকর চ া ার এখােনই শষ, তেব এটা ডটা ি ি

েম আমরা ডটাে েমর শেষর ৪িট Row ি

করলাম।

েসিসংেয়র থম অংশ িছল। পরবতী পেব আমরা ডটা

েসিসংেয়র ফা ােম াল িবষয় েলা িনেয় আেলাচনা করব।

42

ডটা ি ে সিসং - শষ পব

“Organize, don't agonize.” ― Nancy Pelosi

ডটা

ত করা ( ডটা ি

েসিসং) - ২

ডটাে ম পিরবতন করা ায় সময়ই ডটােসেট ডটা িমিসং থাকেত পাের। আমােদর সই িমিসং ডটাও হ াে ল করেত হেব। হ াঁ, হয়ত

আমরা হারােনা ডটা পাব না, তেব েয়াজনীয় ব ব া না িনেল া াম

াশ করেত পাের।

কান কান Column বাদ িদেত হেব? য েলা ব বহার করা হেব না

কলাম আেছ িক ডটা নাই

একই কলাম যিদ একািধকবার থােক, তাহেল একটা রেখ বািক ল ◌া মুেছ িদেত হেব

অেনক সময় নাম দেখ মেন হেত পাের দুইটা আলাদা কলাম িক আসেল িজিনসটা একই। উদাহরণ

িহেসেব বলা যায়, একটা কলােম লখা আেছ Length (meter) এবং আেরকিট কলােম লখা আেছ Size (centimeter) , হঠাৎ Length । িক

দখেল মেন হেব দুইটা িজিনস আলাদা কারণ লেবল হে Size ও

ভাল কের ল কের দখা গল, Length এর েত কটা ডটােক 100 িদেয় ণ কের

আমরা Size এর ডটা িল পেয় যাি । হােত ক ালকুেলশন কের একই ধরেণর ডটা বর করা স ব হয় না এবং হেলও এটা কান এিফিশেয় প িত না। এই অিতির কলাম েলা আসেল ডটােসট এ নেয়জ জনােরট কের। আমরা

রকম কলাম িল আলাদা করব।

ািটি ক াল অ ানালাইিসস (এখােন Correlation ) এর মাধ েম একই

Correlated Column কী? একই তথ যিদ একটু িভ ফরম ােট থােক, উপেরর উদাহরেণ Length এবং Size আসেল একই িজিনস, ধু Unit আলাদা। তারমােন এরা Correlated Column।

অ ইনফরেমশন অ াড কের বা কেরই না। লািনং অ ালগিরদমেক কনিফউজ কের। িলিনয়ার িরে শন িনেয় অ িকছু কথা

পরবতী উদাহরণ বুঝেত গেল আমােদর িলিনয়ার িরে শন এর িকছু বিসক লাগেব। িনেচর কা িনক ডটােসট এর কথা িচ া করা যাক,

43

ডটা ি ে সিসং - শষ পব

House Size (sq ft)

Price (Tk in lac)

1

5

2

10

3

15

4

20

াফ

আপনােক যিদ বলা হয়, 5 sq ft বািড়র দাম কত হেব? আপিন িনি ধায় বেল িদেত পারেবন, উ র হেব 25 lac । কীভােব বলেলন? খুব সহজ, িত 1 sq ft বৃি র জন দাম বাড়েছ 5 lac কের। আমরা যিদ একটা ম ােথেমিটক াল মেডল দাঁড়া করােত চাই, সটা হেব অেনকটা এরকম।

বা,

44

ডটা ি ে সিসং - শষ পব

যখােন, হে াইস, হে সাইজ হে 5 এবং

হেব

ফাংশনিট বেল িদে এর মােনর জন াইস কত

বা েব মেডল এতটা সহজ হয় না, অেনক প াঁচ থােক, এখন আিম একটা alpha ণ িদেয়ই মান পেয় যাি তখন beta, gamma, theta হািবজািব যা আেছ তা িদেয়

ণ িদেলও হয়ত কাছাকািছ মান পােবন না।

িনেচর ডটােসট দখা যাক, House Size (sq ft)

No of rooms

Price (tk in lac)

1

3

10

2

3

12

3

4

14

4

4

17

5

5

22

াফ

এবার আপনােক যিদ বিল, বািড়র আকার যিদ 6 sq ft হয় তাহেল াইস কত হেব? এবার আপিন বশ ঝােমলায়

পেড় যােবন, কারণ িত য়ার িফট আকার বৃি র সােথ বিধত দাম সুষম নয়। আেগরটা িবেয়াগ িদেয় পাথক বর কের সটার সােথ পাথক যাগ কের পেরর াইস পেয় যােবন, সমস াটা এত সহজ নয়। কারণ সােথ আবার যু হেয়েছ

45

ডটা ি ে সিসং - শষ পব No of rooms ।

এখন যিদ আমােক বলা হয়, এটার একটা ম ােথেমিটক াল মেডল দাঁড়া করােত তাহেল আিমও বশ ঝােমলায় পেড় যাব। এমন কান সই িলিনয়ার ইকু েয়শন, যটােত 1, 2, ... 5 ইনপুট িদেল যথা েম 10, 12 ... 22 পাওয়া যায়? এ

া কান মেডল িব না করেত পারেলও হয়ত কাছাকািছ কান মেডল তির করেত পারব যার ইকু েয়শন

অেনকটা এরকম হেত পাের,

Correlated Column এর উদাহরণ ধরা যাক, আমরা আবারও সই িবখ াত সমস া House Price Prediction টা আেলাচনায় আিন। House Area (Acre)

Size (kilo sq meter) (approx.)

No of rooms

Price (tk in lac)

1

4

3

10

2

8

4

12

3

12

4

16

ডটােসট এর কলাম ভালভােব পরী া না কেরই িড করেত বেস গলাম িনেচর ফরমুলা (Linear Regression

ফরমুলা) িদেয়,

আমরা িলিনয়ার িরে শেনর

ে দেখিছলাম েত কটা িফচার (ইনপুট ভ ািরেয়বল) ক একটা Co-efficient িদেয়

ণ কির তারপর স েলােক যাগ কের আউটপুট িড কির। একই রকম কলাম Area & Size দুইবার রাখার

কারেণ আউটপুট Price কখেনাই িঠকঠাক আসেব না।

এখােন কলাম দুইটা একই রকম সটা সহেজ বাঝা যাে কারণ উদাহরণটা আমার তির করা :P । জা অ াপাট,

যিদ অেনক েলা কলাম হয়, আর সব লার নাম আলাদা হয় আর ডটাও আলাদা হয় িক আসেল একটা আেরকটার ইউিনট বজড িসেনািনম হয় স েলা বর করা অেনক জিটল ব বহার। তাই আমরা এখােন পিরসংখ ােনর একিট পূণ টিপক (Correlation) এর সাহায নব।

Pearson's Correlation Co-efficient বা Pearson's r Pandas লাইে িরেত কা-িরেলশন ফাংশন কল করেল সটা িনেচর সূ ানুযায়ী কা-িরেলশন ক ালকুেলট কের। কািরেলশন িনেয় িব ািরত আেলাচনা আরও করা হেব, আপাতত এই ফরমুলা িনেয় খুিশ থাকুন।

46

ডটা ি ে সিসং - শষ পব

এই ফরমুলায়, x হে একটা ভ ািরেয়বল আর y হে আেরকটা ভ ািরেয়বল (Isn't it too obvious?)। আমােদর বর করেত হেব r এর মান কত। r এর মান িদেয় আমরা বুঝেত পাির য দুইটা ভ ািরেয়বেলর সাম স তা

কতখািন। যিদ r = 1 হয় তারমােন দুইটা ভ ািরেয়বেলর মেধ কান পাথক নাই, তাই যেকান ভ ািরেয়বেলর িনেজর সােথ কা-িরেলশন ক ালকুেলট করেল r এর মান হয় 1

আরও ব াখ া যিদ চান, উপেরর উদাহরেণর Acre এবং Sq meter এর মধ কার Correlation Co-efficient ক ালকুেলর করেল r এর মান 1 পােবন। মাণ:

এবার দখা যাক ডটােসেটর কান কলােম কান ডটা িমিসং আেছ িকনা সটা কীভােব বর করা যায়।

Null বা ডটােসট এর ফাঁকা অংশ বর করা আেগর তির করা নাটবুক ওেপন ক ন আর িনেচর কাডিট িলখুন,

47

ডটা ি ে সিসং - শষ পব

print data_frame.isnull().values.any()

isnull().values.any() isnull()

এটা আবার সই ডটাে মেকই িরটান কের িক পাথক হল সখােন আর ভ ালু থােক না, Empty Cell িরে স হয় True িদেয় আর Non-Empty Cell িরে

স হয় False িদেয়।

values.any()

48

ডটা ি ে সিসং - শষ পব

isnull() িরটান কের .any() ফাংশন

ডটাে ম, িক .values িদেল সটা True/False এর একটা অ াের ত পিরণত হয়।

চক কের অ ােরেত থাকা কান ভ ালু ফাঁকা বা Empty িকনা।

pima-data.csv ফাইেল

কান ফাঁকা ডটা নাই। তাই এই া াম

ই াকৃত একটা Cell িডেলট কের আবার

data_frame.isnull().values.any()

টেম িট কল করেল False দখায়।

টেম রান করা

এখােন আিম pima-data.csv ফাইেলর একটা সল ইে কের িডেলট কের আবার Pandas িদেয় লাড কের কাডটা চািলেয় দখলাম।

দখা যাে এখন আউটপুট আসেছ True । তারমােন কান না কান একটা সল খািল আেছ।

49

ডটা ি ে সিসং - শষ পব

Correlation Matrix Heatmap তির করা আমরা এত েণ Correlation স

েক িকছু টা জানলাম আর দখলাম ডটােসট এ কান Null ভ ালু লুিকেয়

থাকেল সটােক কীভােব বর করা যায়। এখন দখব, কীভােব Correlation Matrix Heatmap জনােরট করেত হয়। তার আেগ একটু বলা যাক, Heatmap টা কী িজিনস।

Heatmap উইিকিপিডয়া অনুসাের, A heat map (or heatmap) is a graphical representation of data where the individual values contained in a matrix are represented as colors. অথাৎ, িনউেমিরক াল ভ ালু আমরা রং িদেয় িরে স কের একটা ট জনােরট কির। সটাই হেব Heatmap। তারমােন, Correlation Heatmap হে Correlation ভ ালু েলােক রং িদেয় িরে স কের ােফ ট করা।

Correlation Heatmap আমরা দেখিছ, দুইটা ভ ািরেয়বেলর মেধ কা-িরেলশন ক ালকুেলট কের কীভােব 50

ডটা ি ে সিসং - শষ পব আপিন িনেজই িনেজেক

কের দখুন, কত লা ভ ালু (

সহজ? অবশ ই রং তুলনা করা সহজ,

ািটং পেয় ) ক তুলনা করা সহজ নািক রং তুলনা করা

আমােদর য কাজটা করেত হেব সটা হল একটা ভ ািরেয়বল বাছাই কের েত কটা ভ ািরেয়বেলর সােথ কা িরেলশন বর করেত হেব (এমনিক তার িনেজর সােথও)। এটা করার জন আমরা ভ ািরেয়বল েলা Row এবং Column

wise সাজাব, ----

num_preg

glucose_conc

diastolic_bp

thickness

insulin

num_preg

1

corr_value

corr_value

corr_value

corr_value

glucose_conc

corr_value

1

corr_value

corr_value

corr_value

diastolic_bp

corr_value

corr_value

1

corr_value

corr_value

thickness

corr_value

corr_value

corr_value

1

corr_value

insulin

corr_value

corr_value

corr_value

corr_value

1

bmi

corr_value

corr_value

corr_value

corr_value

corr_value

age

corr_value

corr_value

corr_value

corr_value

corr_value

আেগই বলা হেয়িছল, কান ভ ািরেয়বেলর িনেজর সােথ কা িরেলশন সবসময় 1 হেব। টিবেলর ডায়াগনাল বরাবর যত মান আেছ সব অবশ ই 1 হেব কারণ তােদর িনেজেদর মেধ কা-িরেলশন বর করা হেয়েছ। আর corr_value ারা বুঝােনা হেয়েছ একটা ভ ািরেয়বল ও আেরকটা ভ ািরেয়বেলর কা-িরেলশন কান একটা ভ ালু হেত পাের,

যেহতু আমরা লাইে ির ব বহার কের এই ভ ালু ল ◌া িনধারণ করব তাই আমােদর িনেজেদর হােত ক ালকুেলট করার েয়াজন দখিছ না।

এবার যটা

পূণ কাজ সটা হল িহটম ােপর রং বাছাই করা। িচ া করার িকছু নাই, Matplotlib লাইে িরর িব

ইন কালার ম াপ দেখই আমরা আপাতত কাজ করেত পারব। আপিন চাইেল ডকুেমে শন ঘ ঁেট িনেজর পছ মত রং িদেত পােরন। আপাতত আমরা িডফ টাই ব বহার করব।

Matplotlib Heat Map Color Guide Matplotlib িহটম াপ জনােরট করার সময় িনেচর িসেকােয় অনুযায়ী রং সট করেব। Less Correlated to More Correlated Blue -> Cyan -> Yellow -> Red -> Dark Red (Correlation 1)

Heatmap জনােরট করার ফাংশন চলুন, চটপট িহটম াপ জনােরট করার ফাংশন িলেখ ফিল, ফাংশনটা হেব এরকম

51

ডটা ি ে সিসং - শষ পব

# Here size means plot-size def corr_heatmap(data_frame, size=11): # Getting correlation using Pandas correlation = data_frame.corr() # Dividing the plot into subplots for increasing size of plots fig, heatmap = plt.subplots(figsize=(size, size)) # Plotting the correlation heatmap heatmap.matshow(correlation) # Adding xticks and yticks plt.xticks(range(len(correlation.columns)), correlation.columns) plt.yticks(range(len(correlation.columns)), correlation.columns) # Displaying the graph plt.show()

কন সাব ট ব বহার করলাম? ই া করেল এখােন plt.matshow(correlation) ব বহার কেরও িহটম াপ জনােরট করা যত, িক তােত আিম ই ামত আকােরর াফ জনােরট করেত পারতাম না, তাই টেক সাব েট িনেয় সাইজ অ াসাইন কের ই ামত আকােরর সুিবধাজনক ট জনােরট করা যাে ।

xticks ও yticks কী? plt.xticks(range(len(correlation.columns)), correlation.columns) এই

কাড িদেয় বুঝােনা হেয়েছ,

িত েকর দঘ হেব 1 একক কের এবং দাগ েলা হেব 0, 1, 2 ... len(correlation.columns) পয । আর

পরবতী আ েম (correlation.columns) িদেয় িতটা েকর লেবল দওয়া হেয়েছ। plt.yticks.. এর জন

একই কথা েযাজ ।

plt.show() িদেয় কী করা হেয়েছ? U kiddin' bro?

corr_heatmap(data_frame, size) ফাংশেনর মাধ েম িহটম াপ িটং ক কের ফাংশন িলখলাম আর না ব বহার করেল চেল? িনেচর কাড ি েপট িদেয় সহেজই িহটম াপ ট করেত পাির, corr_heatmap(data_frame)

52

ডটা ি ে সিসং - শষ পব

জনােরেটড িহটম াপ াজিভউ

53

ডটা ি ে সিসং - শষ পব

ল ণীয় আমরা আেগই দেখিছলাম দুইটা ভ ািরেয়বল যিদ একই রকম হয় তাহেল তােদর Correlation 1 হেব। ডায়াগনােল িতটা ভ ািরেয়বেল তার িনেজর সােথ কা-িরেলশন বর করা হেয়েছ তাই ডায়াগনােলর ক েলার রং গাঢ় লাল।

িক ভাল কের ল কের দখেবন, skin এবং thickness এই দুইটার কা-িরেলশন িক 1 (গাঢ় লাল রং)। তারমােন, skin আর thickness আসেল একই িজিনস, একক এর হরেফর হেয়েছ ধু। িব াস হে না? এক কাজ ক ন তাহেল, thickness এর িতটা ভ ালু ক 0.0393701 িদেয় ণ িদন তাহেল দখেবন আপিন skin এর ভ

ালু পেয় যাে ন। 1 millimeter = 0.0373701 inch এবার আপিনই বলেত পারেবন কানটার

একক আসেল কী?

কালি ট পলাম, এবার ডটােসট ি িনং

54

ডটা ি ে সিসং - শষ পব উপেরর কাজ থেক এটা বুঝলাম আমরা য একই টাইেপর কলাম কান লা। Tidy Data এর বিশ িছল িতটা কলাম ক অবশ ই Unique হেত হেব। ডুি েকট েলা থেক একটা রেখ বািকটা ডটােসট থেক উধাও করেত হেব।

আিম এখােন skin ভ ািরেয়বল উধাও করব, আপিন চাইেল এেক অথবা thickness ক উধাও করেত পােরন, স

ূণ আপনার ই া।

# Deleting 'skin' column completely del data_frame['skin'] # Checking if the action was successful or not df.head()

আমরা একটা ডুি েকট কলাম ক ফেল িদেত পারলাম। এখেনা কাজ শষ হয় নাই, ডটা মা করেত হেব। িচ ার িকছু নাই, ডটা ি পােরশেনর এটাই শষ ধাপ। So cheers!

ডটা মাি ং (Data Molding) ডটা টাইপ অ াডজা েম 55

ডটা ি ে সিসং - শষ পব আমােদর ডটােসট এমন হেত হেব তা যন সবরকম অ ালগিরদেম কাজ করার উপেযাগী হয়। না হেল িতটা

অ ালগিরদেমর জন আমােদর ডটা টুইিকং করেত হেব যটা বশ ঝােমলার কাজ। তাই আমরা ঝােমলার কাজটা বার বার না কের একবারই করব যােত আর সটা মাথাব াথার কারণ না হেয় দাঁড়ায়।

ডটা টাইপ চিকং ডটা মাি ংেয়র আেগ একবার ডটাটাইপ েলা চক কের নওয়া যাক। data_frame.head()

এটা িদেলই আবারও ডটাে েমর িকছু স া ভ ালুই

ল দখেত পােবন এবং ভাল কের ল কের দখেবন এখােন সব েলা

াট বা ইি জার টাইপ িক একটা রেয় গেছ Boolean টাইপ।

ডটা টাইপ চি ং True ক আমরা 1 বানােবা এবং False ক বানাব 0। িনেচর কাড ি েপট িট িদেয়ই কাজটা করা যােব, # Mapping the values map_diabetes = {True : 1, False : 0} # Setting the map to the data_frame data_frame['diabetes'] = data_frame['diabetes'].map(map_diabetes) # Let's see what we have done data_frame.head()

56

ডটা ি ে সিসং - শষ পব

অিভন ন! এই মাে ড ও ি নড ডটােসট আমরা আমােদর ই ানুযায়ী অ ালগিরদেম বিসেয় কাজ করেত পারেবা।

িক ? Data Rule #3 Rare ইেভ হাই অ াকুেরিসর সােথ িড করার স াবনা কম াভািবক, কারণ Rare ইেভ মােন আপনার ডটােসট এ এইরকম ইেভ কম থাকেব। আর এইরকম ইেভে র

ডটােসট যত কম থাকেব িডকশন ও ততটাই খারাপ আসেব। তেব এটা িনেয় িচ া না করাই ভাল। আেগ

গতানুগিতক িডকশন িঠক কেরন, পের না হয় রয়ার ইেভ িঠক করেলন।

আরও িকছু অ ানালাইিসস।

True / False Ratio চক করা

57

ডটা ি ে সিসং - শষ পব আমরা চাইেল দখেত পাির, এই ডটােসট এ শতকরা কতজন ডায়েবিটেস আ া আর কতজন নয়, নাটবুক বর কের ঝটপট কাড িলেখ ফেলন। num_true = 0.0 num_false = 0.0 for item in data_frame['diabetes']: if item == True: num_true += 1 else: num_false += 1 percent_true = (num_true / (num_true + num_false)) * 100 percent_false = (num_false / (num_true + num_false)) * 100 print "Number of True Cases: {0} ({1:2.2f}%)".format(num_true, percent_true) print "Number of False Cases: {0} ({1:2.2f}%)".format(num_false, percent_false)

আউটপুট: Number of True Cases: 268.0 (34.90%) Number of False Cases: 500.0 (65.10%)

আমরা Pythonic Way ত কাডটা আসেল চার লাইেন িলখেত পাির। # Pythonic Way num_true = len(data_frame.loc[data_frame['diabetes'] == True]) num_false = len(data_frame.loc[data_frame['diabetes'] == False]) print "Number of True Cases: {0} ({1:2.2f}%)".format(num_true, ((float)num_true / (num _true + num_false)) * 100) print "Number of False Cases: {0} ({1:2.2f}%)".format(num_false, ((float)num_true / (n um_true + num_false)) * 100)

Data Rule #4 ডটা ম ািনপুেলশন িহি রাখেবন ও চক করেবন িনয়িমত এটা করার জন একটা ব ব া আেছই (Jupyter Notebook ব বহার কের)

ভাসন কে াল িসে ম ব বহার কের, যমন : Git, SVN, BitBucket, GitHub, GitLab ইত ািদ

সামাির কী কী করলাম এই দুই পেব? Pandas িদেয় ডটা িরড করলাম

58

ডটা ি ে সিসং - শষ পব কা-িরেলশন স

েক ধারণা িনলাম

ডুি েকট কলাম উে দ করলাম ডটা মা করলাম

True/False রিশও চক করলাম So far so good, পরবতী পেব আশা কির আমরা অ ালগিরদম অ া াই কের িড করা

কের িদব।

59

অ ালগিরদম িসেলকশন

Prediction is very difficult, especially if it's about the future - Niels Bohr

অ ালগিরদম িসেলকশন দখেত দখেত আমরা মিশন লািনংেয়র তৃতীয় ধােপ এেস পড়লাম। এত এত লািনং অ ালগিরদেমর মেধ কানটা

আমার জন ব চেয়স হেব সটা কীভােব িনধারণ করব। কােজর ধারা যিদ আেরকবার দিখ তাহেল এমন দাঁড়ােব,

এই চ া ােরর ওভারিভউ আমরা এই চ া াের পেব আেলাচনা করব, লািনং অ ালগিরদেমর কাজ কী

অ ালগিরদম িসেল করব কান কান াইেটিরয়ার িভি েত অ ালগিরদম বাছাইেয়র জন সলু শন

টেম ব বহার করব

ব অ ালগিরদম কানটা হেব সটা িনেয় আেলাচনা করব াথিমক অ ালগিরদম বাছাই করব

াথিমক বলার কারণ হে , একই বেলম অেনক সময় একটা অ ালগিরদম িদেয় রান করা িঠক না,

সবসময় আমােদর ব অ ালগিরদেমর পছেন ছু টেত হেব। তাই যতটা পারা যায় একই ডটােসট িবিভ অ ালগিরদম িদেয় ইন কের পাফেম ট করা জ ির। তেব কাজ করার জন থেম একটা অ ালগিরদম িনেয় বাছাই করেত হেব, সটাই এখােন আেলাচনা করা হেব।

60

অ ালগিরদম িসেলকশন

লািনং অ ালগিরদেমর কাজ ব াপারটা হাস কর শানােলও থেম আমােদর বুঝেত হেব মিশন লািনং েসেস অ ালগিরদেমর কাজ কী। তাহেল একটু দখা যাক,

লািনং অ ালগিরদমেক ইি েনর সােথ তুলনা করা যায় যটা পুেরা মিশন লািনং েসস পিরচালনা কের। ডটা ি

েসিসং পেরর

পূণ কাজই হল লািনং অ ালগিরদেমর কাজ।

আমরা থেম আমােদর ডটােসটেক দুইভােব ভাগ কির, ইিনং ডটা ( বিশ পিরমােণ থােক; টি ং ডটা এখান থেক বাদ দওয়া হয়)

টি ং ডটা (অ পিরমােণ থােক; ইিনং ডটােসট এর কান ডটা টি ং ডটােসট এ থােক না) এবার এই ইিনং ডটা আমরা অ ালগিরদেম Feed কির, সাধারণত Scikit-learn এ অ ালগিরদেম িফড ও অ ানালাইিসেসর কাজ করার জন fit() ফাংশন ব বহার করেলই হয়।

এই অ ালগিরদেমর িপছেন কাজ কের ম াথেমিটক াল মেডল। এই ম াথেমিটক াল মেডেলর মাধ েম অ ালগিরদম

ডটােসট অ ানালাইিসেসর সময় ই ারনাল প ারািমটার েলা িঠকঠাক কের নয়। এই কাজ েলা বাঝার জন ম াথ

িনেয় আেলাচনা করা দরকার, িক আমরা আপাতত কাজ চািলেয় নওয়ার জন সবিকছু magic িহেসেব িবেবচনা

কের কাজ আগােত পাির। অবশ ই আমরা ম াথেমিটক াল অ ানালাইিসস দখব, িক এখন পােফ সময় নয়। ম াথ

িনেয় তা িত করেল হয়ত ই াের হারােত পােরন, তাই আমরা আেগ গািড় চালােনা িশখব পের দখব ইি ন অথাৎ, লািনং অ ালগিরদম কীভােব কাজ কের।

61

অ ালগিরদম িসেলকশন

এর পেরর কাজ সহজ, predict() ফাংশন কল করার মাধ েম আমরা ডটােসট এ নাই এমন িজিনস িড

করেত পাির ( যমন, ডায়েবিটস িনণেয়র জন আেগ Pima Indian Dataset িদেয় মেডল ইন করব fit()

ফাংশন িদেয়, তারপর যেকান ব ি র ঔ প ারািমটােরর ডটা েলা িদেয় predict() ফাংশেনর মাধ েম জানব তার ডায়েবিটস হওয়ার স াবনা করতটুকু)

কান অ ালগিরদম িদেয় ইন ও িড করব?

62

অ ালগিরদম িসেলকশন ায় ৫০ টার উপের িতি ত লািনং অ ালগিরদম আেছ। আবার এ েলার মােঝ সওভার কিরেয় আপিন িনেজও

কা ম অ ালগিরদম তির করেত পােরন। িক কীভােব বুঝব আমােদর কােজর জন কান অ ালগিরদমটা পােফ ? সটা িনেয় আেলাচনা করার জন ই এই টিপক।

অ ালগিরদম বাছাই করার জন েত েেকর িনজ িকছু িসেল করা ফ া র থােক। যখন আপিন এ পাট হেবন তখন আপিন িনেজই বুঝেত পারেবন কান অ ালগিরদম কান কােজর জন ব । আপাতত এই ফ া র েলার উপর িভি কের বাছাই করেত পােরন।

Algorithm Decision Factors লািনং টাইপ (Supervised নািক Unsupervised) রজা (Value নািক Yes/No টাইপ উ র)

কে ি িট (Simple নািক Complex) বিসক না অ াডভা ড

আমরা সলু শন হেব।

টেম ও ওয়াকে া েসস, দুইটার কি েনশেন িসেল করব কান অ ালগিরদম বাছাই করা ভাল

লািনং টাইপ এেকক অ ালগিরদেমর লািনং েসস আলাদা। চলুন সলু শন আমােদর কান ধরেণর লািনং দরকার।

টেম আেগ একবার দিখ তারপর িঠক কির

মিশন লািনং ওয়াকে া ব বহার কের Pima Indian Data ক ি

েসস ও েয়াজনীয় া ফেমশন করার পর

একটা িডি ভ মেডল তির করেত হেব। এবার এই মেডলেক ৭০% বা তারও বিশ অ াকুেরিসর সােথ িনণয় করেত হেব ক ক ডায়েবিটেস আ া হেত পাের। উপেরর

টেমে বা করা অংশেত আমরা দখেত পাই সখােন িডি ভ মেডল িব করার কথা বলা হেয়েছ।

আমরা জািন, Prediction Model => Supervised Machine Learning

অথাৎ, আমরা পেয় গলাম আমােদর বাছাইকৃত অ ালগিরদেমর লািনং টাইপ কী হেব। ফাইনািল, যসব অ ালগিরদম Unsupervised Learning িনেয় কাজ কের ও েলা আমরা ব বহার করব না এেত কের, ২২ িট অ ালগিরদম বাদ পেড় গল, হােত থাকল ২৮ টা অ ালগিরদম তাও অেনক! সমস া নাই, এেক এেক আমরা আরও িফ ার করেত পারব।

রজা টাইপ

63

অ ালগিরদম িসেলকশন আেগই বেলিছ, আমরা সাধারণত দুই ধরেণর উ র পেত চাই। একটা হল ভ ালু (Regression: যমন বািড়র আকােরর সােথ দরদাম কমন হেব) আেরকটা হল হ াঁ/না টাইপ উ র (Classification)।

এখােন বাঝাই যাে ডায়েবিটস সমস া িনধারণ আসেল Classification, কারণ আমরা জানেত চাি ডায়েবিটস

হেব িক না। আবার, িডি ট ভ ালু; যমন: 1-100, 101-200, 201-300 বা small, medium, large ইত ািদও ািসিফেকশেনর মেধ পেড়।

এবার দিখ কয়টা অ ালগিরদম বাদ পড়ল, রজা টাইপ ািসিফেকশন হওয়ােত বাদ পড়ল ৮ টা অ ালগিরদম, হােত রইল ২০ টা

কমে ি িট আমরা যেহতু মিশন লািনং শখা

কেরিছ সেহতু আমােদর উিচৎ জিটল অ ালগিরদম েলা এিড়েয় চলা।

তারমােন KISS (Keep It Short and Simple) ফরমূলা অ া াই করা। জিটল অ ালগিরদম কান েলা? Ensemble Algorithms: এ েলা

শাল অ ালগিরদম, কারণ এেককটা Ensemble Algorithm অেনক লা অ ালগিরদেমর

সমি হেয় থােক।

খুবই ভাল পাফেম

িডবািগং করা সুিবধাজনক নয় এেত কের অ ালগিরদম কেম দাঁড়াল ১৪ টােত

Basic নািক Enhanced? Enhanced Basic এর ভ ািরেয়শন

পাফেম Basic এর চেয় বটার (বলা লােগ নািক? :P) অিতির সুিবধাসমৃ Complex Basic সহজ

তাই সহেজ বাঝা যায় হ াঁ বুঝেত পারেছন, যেহতু আমরা িবিগনার, তাই আমােদর Basic এ থাকাই ভাল।

িফ ািরং শেষ িতনটা Candidate Algorithm 64

অ ালগিরদম িসেলকশন আমরা এখন িতনটা অ ালগিরদম, Naive Bayes Logistic Regression Decision Tree এর মধ থেক একটা বাছাই করব। িতনটা স

েক আেগ অ িকছু আেলাচনা করার পর আমরা একটা িডিসশেন

আসব য কানটা ব বহার করা বটার। িতনটাই মিশন লািনংেয়র বিসক ও ািসক অ ালগিরদম। জিটল অ ালগিরদম েলা মূলত এ েলােক িবি ং ক িহেসেব ব বহার কের গিঠত। Naive Bayes িদেয়

করা যাক।

Naive Bayes

Naive Bayes অ ালগিরদম 'Bayes Theorem' অ া াই কের বানােনা। যারা 'Bayes Theorem' এর নাম শােনন িন তােদর জন বলা যেত পাের, Probability এর অন তম ফা ােম াল িথওেরম হল 'Bayes

Probability Theorem'। খুবই (আবারও ম াথেমিট )

পূণ িথওেরম হওয়ােত এটা িনেয় িব ািরত পের একসময় আেলাচনা করা হেব।

'Naive Bayes' অ ালগিরদম কান িকছু হওয়ার স াবনা িনধারণ কের। যমন, High Blood Pressure এর সােথ ডায়েবিটস হওয়ার স াবনা কমন? এভােব িবিভ 'Feature / Input Variable' এর সােথ Probability িম কের কান ঘটনা হওয়ার স াবনা িনধারণ কের এই অ ালগিরদম (অবশ ই পূেবর ডটােসট এর উপর িভি কের)।

এর িকছু বিশ হল ঘটনা ঘটার স াবনা িনধারণ কের

িতিট িফচার বা ইনপুট ভ ািরেয়বল (আেলাচ সমস ার পূণ।

ে : no of preg, insulin, ইত ািদ) সমান

তারমােন এখােন Blood Pressure আর BMI (Body Mass Index) সমান ভ ািরেয়বল-ই)

পূণ (পাশাপািশ সব

িডকশেনর জন অ পিরমাণ ডটাই যেথ

65

অ ালগিরদম িসেলকশন

লিজি ক িরে শন (Logistic Regression)

নামটা কনিফউিজং, মােন আমরা জানতাম Regression মােন Continuous স

িকত। িক Classification

হল Discrete ভ ালু। মেন হেতই পাের, Classification করার জন আমরা Regression মথড িনেয় আেলাচনা কন করিছ?

আসেল Logistic Regression এর আউটপুট ১ (.৯৯৯৯) বা ০ (০.০০০০১) হয়। বিশ বাইনাির রজা

Input Variable / Feature এর িরেলশনিশপ Weighted করা হয় (সব লা িফচার সমান পাের)

পূণ নাও হেত

পরবতী অ ালগিরদম দখা যাক।

িডিসশন ি (Decision Tree)

66

অ ালগিরদম িসেলকশন

এর গঠন বাইনাির ি এর মত ( ডটা াকচার পেড় থাকেল ধারণা করেত পারেবন) িতটা নাড আসেল এেককটা িডিসশন চুর পিরমাণ ডটা লােগ িডিসশন ি

টংেয়র জন

অবেশেষ িসেল করলাম Naive Bayes কন? সহেজ বাঝা যায়

ত কাজ কের ( ায় ১০০ ণ ত সাধারণ অ ালগিরদেমর তুলনায়)

ডটা চ হেলও মেডল

বল থােক

িডবািগং করা তুলনামূলক সহজ

সবেচেয় বড় কারণ হল, আমােদর সমস ার সােথ এই অ ালগিরদমটা পুেরাপুির ম াচ কের, কারণ আমরা likelihood বর করেত চাি এবং এই অ ালগিরদেমর কাজই হল likelihood িনণয় করা :)

সারাংশ চুর লািনং অ ালগিরদম অ ােভইেলবল

িসেলকশন করলাম

67

অ ালগিরদম িসেলকশন

Learning Type - Supervised Result - Binary Classification Complexity - Non-Ensemble Basic or Enhanced - Basic Naive Bayes িসেল করলাম িনংেয়র জন , কারণ সহজ, ফা ও

বল

পরবতী চ া ােরই আমরা আশা কির িড করেত পারব (Promise!)

68

মেডল ইিনং

মেডল ইিনং আমরা এই পয সলু শন

টেম , ডটা কােলকশন ও ি

েসিসং এবং অ ালগিরদম িসেলকশন পয কাজ

কেরিছ। এখন আমরা দখব মেডল ইন করেত হয় কীভােব।

াচাট অনুযায়ী আমরা িনেচর ধােপ আিছ,

এই চ া ােরর ওভারিভউ ইিনং েসস স

েক আেলাচনা করা

Scikit-learn প

ােকজ স

েক আেরা ধারণালাভ করা

অ ালগিরদম ডায়েবিটস ডটা িদেয় ইন কের ইনড মেডল তির করা

মিশন লািনং ইিনং সং ানুযায়ী, Letting speicifc data teach a Machine Learning Algorithm to create speicific prediction model. তার মােন, য ইিনংেয়র মাধ েম একটা মিশন লািনং মেডলেক

িসিফক ডটােসট িদেয় ইন কের একটা

িসিফক িডকশন মেডেল পিরণত করা যায় সটাই মিশন লািনং ইিনং।

াভািবক, আিম ডায়েবিটেসর ডটােসট িদেয় মেডল ইন কের রাদ-বৃি হওয়া িড করেত পারব না। তার জন

আমােদর আলাদা

িসিফক ডটােসট লাগেব।

69

মেডল ইিনং ায়ই মেডল িরে ইন (retrain) করার েয়াজন হয়।

কন আমরা মেডল retrain কির? ধির Pima indian dataset িকছু িদন পর পর আপেডেটড হয় নতুন নতুন ডটা িদেয় (মােন অবজারেভশন

অথাৎ নতুন নতুন Row অ াড হে )। আমরা মিশন লািনংেয়র বিশ অনুযায়ী জািন, যত ডটােসট থাকেব তত বটার, তাই নতুন অ াড হওয়া ডটােসট িদেয় আবার মেডল ইন করেল আমরা অবশ ই আেগর চেয় ভাল ফলাফল পাব।

`New Data => better predictions'

নতুন ডটােসট থেক আবারও আমরা িকছু ডটা ইিনং আর িকছু ডটা টি ংেয়র জন রেখ পারফেম ভিরফাই করেত পাির।

ইিনং ওভারিভউ ডটােসট ি ইিনংেয়র

িটং েতই যটা করেত হেব সটা হল ডটােসট ভাগ কের িনেত হেব। গড়পড়তায় আমরা সাধারণত 70%

ডটা রািখ ইিনংেয়র জন এবং বািক 30% রািখ টি ংেয়র জন ।

ইিনং ডটা অ ালগিরদেম িফড করার মাধ েম আমরা অ ালগিরদম ইন কির। কান অ ালগিরদম ইন করার

আসল অথ হল ঔ

িসিফক ডটােসট এর জন অ ালগিরদেমর ই ারনাল প ারািমটার েলা সট করা। আমরা

যখন ম াথেমিটক াল অ ানালাইিসস দখব তখন িবষয়টা ি য়ার হেব।

70

মেডল ইিনং আেগ দিখ আমােদর ইিনং গাল (Training Goal) আসেল কী?

ইিনং গাল ও ইিনং ডটা ইিনং গাল বাঝার জন আমরা হাইেপােথিটক াল ডটােসট িনি । আবারও বলিছ " ইিনং গাল" বাঝার জন

আমরা আপাতত Diabetes ডটােসট ব বহার করিছ না।

ধির, সিদ হেব কী না, সটা বাঝার জন দুইটা ইনপুট ভ ািরেয়বল / িফচার যেথ । িফচার দুেটা হল X & Y । িত X এর সােপে

আমরা যিদ Y এর Scatter ট কির,

াটার টিটর ব াখ া: এখােন নীল রংেয়র ডট েলা ারা বাঝােনা হে X ও Y এর ঔ কি েনশেনর জন সিদ হেব না এবং লাল রংেয়র ডট িদেয় বাঝােনা হেয়েছ X ও Y এর ঔ সকল কি েনশেনর জন সিদ হেব।

আমরা একটা সাধারণ িডিসশন বাউ াির করেত পাির ডট েলা আলাদা করার জন । এটা মূলত কের দেব

আপনার ইনড অ ালগিরদম। উপেরর ডটােসেটর জন এইরকম একিট িডিসশন বাউ াির এঁেক িদেত পাের আপনার অ ালগিরদম।

71

মেডল ইিনং

িক বাউ াির করার পর দখা যাে নীল অংেশ বশ িকছু লাল স চেল এেসেছ এবং লাল অংেশ বশ িকছু নীল বৃ চেল এেসেছ।

72

মেডল ইিনং

তারমােন ইিনং ১০০% নয়। িক ১০০% অ াকুেরিস আমােদর ল

ও নয়। এত বিশ অ াকুেরট মেডল তির

করেত গেল Overfitting হওয়ার চা খুবই বিশ থােক। Overfitting এবং Underfitting মিশন লািনংেয়র পূণ িবষয়, তাই বরাবেরর মত এ েলা িনেয়ও আমরা িব ািরত আেলাচনা পের একসময় কের নব।

এই ইিনং ডটা ব বহার কের মেডলেক ইন কের আমরা িডিসশন বাউ াির তির কিরেয় িনেত পাির। আপাতত এটাই হে আমার ইিনং ডটা ব বহােরর উে শ ।

টি ং ডটার কাজ কী? মেন হওয়া াভািবক, য ১০০% ডটা আমরা কন ইিনংেয় কােজ লাগাি না? কন আমরা 70-30% এ ি



করিছ?! এেত কের ইিনং ডটা কেম গল না? তােত পাফেম খারাপ হেব না? সব ডটা িদেয় ইন করেল সমস া কাথায়?

হ াঁ অেনক েলা

এবং আমার চ া থাকেব সব েলার জবাব দওয়ার জন ।

১০০% ডটা আমরা কন ইিনংেয় কােজ লাগাি না? কন আমরা 70-30% এ ি ট করিছ?! এেত কের ইিনং ডটা কেম গল না? েলা আসেল একই, আমরা পূেবর আেলাচনা করা একিট উদাহরেণর মাধ েম িবষয়টা বাঝার চ া কির।

73

মেডল ইিনং ধির, আিম কাউেক (মেন ক ন স ণ করেত জােন না, ধু যাগ করেত জােন) নামতা শখাি । ল

করেবন

আিম ' শখাি ' ক বা হরেফ িলেখিছ। তারমােন আিম তােক নামতার লিজক শখাি । এবার যিদ তােক আিম, 2 X 1 = 2 2 X 2 = 4 2 X 3 = 6 2 X 4 = 8 2 X 5 = 10 2 X 6 = 12 2 X 7 = 14 2 X 8 = 16 2 X 9 = 18 2 X 10 = 20

এই ২ এর নামতা বারবার পিড়েয় মুখ করালাম। আিম যিদ এখন তােক বিল, বলত 2 X 3 = ? স ঝটপট উ র িদেত পারেব য 2 X 3 = 6 । এখন আিম তােক ট করার জন যিদ বিল আ া এবার ৫ এর ঘেরর নামতা বল। এবার স আর ঝটপট উ র িদেত পারেব না, কান কান

ে উ র িদেত নাও পাের।

এই উদাহরণ িদেয় যটা বুঝালাম য, আিম তােক আেদৗ িকছু শখােত পাির নাই। ১০০% ডটা সা াই িদেয় আি েমটিল আিম তােক লিজক বর করা থেক িবরত রাখলাম। িক আিম যিদ এটা করতাম, 2 X 1 = 2 2 X 2 = 4 2 X 3 = 6 2 X 5 = 10 2 X 6 = 12 2 X 7 = 14 2 X 8 = 16 2 X 10 = 20

এখােন দুইটা ডটা িমিসং, এবং তােক দািয় িদলাম তুিম বর কর িমিসং ভ ালু েলা কী হেব? স এবার লিজক বর

করার চ া করেব। কান মুখ বুিল আওড়ােব না। ধু তাই না, আিম আসেল তার উ র থেক বর করেত পারব স আেদৗ লিজক িশখেত পেরেছ িকনা।

অথাৎ আমরা সব টি ং ডটা িদেয় ভিরফাই করেত পাির আমার তিরকৃত মেডল আসেলই িডি ভ িকনা, আিম জািন এমন কান ডটা আমার কােছ আেছ িক আিম ইিনংেয় সটা াভাইড কির নাই। তােত যিদ মেডল

কাছাকািছ িড করেত পাের তারমােন আিম মাটামুিট সফল। কারণ আিম একটা মেডলেক ইনড করেত পেরিছ। আমার কােছ উ র নাই এমন

কীনা?

িজ াসা কের আিম কীভােব জানব আেরকজন সিঠক উ র িদে

ইনপুট ভ ািরেয়বল বা িফচার িসেলকশন

74

মেডল ইিনং িফচার িসেলকশন বা িফচার ইি িনয়ািরং আসেল ডটা সােয়ে র আেলাচ িবশাল একটা টিপক। কারণ আেগই

বেলিছ, অেনক সময় ডটােসট এ থাকা বশ িকছু িফচার থােক য েলা অদরকারী, সটা বাদ িদেল িডকশন আরও ভাল হেব। এই অদরকারী ভ ািরেয়বল ছঁেট িদেয় দরকারী িফচার িসেলকশেনর ভািরি নাম িফচার ইি িনয়ািরং।

আমরা ডটােসট ি িনংেয়র সময় িফচার ইি িনয়ািরং খািটেয়িছলাম, সটা হল কা-িরেলশন বর কের আমরা skin ছাঁটাই কির।

Pima Indian Diabetes ডটােসট এ িসেলে ড িফচার েলা: No of Pregnencies Glucose Concentration Blood Pressure Thickness Insulin Body Mass Index Diabetes Predisposition Age

Scikit-learn ব

বহার কের মেডল ইিনং

অবেশেষ আমরা িথওির পাঠ কের ব াপক ানাজেনর পর বসলাম কািডং করেত। ইন করা

করব।

ইিনংেয়র

েত কী করেত হেব মেন আেছ? না থাকেল সমস া নাই,

ডটা ি

িত িনন, আমরা এখন মেডল

িটং

িনেচর কাড এর মাধ েম আমরা 70-30% ডটা ি

ট করব। ৭০% হল ইিনং ডটা, বািকটা টি ং ডটা।

জুিপটার নাটবুক বর কের আেগর করা কাডিটেত লখা

ক ন।

75

মেডল ইিনং

from sklearn.cross_validation import train_test_split feature_column_names = ['num_preg', 'glucose_conc', 'diastolic_bp', 'thickness', 'insu lin', 'bmi', 'diab_prod', 'age'] predicted_class_name = ['diabetes'] # Getting feature variable values X = data_frame[feature_column_names].values y = data_frame[predicted_class_name].values # Saving 30% for testing split_test_size = 30 # Splitting using scikit-learn train_test_split function X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = split_test_size, random_state = 42)

random_state = 42

গ ারাি দওয়ার জন ।

ডটােসেটর ি

দওয়ার মােন, িতবার া াম রান করেল ি

িটং যন একই জায়গা থেক হয় সটার

িটং িক আসেলই ৭০-৩০ হেয়েছ? চক করা যাক

Python 3

print("{0:0.2f}% in training set".format((len(X_train)/len(data_frame.index)) * 100)) print("{0:0.2f}% in test set".format((len(X_test)/len(data_frame.index)) * 100))

Python 2

print "{0:0.2f}% in training set".format((len(X_train)/len(data_frame.index)) * 100) print "{0:0.2f}% in test set".format((len(X_test)/len(data_frame.index)) * 100)

আউটপুট: 69.92% in training set 30.08% in test set

কাছাকািছ!

কান িমিসং ডটা আেছ কীনা? (0 ভ ালু, null ভ ালু নয়)

76

মেডল ইিনং অেনক সময় একটা কলােম হয়ত িবিভ ধরেণর মান আেছ িক আপিন চক করেত িগেয় দখেলন অেনক লা ভ ালু

0 যটা স ব নয়। সটা িনেয় কীভােব িডল করেবন? একটা অ ালগিরদম আেছ যটা িদেয় ০ ভ ালু েলা িরে স কের একটা গড় ভ ালু বিসেয় কাজ করার মত আসেল ০!

েট নওয়া যায়, সটা দখার আেগ চেলন দিখ আমােদর কত লা ভ ালু

Python 3

print("# rows in dataframe {0}".format(len(data_frame))) print("# rows missing glucose_conc: {0}".format(len(data_frame.loc[data_frame['glucose _conc'] == 0]))) print("# rows missing diastolic_bp: {0}".format(len(data_frame.loc[data_frame['diastol ic_bp'] == 0]))) print("# rows missing thickness: {0}".format(len(data_frame.loc[data_frame['thickness' ] == 0]))) print("# rows missing insulin: {0}".format(len(data_frame.loc[data_frame['insulin'] == 0]))) print("# rows missing bmi: {0}".format(len(data_frame.loc[data_frame['bmi'] == 0]))) print("# rows missing diab_pred: {0}".format(len(data_frame.loc[data_frame['diab_pred' ] == 0]))) print("# rows missing age: {0}".format(len(data_frame.loc[data_frame['age'] == 0])))

Python 2

print "# rows in dataframe {0}".format(len(data_frame)) print "# rows missing glucose_conc: {0}".format(len(data_frame.loc[data_frame['glucose _conc'] == 0])) print "# rows missing diastolic_bp: {0}".format(len(data_frame.loc[data_frame['diastol ic_bp'] == 0])) print "# rows missing thickness: {0}".format(len(data_frame.loc[data_frame['thickness' ] == 0])) print "# rows missing insulin: {0}".format(len(data_frame.loc[data_frame['insulin'] == 0])) print "# rows missing bmi: {0}".format(len(data_frame.loc[data_frame['bmi'] == 0])) print "# rows missing diab_pred: {0}".format(len(data_frame.loc[data_frame['diab_pred' ] == 0])) print "# rows missing age: {0}".format(len(data_frame.loc[data_frame['age'] == 0]))

আউটপুট: # rows in dataframe 768 # rows missing glucose_conc: 5 # rows missing diastolic_bp: 35 # rows missing thickness: 227 # rows missing insulin: 374 # rows missing bmi: 11 # rows missing diab_pred: 0 # rows missing age: 0

77

মেডল ইিনং ০ ভ ালু ক কান ভ ালু িদেয় িরে স করার একটা টকিনক হল Imputation । ই

ুট করার জন সাইিকেট

অলেরিড রিডেমড কাড দয়া আেছ, আমরা আপতত সটা ব বহার কের কাজ চািলেয় নব। Python 2 & 3

from sklearn.preprocessing import Imputer #Impute with mean all 0 readings fill_0 = Imputer(missing_values=0, strategy="mean", axis=0) X_train = fill_0.fit_transform(X_train) X_test = fill_0.fit_transform(X_test)

এখােন fill_0 ও িক একধরেণর মেডল, যার কাজ হল 0 ভ ালু েলােক mean লিজক াল ভ ালু িদেয় িরে স করা।

ােটিজর মাধ েম একটা

আমরা এই পিরবিতত ইন ভ ালু িদেয় ইন করব এবং ট ভ ালু িদেয় ট করব।

y_train বা y_test এ কন Imputer ব বহার করলাম না? কারণ িস

ল, ওখােন কান িমিসং ডটা নাই।

মেডল ইিনং অবেশেষ আমরা সই ম ািজক াল ফাংশন কল করার মাধ েম মেডল ইন করব। Python 2 & 3

from sklearn.naive_bayes import GaussianNB # create Gaussian Naive Bayes model object and train it with the data nb_model = GaussianNB() nb_model.fit(X_train, y_train.ravel())

আমরা আেগই আেলাচনা কের িঠক কেরিছলাম য আমােদর িসেলে ড অ ালগিরদম হেব Naive Bayes এবং সই

অ ালগিরদেমর একিট মেডল হল Gaussian Naive Bayes। আমরা একটা ফাঁকা মেডল এর অবেজ তির কের িনলাম, তারপর ইিনং ভ ালু িদেয় fit() ফাংশন কল করার মাধ েম ইন করলাম। পরবতী চ া াের আমরা দখব আমােদর তির করা মেডল কমন পারফেম শা করেছ!

78

মেডল পারফেম টি ং - ১

মেডল পারফেম বা অ াকুেরিস টি ং - পব ১ আমরা ডটা সং হ থেক মেডল ইিনং পয কাজ শষ। এখন ধু বািক রইল মেডল িকরকম পাফেম শা করেছ। মেডল পারফেম চ া ারটা একটু বড় হেব তাই আিম এেক দুইভােগ ভাগ করলাম।

দুই পেবর মেডল পারফেম টি ং চ া ােরর ওভারিভউ মূল আেলাচ িবষয় ট ডটার মধ েম মেডল এভালুেয়শন রজা ই ারি েটশন রজা ই

ুভেম / মেডল ই

ুভেম / অ াকুেরিস ই

ুভেম

এছাড়াও কনিফউশন ম াি Recall Precision AUC ROC ওভারিফিটং

মেডল হাইপারপ ারািমটার ওভারিফিটং কমােনা

K-Fold Cross Validation বা N-Fold Cross Validation Bias-Variance Trade off ভাল পারফেমে র জন িকছু টা পারেফকশন ছাড় দওয়া হািট হািট পা পা করেত করেত অবেশেষ আমরা চেল এলাম শেষর ধােপ,

79

মেডল পারফেম টি ং - ১

তাহেল

করা যাক।

মেন রাখেত হেব, ািটি

খারাপ স

ধু ডটা িনেয় কাজ কের, আমরা িডফাইন কির কানটা খারাপ আর কানটা ভাল। এবং এই ভালূণ িনভর কের আমরা মেডল কীভােব ব বহার করব।

অেনক িথওির হল, এবার একটু ইি েমে শন দিখ।

য ডটায় ই হেয়েছ সটােত কমন পারফম করেছ আমরা কাজ

র আেগ ডটােক দুইভােগ ভাগ কেরিছলাম, একটা ইিনং আেরকটা টি ং। এতবার এই কথা

দখেত দখেত মুখ হেয় যাওয়ার কথা। যাই হাক, আমরা এখন দখব, য ডটায় ই হেয়েছ, তােক যিদ সই ডটাই িফড করােনা হয়, তাহেল িকরকম িড করেছ।

ব াপারটা অেনকটা সই নামতার উদাহরেণর মত, এটা যিদ ইিনং ডটা হয়: 3 x 1 = 3 3 x 2 = 6 ... 3 x 10 = 30

তাহেল ই ডটায় কীরকম ই হেয়েছ সটা জানার জন িজ াসা করব,

80

মেডল পারফেম টি ং - ১

3 x 1 = ?

আপনার মেডেলর উপর াই মারেত িনেচর কাডিট রান ক ন, (আেগ বলা হয় িন যিদও, এই পয Jupyter Notebook এ যত কাজ কেরেছন সখান থেক কি িনউ ক ন)

# This returns array of predicted results prediction_from_trained_data = nb_model.predict(X_train)

এখন prediction_from_trained_data ভ ািরেয়বেল িড করা অ ােরটা অ াসাইন হল। আমরা চাইেল এখন খাতা কলম িনেয় বেস দখেত পাির, ডটােসট এ িত Observation এ রজা কী এবং ডটােসট এ িত Observation এ আমােদর তির করা মেডেলর িডে ড রজা কী।

অথবা আেরকটা কাজ করা যায়, সাইিকট-লান লাইে িরর িব ইন মিডউল িদেয় চক করেত পাির আমােদর মেডল কয়টা সিঠক ডায়েবিটস ধরেত পারল আর কয়টা পারল না।

খাতা কলেমর বদেল জুিপটার নাটবুক ওেপন করা থাকেল সখােন লখা

ক ন,

# performance metrics library from sklearn import metrics # get current accuracy of the model accuracy = metrics.accuracy_score(y_train, prediction_from_trained_data) print "Accuracy of our naive bayes model is : {0:.4f}".format(accuracy)

যিদ ভুেল িগেয় থােকন আমরা ডটােসট ি

ট কের চারিট ভ ািরেয়বেল রেখিছলাম, X_train, y_train, X_test, y_test

যখােন, X_train = á ¦Æ ³ÏÚÏ ¦ÆÈݽ ÍÚÑݵÝáÑÚ [no_of_preg, insulin, glucose ... etc] (ÈÝáÏÚ á¿½Úá×½ ¬Ï øñ%) y_train = X_train ¬Ï ³áÏ×ÈÛ ¿¢ ¥¨½Èݽ [diabetes -> yes/no] (áÍáØÂÝ y_train ¬Ï ³áÏ×ÈÛ ¿¢ ÍÚ ÑÝ, áÊÚ»Ú¦ ÍÚá ¹ ¬½Ú° øñ%) X_test = á½ ½ ³ÏÚÏ ¦ÆÈݽ ÍÚÑݵÝáÑÚ [ÈÝáÏÚ á¿½Úá×½ ¬Ï ôñ% Û¹Ñ ¬Ê¢ ¬¦ ôñ% á ¦ÛÆ¢ ´ÚÏ ¤Û  ÆÚ¦ ] y_test = á½ ½ ³ÏÚÏ ¦ÆÈÝá½Ï ³áÏ×ÈÛ ¿¢ ¥¨½Èݽ

81

মেডল পারফেম টি ং - ১ আমরা যেহতু দখিছ ই ডটায় অ াকুেরিস কীরকম, তাই এটা হওয়াই াভািবক না য metrics.accuracy_score ফাংশেন আমরা X_train এ মেডেলর আউটপুট

(prediction_from_trained_data) এবং X_train এর আসল আউটপুট (y_train) ।

আেগর কাড ি েপেটর আউটপুট আেগর কাড ি েপেটর আউটপুট হল এটা, Accuracy of our naive bayes model is : 0.7542

আমােদর সলু শন

টেমে টােগট িছল ৭০ বা তার বিশ অ াকুেরিস ত িড করা। িক এখােন আমরা দখেত

পাি অ াকুেরিস ায় 75% ।

থােমন, আেগই সিলে ট করার মত িকছু হয় নাই। এই অ াকুেরিস

ার িক ই ডটার উপর, মােন এই ডটা

িদেয়ই তােক ই কের আবার সই ডটায় িডকশন ট করিছ। অথাৎ িসেলবােসর িজিনসপ ই িজে স করা হল।

টি ং ডটায় পাফেম এবার আপনােক যিদ বিল টি ং ডটায় পারফেম কী হেব সটার কাড লেখন, তাহেল আপিন যা করেতন তার সােথ িনেচর কােডর িমল আেছ িকনা ল ক ন,

# this returns array of predicted results from test_data prediction_from_test_data = nb_model.predict(X_test) accuracy = metrics.accuracy_score(y_test, prediction_from_test_data) print "Accuracy of our naive bayes model is: {0:0.4f}".format(accuracy)

আউটপুট Accuracy of our naive bayes model is: 0.7359

82

মেডল পারফেম টি ং - ১

তার মােন হল িসেলবােসর বাইের থেক

িজ াসা করেলও স ৭০% অ াকুেরিসর সােথ উ র িদেত পারেছ,

তারমােন তার দওয়া উ েরর ৭৩% সিঠক এবং বািকটা ভুল।

আমরা এটাই চেয়িছলাম, অথাৎ আমরা যিদ এই ই মেডেল এবার নতুন পরীি ত কান ব ি র ডটা ইনপুট দই তাহেল তার উ র সিঠক হওয়ার স াবনা ৭৩%। যিদ মেডল বেল নতুন ব ি র ডায়েবিটস হেত পাের, তার likelihood হল ৭০%।

িক হ াঁ িঠক ধেরেছন, এখেনা সিলে শেনর সময় আেস িন। ডটা কােলকশেনর পরবতী পইনফুল কাজ হল পারফেম টি ং এবং েয়াজনীয় পিরবতন করা।

ািসিফেকশন টাইপ বেলেমর পারফেম টি ং : কনিফউশন ম াি

83

মেডল পারফেম টি ং - ১ আমােদর সমস ািট ািসিফেকশন টাইেপর আর এর জন আলাদা িকছু measurement আেছ পারফেম ট করার জন । যটার কথা না বলেলই নয় সটা হল Confusion Matrix । নাম েন কনিফউজ হওয়ার িকছু নই। কাড লখার পাশাপািশ আমরা এ িবষেয় িব ািরত জেন নব।

আপাতত জেন রাখুন কনিফউশন ম াি িনেচর কাডিট িলখুন,

িদেয় আমরা জানেত পারব আমােদর মেডেলর পাফেম কীরকম। তাহেল

print "Confusion Matrix" # labels for set 1=True to upper left and 0 = False to lower right print "{0}".format(metrics.confusion_matrix(y_test, prediction_from_test_data, labels=[ 1, 0]))

কনিফউশন ম াি Predicted True (col 0)

Predicted False (col 1)

Actual True row -> 0

52 (TP)

28 (FP)

Actual False row -> 1

33 (FN)

118 (TN)

আমরা টিবেলর না ার েলােক TP, FP, FN ও TN ারা কাশ করেত পাির। যখােন, TP = ¥×Ñ ¥¨½Èݽ ØÑ ò ÊÚ ¿ÚÎáÊÛ½× Ø°ÎÚÏ × ËÚÊÆÚ ¥á¹ **¬Ê¢** ¥ÌÚáÄÏ âÂÛÏ ³ÏÚ Ìá¿Ñ° á Û¿ ³áÏá¹ ò FP = ¥×Ñ ¥¨½Èݽ ØÑ ñ ÊÚ ¿ÚÎáÊÛ½× Ø°ÎÚÏ × ËÚÊÆÚ ÆÚ¦ **Û³ ÂÝ** ¥ÌÚáÄÏ âÂÛÏ ³ÏÚ Ìá¿Ñ á Û¿ ³Ïá¹ ò FN = ¥×Ñ ¥¨½Èݽ ØÑ ò ÊÚ ¿ÚÎáÊÛ½× Ø°ÎÚÏ × ËÚÊÆÚ ¥á¹ **Û³ ÂÝ** ¥ÌÚáÄÏ âÂÛÏ ³ÏÚ Ìá¿Ñ á Û¿ ³Ïá¹ ñ TN = ¥×Ñ ¥¨½Èݽ ØÑ ñ ¬Ê¢ ¥ÌÚáÄÏ Ìá¿Ñ° á Û¿ ³Ïá¹ ñ

কনিফউশন ম াি

একটু কনিফউিজং মেন হেল, ভালভােব আেরকবার িচ া ক ন এবং আপনার িচ ার সােথ সােথ

টিবলিট বুঝেত চ া ক ন।

84

মেডল পারফেম টি ং - ১ শটকােট, TP = কত লা ঘটনা ঘেটেছ এবং ঘেটেছ িহেসেব িডেট কেরেছ

FP = কত লা ঘটনা ঘেট নাই িক ঘেটেছ িহেসেব িডেট কেরেছ

FN = কত লা ঘটনা ঘেটেছ িক ঘেট নাই িহেসেব িডেট কেরেছ TN = কত লা ঘটনা ঘেট নাই এবং িডেট ও কের নাই আেরকবার দখা যাক, তাহেল উপেরর

ািটি

অনুযায়ী,

52 টা ঘটনা ডায়েবিটস িহেসেব িডেট কেরেছ এবং 52 জন আসেলই ডায়েবিটেস আ া <- TP

28 টা ঘটনা ডায়েবিটস িহেসেব িডেট কেরেছ িক ঔ 28 জন আসেল ডায়েবিটেস আ া নয় <- FP 33 টা ঘটনা ডায়েবিটস িহেসেব িডেট কের নাই িক ঔ 33 জন আসেল ডায়েবিটেস আ া <- FN 118 টা ঘটনা ডায়েবিটস িহেসেব িডেট কের নাই এবং ঔ 118 জন ডায়েবিটেস আ া নয় <- TN

যিদ আমােদর মেডল ১০০% অ াকুেরট হত তাহেল কীরকম হত তার কনিফউশন ম াি ? সহেজই বাঝা যাে , 100% Accurate Model এর ম াি

ে FP = 0 এবং FN = 0 হেব। তাহেল কনিফউশন

হেব এইরকম, Predicted True

Predicted False

Actual True

80 (TP)

0 (FP)

Actual False

0 (FN)

151 (TN)

কনিফউশন ম াি কনিফউশন ম াি

পযােলাচনা : ািসিফেকশন িরেপাট

এর মাধ েম মেডল অ াকুেরিস বর করার জন আমরা আরও িকছু

ািটি

িরেপাট দখেত

পাির। সূ দখার পাশাপািশ সাইিকট এর িব ইন ফাংশন িদেয় কীভােব বর করা যায় আমরা সটাও দখব।

ািসিফেকশন িরেপাট জনােরট হয় আসেল কনিফউশন ম াি ে র ডটার উপের। ািসিফেকশন িরেপাট দখার জন

িনেচর

টেম রান ক ন,

print "Classification Report" # labels for set 1=True to upper left and 0 = False to lower right print "{0}".format(metrics.classification_report(y_test, prediction_from_test_data, la bels=[1, 0]))

িরেপাট আউটপুট 85

মেডল পারফেম টি ং - ১

Classification Report precision recall f1-score support 1 0.61 0.65 0.63 80 0 0.81 0.78 0.79 151 avg / total 0.74 0.74 0.74 231

এখােন দুইটা টিপক িনেয় আমরা একটু আেলাচনা করব, একিট হল Precision এবং আেরকিট হল Recall । Precision

বর করার সূ

অথাৎ, পােফ ি িসশেনর জন আমরা জািন, FP = 0, সুতরাং 100% Accurate Model এর

এর অথ হে Precision এর মান যত বড় ততই ভাল। আমােদর টােগট থাকেব Precision এর মান যতটা বড় করা যায়। ##### `Recall` বর করার সূ

একই ভােব, 100% Accurate Model এর



আবারও, আমােদর ল থাকেব Recall এর মান যতটা বাড়ােনা যায়। Precision - 0.61 & Recall - 0.65 খারাপ না, িক

কের যাব।

এর মান আরও বাড়ােনা যেত পাের। সই চ াই আমরা

86

মেডল পারফেম টি ং - ১

পারফেম ই

ুভ করার উপায় কী কী?

আমরা িনেচর প িত েলার মাধ েম মেডেলর পাফেম বর বাড়ােত পাির য অ ালগিরদেম আিছ সটা অ াডজা বা মিডফাই করা

আরও ডটা জাগাড় করা বা ডটাে েমর ই ইিনং ই

ুভ করার চ া করা

ুভ করা

অ ালগিরদম চ করা

চলুন আমরা বরং অ ালগিরদম চ কের দিখ : Random Forest Random Forest িদেয় কন দখব? কারণ, এটা Ensemble Algorithm (সহজ কথায় Advanced এবং Complex) ডটার সাবেসেট অেনক েলা ি থাকেত পাের

ি এর রজা এভােরজ কের যােত ওভারিফিটং কে ােল থােক এবং পাফেম ভাল হয় আমােদর ডটা িনেয় িকছু ই করা লাগেব না, যেহতু আমরা ি

েসিসংেয়র কাজ আেগই কের রেখিছ। ধু নতুন

মেডল তির কের ডটা িদেয় ইন করব এবং ট ডটা িদেয় পাফেম ট করব। িনেচর কাডিট িলেখ ফলুন, from sklearn.ensemble import RandomForestClassifier # Create a RandomForestClassifier object rf_model = RandomForestClassifier(random_state=42) rf_model.fit(X_train, y_train.ravel())

এটা িলেখ এ ার মারেল িনেচর মত কান আউটপুট আসেল বুঝেবন ইিনং খতম, এবার পাফেম ট করার পালা

আউটপুট: RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini', max_depth=None, max_features='auto', max_leaf_nodes=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1, oob_score=False, random_state=42, verbose=0, warm_start=False)

87

মেডল পারফেম টি ং - ১

Random Forest Performance Testing : Predict Training Data আেগর মতই কাড, rf_predict_train = rf_model.predict(X_train) #get accuracy rf_accuracy = metrics.accuracy_score(y_train, rf_predict_train) #print accuracy print "Accuracy: {0:.4f}".format(rf_accuracy)

আউটপুট: Accuracy: 0.9870

অি র! তাই না? ডটােসট স ভালই মুখ কেরেছ। এবার দখা যাক টি ং ডটায় পাফেম কমন!

Random Forest Performance Testing : Predict Testing Data rf_predict_test = rf_model.predict(X_test) #get accuracy rf_accuracy_testdata = metrics.accuracy_score(y_test, rf_predict_test) #print accuracy print "Accuracy: {0:.4f}".format(rf_accuracy_testdata)

আউটপুট: Accuracy: 0.7100

টি ং ডটার

ে অ াকুেরিস ৭১% আর ইিনং ডটায় ৯৮%। অথাৎ িসেলবােসর ে উ র ভালই িদেত

পারেছ িক এর বাইের থেক

করেল উ র বশ খারাপই আসেছ। এর মােন স িরেয়ল ওয়া ডটায় ভাল

িড করেত পারেছ না, িক য ডটােসট এর মাধ েম যটা িশেখেছ, সখান থেক ভাল িড করেত পারেছ।

এর চেয় তা আমােদর Naive Bayes মেডল ভাল কাজ করিছল! আমােদর টি ং ডটায় ভাল অ াকুেরিস দরকার।

88

মেডল পারফেম টি ং - ১ এবার দখা যাক Random Forest মেডেলর ািসিফেকশন িরেপাট কমন! আমরা উপর থেক ধার করা কাড িকছু টা পিরবতন কেরই বিসেয় িদেত পাির!

print "Confusion Matrix for Random Forest" # labels for set 1=True to upper left and 0 = False to lower right print "{0}".format(metrics.confusion_matrix(y_test, rf_predict_test, labels=[1, 0])) print "" print "Classification Report\n" # labels for set 1=True to upper left and 0 = False to lower right print "{0}".format(metrics.classification_report(y_test, rf_predict_test, labels=[1, 0 ]))

আউটপুট: Confusion Matrix for Random Forest [[ 43 37] [ 30 121]] Classification Report precision recall f1-score support 1 0.59 0.54 0.56 80 0 0.77 0.80 0.78 151 avg / total 0.70 0.71 0.71 231

এখােন দখুন, precision ও recall এর মানও আমােদর আেগর Naive Bayes এর চেয় খারাপ।

পূণ : Overfitting যখন দখেবন Training Data ও Testing Data এর Accuracy Score এ মাটামুিট ভালই তফাৎ, তখনই

বুঝেবন আপনার মেডলিট মিশন লািনংেয়র সবেচেয় ািসক সমস ার কবেল পেড়েছ। সটা হল Overfitting,

আমােদর Random Forest মেডলিট Overfitting এর ভু েভাগী। আমরা পরবতী পেব Overfitting নামক লািনংেয়র দু চ থেক বর হওয়ার বশ িকছু প িত দখব।

আপেডেটড নাটবুক ডাউনেলাড ক ন

89

মেডল পারফেম টি ং - ১ এই পয যত কাজ করা হেয়েছ আপিন িনেজ না কের থাকেলও আমার করা নাটবুকিট ডাউনেলাড কের রান কের দখেত পােরন। ডাউনেলাড ক ন এখান থেক।

90

মেডল পারফেম টি ং - শষ পব

মেডল পারফেম - ি তীয় এবং শষ পব আমরা মিশন লািনংেয়র একদম শষ পেব চেল এলাম। আেগর পেবই মাটামুিট দেখিছলাম মেডল ভাল পারফম না করেল অথবা অন মেডল আেদৗ ভাল পারফম করেছ িকনা সটা জানার জন কীভােব কাজ আগােত হয়।

যসব টিপক আেলাচনা করা হেয়েছ (িটক দওয়া) এবং যসব টিপক িনেয় আেলাচনা করা হয় নাই (িটক ছাড়া) ট ডটার মাধ েম মেডল এভালুেয়শন রজা ই ারি েটশন অ াকুেরিস বাড়ােনা কনিফউশন ম াি Recall Precision AUC (Area Under Curve) ROC (Receiver Operating Characteristics) - Curve ওভারিফিটং মেডল হাইপারপ ারািমটার ওভারিফিটং িমিনমাইেজশন K-Fold / N-Fold Cross-validation Bias-Variance Trade Off ভাল পারফেমে র জন পােফকশন ছাড় দওয়া আমরা এখেনা এই ধােপ,

91

মেডল পারফেম টি ং - শষ পব

মেডল পারফেম িরিভশন - ROC ROC বাঝার আেগ অবশ ই Confusion Matrix স ROC

েক জানেত হেব, না জানেল আেগর পব থেক পেড় িনন।

েস ROC কাভ আঁকার জন X-axis এ FPR (False Positive Rate) ও Y-axis এ TPR (True

Positive Rate) বসােত হয়। তারমােন কনিফউশন ম াি

থেক া TPR ও FPR রট বসােল আমরা একটা পেয় পাব, এভােব একই

ডটােসেটর উপর েয়াগকৃত যত লা মেডল িনেয় আমরা কাজ করব স েলার িতিট থেক একিট কের পেয়

পাব।

এই পেয়

েলা যাগ কের িদেয় াফ আঁকেলই আপিন পেয় যােবন আপনার আকাি

ত ROC কাভ।

একটা পােফ ািসফায়ােরর TPR হয় 1 এবং FPR হয় 0। একিট উদাহরণ িদেয়ই ROC বাঝা যায়। একটা িসনািরও দখা যাক, আিম একটা ডায়েবিটস ডটােসট িনলাম, ডটােসট এ Observation আেছ 1000 টা, আিম এটােক

80%-20% এ ভাগ করলাম। তারমােন 80% ডটা হল ইিনং ডটা, 20% ডটা হল টি ং ডটা। আবার ধ ন, 200 টা টি ং ডটার মেধ 100 টা হল Positive (মােন আউটপুট পিজিটভ আরও

সহজভােব বলেল ঔ ১০০ টা ডটার আউটকাম হল ডায়েবিটস হেয়েছ)। এবং 100 টা Negative। আিম চারটা মেডল তির করলাম, এই মেডল চারটা আিম ইন করব ও তােদর পারফেম ট করব। চারটা মেডল হল,

92

মেডল পারফেম টি ং - শষ পব

Gaussian Naive Bayes Model Logistic Regression Model Random Forest Model Artificial Neural Network Model আমরা এখেনা Artificial Neural Network দিখ নাই এবং এটা স

েক না জানেলও সমস া নই।

আিম আেগর পেবর মত কের িতটা মেডলেক ইন কের তারপর তােদর Confusion Matrix বর করেত পাির, তাই না? িঠক সভােবই আিম 80% ডটােসট িদেয় মেডল েলােক িশিখেয় পিড়েয় মানুষ করব তারপর তােদর পারফেম ট করার জন পড়া ধরব। (কনিফউশন ম াি

বর করব)।

আরও মেন করেত থােকন, িতিট মেডেলর Confusion Matrix ও পাশাপািশ তােদর TPR, FPR বর করলাম।

Gaussian Naive Bayes Model TP = 63 FN = 37

FP = 28 TN = 72

TPR = 0.63 FPR = 0.28

Logistic Regression Model TP = 77 FN = 23

FP = 77 TN = 23

TPR = 0.77 FPR = 0.77

Random Forest Model TP = 24 FN = 76

FP = 88 TN = 12

TPR = 0.24 FPR = 0.88

Artificial Neural Network Model

93

মেডল পারফেম টি ং - শষ পব

TP = 76

FP = 12

FN = 24

TN = 88

TPR = 0.76 FPR = 0.12

আমরা আেগই জেনিছ ROC Curve এর

ে Y-axis এ থােক TPR এবং X-axis এ থােক FPR। তাহেল

আমরা এই চারটা Coordinate সহেজই ROC Space এ বসােত পাির।

Coordinate েলা Coordinate -> Model (X, Y) -------------------------------------G point -> Gaussian Naive (0.28, 0.63) L point -> Logistic Regression (.77, .77) R point -> Random Forest (.88, .24) A point -> Artificial Neural Network (.76, .12)

এই পেয়

েলা আমরা এখন ট করব।

94

মেডল পারফেম টি ং - শষ পব

import numpy as np import matplotlib.pyplot as plt # fpr, tpr naive_bayes = np.array([0.28, 0.63]) logistic = np.array([0.77, 0.77]) random_forest = np.array([0.88, 0.24]) ann = np.array([0.12, 0.76]) # plotting plt.scatter(naive_bayes[0], naive_bayes[1], label = 'Naive Bayes', facecolors='black', edgecolors='orange', s=300) plt.scatter(logistic[0], logistic[1], label = 'Logistic Regression', facecolors='orang e', edgecolors='orange', s=300) plt.scatter(random_forest[0], random_forest[1], label = 'Random Forest', facecolors='b lue', edgecolors='black', s=300) plt.scatter(ann[0], ann[1], label = 'Artificial Neural Network', facecolors='red', edg ecolors='black', s=300) plt.plot([0, 1], [0, 1], 'k--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.0]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc='lower center') plt.show()

95

মেডল পারফেম টি ং - শষ পব

উদাহরণিট উইিকিপিডয়া থেক নয়া, উইিকিপিডয়ার ROC কােভ অিতির িকছু িজিনস পেয় আউট কের দওয়া আেছ,

96

মেডল পারফেম টি ং - শষ পব

আিম এখােন িতিট পেয় বাঝােনার জন আলাদা ভােব াটার ট কেরিছ। আপনার যিদ মেডল অেনক েলা হয় িকংবা, একই মেডেলর প ারািমটার পিরবতনিভি ক পারফেম যিদ আপিন ট কেরন তাহেল আপনার ট করা ROC কাভ হেব এইরকম।

97

মেডল পারফেম টি ং - শষ পব

আমার এখােন মেডল মা ৪ টা, তাই এখােন লাইন ট করেল বাঝা যােব না তাই, াটার ট করা হল।

ROC Curve ব াখ া 100% Accurate Model এর FPR = 0 এবং TPR = 1। এটােক আইিডয়াল ধের সহেজই বাঝা যাে ANN মেডল িহেসেব সেবেচেয় ভাল, তারপর Naive Bayes, তারপর Logistic Regression এবং সবার শেষ Random Forest পারফম কেরেছ। আেগই (এবং আবােরা) বেল রািখ, সবসময় ANN > NB > LR > RF এইরকম হেব তা নয়, ডটােসট ও বেলেমর ধরণ অনুযায়ী এক এক মেডেলর পারফেম এেকক রকম। আিম এখােন পুেরা ব াপারটা ক না কেরিছ।

মাঝখান িদেয় য ড াশড লাইন কাণাকুিণ বরাবর িগেয়েছ তােক বেল Line of no-discrimination। পেয় যত এই লাইেনর উপের থাকেব তত ভাল এবং িনেচ থাকেল ততটাই খারাপ।

AUC বা Area Under Curve উপের একটা ROC Curve দখেছন িন য়? সখােন ROC কাভ যতটা Area কভার কের ততটাই ভাল। 100% Accurate Model এর AUC হল TPR * FPR বা পুেরা ােফর AUC িদেয় পারফেম পিরমাপ করা িনেয় অেনক

ফল।

উেঠেছ বতমােন, সবাই কমেবিশ ROC ফার কের । তাই

AUC িনেয় কথা বাড়ালাম না।

98

মেডল পারফেম টি ং - শষ পব

ওভারিফিটং আেগও বলা হেয়িছল, কান কান সময় মেডেলর পারফেম এতটাই ভাল হয় য Training Data এর



Accuracy Rate ায় 95-99% হয়। িক Testing Data ত িড করেত িদেল 40% Accuracy Rate ও হয় না।

হে , এটা কন হয়? আসেল আমরা য ডটােসট িদেয় ইন কির, সখােন আসল ডটার পাশাপািশ Noise ও থােক। অথাৎ, 100% Pure Dataset আপিন কখেনাই পােবন না। একটা ািসক এ া

ল হেত পাের, আিম িকছু ডটােসট জাগাড় করলাম, কয় ঘ া পিড় আর কয় ঘ া ঘুমাই তার

উপর কত মাকস পাই। এখন আিম এই ডটােসট এর উপের মেডল ইন কের িড করেত বেস যাই এবং যিদ কানভােব দিখ, পড়া কিমেয় ঘুমােল মাকস বিশ আসেছ, এবং সটার উপর িভি কের আিম পরবতী পরী ার

আেগ ঘুমােয় কাটালাম িক পড়লাম না একটুও (কারণ আমার তির A.I বেলেছ ঘুমােল মাকস বিশ পাওয়া যােব)। তােত ফলাফল কী আসেব সটা বাঝাই যাে ।

তাহেল এই য ভুলভাল িডকশন িদে , তার কারণ কী? দুইটা কারণ, (১) পযা পিরমাণ ডটা নাই, (২) ডটােসট এ কলােমর সংখ া (ভ ািরেয়বল, এখােন যমন কয় ঘ া পিড় আর কয় ঘ া ঘুমাই) কম। মাকস ভাল আসার অেনক কারণ থাকেত পাের, পরী া যিদ MCQ হয় আর তােত ঝেড় বক িদেয় ভাল পিরমাণ দািগেয় ফললাম, অথবা

অেনক সহজ হল ইত ািদ। তাহেল এ েলােতা আিম ইনপুট এ না িদেয়ই ইন কেরিছ, তাই মেডল ভাবতই সই ? কারণ েলা না জেনই আমার দওয়া ডটােসট এর সােথ িনেজেক এমন ভােব খাপ খাওয়ােব তােত Error সবেচেয় কম থােক।

মেডল ইন মােন হে Error কমােনা, আর Error কমােনার জন িতিট মেডেলর হাইপারপ ারািমটার েলা

ম ােথেমিটক াল অ ানালাইিসস অনুযায়ী সট হয়। য হাইপারপ ারািমটার ব বহার করেল Error সবেচেয় কম হেব

সটাই মেডল ব বহার করেব (এটাই াভািবক)। িক Error কম করেত িগেয় যিদ Model, ডটােসেটর Noise এর

সােথ খাপ খাইেয় নয় তাহেল যেথ ঝােমলা হেব। ওভারিফিটং স

েক পরবতীেত আমরা আরও িব ািরত দখব কেয়কিট ধােপ।

ওভারিফিটং কমােনা ওভারিফিটং কমােনার জন যটা করা যায় সটা হে , ডটা জাগাড় করা এবং কলােমর সংখ া বাড়ােনা। যতটা িপওর স ব ততটা িপওর ডটােসট ও ভাল িডকশন রজা িদেত পাের। এটােতা গল ডটােসট এ িক করেবন। চাইেল অ ালগিরদম িটউন কেরও ভাল রজা বর করা স ব। আমরা একটা মথড দখব।

Regularization & Regularization Hyperparameter একটা অ ালগিরদম কীভােব িশখেব সটা আমরা চাইেল কে াল করেত পাির। মিশন লািনং অ ালগিরদম মােনই

তার িপছেন কান না কান ম াথেমিটক াল মেডল কাজ করেছ, তাই সই ম াথেমিটক াল মেডেলর লািনং মকািনজম চাইেল িকছু িনিদ প ারািমটার িদেয় কে াল করা যায়।

99

মেডল পারফেম টি ং - শষ পব ধির কান একিট মেডল আউটপুট বর কের এই সূ িদেয়,

আমরা এর লািনং কে াল করার জন , (x * lambda) অংশ রজা থেক িবেয়াগ িদেয় Regularized Model তির করেত পাির,

এখােন, ই হল Regularization Hyperparameter। ল ণীয়, এর মান আেগর িডকশেনর থেক িকছু টা কম আসেব, তারমােন আিম এবার Training Dataset এই Accuracy আেগর চেয় কম পাব। িক এটা ভাল! কারণ? কারণ হে , এবার স িতটা ডটােসট মুখ করেছ না, কারণ Regularization Hyperparameter তােক মুখ করেত িদেব না, এর মান যত বাড়েব, তার

িডে ড ভ ালু ততটাই পনাি খােব। এেক আমরা তাই Penalized Machine Learning Model বলেত

পাির।

যখনই মেডলটা এরর কমােনার জন ডটােসট এর সােথ খাপ খাওয়ােত যােব, ওমিন lambda তােক পনাি িদেয়

দূের সিরেয় দেব। আমােদর আি েমট কাজ হেব এই lambda ক এমন ভােব িটউন করা যােত Testing Dataset এ অ াকুেরিস ভাল আেস। Training Dataset এ অ াকুেরিস গা ায় যাক :P

Logistic Regression মেডেল Regularization Hyperparameter িটউিনংেয়র মাধ েম অ াকুেরিস বাড়ােনা টিপেকর টাইেটল একটু বড় হেয় গল। একটু আেগ আমরা জানলাম, ম াথেমিটক াল মেডল হ াক কের আমরা Regularization এর মাধ েম মেডেলর ওভারিফিটং কমােত পাির। মেডল িভি ক Regularization

Hyperparameter িবিভ হয়। সাইিকট লাইে িরেত অলেরিড Logistic Regression এর মেডেলর কাড কের

দওয়া আেছ এবং তারা Regularization Hyperparameter চ করার জন সুিবধাজনক ই ারেফসও িদেয়েছ।

আমােদর কাজ হেব, Regularization Hyperparameter এর মান পিরবতন কের িডকশন তারপর য Hyperparameter Value ত িডকশেনর অ াকুেরিস সেবা হেব সটা

ার সং হ করা।

ার কের রাখা।

িথওির দখলাম, এবার াি ক াল দখার পালা। এখন আপনােক অবশ ই নাটবুক বর কের কাড িলখেত হেব।

100

মেডল পারফেম টি ং - শষ পব

from sklearn.linear_model import LogisticRegression lr_model = LogisticRegression(C=0.7, random_state=42) lr_model.fit(X_train, y_train.ravel()) lr_predict_test = lr_model.predict(X_test) # training metrics print "Accuracy : {0:.4f}".format(metrics.accuracy_score(y_test, lr_predict_test)) print "Confusion Matrix" print metrics.confusion_matrix(y_test, lr_predict_test, labels=[1, 0]) print "" print "Classification Report" print metrics.classification_report(y_test, lr_predict_test, labels=[1, 0])

আউটপুট

101

মেডল পারফেম টি ং - শষ পব

Accuracy : 0.7446 Confusion Matrix [[ 44 36] [ 23 128]] Classification Report precision recall f1-score support 1 0.66 0.55 0.60 80 0 0.78 0.85 0.81 151 avg / total 0.74 0.74 0.74 231

এই কাজ েলা আমরা নাইভ বেয়স মেডেলর জন কেরিছলাম। এখােন C হে আমােদর সই Regularization Hyperparameter,

েত ধের িনলাম

, আমরা পের এর িবিভ মােনর জন অ াকুেরিস চক করব।

C (Regularization Hyperparameter) এর মান িনণয়

102

মেডল পারফেম টি ং - শষ পব

C_start = 0.1 C_end = 5 C_inc = 0.1 C_values, recall_scores = [], [] C_val = C_start best_recall_score = 0 while (C_val < C_end): C_values.append(C_val) lr_model_loop = LogisticRegression(C=C_val, random_state=42) lr_model_loop.fit(X_train, y_train.ravel()) lr_predict_loop_test = lr_model_loop.predict(X_test) recall_score = metrics.recall_score(y_test, lr_predict_loop_test) recall_scores.append(recall_score) if (recall_score > best_recall_score): best_recall_score = recall_score best_lr_predict_test = lr_predict_loop_test C_val = C_val + C_inc best_score_C_val = C_values[recall_scores.index(best_recall_score)] print "1st max value of {0:.3f} occured at C={1:.3f}".format(best_recall_score, best_s core_C_val) %matplotlib inline plt.plot(C_values, recall_scores, "-") plt.xlabel("C value") plt.ylabel("recall score")

যেহতু Regularization Hyperparameter C, আর আিম িবিভ C এর মােনর জন recall_scores দখেত

চাি (recall_score যত বিশ তত ভাল), তাই C_start = 0.1 িনলাম, C_end = 5 িনলাম, আর লুেপ C এর মান 0.1 কের বৃি করলাম।

আর িত C এর ভ ালুর জন িডে ড ডটােসট িদেয় অ াকুেরিস চক করলাম, যখনই recall এর মান আেগরটার চেয় বিশ হেব তখনই best_recall_score এ recall_score অথাৎ বতমান

ার অ াসাইন হেব।

আেগর িবষয় েলা বুঝেত পারেল কাডটা কিঠন িকছু নয়। C_values এবং recall_scores নােমর দুইটা িল রাখলাম ভ ালু

ােরর জন

103

মেডল পারফেম টি ং - শষ পব

আউটপুট C এর মান বৃি র সােথ কীভােব পারফেম পিরবতন হে তার াফ।

C এর মান যখন 2-3 এর মেধ তখন Recall Score সবেচেয় বিশ, C এর মান 4-5 এবং 0-1 এর মেধ কম।

class_weight = 'balanced' ও C পিরবতেনর সােথ

মেডল পারফেম

Regularization Hyperparameter একটাই হেব তার কান কারণ নই, একািধক থাকেত পাের। একটু আেগ

আমরা C এর মান বর কেরিছলাম। এখন আমরা আেরকিট প ারািমটার (class_weight) ক balanced িদেয় দখব পারফেম িকরকম িদে ।

class_weight = 'balanced'

রেখ C এর মান পিরবতন কের পারফেম বর করাই হেব মূল উে শ ।

104

মেডল পারফেম টি ং - শষ পব

C_start = 0.1 C_end = 5 C_inc = 0.1 C_values, recall_scores = [], [] C_val = C_start best_recall_score = 0 while (C_val < C_end): C_values.append(C_val) lr_model_loop = LogisticRegression(C=C_val, class_weight="balanced", random_state= 42) lr_model_loop.fit(X_train, y_train.ravel()) lr_predict_loop_test = lr_model_loop.predict(X_test) recall_score = metrics.recall_score(y_test, lr_predict_loop_test) recall_scores.append(recall_score) if (recall_score > best_recall_score): best_recall_score = recall_score best_lr_predict_test = lr_predict_loop_test C_val = C_val + C_inc best_score_C_val = C_values[recall_scores.index(best_recall_score)] print "1st max value of {0:.3f} occured at C={1:.3f}".format(best_recall_score, best_s core_C_val) %matplotlib inline plt.plot(C_values, recall_scores, "-") plt.xlabel("C value") plt.ylabel("recall score")

আউটপুট:

105

মেডল পারফেম টি ং - শষ পব

াস ওেয়ট balanced দওয়ােত দখা যাে Recall Score বেড় 0.73+ হেয়েছ, definitely what we were looking for! কনিফউশন ম াি কাড: from sklearn.linear_model import LogisticRegression lr_model =LogisticRegression( class_weight="balanced", C=best_score_C_val, random_stat e=42) lr_model.fit(X_train, y_train.ravel()) lr_predict_test = lr_model.predict(X_test) # training metrics print "Accuracy: {0:.4f}".format(metrics.accuracy_score(y_test, lr_predict_test)) print metrics.confusion_matrix(y_test, lr_predict_test, labels=[1, 0]) print "" print "Classification Report" print metrics.classification_report(y_test, lr_predict_test, labels=[1,0]) print metrics.recall_score(y_test, lr_predict_test)

আউটপুট:

106

মেডল পারফেম টি ং - শষ পব

Accuracy: 0.7143 [[ 59 21] [ 45 106]] Classification Report precision recall f1-score support 1 0.57 0.74 0.64 80 0 0.83 0.70 0.76 151 avg / total 0.74 0.71 0.72 231 0.7375

Regularization এর মাধ েম এভােব আমরা অ াকুেরিস বাড়ােত পাির (ওভারিফিটং কিমেয়)।

K-Fold / N-Fold Cross-validation ওভারিফিটং কমােনার আেরকিট ইেফি ভ অ ালগিরদম হল K-Fold Cross-validation। নামটা অেনক কিঠন শানােলও কাজ খুবই সহজ।

আমােদর ডায়েবিটস ডটােসট এ িক নেগিটভ উ র বিশ (মােন ডায়েবিটস হয় নাই)। যখােন ডটােসট এর ব ােল কম থাকেব সসব

ে K-Fold Cross-validation খুবই ভাল অ াকুেরিস িদেত সাহায কের।

K-Fold বা N-Fold Cross-validation একই িজিনস যখন k=N! বা K = Number of observation। k-Fold Cross-validation এ যটা করা হয়, স এবার এই k সংখ ক সাবস া

ূণ ডটােসটেক k equal sized এ সাবস া

ল করা হয়।

ল থেক একটা একটা কের ডটা নয়া হয় টি ং এর জন ।

যমন, আমার কােছ 25 টা অবসােভশেনর ডটােসট আেছ, আিম এেদরেক ৫ টা েপ ভাগ করলাম। তারমােন িত েপ ডটােসট থাকল ৫ টা কের। এবার এই পাঁচটা েপর থম প আিম Hold করলাম বািক েলা ইিনংেয় িদলাম, Hold করা ডটােসট িদেয় ট করলাম।

ি তীয় Pass এ ি তীয় প Hold করব ( িনংেয় পাঠাব না), আর বািক েলা Training এ পাঠাব। িঠক একই ভােব চতুথ এবং প ম Pass এ ঔ পিজশনাল পিট Hold কের বািকটা পাঠাব ইিনংেয়। এভােব 5 বার 5-Fold এ ইন করব। যেহতু িত েপ Observation 5 টা এবং প সংখ া ৫ টা তাই এর নাম হেব N-Fold Cross-validation।

Cross-validation ব বহার কের মেডল ইিনং ও টি ং স ভ ািলেডশন এনাবলড মেডল সাইিকেট বানােনাই আেছ, যেকান নরমাল মেডল এর সােথ CV লািগেয় িদেলই

Cross-validation Enabled Model পেয় যােবন।

107

মেডল পারফেম টি ং - শষ পব যমন, LogisticRegression এর Cross-validation Enabled মেডল হেব LogisticRegressionCV, এভােব

বািক েলার জন ও সত ।

চলুন এটার পারফেম দখা যাক, from sklearn.linear_model import LogisticRegressionCV lr_cv_model = LogisticRegressionCV(n_jobs=-1, random_state=42, Cs=3, cv=10, refit=False , class_weight="balanced") # set number of jobs to -1 which uses all cores to parallelize lr_cv_model.fit(X_train, y_train.ravel()) lr_cv_predict_test = lr_cv_model.predict(X_test) # training metrics print "Accuracy: {0:.4f}".format(metrics.accuracy_score(y_test, lr_cv_predict_test)) print metrics.confusion_matrix(y_test, lr_cv_predict_test, labels=[1, 0]) print "" print "Classification Report" print metrics.classification_report(y_test, lr_cv_predict_test, labels=[1,0])

আউটপুট: Accuracy: 0.7100 [[ 55 25] [ 42 109]] Classification Report precision recall f1-score support 1 0.57 0.69 0.62 80 0 0.81 0.72 0.76 151 avg / total 0.73 0.71 0.72 231

10-Fold স ভ ািলেডশেন পারফেম খারাপ আেস িন! অেনক বড় হেয় গল চ া ারটা, তবুও Bias-Variance টা বাদ থেক গল। পরবতী অন কান পেব আমরা দখব Bias-Variance Trade-off কী িজিনস এবং এর ই

া কতখািন।

Scikit-learn Algorithm Cheat Sheet ডটােসট থেক অ ালেগা িসেলকশেনর উপের সাইিকেটর িনজ একটা িচটিশট আেছ। খুবই ইেফি ভ,

108

মেডল পারফেম টি ং - শষ পব

শষ পয যসব টিপক িনেয় আেলাচনা করা হল ট ডটার মাধ েম মেডল এভালুেয়শন রজা ই ারি েটশন অ াকুেরিস বাড়ােনা কনিফউশন ম াি Recall Precision AUC (Area Under Curve) ROC (Receiver Operating Characteristics) - Curve ওভারিফিটং মেডল হাইপারপ ারািমটার ওভারিফিটং িমিনমাইেজশন K-Fold / N-Fold Cross-validation Bias-Variance Trade Off ভাল পারফেমে র জন পােফকশন ছাড় দওয়া

109

িলিনয়ার িরে শন াথিমক আেলাচনা

িলিনয়ার িরে শন : াথিমক আেলাচনা এতিদেন আমরা মিশন লািনংেয়র টােগট স করেছ সটা স

েক জানেত পারলাম। িক ম াথেমিটক াল মেডল কীভােব কাজ

েক এখেনা অ । এখনকার আেলাচনা েলােত িডি ভ মেডল িবি ংেয়র পাশাপািশ আমরা

দখব মেডল েলা আসেল কীভােব তির হে বা এর িপছেনর লিজক টা আসেল কী।

আজেকর আেলাচনার িবষয়ব িলিনয়ার িরে শন কী

মেডল িরে েজে শন (Model Representation) ক ফাংশন (Cost Function) ক ফাংশন ইনটুইশন (Cost Function Intuition) করা যাক। করার আেগ আমরা িবখ াত বািড়র দরদাম ডটােসট এর কথা িচ া কির। মেন ক ন, আপনার ব ু িরেয়ল এে ট িবজেনসম ান এবং আপিন একজন ডটা সােয়ি স

। আপনার ব ু আপনার

েক জানেত পের ভাবল আপনােক িদেয় তার িবজেনেসর িকছু কাজ কিরেয় নেব বদেল আপনােকও িকছু ৳

দেব।

কাজটা হল, আপনার ব ু র কােছ একটা ডটােসট আেছ, যখােন বািড়র আকার ও দরদাম দওয়া আেছ।

আপনার যটা করেত হেব, সটা হল সই ডটােসেট মিশন লািনংেয়র িবে ষণী মতা অ া াই কের, য বািড়র আকার দওয়া নই সই আকােরর বািড়র দাম িড করেত হেব।

আপনার ব ু র দওয়া ডটােসট বািড়র সাইজ (একক - sq ft) (ধির এটা X)

বািড়র দাম (একক - ৳) (ধির এটা, Y)

2104

399900

1600

329900

2400

369000

1416

232000

3000

539900

1985

299900

1534

314900

1427

198999

1380

212000

110

িলিনয়ার িরে শন াথিমক আেলাচনা

1494

242500

1940

239999

2000

347000

1890

329999

4478

699900

1268

259900

2300

449900

1320

299900

1236

199900

2609

499998

3031

599000

1767

252900

1888

255000

1604

242900

1962

259900

3890

573900

1100

249900

1458

464500

2526

469000

2200

475000

2637

299900

1839

349900

1000

169900

2040

314900

3137

579900

1811

285900

1437

249900

1239

229900

2132

345000

4215

549000

2162

287000

111

িলিনয়ার িরে শন াথিমক আেলাচনা 1664

368500

2238

329900

2567

314000

1200

299000

852

179900

1852

299900

1203

239500

এই সমস ািট আসেল িরে শন এর মেধ পেড়, কীভােব?

িলিনয়ার িরে শন িরে শন: িরে শন মােন Real-value আউটপুট িড করেত হেব। আেরক ধরেণর িডকশন আমরা কের এেসিছ (হ াঁ/না

িভি ক), সটা হল ািসিফেকশন। তারমােন 10, 20, 30, বা 1236, 5.123 ইত িদ ইত ািদ িড করার মােনই হল আিম একটা িরে শন বেলেম হাত িদেয়িছ।

িলিনয়ার: িলিনয়ার মােন সরলেরখা টাইেপর। আমরা যিদ সমস ািট একটা লাইেনর মত মেডল িদেয় স ভ করেত চাই তাহেল সটা হেব িলিনয়ার মেডল।

সুতরাং িলিনয়ার িরে শন তাহেল িলিনয়ার িরে শন হল লাইেনর মত মেডল িদেয় Real Value িড করার প িত। যিদ আমার মেডলটা ব াঁকাত াড়া লাইেনর মাধ েম ভ ালু িড করত তাহেল তার নাম হত Polynomial Regression।

Single Variable Linear Regression আ া, ডায়েবিটস ডটােসট িবে ষণ করার সময় আমরা বশ িকছু ইনপুট ভ ালু িনেয় কাজ কেরিছলাম যমন no. of pregnencies, insulin level ইত

একটা ÊÚÛ¿éÏ ×Ú¦º ।

ািদ। **িক আপনার ব ু য ডটােসট িদেয়েছ তােত ইনপুট কলাম মা

112

িলিনয়ার িরে শন াথিমক আেলাচনা তাই আমরা এই সমস ােক Single Variable Linear Regression িহেসেব ভাগ করিছ। যিদ এখােন একটার

বদেল আরও একটা ইনপুট ভ ািরেয়বল থাকত, যমন No of rooms থাকত তাহেল তােক আমরা বলতাম Multi Variable Linear Regression Problem

এটা একটা Supervised Learning Problem কারণ, আমরা এখােন সিঠক উ রসহ িকছু ডটা িদি , মােন আমরা অলেরিড িকছু বািড়র আকার ও দাম জািন, সটাই মিশন লািনং মেডেল পাঠাব। লেবলড ডটা পাঠােনার মােনই হল সুপারভাইজড লািনং।

িলিনয়ার মেডেলর মাধ েম িডকশন বলেত আসেল কী বুঝাি ? আমরা ছাট একটা ডটােসেটর এর মাধ েম িবষয়টা বাঝার চ া কির। ধরা যাক, আপনার নামীদামী র ু েরে খেত যাওয়ার হার আপনার আেয়র সমানুপািতক। আর আপিন এমন একটা কা বতন মােস মােস বােড় (আেছ নািক এমন কা

ািন?) ।

ািনেত চাকির কেরন যখােন আপনার

আপিন ৫ মাস চাকির করার পর িহেসব করেত বসেলন আপিন ৫ মােসর, িত মােস কয়বার কএফিস, িবএফিস,

হাজীর িবিরয়ািন, ার কাবাব ইত ািদ ইত ািদেত খেত িগেয়েছন। িহেসব করার পর দখেলন ডটােসট টা দাঁিড়েয়েছ এইরকম।

িত মােস আয় (৳)

িত মােস কয়বার বাইের খেত িগেয়েছন

20k

5

30k

10

40k

15

50k

20

60k

25

আপিন যেহতু এত েণ matplotlib লাইে িরেত ভালই হাত পািকেয়েছন তাই ভাবেলন একটা াফ এঁেক ফলা যাক।

113

িলিনয়ার িরে শন াথিমক আেলাচনা

# Python 2 & 3 import matplotlib.pyplot as plt import numpy as np beton = np.array([20, 30, 40, 50, 60]) khaoa = np.array([5, 10, 15, 20, 25]) plt.xlabel('Proti mash e income') plt.ylabel('Khete jaoar har') # ¥Î vs ÍÎ plt.title("Ae vs Bae") plt.plot(beton, khaoa) plt.show()

াফ

এবার যিদ আপনােক বিল, আ া বেলন তা, ৬ মােস আপিন কতবার বাইের খেত যােবন? আপিন ক ছাড়াই বেল িদেত পারেবন, ৩০ বার (যিদ আয় সুষমভােব বােড়) ।

এইেয আপিন িড করেলন, সটার িক একটা ম াথেমিটক াল মেডল তির করা যায়।

এই সমীকরণ িদেয় আপিন ডটেসট ভিরফাই করেত পােরন। এইখােন আিম একটা সমীকরণ তির করলাম, এটাই হল সই িলিনয়ার মেডল যখােন আপিন Aye ইনপুট িদেল কয়বার বাইের খেত যােবন সটা িড করা যােব। িলিনয়ার মেডল হওয়ার চা ু ষ মাণ হল াফ। আপনার এই ডটােসট সে হাতীত ভােব িলিনয়ার মেডেল Fit কের যায়।

এবার আেরকটা িসনািরওর কথা িচ া করা যাক,

114

িলিনয়ার িরে শন াথিমক আেলাচনা িত মােস আয় (৳)

িত মােস কয়বার বাইের খেত িগেয়েছন

20k

5

30k

10

40k

15

50k

20

60k

25

50k

25

40k

15

30k

2

এই ডটােসট এ দখুন থমিদেকর মাস েলােত আপনার ইনকাম বাড়েলও পরবতীেত কমেছ, থম থম আপিন বাইের খেত যাওয়ার অভ াস ছাড়েত পােরন িন। তারপর একদম বিশই কে ােল িনেয় ফেলেছন। এই ডটােসট এর একটা াটার ট দখা যাক,

এইবার আপনােক যিদ বিল, পেরর মােস আপনার আয় যিদ 15k ত নােম তাহেল আপিন কয় বার যােবন? এখন আর ডটােসট এ িলিনয়ার প াটান নই, কান

পারেবন।

িসিফক ইকু েয়শন ও নই যার মাধ েম আপিন সহেজই িড করেত

115

িলিনয়ার িরে শন াথিমক আেলাচনা আমরা হয়ত এ ি ম কি শন ধের নন িলিনয়ািরিট বাদ িদেয় িলিনয়ার মেডল বসােত পাির। সটা পেরর আেলাচনা। এখন আমরা িলিনয়ার প াটান িনেয়ই আেলাচনা করব। আমরা িলিনয়ার িরে শন বুঝলাম, এখন বুঝব মেডল িরে েজে শন কী িজিনস।

মেডল িরে েজে শন মেডল িরে েজে শন এর সহজ বাংলা হল, একটা ডটােসট এ আমরা য িবে ষণ চালাব, সটার িবিভ নােটশন এর মােন কী, িকভােব লেখ এবং কতািব গঠন কীরকম। এটার দরকার কন? কারণ হল আপিন যখন মিশন

লািনংেয়র িথওিরিটক াল বই পড়েত যােবন তখন এই কােসর সােথ িমল পােবন না। সখােন ম ােথর হািবজািব িস ল িদেয় মেডল িরে েজ করা থাকেত পাের। তাই স েলা বাঝার জন আমােদর অিফিশয়াল নােটশন স জানা দরকার।

েকও

আপনার ব ু র দওয়া ডটােসট টা আবার একটু দরকার তাই এখােন আেরকবার প করলাম। বািড়র সাইজ (একক - sq ft) (ধির এটা X)

বািড়র দাম (একক - ৳) (ধির এটা, Y)

2104

399900

1600

329900

----

----

1852

299900

1203

239500

এই ডটােসট এর Row সংখ া 47 তাই আমরা িলখব, m = 47 X = "input" variable / feature Y = "output" variable / "target" value

এই নােটশন িদেয় একটা Row বাঝােনা হয়, সটা যেকান টা হেত পাের। আিম যিদ 20 তম Row বুঝােত চাই সে ে আিম িলখব

। তারমােন

training example বুঝােত হেল বলেত হেব

হাইেপািথিসস একটা ডায়া াম দখা যাক,

116

িলিনয়ার িরে শন াথিমক আেলাচনা

হল, এই আমরা কীভােব তির করব? যেহতু আজেকর চ া ারিট িলিনয়ার মেডল িনেয় তাই ধরা যেত পাের আমরা একটা িলিনয়ার ফাংশন বাছাই করব। ধির আমােদর Hypothesis হে ,

শটহ াে আমরা

ক িলেখ থািক। ল

কের থাকেবন এখােন ইনপুট ভ ািরেয়বল মা একটা, তাই এেক আমরা বলব Univariate Linear Regression।

ক ফাংশন (Cost Function) আমরা সাধারণত আয় িহেসব কের ব য় কির। সবসময় চ া কির যােত আমােদর ব য় সবিন হয়। মিশন লািনংেয়র

ে িঠক তাই করা হয়। এখােন সবা ক চ া থােক, Cost Function কতটা িমিনমাইজ করা যায়। মেডল ইিনং

বলেত আমরা বুিঝ Cost Function Minimization।

ক ফাংশন িমিনমাইজ করার আেগ বুঝেত হেব Cost Function ারা আসেল কী বাঝায়। Cost Function বাঝার আেগ আেরকটা িজিনস জেন নওয়া যাক।

আমরা হাইেপািথিসস এর জন য ফাংশনিট বাছাই কেরিছ এর মান জািন। িক করা যাক।

এবং

। এখােন ধু আমরা

এর মান কত হেব সটা জািননা। চলুন সটার মান কী হেব তা িনেয় একটু গেবষণা

একটা কাজ কির আেগ, আপনার ব ু র দওয়া ডটােসট এর একটা াটার ট এঁেক ফিল।

117

িলিনয়ার িরে শন াথিমক আেলাচনা

আমােদর যটা করেত হেব এইরকম একটা

ইট লাইন এই ডটার মেধ Fit করেত হেব।

118

িলিনয়ার িরে শন াথিমক আেলাচনা

তারমােন

এবং

এর মান এমনভােব বাছাই করেত হেব যন আমােদর hypothesis এর মান ( িডকশন)

ডটােসট এর মােনর কাছাকািছ হয় অথাৎ খরচ সবেচেয় কম হয় বা Cost Function Minimized হয়।

িথটা এর মান িকরকম হেল সটা ডটােসট এ িফট করেব সটা জানার আেগ আমােদর দখেত হেব প ারািমটার (িথটা েলা) এর মান পিরবতেনর সােথ সােথ h এর াফ কীরকম আেস।

ধির

এবং

তাহেল াফ আসেব এইরকম,

119

িলিনয়ার িরে শন াথিমক আেলাচনা

ধির

এবং

তাহেল াফ আসেব এইরকম,

ডটােসর এর সােথ িক ায় িফট কের গেছ। আমােদর যটা করেত হেব লাইনটা আেরকটু িশফট কের উঠােত হেব, এর কথা মেন আেছ না?

হল ঢাল আর হল বক যার কাজ

পিজিটভ িদেক উিঠেয় দয়া ( এর পিজিটভ মােনর জন )। এখােন

আসেল সই এর কাজ করেছ এবং

করেছ

ট লাইন ক Y-Axis এর

এর কাজ।

এবার আমরা দুইটা প ারািমটার ব বহার কের আবার াফ ট করার চ া কির।

ধির,

এবং

আমােদর হাইেপািথিসস হয়,

120

িলিনয়ার িরে শন াথিমক আেলাচনা এইবার িত বািড়র সাইেজর জন আমােদর হাইেপািথিসস এর আউটপুট এর আউটপুট কে

য়ার কের দখা যাক

ইট লাইন ট ও াটার েটর

বলেতই হেব বশ ভালই এেসেছ (দৃশ ত)। িক দখুন উপেরর িদেক িকছু ডটা বাদ পেড় গল, তারমােন আমরা ও

আেরকটু িটউন কের এইরকম াফ পেত পাির,

সবুজ রংেয়র লাইনটা আমােদর নতুন হাইেপািথিসস। লাল রংেয়র লাইনটা হে আেগর।

121

িলিনয়ার িরে শন াথিমক আেলাচনা

সব ই বুঝলাম িক ক ফাংশনটার কথা বলেলন না? সইটার িটিকটাও পাি না। িচ ার িকছু নাই, আমরা হাইেপািথিসস দাঁড়া কিরেয়িছ এইবার আমরা ক ফাংশন দখব। Cost Function ক যমন

ারা কাশ করা হেব এখােন, যিদ আমােদর মেডেল আরও কেয়কটা িথটা থাকত

ইত িদ তাহেল আমরা ক ফাংশন কাশ করতাম

তারমােন Cost Function এর প ারািমটার আর মেডল প ারািমটার একই হেব।

ইত ািদ।

Cost Function এর সূ হল,

মেন আেছ তা কানটা িক? না মেন থাকেল

থেক পেড় িনন। আিম এখােন Cost Function িহেসেব

Ordinary Least Square মথড অ া াই কেরিছ। Cost Function য ধু এটাই হেব তা নয়। তেব সাধারণত এইটা ব বহার করা হয়।

ক ফাংশন যটা বলেত চায়, সটা হল; আমরা িত Observation এর জন Error বর করব (Error = Hypothesis Value - Real Value), সই Error ক বগ করব। এভােব িত (m সংখ ক

এর যাগফল)। তারপর তােক

এর যাগফল বর করব

িদেয় ভাগ িদব।

কথা না বািড়েয় আমরা ডটােসট এর 5 িট অবজারেভশেনর জন Cost ক ালকুেলট কির।

122

িলিনয়ার িরে শন াথিমক আেলাচনা

ডটােসট এর থম পাঁচিট Observation বািড়র সাইজ (একক - sq ft) (ধির এটা X)

বািড়র দাম (একক - ৳) (ধির এটা, Y)

2104

399900

1600

329900

2400

369000

1416

232000

3000

539900

ধির আমােদর Hypothesis, Input, X = [2104, 1600, 2400, 1416, 3000] Real output, Y = [399900,329900, 369000, 232000, 539900] Hypothesis output, Example, h1 = 90000 + 120 * 2104 = 342480 h2 = 90000 + 120 * 1600 = 282000 .... h5 = 90000 + 120 * 3000 = 450000 H = [342480, 282000, 378000, 259920, 450000]

তাহেল বাঝা গল কীভােব মেডল প ারািমটােরর ভ ালু ধের িনেয় আমরা হাইেপািথিসস ফাংশন িদেয় ভ ালু িড করলাম।

ভাল কের দখুন Real ও Predicted ভ ালু কাছাকািছ হেলও বশ এরর আেছ, আমরা সই এরর এর উপর িভি কের Cost Calculate করব।

Real Value (Y)

Predicted Value (H)

399900

342480

329900

282000

369000

378000

232000

259920

539900

450000

123

িলিনয়ার িরে শন াথিমক আেলাচনা এখােন Observation বা m = 5, ক ফাংশন এর আউটপুট একটু ভে ভে লখা যাক,

যখােন, এভােব আমরা বািক এরর েলা পাইথন িদেয় বর কের, সূ বিসেয় Cost Calculate করব।

এবার

িদেয় ণ কের,

এটা হল এভােব আমােদর িবিভ

এর জন ক ালকুেলেটড ক । এর কি েনশেনর জন Cost ক ালকুেলট কের দখেত হেব সবিন ক কান

কি েনশেন আেস, তারপর সই কি েনশন িদেয় আমরা িলিনয়ার মেডল বািনেয় পাফেম ট করব।

সচরাচর িজ াস

:

Cost Function এ িদেয় ণ করার মােন কী? এটা করা হয় পরবতী ম াথেমিটক াল ক ালকুেলশন সহজ করার জন । আর িকছু ই নয়। আপিন হাফ িদেয় ণ না করেলও সমস া নাই।

Residual, MSE (Mean Square Error), OLS (Ordinary Least Square), Loss Function, Residual Sum of Squares (RSS) কানটার মােন কী? Residual এর মােন সবকয়িট Observation এর িডে ড ভ ালু আর আসল ভ ালুর পাথেক র যাগফল। Error এর সমি বলেত যা বুঝায়, তা-ই।

MSE বলেত সবকয়িট Observation এর Error এর বেগর সমি বুঝায় Ordinary Least Square হল Statistical Estimator, যার সাহােয Cost ক ালকুেলট করিছ Loss Function হল Cost Function এর আেরকটা নাম বা Alias RSS এর সূ হল

Cost Function এর মথড িহেসেব OLS ব বহার করা হেয়েছ কন? 124

িলিনয়ার িরে শন াথিমক আেলাচনা খুবই

পূণ একিট

এবং সচরাচর িজ াস নয়। Cost Function িহেসেব OLS ব বহার করার মূল কারণ

এর াফ Parabolic হয়। প ারাবিলক ফাংশন থেক Cost Estimation করাটা খুবই সহজ। আর এর াফ প ারাবিলক হেব সটাই াভািবক। পরবতী পেব আমরা ক ফাংশেনর আেরা ইনটুইশন দখব এবং সমস া যিদ মাি ভ ািরেয়বেলর হয় তাহেল িলিনয়ার মেডল িদেয় কীভােব িরে েজ করেত হয় সটা স

েকও জানব।

125

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

িলিনয়ার িরে শন : ি তীয় পব আমরা গত পেব িলিনয়ার িরে শেনর বিসক জানার পাশাপািশ ক ফাংশন ক ালকুেলশন স জেনিছলাম। আজেক আমরা িনেচর িবষয় েলা স

েক জানার চ া করব।

েক িকছু টা

আজেকর আেলাচনার িবষয়ব ক ফাংশন ইনটুইশন - ২ এর াফ

িডেয় িডেস (Gradient Descent) অি মাইেজশন

ক ফাংশন ইনটুইশন এত েণ িলিনয়ার মেডল স ক ফাংশেনর কাছ থেক।

েক ভালই ধারণা হেয়েছ আশা কির, সটা যিদ হেয় থােক আমরা আেরকবার ঘুের আিস

ক ফাংশেনর াফ িদেয় লাভ কী? আমােদর কাজ িছল ক িমিনমাইজ করা। সকল ইি িনয়ািরংেয়র মূল ল

ভাল ফলাফল পাওয়া যায়। তমিন মিশন লািনংেয়র জন আমােদর মূল ল যায়।

তাই। যত কম িরেসাস ব বহার কের যত

থাকেব কতটা িনভুল িডকশন করা

আমরা যিদ কত েলা মেডেলর ক ফাংশন এর রজা াটার ট কির তাহেল আমরা াফ থেক সহেজই াক করেত পারব সবেচেয় কম এরর কান প ারািমটােরর জন ।

সবিকছু বাদ িদেয় নতুন কের একটা িজিনস দখা যাক, িনেচর ডটােসট এর কথা িচ া করা কির, আয় (X)

ব য় (Y)

10

5

100

50

1000

500

াফ এই ডটােসেটর াফ এইরকম,

126

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

এটা িড করার জন আমরা এই মেডল ব বহার করব : িবিভ এর মােনর জন আমরা এর কান মােনর জন

ট করব। মােন িত িডকশেন ক ক ালকুেলট করব। তারপর দখব

এর মান সবিন আেস।

সােপে ধির তাহেল ট আসেব এরকম,

127

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

ক ক ালকুেলশন:

আবার ধির তাহেল ট,

128

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

ক ক ালকুেলশন:

আবার ধির তাহেল ট,

129

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

ক ক ালকুেলশন:

আবারও ধির

130

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

ক ক ালকুেলশন:

131

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

ক ক ালকুেলশন:

িথটা এর মান আরও বাড়ােল,

132

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

ক ক ালকুেলশন:

আরও বািড়েয়

133

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

ক ক ালকুেলশন: থাক আর বাড়ালাম না, এখন আমরা িত িথটার মােনর জন যত েলা ট তির কির,

এর মান পেয়িছ স েলার াটার

ক ফাংশন াফ

134

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

Python 2 and 3

J = [26936.0, 15151.5, 6734.0, 1683.5, 0, 1683.5, 6734.0] theta = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7] colors = ['blue', 'black', 'orange', 'pink', 'magenta', 'brown', 'aqua'] for i in range(len(J)): lbl = 'Hypothesis H = %0.1f * x' % theta[i] plt.scatter(x[i], J[i], linewidth=5, color=colors[i], label=lbl) plt.legend(loc='best') plt.title('Cost Function Graph') plt.xlabel('Theta') plt.ylabel('J (theta)') plt.show()

াফ থেক কী বুঝলাম?

এর জন ক সেবেচেয় কম। মােন িডকশন সেবেচেয় বটার যখন িথটার মান

। এভােব িতটা মেডেলর ক ফাংশন থেক আমরা ধারণা করেত পাির মেডেলর পাফেম কতটা ভাল।

যিদ আমােদর মেডল

হত 135

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস তাহেল সটার ট হেত পারত এরকম,

আমরা অবেশেষ ক ফাংশন স

েক অেনক িকছু জানেত পারলাম। এখন আমরা দখব Cost Function

Minimization Using Gradient Descent।

Gradient Descent অ ালগিরদম ক ালকুলাস মেন আেছ? িডফােরনিসেয়শন? সটাই আমােদর এখন িকছু টা কােজ আসেব। যিদ মেন না থােক তাহেল আেগ একটু িডফােরনিসেয়শন দখা যাক।

Differentiation : Method for Calculating Slope at a specific point of a function কান িব ুেত কান ফাংশেনর ডিরেভিটভ মােন হল সই িব ুেত ঔ ফাংশেনর যেকান একিট ফাংশন, এখন আমরা তার

িব ুেত য

িডি কাণ উৎপ কের) জানেত চাই। তাহেল আমরা

শেকর ঢাল। ধির,

শক, তার ঢাল (

অে র সােথ রখািট কত

ক াধীন চলক এর সােপে িডফােরনিসেয়ট

136

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

করব। িডফােরনিসেয়ট অপােরটর টা লেখ এইভােব

বা



িনেচর ছিবটা দখা যাক,

Slope বা ঢাল

ঢােলর সূ হে , ঢােলর মান চার ধরেণর, নন-িজেরা পিজিটভ, নেগিটভ, িজেরা এবং অসং ািয়ত। এই মােনর িভি েত আমরা ঢালেক ািসফাই করেত পাির।

এই ঢাল চার ভাগ করা যায়, 137

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস ধনা ক ঢাল (Positive Slope) য ঢাল

অে র সােথ সূ মেকাণ উৎপ কের সটােক ধনা ক ঢাল বেল। ধনা ক ঢাল আসেল বেল

তার িদেক গেল এর মান বাড়েব।

ঋণা ক ঢাল (Negative Slope) য ঢাল

অে র সােথ ূ লেকাণ উৎপ কের সটােক ঋণা ক ঢাল বেল। ঋণা ক ঢাল বেল তার িদেক গেল এর মান কমেব।

শূন ঢাল (Zero Valued Slope) য ঢাল

অে র সােথ িডি কাণ উৎপ কের সটােক শূন ঢাল বেল।

য ঢাল

অে র সােথ

অসং ািয়ত ঢাল (Undefined Slope)

িডি উৎপ কের সটােক ধনা ক ঢাল বেল।

একনজের ঢাল েলা,

Partial Derivative আমােদর মূলত কােজ লাগেব পািশয়াল ডিরেভিটভ। একটা ফাংশন য সব সময় একটা ভ ািরেয়বেলর উপর িডেপে

থাকেব সটা সত নয়। যমন:

যাক, এখােন ভ ািরেয়বলিট

এই ফাংশনটার কথাই িচ া করা

দুইটার উপর িনভরশীল। তাই আমরা যিদ ও দুইটার সােপে এর

পিরবতন াক করেত চাই তাহেল একটা ডিরেভিটভ িদেয় হেব না।

যখন বক

138

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

যখন বক আমরা যিদ

প ারািমটার িদেয় ক ফাংশন ক ালকুেলট কির তাহেল আমােদর সাধারণ ডিরেভিটভ িনেলই হে ,

িক যিদ

দুই িকংবা তার বিশ প ারািমটার িবিশ ক ফাংশন নই তাহেল আমােদর অবশ ই পািশয়াল

ডিরেভিটভ িনেত হেব। আপাতত আমরা এক প ারািমটার িবিশ ক ফাংশন িদেয় িডেয় িডেস বাঝার চ া

করব।

আসেত পাের, এই ঢাল িদেয় আমরা করব টা কী? আসেল ক ালকুলােসর সামান (!) কনেস িদেয় আমরা

িবিলওন িবিলওন সেক বাঁচােত পাির।

আমরা িডফােরনিসেয়শন ও ঢােলর কনেস িদেয় ক িমিনমাইজ করার চ া করব। আর সই চ ার জন আমরা য অ ালগিরদম ব বহার করব সটাই Gradient Descent।

িডেয় িডেস অ ালগিরদম repeat until convergence {

}

ম াথেমিটক াল নােটশন মােন

ম াথ

া ািমং

x ও y সমান

x= y

x == y

y এর মান x এ অ াসাইন করা

x := y

x = y

x আপেডট উদাহরণ

x := x + 1

x = x + 1

তারমােন

এইটা িদেয় বাঝােনা হে

এর মান িতবার আপেডট করেত হেব।

এখােন হল লািনং রট (Learning Rate)

িডেয় িডেস ইনটুইশন

139

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস অ ালগিরদম আসেল কী বলেছ? আমরা আেগই জািন মিশন লািনং মেডল ইিনং মােন হে মেডেলর ই ানাল প ারািমটার েলা এমন ভােব সট করা যােত আমােদর িডকশন িনভুল হয়। আমরা কেয়কটা ােফর মাধ েম বাঝার চ া কির আসেল িডেয় িডেস অ ালগিরদেমর কাজটা কী।

ধির আমােদর ক ফাংশন এইবার যেকান একটা ঔিদেক গেল

এর মান ধির, এবং সই িব ুেত িডফােরনিসেয়ট কির। যিদ ঢাল ধনা ক হয়, এর মােন মান বাড়েব এবং উ া িদেক গেল তার মান কমেব। িনেচর ছিবটা দখেলই বুঝা যােব।

এইবার আমরা আেরকটা িব ু ধির, যটা িকনা লাকাল িমিনমাম এর বােম অব ান কের।

140

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



এই আপেডট তত ণ চলেত থােক যত ণ না িমিনমাম পেয়ে প ছােবন। িমিনমাম পেয়ে অ ালগিরদমিট অেটােমিটক প হেয় যােব কারণ িমিনমাম পেয়ে আপেডেটর িকছু থাকেব না।

আর িডেয় অংশ যিদ হয় তাহেল

এই পব এই পয ই, পরবতী পেব আেরকদফা িলিনয়ার িরে শন, মাি প ারািমটাের িডেয় িডেস এবং ব াচ িডেয় িডেস স

েক জানেত পারব।

সচরাচর িজ াস লািনং রট কী? লািনং রট বা বলেত বুঝায় (িফিজক াল িমিনং) কত ত ক ফাংশন লাকাল িমিনমােম কনভাজ করেত চান। লািনং রট কমােল

এর মান িমিনমােম কনভাজ করেত সময় (ইটােরশন) বিশ িনেব মােন অেনকবার

আপেডট হেত হেব। লািনং বাড়ােল আপেডট কম হেব। এই আলফা হেত হেব যেকান পিজিটভ সংখ া।

লািনং রট বাড়ােল বা কমােল কী ইেফ সৃ ি হেত পাের? মেন ক ন, আপনার চােখ পি বঁেধ একটা উচুিনচু ভূিমেত ছেড় দওয়া হল। এবং বলা হল, আপনার কাজ হেব সবেচেয় িনচু জায়গাটা বর করা। এখন যিদ আপিন বড় বড় যেত পােরন, আবার ছাট ছাট

েপ হাঁেটন তাহেল িমিনমাম পেয় এিড়েয়

েপ হাঁটেল িনচু জায়গা বর করেত অেনক সময় লাগেব। এই য

িনে ন সটােক আমরা লািনং রেটর অ ানালিজ বলেত পাির।



েপর সােথ সােথ লািনং রট বাড়ােনা/কমােনার দরকার আেছ কী?

141

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস না নই, কারণ িমিনমাম লাকাল পেয়ে র িদেক আগােত থাকেল অেটােমিটক িডেয় িডেস অ ালগিরদেমর আপেডট কনভাজ করেব।

প কেম যায়। তাই এর মান যিদ িফ ড থােক তাহেলও সটা িমিনমাম পেয়ে

এর মান বা সেবাপির প ারািমটার েলার মান উে শ কী?

েত র ◌ া ম নওয়ার

এই ে র উ র অেনক িবশাল, র ◌ া ম পেয়ে প ারািমটার ইিনিশয়ালাইেজশেনর মূল সুিবধা হে াবাল

িমিনমাম বর করা। একই ােফর লাকাল িমিনমাম বা াবাল িমিনমাম থাকেত পাের। লাকাল িমিনমাম বলেত সই পেয় ক বাঝােনা হয় যটা সামি ক ােফর মেধ তুলনামূলক িন িব ু। আর াবাল িমিনমাম হল পুেরা ােফর এমন একটা পেয় সটাই সবিন িব ু।

আবার আমরা চােখ পি র উদাহরেণ ব াক কির। ধ ন আপনােক হিলক াের কের এই পেয়ে ছেড় িদেয় িমিনমাম পেয় বর করেত বলা হল। আপিন সাজা যেত থাকেলন এবং লাকাল িমিনমাম বর করেলন। এখন যিদ আপনােক বার বার ঔ পেয়ে ই ছািড় এবং আপিন সাজাই যেত থােকন আপিন েত কটা বার লাকাল িমিনমাম পেয় পেয় লাফালািফ

কের দেবন।

এবার আপনােক র ◌ া মিল হিলক ার থেক এই িব ুেত ছাড়া হল এবং এইবার আপিন আসেলই াবাল পেয়ে যেত পারেবন।

142

িলিনয়ার িরে শন পব-২ ও িডেয় িডেস

143

মাি ভ ািরেয়বল িলিনয়ার িরে শন

মাি ভ ািরেয়বল িলিনয়ার িরে শন গত পব েলােত আমরা দেখিছলাম িসে ল ভ ািরেয়বল িবিশ সমস া েলােত কীভােব িলিনয়ার মেডল িফট করেত

হয়। আজেক আমরা দখব, সমস ািট যিদ মাি ভ ািরেয়বল / কলাম / িফচার িবিশ হয় তাহেল তার অ ানালাইিসসটা কমন হেব।

মাি ভ ািরেয়বল িবিশ ডটােসট কাজ

র আেগ ডটােসটটা একনজর দখা যাক, Size (

Number of Bedrooms

)

Number of floors

Age of home (years)

Price ($1000)

2104

5

1

45

460

1416

3

2

40

232

1534

3

2

30

315

852

2

1

36

178

ল ণীয় ল করেল দখা যােব, আেগর মত ইনপুট ভ ািরেয়বল আর একটা নাই। বরং অেনক েলা, তারমােন এখন আর

আমরা িফচার ধু ধরেলই হেব না। এখন আমােদর িতটা কলাম ম ােথেমিটক াল নােটশন িদেয় আলাদা করেত হেব যন আমরা বুঝেত পাির কানটা আসেল কান কলাম। এটা করার জন আমরা িত কলােমর জন এর সাবি ইে



িদেয় কলাম না ার বসাব। সুপারি ে রা (Row) ইে

বসেব এবং সাবি ে বসেব কলাম (Column)

উদাহরণ: ( ধু থম Row এর জন )

144

মাি ভ ািরেয়বল িলিনয়ার িরে শন তাহেল তম ইনপুট ভ ািরেয়বল হেব

এবং তম আউটপুট ভ ািরেয়বল হেব

২য় উদাহরণ আমরা যিদ ি তীয় সািরর ইনপুট ভ ািরেয়বল েলােক ম াি ে সাজােত চাই তাহেল সটা হেব এইরকম, যেহতু আমরা িনিদ কান Columwise ভ ািরেয়বল িবেবচনা করিছ না, সব েলা ভ ািরেয়বল িনেয় একিট ম াি তাই আমােদর আলাদা কের সাবি

বসােনার মােন নই।

তির কেরিছ

এবং ি তীয় সািরর আউটপুট হেব,

আশা কির তাহেল তৃতীয় ও চতুথ সািরর ম াি আমরা সরাসির চেল যাব মেডল িবি ংেয়।

নােটশন কী হেব বুঝেত পেরেছন। নােটশন বাঝা শষ, এবার

হাইেপািথিসস (Hypothesis) আেগর হাইেপািথিসস িছল এটা,

এটা িদেয় আমােদর এই মাি ভ ািরেয়বল সেট কাজ করেব না। তাহেল উপায়? ঁ, উপায় আেছ, সটা হল িতটা ভ ািরেয়বেলর আেগ একটা কের নতুন প ারািমটার ণ কের দওয়া।

এখন আমরা িথটার িবিভ মান ধের ভালম িডকশন করেত পারব, যমন,

এই সমীকরণ

িসিরয়াসিল নয়ার িকছু নাই, এটা িচ াভাবনাহীন উদাহরণ।

আবারও গিণত ভেয়র িকছু নই, আমরা এখােন বিসক ম ােথেমিটক াল নােটশন িনেয়ই আেলাচনা করেত বেসিছ। কারণ

নােটশন েলা বুঝেল General Purpose Machine Learning এর িথওির বুঝেত সমস া হেব না, আিমও

শটকােট িলখেত পারব, আপিনও বুঝেত পারেবন।

145

মাি ভ ািরেয়বল িলিনয়ার িরে শন

হাইেপািথিসস মিডিফেকশন আমরা সমীকরণ ম াি

এ মাি ভ ািরেয়বল হাইেপািথিসস মেডলটা দখেত পাি । কথা হল, আমরা যিদ সটােক

আকাের সাজােত চাই তাহেল িবশাল একটা সমস ায় পড়ব। কারণ, হাইেপািথিসস এর প ারািমটার

হেয়েছ

থেক, িক ভ ািরেয়বেলর রা

হেয়েছ

থেক। তারমােন মেডল প ারািমটােরর সংখ া কলােমর

সংখ ার চেয় বিশ। ম াি ে র যাগ িবেয়াগ করেত হেল ডাইেমনশন সমান হেত হয়, ম াি করার জন তাই আমরা সমীকরণ

ক একটু মিডফাই করব।

আমরা সমীকরণ

ক িলখেত পাির এভােব,

যিদ আমরা

ধির তাহেল সমীকরণ

আমরা

অপােরশন েলা কাযকর

এবং

এর মেধ পাথক থাকেব না।

ও ক যিদ সংখ ক ভ ািরেয়বেলর ম াি ে রাখেত চাই তাহেল আমরা িলখেবা এভােব,

একই ভােব িথটা প ারািমটার েলােক আমরা যিদ ম াি

আকাের িলিখ তাহেল দখােব এরকম,

কন হাইেপািথিসস মিডফাই করা হল? ম াি দুইটা ম াি

মাি ি েকশন : ল না ার ১

আমরা যিদ

ণ করার থম শত হল, থম ম াি ে র কলাম সংখ া ি তীয় ম াি ে র রা সংখ ার সমান হেত হেব। না বসাতাম তাহেল দুইটার ডাইেমনশন কখনই সমান হত না। অবশ এখনও আমরা ি তীয় ম াি

অথাৎ, ক া েপাজ কির নাই, তাই একটু উলট পালট লাগেত পাের। ডাইেমনশন সমান করার আেরকটা সলু শন হেত পারত, আমরা যিদ একা ই

উিঠেয় িদতাম। িক প ারািমটার উঠােনা বুি মােনর কাজ নয়। আমােদর যিদ

না লােগ আমরা সটার মান বিসেয় িদেলই হে ।

146

মাি ভ ািরেয়বল িলিনয়ার িরে শন

ম াি

মাি ি েকশন উদাহরণ:

িলিনয়ার অ ালেজ া মেন না থাকেল এটা একটা সামান আইওয়াশ িহেসেব িনেত পােরন, িনেচর সমীকরেণ,

ধির,

এবং

আমরা পুেরা িজিনসটােক তাহেল এভােব ম াি

আকাের িলখেত পাির,

তারমােন,

িক , উদাহরেণ, একটা কলাম ও আেরকটা রা ম াি ম াি

। তাই ণ করার জন একটা কলাম ম াি

। িক আমরা যসব ভ ািরেয়বল িনেয় কাজ করিছ দুইটাই কলাম

েক রা ম াি ে কনভাট কের িনেত পাির। এই কনভাশেনর নাম

হল Transpose করা। া েপাজ করা খুবই সহজ, ম াি ে র রা িলেক কলাম আকাের সাজােল িকংবা কলাম েলােক রা আকাের সাজােলই হেব।

আমােদর এখােন মিডফাই করেত হেব িথটা ম াি

এখােন সুপারি

েক, সুতরাং

T িদেয় া েপাজ অপােরশন বুঝােনা হেয়েছ।

হাইেপািথিসস ম াি

নােটশেন

147

মাি ভ ািরেয়বল িলিনয়ার িরে শন আশাকির ভালমত বারড হেয় গেছন, যাই হাক আিটিফিশয়াল ইে িলেজ , ডট সােয় যটাই হাক না কন; িলিনয়ার অ ালেজ া ছাড়া এক মূ তও চেল না। ইেমজ েসিসং শখার সময়ও একগাদা ম াি ঘাঁটাঘাঁিট করা লাগেব।

বজড ম াথ িনেয়

মিডফাইড িডেয় িডেস মাি ভ ািরেয়বল িরে শেনর

ে িডেয় িডেসে র অ ালগিরদমও পিরবিতত হেব।

আেগর অ ালগিরদমটা িছল, repeat until convergence {

}

যখােন,

যখন, Repeat {

}

পিরবিতত সূ , যখন Repeat {

}

148

মাি ভ ািরেয়বল িলিনয়ার িরে শন যেহতু, একািধক ভ ািরেয়বেলর জন ,

চলেব, }

পেরর পেব আমরা পাইথেন কাড িলখব।

149

াি ক াল িলিনয়ার িরে শন

াি ক াল িলিনয়ার িরে শন : িডেয় িডেস আমরা আজেকর অধ ােয় িলিনয়ার িরে শন মেডল অবশ ই Numpy স

াচ থেক তির করা িশখব। তেব এটা করার আেগ আপনার

েক ধারণা থাকেত হেব। না থাকেল এই অধ ায়িট পেড় িনন। তাহেল

করা যাক।

ডটােসট িলিনয়ার িরে শন মেডল িব করার জন আিম এখােন ব বহার করিছ Andrew Ng এর Machine Learning

কােসর িলিনয়ার িরে শন চ া ােরর ডটােসট। তেব সামান একটু পাথক আেছ। আমার দওয়া ডটােসট িকছু টা

পিরবিতত এবং পিরবতনটা হল থম সািরেত ধু দুইটা কলাম যাগ কের িদেয়িছ। ডটােসট দখেত বা ডাউনেলাড করেত এখােন ি ক ক ন

ডটা িভজুয়ালাইেজশন সব থম আমরা য কাজিট করব, সটা হল আমার সংগৃ হীত ডটােসট এর একিট াটার ট করা। আিম এখােন Seaborn লাইে

ির ব বহার করব। Seaborn লাইে িরিট matplotlib এর উপর িভি কের তির করা। ডটা

িভজুয়ালাইেজশন সহজ করার জন অেনক িফচার এেত িব -ইন আেছ।

Seaborn ই টেলশন কমা উইে া বা টািমনােল িনেচর কমা িট রান ক ন, pip install seaborn

Seaborn ব বহার কের াটার ট তির করা

150

াি ক াল িলিনয়ার িরে শন

import csv import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns import pandas as pd import numpy as np # Loading Dataset with open('ex1data1.txt') as csvfile: population, profit = zip(*[(float(row['Population']), float(row['Profit'])) for ro w in csv.DictReader(csvfile)]) # Creating DataFrame df = pd.DataFrame() df['Population'] = population df['Profit'] = profit # Plotting using Seaborn sns.lmplot(x="Population", y="Profit", data=df, fit_reg=False, scatter_kws={'s':45})

ট আউটপুট

151

াি ক াল িলিনয়ার িরে শন

ব াখ া ডটােসট লাড ও ডটাে ম তির থেমই আিম ডটােসট লাড কের দুইটা পাইথন িলে ইনপুট ডটা Population ও আউটপুট ডটা / টােগট /

লেবল িনলাম Profit িলে । দুইটা িল িদেয় একটা পা াস ডটাে ম তির করলাম। িটং lmplot ফাংশন ব

বহার কের াটার ট তির করলাম যখােন x ও y িদেয় যথা েম X ও Y অে

লেবিলং করলাম এবং তিরকৃত ডটাে মেক ডটা িহেসেব পাস করলাম। fit_reg এর মান যিদ True হত

তাহেল াফিট দখাত এমন, অথাৎ Seaborn একটা িলিনয়ার মেডলেক িফট কের দখাত। িক আমােদর মূল

কাজটা সটাই, িডেয় িডেস অ ালগিরদম ব বহােরর মাধ েম করেত হেব। scatter_kws={'s':45} িদেয় আিম াটার ডট েলার আকার পিরবতন করলাম।

152

াি ক াল িলিনয়ার িরে শন

fit_reg=True হেল

ট যমন দখাত

ক ক ালকুেলশন ও িডেয় িডেস : ম াি অপােরশন এই পয আমরা িডেয় িডেস ও ক ক ালকুেলশেনর ব াপার স াপার দখলাম। িক কাড এ হাত দওয়ার আেগ, িথওির টা আেরকটু ভালভােব ঝালাই দওয়া দরকার। কাড লখার চাইেত

পূণ িবষয় হল

িভজুয়ালাইেজশন। চলুন আমরা একটু িভজুয়ালাইজ কের িডেয় িডেস েয়াগ কির।

ক ক ালকুেলশন 153

াি ক াল িলিনয়ার িরে শন আমরা ক ক ালকুেলশেনর সূ ানুযায়ী জািন,

এই ফরমুলা অ া াই করেত গেল বুঝেতই পারেছন, লুেপর ব বহার লাগেব। িক না, আমরা কাজটা Numpy ব বহার কের খুব সহেজই করেত পাির ম াি

অপােরশেনর মাধ েম। কান নােটশেনর মােন কী সটা আেগর অধ ায় েলােত

বলা আেছ। তাও আিম একটা সাধারণ উদাহরেণর মাধ েম আবার দখাই। ধির আমার ডটােসট এইটা, আয়

ব য়

1

10

5

2

20

10

3

30

15

যখােন,

িলিনয়ার িরে শন সূ ,

িক আমােদর িথটা এর ডাইেমনশন

এবং

অথাৎ, দুইটা সাির এবং একটা কলাম। ম াি

এর ডাইেমনশন িসে ল ভ ািরেয়ল িলিনয়ার িরে শেনর

যু কির। অথাৎ,

আকাের,

ে তাই আমরা একিট এিলেম িবিশ কলাম

তাহেল আমােদর হাইেপািথিসস হেব িতটা কলােমর জন ,

154

াি ক াল িলিনয়ার িরে শন

ম াি

আকাের িলখেল,

আউটপুট বা টােগট ম াি

ম াি

,

আকাের ক ালকুেলেটড ক সূ

বািড়র কাজ িডেয় িডেস ফরমুলা ম াি

এই ম াি

আকাের িলখুন।

ক ালকুেলশনটাই আমরা পাইথেন িলখব। এসব কারেণই মিশন লািনংেয়র ক ালকুলশন ত

বুঝেত ও করেত িলিনয়ার অ ালেজ ার সিলড ফাউে শন দরকার। য ভাল িলিনয়ার অ ালেজ া ও ক ালকুলাস বােঝ তার জন মিশন লািনংেয়র অ ালগিরদম অ া াই করা খুবই সহজ।

Numpy ব বহার কের ক ক ালকুেলশন ও িডেয় িডেস অ ালগিরদম অ া াই করার প িত

155

াি ক াল িলিনয়ার িরে শন এখন আমরা Numpy ব বহার কের 97 অবজারেভশেনর ডটােসট এর ক ক ালকুেলশন ও িডেয় িডেস এর ফাংশন িলখব।

পাইথেন ক ক ালকুেলশেনর ফাংশন # Here, X, y and theta are 2D numpy array def computeCost(X, y, theta): # Getting number of observations m = len(y) # Getting hypothesis output hypothesis = X.dot(theta) # Computing loss loss = hypothesis - y # Computing cost cost = sum(loss**2) # Returning cost return (cost / (2 * m))

কতটা অবজারেভশন আেছ সটা একটা m এ রাখলাম হাইেপািথিসস ভ ালু বর করলাম loss

বর করলাম, যটা িকনা আসল মান ও িডে ড মােনর িবেয়াগফল

cost

বর করলাম, যটা loss এর বেগর যাগফল

average cost িরটান করলাম

পাইথেন িডেয় িডেস ক ালকুেলশন ফাংশন

156

াি ক াল িলিনয়ার িরে শন

def gradientDescent(X, y, theta, alpha, iterations): cost = [] m = len(y) for i in range(iterations): # Calculating Loss loss = X.dot(theta) - y # Calculating gradient gradient = X.T.dot(loss) # Updating theta theta = theta - (alpha / m) * gradient # Recording the costs cost.append(computeCost(X, y, theta)) # Printing out print("Cost at iteration {0} : {1}".format(i, computeCost(X, y, theta))) return (theta, cost)

আমরা একটা িনিদ ইটােরশন রে র মেধ প ারািমটার আপেডট করব, অথাৎ, ক একটা িনিদ পিরমাণ কেম গল সটা আমােদর দখার িবষয় না, একটা িনিদ ইটােরশেন কতটুকু ক কেম গল। তাই আমরা ইটােরশন

িফ করলাম। আেরকটা উপায় হেত পাের, একটা িনিদ ক হওয়ার আগ পয ইটােরশন চািলেয়ই যােব। িক সটা অেনক

ে িবপদজনক হেত পাের যটা আমরা একটু পেরই দখেত পারব।

তিরকৃত ফাংশন ব বহার কের এরর ক ালকুেলশন ট বানােনা

157

াি ক াল িলিনয়ার িরে শন

# Converting loaded dataset into numpy array # Example: # X = [[1, 10], # [1, 20], # [1, 30]] # X = np.concatenate((np.ones(len(population)).reshape(len(population), 1), population.r eshape(len(population),1)), axis=1) # Example # y = [[1], # [2], # [3]] y = np.array(profit).reshape(len(profit), 1) # Creating theta matrix , theta = [[0], [0]] theta = np.zeros((2, 1)) # Learning rate alpha = 0.1 # Iterations to be taken iterations = 1500 # Updated theta and calculated cost theta, cost = gradientDescent(X, y, theta, alpha, iterations)

আউটপুট Cost at iteration 0 : 5.4441412681185035 Cost at iteration 1 : 5.409587207509947 Cost at iteration 2 : 5.376267659177092 Cost at iteration 3 : 5.344138517723003 Cost at iteration 4 : 5.313157253503435 Cost at iteration 5 : 5.2832828563299445 Cost at iteration 6 : 5.254475781184327 ...... ...... ...... Cost at iteration 23 : 177385094.9287188 Cost at iteration 24 : 9252868248.562147 Cost at iteration 25 : 482653703983.4108 Cost at iteration 26 : 25176474129882.656 Cost at iteration 27 : 1313270455375155.5 Cost at iteration 28 : 6.850360698103145e+16 Cost at iteration 29 : 3.573326537732157e+18

িডেয় িডেস ফরমুলা কাজ করেছ না কন?

158

াি ক াল িলিনয়ার িরে শন িডেয় িডেস অ ালগিরদেমর মূল কাজ ক িমিনমাইজ করা, িক ইটােরশন 29 এই দখুন ক বেড় কত

হেয়েছ! এটা হওয়ার কারণ কী?

আসল কালি ট : লািনং রট আমরা যিদ লািনং রট আেরকটু কিমেয় কাড রান কির তাহেল, # Creating theta matrix , theta = [[0], [0]] theta = np.zeros((2, 1)) # Learning rate alpha = 0.01 # Iterations to be taken iterations = 1500 # Updated theta and calculated cost theta, cost = gradientDescent(X, y, theta, alpha, iterations)

আউটপুট Cost at iteration 0 : 6.737190464870004 Cost at iteration 1 : 5.9315935686049555 Cost at iteration 2 : 5.901154707081388 Cost at iteration 3 : 5.895228586444221 Cost at iteration 4 : 5.8900949431173295 Cost at iteration 5 : 5.885004158443647 Cost at iteration 6 : 5.879932480491418 Cost at iteration 7 : 5.874879094762575 Cost at iteration 8 : 5.869843911806385 .... .... .... Cost at iteration 1497 : 4.483434734017543 Cost at iteration 1498 : 4.483411453374869 Cost at iteration 1499 : 4.483388256587726

এবার দখুন ক আসেলই কমেছ। অথাৎ আমােদর িডেয় িডেস অ ালগিরদম িঠকঠাক কাজ করেছ। লািনং রট কমােতই ওভার িটং হে না এবং িডেয় িহল বেয়ই স িনেচ নামেছ!

তাহেল কী সমস া হেয়িছল? আপিন যিদ এই অধ ায়িট পেড় থােকন তাহেল বুঝেবন লািনং রট বিশ হওয়ার কারেণ স িমিনমাম পেয়ে কনভাজ না কের ওভার ট হওয়ােত ধু উপেরর িদেক যাি ল।

159

াি ক াল িলিনয়ার িরে শন

ক বনাম ইটােরশন াফ import matplotlib.pyplot as plt plt.plot([i for i in range(1500)], cost, linewidth=1.9) plt.xlabel("Iterations") plt.ylabel('Cost') plt.show()

আমরা যিদ ইটােরশন vs ক এর াফ ট কির তাহেল এটা দখােব এইরকম,

আউটপুট

160

াি ক াল িলিনয়ার িরে শন

মাি ভ ািরেয়বল িলিনয়ার িরে শন আমরা এত ণ িসে ল ভ ািরেয়বল িলিনয়ার িরে শন দখলাম। মাি ভ ািরেয়বেলর তেব কলাম সংখ া বেড় যােব। তােতও ম াি পরবতী পেব িডেয় িডেস ম াি করব।

নােটশন একই থাকেব।

ে কাজ পুেরাপুির একই,

নােটশেন কাশ ও মাি ভ ািরেয়বল িলিনয়ার িরে শেনর জন মেডল তির

161

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর গত পেব আমরা দেখিছলাম িসে ল ভ ািরেয়বল িলিনয়ার িরে শেনর ফরমুলা ও পাইথেন ইি েমে শন। এই পেব দখব মাি ভ ািরেয়বল বা মাি িফচার িবিশ িরে শন সমস া কীভােব িডেয় িডেস অ ালগিরদেমর মাধ েম

স ভ কের। তেব এখােন িসনেথিটক ডটা িদেয় সবিকছু আেলাচনা করা হেব। িসনেথিটক ডটা হল কান ম ােথেমিটক াল ফরমুলা ব বহার কের জনােরট করা ডটা। আজেকর আেলাচ কে

দখা যাক।

িডেয় িডেসে র কারেভদ জানা খুবই দরকারী। ায় সময়ই ফাংশন অি মাইেজশেনর

বিশ পিরমােণ ব ব ত হয়। সাধারণত িলিনয়ার িরে শেনর

ে এই কথা েলা

ে এেদর ব বহার দখােনা হয় না, িক িস

মেডল িদেয়ই অ ালগিরদম েলা ভাল বাঝা যায় তাই এখােন আেলাচনা করা হল।

ল িলিনয়ার

আেলাচ িবষয়ব : িডেয় িডেস ফরমুলা িডরাইভ করা

িসনেথিটক ডটা

ত করা

ব াচ িডেয় িডেস (Batch Gradient Descent),

াক াি ক িডেয় িডেস (Stochastic

Gradient Descent) ও িমিন-ব াচ িডেয় িডেস (Mini-batch Gradient Descent) এর সুিবধাঅসুিবধা ও পাইথেন ইি েমে শন

িলিনয়ার িরে শেনর জন িডেয় িডেস িডেয় িডেস অ ালগিরদম বেল প ারািমটােরর ভ ালু আপেডট করেত হেব এভােব,

যখােন, হল প ারািমটার িদেয় বুঝাে কততম প ারািমটার হল লািনং রট

িদেয় ক ফাংশন বুঝােনা হে

162

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর আবার যখােন হে রা সংখ া বা ডটা কত েলা আেছ হে হাইেপািথিসস ফাংশন যটা আমরা পের িডফাইন করব হল ডটােসট এ দয়া আউটপুট ভ ালু হল ইনপুট ডটা

িডেয় িডেস ফরমুেলশন আেগ দখােনা হেয়িছল কীভােব ম াি ে ক ক ালকুেলট কের িক িডেয় িডেস অ ালগিরদেম ক ফাংশনেক ডিরেভিটভ করেল কী আেস সটা দখােনা হয় িন।

করা যাক।

িলিনয়ার িরে শেনর হাইেপািথিসস সাধারণত এরকম হয়,

যখােন,

যিদ ইনপুেটর িফচার বা কলাম সংখ া হয় দুইটা। ডটােসট এ দুইটা িফচার থাকেলও আমরা এক া একটা কলাম সট কের নব। ম াি ে ফরমুেলট করার জন এই এর মােঝ

বা িহেসেব িলখব, দুইটার মােন একই )

আমরা হাইেপািথিসস ফাংশনেক এভােব আরও সংি

ম াি

অপিরসীম। (সাইড নাট: ইনপুট ভ ািরেয়বেল মােঝ

আকাের িলখেত পাির,

আকাের,

িবখ াত ডটােসটটা আবার আিন, বািড়র আকার (

বািড়র দাম (lac)

ঘর সংখ া

) (sq-ft)

1200

5

120

1300

6

125

1400

7

130

163

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর এখােন,

কারণ Row মা িতনটা। এবং িফচার দুইটা

। যেহতু

সহ িতনটা তাই

ডটােসট পাওয়ার পের আমরা এক া একটা িফচার কলাম জুেড় িদেল হেব এরকম, বািড়র আকার (

ঘর সংখ া

) (sq-ft)

বািড়র দাম (lac)

1

1200

5

120

1

1300

6

125

1

1400

7

130

এই ফরমুলােত আমােদর আেগ বর করেত হেব,

এটার মান কত। এটার মান বর করেত পারেল তারপর

অ ালগিরদেম বিসেয় িদেলই হেব।

এখােন

আসেব শূন ।

কারণ আউটপুট মান েলা ভ ািরেয়বল না, বক। তাই তােদর ডিরেভিটভ িনেল ফলাফল

শেষর লাইেন একিট সমস া চেল এেসেছ, সটা হল হাইেপািথিসস ফাংশেনর ডিরেভিটভ কীভােব বর করব। সটা বর করার জন এ ে শন আরও ভে লখা যাক।

এই ফাংশেনর পািশয়াল ডিরেভিটভ আমরা

এর সােপে িনেল, (মেন আেছ তা? পািশয়াল ডিরেভিটভ য

ভ ািরেয়বেলর সােপে িনব, সটা বােদ সবাইেক বক িহেসেব গণনা করেত হেব।)

164

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

সব েলাই বক

এর কােছ, তাই

সুতরাং,

একইভােব,

জনােরল ফেম,

এই সূ এবার ক ফাংশেনর ডিরেভিটেভ বিসেয় পাওয়া যায়,

িসে ল প ারািমটার আপেডেটর িডেয় িডেস ফরমুলা স

ূণ েপ িলখেল,

অথবা এভােবও লখা যায় যিদ আিম আউটপুট আেগ বসাই,

নােটশেন যােত সমস া না হয় তাই আেরকবার ি য়ার করা যাক,

165

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর িক ডটােসট এর



। অথাৎ উপেরর উদাহরণ অনুযায়ী,

হল ডটােসট এর

রা এর

রা হল,

িফচার। অথাৎ িকনা,

িডেয় িডেস ইি েমে শেন এই িজিনসটা খুবই

কান ব াপারই না।

পূণ। এই পয বুেঝ থাকেল ইি েম করা বা কাড বাঝা

এই অ ালগিরদম আিম তা কান মেডেলর উপর অ া াই করব, আর য মেডল িব করব সটা িনভর করেব ডটােসেটর উপর। একটা িনিদ কারেণ আিম বাইেরর ডটােসট ব বহার না কের িসনেথিটক ািল ডটােসট সটার উপর অ ালগিরদম অ া াই করব।

িসনেথিটক ডটা ডটা িব করার জন আিম একটা িস

যখােন

ত কের

তকরণ ল ফরমুলা ব বহার করব। সটা হল এরকম,

যেকান ভ ালু হেত পাের।

import numpy as np def make_fake_data(x1, x2): # y = 5+2*x1+3*x2 return float(5 + 2 * x1 + 3 * x2) # first feature of input data, col - 1 feature_1 = np.array([float(i) for i in range(1, 21)]) # Second feature of input data, col - 2 feature_2 = np.array([float(i) for i in range(21, 41)]) # Output y = np.array([ make_fake_data(f1, f2) for f1, f2 in zip(feature_1, feature_2) ])

বলাই বা ল , এখােন

হল ইনপুট ডটার িফচার বা কলাম। এই ফরমুলা িদেয় বানােনা ডটােসট হেব,

166

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

1

21

70

2

22

75

3

23

80

4

24

85

...

...

...

20

40

165

যেহতু ইনপুট িফচার দুইটা সে ে আমােদর হাইেপািথিসস মেডল হেব,

আমরা এেক ম াি ে ফরমুেলট না কের থেম প ারািমটারওয়াইজ ইটােরিটভ প িতেত স ভ করব এবং পের ম াি

আকাের িকভােব স ভ কের সটা দখব। তাই আমরা

িফচার ব বহার কিরিন।

def predict(_theta_0, _theta_1, _theta_2, x1, x2): return _theta_0 + _theta_1 * x1 + _theta_2 * x2

ট, আমােদর হাইেপািথিসস ফাংশন আেছ, ইনপুট ডটা আর আউটপুট ডটা আেছ, আমােদর এখন অজানা এর মান বর করেত হেব ধু।

ক ক ালকুেলশন ফাংশন: িত ইটােরশেন ক কত সটা ক ালকুেলট করেল আমরা াফ ট কের দখেত পারব এরর আসেলই কমেছ িকনা।

িচরাচিরত ক ফাংশন,

এটােক এবার পাইথন ফাংশন আকাের িলখব,

167

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

def computeCost(t0, t1, t2, f1, f2, y): # Getting number of data m = float(len(y)) loss = [] # Iterating over all of the data for i in range(len(y)): # Getting prediction using the parameter [t0, t1, t2] h = predict(t0, t1, t2, f1[i], f2[i]) # Adding the losses to the list loss.append((h - y[i])**2) return (sum(loss) / (2 * m))

ক বনাম ইটােরশন ট করার ফাংশন এটা আমােদর কােজ আসেব তাই ফাংশন বািনেয় নয়াই ভাল, def plot_cost_vs_iteration(costs): plt.plot([i for i in range(len(costs))], costs) plt.title("Cost vs Iteration") plt.xlabel("Iteration") plt.ylabel("Cost") plt.show()

িডেয় িডেসে র সাধারণত িতনরকম কারেভদ দখা যায় 1. ব াচ িডেয় িডেস (Batch Gradient Descent) 2.

াক াি ক িডেয় িডেস (Stochastic Gradient Descent)

3. িমিন-ব াচ িডেয় িডেস (Mini-Batch Gradient Descent)

ব াচ িডেয় িডেস থেম

এর মান বর করব ব াচ িডেয় িডেস িদেয়, তারপর বািক অ ালগিরদম িদেয়ও বর করব।

ব াচ িডেয় িডেসে র ফরমুলা,

168

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

# Parameters to be updated _theta_0 = 0.0 _theta_1 = 0.0 _theta_2 = 0.0 # Data Length m = float(len(y)) # Epoch [No. of iterations] epoch = 200 # Learning Rate alpha = 0.001 # Costs costs = [] # Batch Gradient Descent for i in range(epoch): _theta_temp_0 = _theta_0 + (alpha / m) * sum([(y[k] - predict(_theta_0, _theta_1, _theta_2, feature_1[k], feature_2[k])) for k in range(len(y)) ]) _theta_temp_1 = _theta_1 + (alpha / m) * sum([(y[k] - predict(_theta_0, _theta_1, _theta_2, feature_1[k], feature_2[k])) * feature_1[k] for k in range(len(y)) ]) _theta_temp_2 = _theta_2 + (alpha / m) * sum([(y[k] - predict(_theta_0, _theta_1, _theta_2, feature_1[k], feature_2[k])) * feature_2[k] for k in range(len(y)) ]) _theta_0 = _theta_temp_0 _theta_1 = _theta_temp_1 _theta_2 = _theta_temp_2 # Calculating cost cost = computeCost(_theta_0, _theta_1, _theta_2, feature_1, feature_2, y) # Saving it to the list for future use costs.append(cost) # Printing cost after each epoch print("Cost: {}".format(cost)) # Plotting Cost vs Iteration Graph plot_cost_vs_iteration(costs)

169

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর এখােন কনভােজ শত না বিসেয় ইটােরশন িদেয় িলিমট কের দয়া হল।

ক বনাম ইটােরশন ট

ব াচ িডেয় িডেসে প ারািমটার আপেডট

170

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

ব াচ িডেয়ে র মূল অসুিবধা হল িতবার প ারািমটার ভ ালু আপেডেটর সময় বার বার স করেত হয় এবং িত প ারািমটােরর জন ।

ূণ ডটােসট ইটােরট

এই অসুিবধা দুর করার জন আেরকিট অ ালগিরদম ায়ই ব বহার করা হয় যার নাম Stochastic Gradient Descent।

াক াি ক িডেয় িডেস Stochastic এর মােন হল কান িকছু র ◌ া মিল িডটারমাইন করা। এখােন আমরা ক ফাংশনেক অি মাইজ করব ডটােসট এর এেককটা রা িনেয়। আেগ কাড দখা যাক,

171

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

# Parameters to be updated _theta_0 = 0.0 _theta_1 = 0.0 _theta_2 = 0.0 # Data Length m = float(len(y)) # Epoch [No. of iterations] epoch = 10 # Learning Rate alpha = 0.01 # Costs costs = [] # Initializing Stochastic Gradient Descent for i in range(epoch): # Iterate over all of the data for j in range(len(y)): # Update theta_0 first _theta_0 = _theta_0 + (alpha / m) * (y[j] - predict(_theta_0, _theta_1, _theta _2, feature_1[j], feature_2[j])) # Use updated theta_0 to update theta_1 _theta_1 = _theta_1 + (alpha / m) * (y[j] - predict(_theta_0, _theta_1, _theta _2, feature_1[j], feature_2[j])) * feature_1[j] # Again use theta_1 to update theta_2 _theta_2 = _theta_2 + (alpha / m) * (y[j] - predict(_theta_0, _theta_1, _theta _2, feature_1[j], feature_2[j])) * feature_2[j] # Calculating cost cost = computeCost(_theta_0, _theta_1, _theta_2, feature_1, feature_2, y) # Saving it to the list for future use costs.append(cost) # Printing cost after each epoch print("Cost: {}".format(cost)) # Plotting Cost vs Iteration Graph plot_cost_vs_iteration(costs)

আমরা



ূণ ডটােসট এ ব বহার না কের, িত

ধের প ারািমটার আপেডট কির।

ক বনাম ইটােরশন াফ 172

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

াক াি ক িডেয় িডেস কীভােব কাজ কের?

িমিন ব াচ িডেয় িডেস 173

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর ব াচ িডেয় িডেস + িডেস ও

াক াি ক িডেয় িডেস = িমিন ব াচ িডেয় িডেস ! এর মােন, ব াচ িডেয়

াক াি ক িডেয় িডেস উভয় অ ালগিরদেমর ভাল িজিনস েলা িনেয় এই অ ালগিরদম ডেভলপ

করা হেয়েছ। ওভার ট বা আ ার ট সমস া ও কি জন ই মূলত এর উৎপি ।

উেটশনাল কে ি িটর মেধ

করার

কাড ও আউটপুট দখা যাক।

174

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

# Parameters to be updated _theta_0 = 0.0 _theta_1 = 0.0 _theta_2 = 0.0 # Data Length m = float(len(y)) # Epoch [No. of iterations] epoch = 20 # Learning Rate alpha = 0.01 # Costs costs = [] # Mini Batch Gradient Descent mini_batch_size = 5 mini_batches = int(m / mini_batch_size) n = 0 for i in range(epoch): for batch in range(1, mini_batches + 1): n = batch * mini_batch_size for j in range(n): _theta_0 = _theta_0 + (alpha / m) * (y[j] - predict(_theta_0, _theta_1, _t heta_2, feature_1[j], feature_2[j])) _theta_1 = _theta_1 + (alpha / m) * (y[j] - predict(_theta_0, _theta_1, _t heta_2, feature_1[j], feature_2[j])) * feature_1[j] _theta_2 = _theta_2 + (alpha / m) * (y[j] - predict(_theta_0, _theta_1, _t heta_2, feature_1[j], feature_2[j])) * feature_2[j] # Calculating cost cost = computeCost(_theta_0, _theta_1, _theta_2, feature_1, feature_2, y) # Saving it to the list for future use costs.append(cost) # Printing cost after each epoch print("Cost: {}".format(cost)) # Plotting Cost vs Iteration Graph plot_cost_vs_iteration(costs)

ক বনাম ইটােরশন াফ

175

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর

িমিন ব ােচ ডটােসট ভাগ করা এখােন রা হে ২০ টা, এেক আিম ৫িট ব ােচ ভাগ কেরিছ তাই িত ব ােচ রা সংখ া বা ডটা সংখ া হল ৪। অভারঅল ধারণা নয়ার জন িনেচর ডায়া ামটা দখা যাক।

176

মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেস অ ালগিরদেমর রকমেফর এই পব এই পয ই। পরবতী পেব িডেয় িডেসে র নরমাল িরে েজে শন দখােনা হেব।

177

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম গত চ া াের আেলাচনা করা হেয়িছল িডেয় িডেস অি মাইেজশন অ ালগিরদেমর িবিভ কারেভদ িনেয়। এই চ া াের আেলাচনা করা হেব িলিনয়ার িরে শেনর

ে িডেয় িডেসে র নরমাল ফম (Normal Form) িনেয়।

পাশাপািশ িনউেমিরকাল সলু শন কন িনভরশীল ও কী কী কারেণ Normal Form ফইলড হেত পাের সটাও িব ািরত ব াখ া করা হেব।

িবগত কেয়কটা অধ ােয় িলিনয়ার িরে শেনর প ারািমটার আপেডেটর

ে িনউেমিরকাল অি মাইেজশেনর সাহায

নয়া হেয়িছল। িক এমন কান উপায় আেছ যার মাধ েম ডটােসট বারবার ইটােরট না কের একবারই ক ালকুেলশন

কের প ারািমটােরর মান িনধারণ করা যায়? আমরা িক কান চালািক খািটেয় এর ম াথেমিটক াল এ ে শন বর করেত পাির?

সটা করার আেগ দখেত হেব আমােদর হােত কী কী তথ আেছ।

ক ফাংশন ক ফাংশেনর সূ দখেত দখেত িন য়ই আপনারা িবর । িক বুঝেত হেব, মিশন লািনংেয়র মূল উে শ ই িক

ক ফাংশন িডফাইন কের তার অি মাইেজশন করা। িবিভ কােজর জন ক ফাংশন িবিভ রকম হয়, আর এটা গেবষণার একটা িবশাল অংশ জুেড় আেছ। কথা না বািড়েয় লখা যাক,

ম াি

আকাের ক ফাংশন,

নাট: ডাবল ভািটেকল বার িদেয় Norm বুঝােনা হেয়েছ। যিদ সাধারণত বলা না থােক তাহেল ধের িনেত হেব Norm টা লেভল এর। অথাৎ, Euclidean Distance।

হাইেপািথিসস ফাংশন

178

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম ম াি

ফরম ােট,

ইন ডটার সােপে ,

সুতরাং ধির,

আরও িকছু

পূণ তথ :

ক ফাংশন কনেভ আকােরর তাই এর সবিন িব ু আেছ কনেভ ও কনেকভ ফাংশন দখেত এরকম,

এর একটা িনিদ মান আেছ যার জন ক ফাংশেনর মান শূন

কান ফাংশেনর সবিন ও সেবা িব ুেত ঢাল শূন বা, ঔ িব ুেত ফাংশেনর ডিরেভিটেভর মান শূন

179

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম

এটাই কাজ আগােনার জন যেথ । আমরা যেহতু জািন ক ফাংশনিট একিট কনেভ ফাংশন এবং এর একিট িনিদ পেয়ে ডিরেভিটভ শূন । তাহেল এই ফাংশেনর ডিরেভিটভ সমান ০ ধের আমরা যিদ কাি

এর জন সমাধান কির তাহেলই আমরা

ত প ারািমটার ভ ালু পেয় যাব। পুেরা কাজটা করেত হেব ইিনং ডটার উপের তাই এখােন

নােটশন িদেয় বাঝােনা হে ডটােসট এর ইিনং ভাগ িদেয় প ারািমটােরর মান বর করা হেব।

অথাৎ িকনা,

উপেরর থেক ম াি

নােটশন ব বহার কের,

ম াি ে র সূ ানুযায়ী, আমরা ম াি





আকাের িলখেত পাির। যখােন একিট যেকান ডাইেমনশেনর

বলেত ম াি ে র া েপাজ বাঝায়। তাহেল উপেরর ক অংশ পিরবতন কের লখা যায়,

180

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম মাঝখােনর টােমর পািশয়াল ডিরেভিটভ এরকম হেব ,

এবং এই

ে ,

>>> X = np.array([[1, 2, 3], [4, 5, 6]]) >>> y = np.array([1, 2]) >>> X.T.dot(y) array([ 9, 12, 15]) >>> y.T.dot(X) array([ 9, 12, 15])

সুতরাং,

িথটার মান বর করেত হেল বািক টাম ডানপােশ িনেয় িথটার সােপে এ ে স করেত হেব,

তাহেল এটাই সই গািণিতক সূ , যার মাধ েম ইটােরশন ছাড়াই িকছু ম াি

অপােরশেনর মাধ েম িথটার কাি

মান পাওয়া যােব। এবং যােক সবাই Normal Form of Gradient Descent নােম চেন!



এই সূ এবার আমরা একটা ডটােসট এর উপর অ া াই করব।

181

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম

from __future__ import print_function # Importing necessary libraries import numpy as np # Loading dataset X = [] with open('ex3x.dat', 'r') as f: for line in f.readlines(): f1, f2 = [float(row) for row in line.split()] # Adding a 1 to add a bias parameter, remember? X = np.append(X, [1, f1, f2], axis=0) num_data = len(X) num_feature = 3 # Reshaping the input data matrix X = X.reshape(47, 3) y = np.array([]) with open('ex3y.dat', 'r') as f: for line in f.readlines(): y = np.append(y, float(line)) # Reshaping output data matrix Y = y.reshape(47, 1)

ডটােসট লাড কের িরেশপ কের িনলাম যােত ম াি

অপােরশন িঠকঠাক করা যায়।

িডেয় িডেস নরমাল ফম অ া াই করা

# Getting parameter value theta = np.linalg.inv(X.T.dot(X)).dot(X.T.dot(Y))

এই একলাইেনর কাড রান করেলই িথটার মান পাওয়া যােব। চমৎকার! তাই না? Note: উপেরর কাড না বাঝা গেল "Numpy পিরিচিত" অধ ায়িট পড়েত হেব।

িডকশন িথটার মান তা পাওয়া গল, এবার সটা িদেয় িড করব কীভােব? সহজ, হাইেপািথিসস ফাংশন অনুযায়ী ডটােসট থেক যেকান

ডটা িসেল কের তার সােথ এর মান এর ডট াডা নব।

182

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম

# If I want to predict for 1st data in the dataset we have then y0 = X[0].dot(theta)

িসিফক ইনেডে র ডটার িডকশেনর জন কাড idx = 0 print("Prediction for row {} in dataset : {}".format(idx + 1, X[idx].dot(theta))) print("Real value for row {} in dataset: {}".format(idx + 1, Y[idx])) print("Difference between actual value and prediction : {}".format(Y[idx] - X[idx].dot (theta))) # Output: # Prediction for row 1 in dataset : [ 356283.1103389] # Real value for row 1 in dataset: [ 399900.] # Difference between actual value and prediction : [ 43616.8896611]

যেহতু আমরা বড় বড় মান িড করিছ তাই

িডফাের খুব একটা খারাপ িডকশন না। মেন

রাখেত হেব, মান যত বড় হেব, ছাট ছাট পিরবতন আমরা ইগেনার করেত পাির।

িতি ত লাইে িরর সােথ এই িডকশেনর তফাৎ কতটা? এই ডটােসট ব বহার কের এখন দখব সাইিকট-লােনর িলিনয়ার মেডেলর িডকশেনর সােথ আমােদর তির মেডেলর িডকশেনর তফাৎ কতটা।

# importing necessary library from sklearn.linear_model import LinearRegression # Select index idx = 0 # Initializing the model lr = LinearRegression() # Fitting the model lr.fit(X, Y) # Predicting using sklearn print("sklearn's prediction for row {} : {}".format(idx + 1, lr.predict(X[idx]).ravel( ))) print("our model's prediction for row {} : {}".format(idx + 1, X[idx].dot(theta))) # output # sklearn's prediction for row 1 : [ 356283.1103389] # our model's prediction for row 1 : [ 356283.1103389]

183

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম অসাধারণ! তারমােন আমরা এমন একটা অ ালগিরদম তির করলাম যটা িদেয় ডটােসট একবার ইটােরট করেলই

আমরা িথটার মান পেয় যাব। িডেয় িডেসে র কানই দরকার নাই! ম ােথেমিটিশয়ানরা কনেভ অি মাইেজশন িনেয় এত িচি ত কন?

তাই িক? আেরকটা উদাহরণ দখা যাক।

পূেবর অধ ােয়র িসনেথিটক ডটার উপের এই ফরমুলা অ া াই কের def make_fake_data(x1, x2): # y = 5+2*x1+3*x2 return float(5 + 2 * x1 + 3 * x2) # first feature of input data, col - 1 feature_1 = np.array([float(i) for i in range(1, 21)]) # Second feature of input data, col - 2 feature_2 = np.array([float(i) for i in range(21, 41)]) # Output y = np.array([ make_fake_data(f1, f2) for f1, f2 in zip(feature_1, feature_2) ]) # Making the input data matrix x = np.array([np.ones(len(feature_1)) ,feature_1, feature_2]).T

এবার আেগর মতই িথটা আপেডট করব এভােব, # Updating theta for our synthetic data theta = np.linalg.inv(x.T.dot(x)).dot(x.T.dot(y))

িসনেথিটক ডটার উপের িডকশন উপেরর কাড রান করেলই িথটার মান পাওয়া যােব, এবার আমরা এই িথটা িদেয় ট কের দখব িডকশন কমন আেস!

184

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম

idx = 0 print("Prediction for row {} in dataset : {}".format(idx + 1, x[idx].dot(theta))) print("Real value for row {} in dataset: {}".format(idx + 1, y[idx])) print("Difference between actual value and prediction : {}".format(y[idx] - x[idx].dot (theta))) # Output # Prediction for row 1 in dataset : 15.9375 # Real value for row 1 in dataset: 70.0 # Difference between actual value and prediction : 54.0625

অ ু ত! এত বােজ িডকশন! বােজই বলা উিচৎ কারণ আমরা ইন ডটার উপেরই িডকশন চালাি , যিদ িঠকঠাক মেডল িফট হয় তাহেল এরর আরও কম আসার কথা। িক এখােন পুেরা আকাশ পাতাল তফাৎ!

িসনেথিটক ডটার উপের সাইিকট-লান লাইে ির িদেয় িডকশন # previous model is now fitted with our synthetic data lr.fit(x, y) idx = 0 # Predicting using sklearn print("sklearn's prediction for row {} : {}".format(idx + 1, lr.predict(x[idx]).ravel( ))) print("our model's prediction for row {} : {}".format(idx + 1, x[idx].dot(theta))) print("Real output of row {} : {}".format(idx + 1, y[idx])) # Output # sklearn's prediction for row 1 : [ 70.] # our model's prediction for row 1 : 15.9375 # Real output of row 1 : 70.0

তারমােন িকছু একটা গ েগাল হেয়েছ! আেগরবার িক িডকশন িঠকঠাক িছল িক এই ডটােসট এর উপের

িডকশন এত খারাপ কন? এই কন এর উ র জানেত হেল আেরকটু পড়েত হেব। সবসময় ফরমুলা িঠকঠাক

কাজ কের এমন কান কারণ নই।

মিশন লািনংেয় এধরেণর সমস া িডবাগ করার জন িলিনয়ার অ ালেজ া, ক ালকুলাস অহরহ ব বহার করা হয়। লাজ ল মেডল ড য় করার আেগ িনউেমিরকাল িডেয় চিকং অত াবশ ক।

আমােদর সলু শন কন কাজ করেছ না? 185

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম িথটা প ারািমটােরর সিঠক মােনর জন ই আমরা সিঠক িডকশন পাব। িক সিঠক িডকশন যেহতু হয় িন তাই িথটা আপেডটও িঠক ঠাক হয় িন। িথটার সূ আবার িলেখ পাই,

এইখােনর কান একটা অপােরশেন সমস া হেয়েছ। মেন রাখেত হেব, ম াি সকল ম াি

ইনভািটবল না।

এই টামটা আেগ অ ানালাইজ করেত হেব। কান ম াি

ইনভাশেন ায়ই সমস া হেত পাের।

ইনভািটবল িকনা সটা দখার জন আমরা তার িডটািমেন

(Determinant) িনেয় থািক। িডটািমেন এর মান যিদ ০ হয় তাহেল বলব ম াি

িট Singular এবং এিট ইনভািটবল না।

ইনভাশেনর িভতেরর টােমর িডটািমেন িনেত হেব, ম াথেমিটে র নােটশেন,

থেম লােডড ডটােসট এর িডটািমেন চক করা যাক # Checking the determinant of X print(np.linalg.det(X.T.dot(X))) # Output # 24967305352.999886

এর মান অেনক িবশাল, তারমােন অবশ ই থম ডটােসট এর া েপাজ ও িনেজর সােথর ডট াডা ইনভািটবল।

িসনেথিটক ডটােসট এর িডটািমেন পেররটা চক করা যাক, # Checking the determinant of x print(np.linalg.det(x.T.dot(x))) # Output # 6.6151528699265518e-09

ম, এখােন িক িডটািমেন এর মান ায় ০ এর কাছাকািছ, যেহতু পুেরাপুির শূন না তাই এেক ইনভাট করা গেছ।

এেক আমরা শূন ই ধরেত পাির, আর সটা িচ া করেল পরবতীেত য সলু শন পাওয়া গেছ সটা আমরা চাই িন।

186

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম এই কারেণই মূলত িনউেমিরকাল অি মাইেজশন সবসময় িনভরেযাগ , আশার কথা হল এই ফরমুলা বা ব ডটােসট এ ভালভােবই কাজ করেব, কননা; বা ব ডটােসট এ িতটা অবজারেভশন কখেনা এভােব জনােরেটড হেব না, তােত চুর নেয়জ থাকেব তাই তােদর িডটািমেন ০ আসার স াবনা কম!

নাট িসে ম অফ িলিনয়ার ইকু েয়শনস ও িস ুলার ম াি (Singular Matrix) ম াি

হল ভ েরর কােলকশন। যখন ম াি ে র সকল ভ র সব েলার অব ান িঠক একই জায়গায় হয় সে ে

আমরা বলব, সই ম াি

ারা গিঠত িলিনয়ার িসে েমর সলু শন অসীম সংখ ক।

মােন,

আপনােক যিদ বলা হয়, এই ই য়ুেয়শন িতনটা স ভ ক ন, তাহেল আপিন িক পারেবন? ল

কের দখেবন এখােন

আসেল ইকু েয়শন একটাই, সে ে একটা ইকু েয়শন িদেয় িতনটা ভ ািরেয়বেলর মান কীভােব বর করা যায়? এখােন,

এর িবিভ মােনর জন আপিন পােবন, আিম যিদ বিল,

বলেত পােরন,

আপিন

!

িতনটা ভ র যেহতু একই ােন অব ান করেছ ( ধু একটার

িলং ফ া র আেরকটা থেক বিশ) তাই ভ র

িতনটার উপেরর সব েলা িব ুই এর এক একিট সলু শন। আর এরকম হেল আমরা িস ুলার ম াি

বিল, যার

িডটািমেন হয় শূন ।

উপেরর ইকু েয়শনেক আমরা ম াি

আকাের কাশ কের তার িডটািমেন িনেয় দিখ,

test_matrix = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]]) print(np.linalg.det(test_matrix)) # Output # 0.0

আপিন যিদ পুেরাটা অধ ায় পেড় ও বুেঝ থােকন তাহেল বলব, িনউেমিরকাল অি মাইেজশন কন কীভােব একটা মিশন লািনং অ ালগিরদম িডবাগ করা যায় সটার স

পূণ এবং

েক িকছু টা ান লাভ কেরেছন।

187

াি ক াল মাি ভ ািরেয়বল িলিনয়ার িরে শন : িডেয় িডেসে র নরমাল ফম পরবতী অধ ােয় লিজি ক িরে শেনর জন েয়াজনীয় ইনটুইশন িব করব।

188

লিজি ক িরে শন : পিরিচিত

লিজি ক িরে শন : পিরিচিত বশ কেয়কিট অধ ােয় আমরা কান িকছু র মান িড করার চ া কেরিছ িলিনয়ার মেডল ব বহার কের, যােক

িলিনয়ার িরে শন বলা হি ল। এখন থেক পরবতী বশ িকছু অধ ােয় আেলাচনা করা হেব লিজি ক িরে শন, বা ািসিফেকশন সমস া িনেয়। ািসিফকেশন সমস া িরে শন সমস ার থেক একটু িভ এবং বশ িকছু র িদেক সহজ সরল মেডল িনেয় আেলাচনা করার পর শেষর অধ ায় িলেত মাি

ে জিটল।

াস িরে শন বা সফটম া

িরে শন, িলিনয়ার িডি িমেন অ ানালাইিসস এর ম াথেমিটক াল ফাউে শন িনেয় িব ািরত আেলাচনা করা হেব।

সাধারণত মিশন লািনং সমস া দুই ধরেণর হয়, মান িড করা অথবা ািসফাই করা। িনে র সমস া েলা ািসিফেকশন সমস ার অ গত।

ািসিফেকশন সমস া ইেমইল :

াম নািক সাধারণ?

অনলাইন া াকশন : ড (হ াঁ বা না)?

িটউমার : িবনাইন না ম ািলগন া (ক া ার)? সি েম : পিজিটভ কথা নািক নেগিটভ?

অথাৎ এতিদন আমােদর উ র এেসিছল একটা মান িহেসেব িক এখােন আসেব লিজকাল মান, যমন



ইে িলেজ রে ারাঁ িরিভউ িসে ম ধ ন, আপিন মিশন লািনং াি শনার এবং আপনার ব ু িবশাল টাকাওয়ালা ব ি । স একিট ওেয়বসাইট বানােত চায় যখােন িবিভ র ু েরে র িরিভউ ও রিটং থাকেব। িতটা িরিভউ পেড় যােত একজন িভিসটেরর গণণা করা না লােগ য কয়িট নেগিটভ ও পিজিটভ িরিভউ আেছ এবং একটা র ু ের স

েক সহেজই ওভারঅল ধারণা

পেয় যায় তাই আপনার ব ু আপনার কােছ আ ার করল একিট িসে ম িব কের িদেত যটা িকনা অেটােমিটক

িরিভউ েলা থেক পিজিটভ ও নেগিটভ িরিভউ আলাদা করেব এবং একিট কাউ াের শা করেব।

কেয়কটা উদাহরণ দখা যাক,

189

লিজি ক িরে শন : পিরিচিত

িরিভউ েলা ার কাবােবর এবং সং হ করা হেয়েছ ি প অ াডভাইজর ওেয়বসাইট থেক আপনার কাজ হেব এমন একিট মেডল তির করা য এই িরিভউ েলােক পিজিটভ ও নেগিটভ িহেসেব ািসফাই করেত পাের।

[অবশ ই রিটং থেক আলাদা করা যায় িক আমরা এখােন িরিভউ থেক ািসফাই করার চ া করব]

িসে ম ওভারিভউ

190

লিজি ক িরে শন : পিরিচিত

িলিনয়ার ািসফায়ার : ইনটুইশন এই সমস া কীভােব স ভ করা যায়? আমরা একটা কাজ করেত পাির, একটা Weight টিবল তির কের তােত ভাল ভাল শ যমন ËÚÑ , ​ ¤×ÚÅÚÏÁ , ¤Æ

Í×ÚÅÚÏÁ শ

িদেয় িদেত পাির এবং, ´ÚÏÚÈ , ÊÚẠ, ÆÚ ইত ািদ শ

েলােক তােদর পিজিটিভিট অনুযায়ী পিজিটভ মান

েলােক নেগিটভ মান িদেত পাির।

এভােব একিট টিবল তির করা যায়। শ

Weight

ভাল অসাধারণ অনন সাধারণ খারাপ বােজ জঘন না এটা, ওটা, আিম, কখন, কাথায় ....

191

লিজি ক িরে শন : পিরিচিত

Weight এর িভি েত বাক ক

ািরং করা

এবার আমরা যিদ বােক র এই Weight এর িভি েত উপযু বাক িটর সি েম ািসফাই করেত চাই তাহেল সটা কীভােব করব?

সহজ, একটা িডকশনািরেত আমরা শ েক Key এবং তার Weight ক ভ ালু িহেসেব রাখব এবং একটা লুপ চািলেয় িতটা শে র িবপরীেত য Weight আেছ স েলা যাগ করেত থাকব। যটা হেব ঐ বােক র Score ।

কাজটা করার জন একটা ছাট পাইথন ি

ার

লখা যাক,

# Simple Linear Classifier words = [u'ËÚÑ', u'¤×ÚÅÚÏÁ', u'¤Æ Í×ÚÅÚÏÁ', u'´ÚÏÚÈ', u'ÊÚáº', u'º¶ Í', u'ÆÚ', u'Û³ ÂÝ'] weights = [1.0, 2.0, 2.5, -1.0, -1.1, -2.0, -1.5, 0.0] # Building vocabulary given the list of words and weights vocabulary = {word : weight for word, weight in zip(words, weights)} sentence = u'´ÚÊÚÏ ËÚÑ Û¹Ñ Û³ ÂÝ ×ÚÛË × ÆÚ' # If a word is not present in the vocabulary we simply ignore it score = 0.0 for word in sentence.split(' '): if word in words: score = score + vocabulary[word] else: pass print("Score: {}".format(score)) if (score > 0) : print("Sentence is positive") else: print("Sentence is negative")

এটার আউটপুট আসেলা, Score: -0.5 Sentence is negative

এখােন আিম যটা করলাম সটা হল,

পিজিটভ সি েমে র মেধ পেড়। যিদ

ার যিদ সামি কভােব পিজিটভ হয় তাহেল আিম ধের িনি বাক িট

ার ঋণা ক হয় তাহেল বুঝব বাক িট নেগিটভ! এইেয আিম Score > 0

হেল একটা িডিসশন এবং Score < 0 হেল আেরকিট িডিসশন িনি বা বাউ াির সট করিছ এটার আেরকনাম (

য়লার অ ালাট) িডিসশন বাউ াির। একটা িডিসশন কখন িরেজ হেব, িরেজকশন িরিজওন কানটা, কন,

কীভােব সটা িনেয় পের আেলাচনা করা হেব।

সমস া 192

লিজি ক িরে শন : পিরিচিত এই প িতেত বশ িকছু সমস া আেছ, থমত; বাংলাভাষার শ ভা াের চুর শ আেছ য েলা িকনা পিজিটভ, নেগিটভ বা িনউ াল। এতশত শ বর করা, তােদর তী তা িহেসেব Weight অ াসাইন করাও খুব জিটল,

দীঘেময়াদী ও একেঘ ঁেয় কাজ। ধু তাই নয়, আেরকিট িবশাল সমস া আেছ যটা একটু পেরই দখােনা হেব।

িলিনয়ার ািসফায়ােরর জ ািমিতক ই ারি েটশন আমরা য সে

ািসফায়ার তির করলাম, যিদও এটা বশ সাধারণ এবং ব বহার উপেযাগী নয় তাও এর একটা

সু র জ ািমিতক ই ারি েটশন আেছ যটা বাঝা খুবই দরকারী। এটা বাঝার জন আমরা চেল যাব আমােদর HSC এর জ ািমিত বইেয়র একিট অধ ােয়, যার নাম 'সরলেরখা'। সরলেরখা অধ ােয় বশ িকছ িজিনস পড়ােনা হয় িক

িবশাল আফেসােসর িবষয় হে এই টিপক েলা কাথায় অ া াই করা হয়, আেদৗ দরকারী িকনা সটা বলা হয় না।

তমিন একিট উপ-অধ ায় হল একিট িব ু সরলেরখার কান িদেক অব ান করেছ। যিদ না বাঝা যায় তাহেল িনেচর

িচ থেক ব াখ া করা যাক।

একটা সরলেরখার সমীকরণ িচ া করা যাক, তাহেল আিম যিদ এর চারিট মােনর কথা িচ া কির,

। আরও মেন কির, তাহেল এর মান িল কত হেব?

m = 2 x = [1, 2, 3, 4] c = 3 y = [(m*i + c) for i in x ] print(y) # Output ## [5, 7, 9, 11]

এেক ট করা হেল,

193

লিজি ক িরে শন : পিরিচিত

এবার এই ােফ দুইটা িব ু ট কির, যােদর কাঅিডেনট যথা েম,

এবং

plt.plot(y, linewidth="5", color='g') plt.scatter(1, 6, color='r', s=100) plt.scatter(2, 10, color='b', s=100) plt.title('Plot of ' + r'$y=mx+c$')

194

লিজি ক িরে শন : পিরিচিত

দৃশ ত, লাল িব ুিট সরলেরখািটর িনেচ এবং নীল িব ুিট সরলেরখার উপের। িক গািণিতকভােব কীভােব আপিন স

ক াপন করেত পারেবন?

এইচএসিস এর জ ািমিত না মেন থাকেলও সমস া নাই। িনেচর সূ টা িদেয় সহেজই বর করা যােব,

এর জন ক ালকুেলট করা যাক,

এবং

এর জন ক ালকুেলট করেল,

195

লিজি ক িরে শন : পিরিচিত

সংে েপ আমার যিদ ইনপুট

এবং আউটপুট

জানা থােক তাহেল আমরা এমন একিট সরলেরখার

সমীকরণ বর করেত পারব (যিদ ডটা একটা সরলেরখা িদেয় আলাদা করা যায়) যটা িকনা ঐ ডটােসট ািসফাই করেত পাের।

দয়া থাকেল কাজ হল

এই িথওির য ধু সরলেরখার

এর মান বর করা।

ে সত তাই নয়, ভ র

স িডেমনশনাল হেল তােক

হাইপারে ন িদেয় আলাদা করা যােব। (সবসময় না, ডটােসেটর উপর িনভর কের) যমন

এর

িডেমনশনাল ে ডটােসেটর

এই িতনিট কাঅিডেনট থাকেব যখােন দুইিট হল িফচার ভ র আেরকিট হল আউটপুট এবং এেক সপােরট করার জন

বা িডেমনশন িবিশ লাইন লাগেব যােক িকনা বলা হয় Plane।

কােনল বজড মথড েলােত এই িথওির অহরহ ব বহার করা হয়। (পাশাপািশ আরও অেনক িথওির) যটা িনেয় আবারও পের একসময় আেলাচনা করা হেব।

অেনক কথাবাতা হল, এবার আসল পেয়ে আসা যাক। আমরা িক িলিনয়ার িরে শন ব বহার কের ািসফাই করেত পাির না? কন, ওখােনও তা আমরা এমন একটা সমীকরণ বর কির

, তাহেল আমরা Mean

Square Error ক ালকুেলট কের সহেজই তা প ারািমটার আপেডট কের এটা িদেয়ই ািসফাই করেত পাির! তেব কন লিজি ক িরে শন?

িলিনয়ার িরে শন িদেয় ািসফাই করা যােব িক? (

য়লার অ ালাট) : না!

কন? আেরকিট হাইেপােথিটক াল ডটােসট এর কথা িচ া করা যাক। িটউমােরর আকােরর িভি েত সটা ম ািলগন া (খুবই িতকর) িকনা সটার ডটােসট। এই কােড আিম ডটােসট তির কের লাইে ির ব বহার কের িলিনয়ার িরে শন চালাব। যেহতু আমরা বিসক জািন তাই লাইে ির ব বহার করেত সমস া নই।

196

লিজি ক িরে শন : পিরিচিত

%matplotlib inline import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns sns.set(color_codes=True) X_class_1 = np.arange(0, 50, 5) X_class_2 = np.arange(70, 119, 5) X_outlier = np.array([150]) X = np.concatenate((X_class_1, X_class_2, X_outlier)) # Create Y data set Y_class_1 = np.array([.5] * len(X_class_1)) Y_class_2 = np.array([50.0] * (len(X_class_2) + 1)) Y = np.concatenate((Y_class_1, Y_class_2)) synthetic_data = { "tumor_size" : pd.Series(X), "malignant" : pd.Series(Y) } df = pd.DataFrame(synthetic_data) sns.regplot(x="tumor_size", y="malignant", data=df, scatter_kws={"s": 80})

কােড থেম াস-১ এর জন আিম িকছু িফচার জনােরট করলাম

িদেয়, এবং াস-২ এর জন ও

তাই। এবং আিম আেরকটা ডটা তির করলাম যটার নাম িদলাম outlier । outlier বলার কারণ হল, এর অব ান আিম বশ একটু দুেরই িদলাম। এবং এর কারেণ িলিনয়ার িরে শন চালােল আউটপুট আসেব এরকম!

197

লিজি ক িরে শন : পিরিচিত

সমস াটা বাঝা যাে ? এই িরে শন লাইেন হয়ত লস িমিনমাম িক িমস ািসিফেকশন রট অেনক অেনক বিশ।

আর এটা হওয়ার আেরকটা কারণ outlier । ঐ ডটার কারেণ লাইনটা এমনভােব িফট কেরেছ য একই ােসর মেধ স ভাগ কের ফলেছ!

িতকার? এই সমস ার সমাধান করা খুব সহজ! আউটপুটেক কান একটা মান না িদেয় আমরা যিদ তার র

এর মেধ

িনেয় আিস? তাহেল িন য়ই সমস া হেব না? এমন একটা ফাংশন তির করেত হেব যটা নেগিটভ মানেক শূেন র কাছাকািছ িনেয় আেস এবং পিজিটভ মানেক ১ এর কাছাকািছ িনেয় যায়। তাহেল আউটপুট আসেল আমরা বলেত পারব ঐ ডটা এক ােসর অ গত এবং আউটপুট আসেল বলেত পারব সটা আেরক ােসর। এইরকম অেনক ফাংশন আেছ, তেব সাধারণত এই ফাংশনটা ব বহার করা হয়, যার নাম হল logit ফাংশন বা sigmoid ফাংশন, এর

ডােমইন

এবং র



198

লিজি ক িরে শন : পিরিচিত

এর াপািট ট কেরও দখা যায়, import numpy as np def sigmoid(z): return 1.00 / ( 1 + np.exp(-z)) test_sig = np.arange(-10, 10, .1) sig_out = sigmoid(test_sig) plt.plot(test_sig, sig_out) plt.show()

আউটপুট

199

লিজি ক িরে শন : পিরিচিত তাহেল আউটপুট এটা কের িলিনয়ার িরে শন চালােলই তা এবার হেব তাই না? আবারও

য়লার অ ালাট! না!

আমােদর আরও একটু ি েয়িটভ হেত হেব লিজি ক িরে শন কাজ করােনার জন । পাশাপািশ ব ািবিলিট, ািটসিট ও ইনফেমশন িথওিরর িবি ং ক েলা স

আেলাচনা করা হেব।

েক ধারণা রাখেত হেব। যা িনেয় িব ািরত পরবতী অধ ােয়

200

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন গত অধ ােয় আমরা দেখিছলাম, ািসিফেকশন বেলম েলা িলিনয়ার িরে শন িদেয় করেল কী কী সমস া হেত পাের। পাশাপািশ আেলাচনা করা হেয়িছল িডিসশন বাউ াির, লিগট বা িসগমেয়ড ফাংশন িনেয়।

এই ব াপাের সবার একমত হওয়া উিচৎ য, ািসিফেকশন সমস া স ভ করেত হেল একটু িভ উপােয় আগােত হেব। কারণ, আমরা য লস ফাংশন িনেয় কাজ করিছ, সটা িমস ািসিফেকশন মাপার জন ভাল না।

হে আমরা তাহেল ািসিফেকশন এরর টা মজার করব কীভােব? সটা িনেয়ই আজেকর অধ ায়। আজেকর টিপক: ব ািবিলট ও কি শনাল ব ািবিলিট ইনিডেপে ব ািবিলিটর সাম ও াডা ল Bernoulli ায়াল

Bernoulli িডি িবউশন Binomial িডি িবউশন

ব ািবিলিট ফরমাল ইকু েয়শন িনেয় কথা না বেল বরং একটা উদাহরণ িদেয় ব াখ া করা যাক। আিম এখােন ািফক াল মেডল িদেয় ব াখ া করার চ া করব।

খুেনর রহস ধির একটা বািড়েত বািড়র মািলক খুন হল। আমােদর ব ািবিলি ক অ া ি েমশন িদেয় বর করেত হেব সটা ক কেরেছ।

আরও ধরা যাক সাসেপ দুইজন বািড়র চাকর

বািড়র রাঁধুনী এবং অ িতনটা চাকু

িপ ল

201

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন সূ ম ও ধারােলা লাহার রড

ােয়ার িডি িবউশন (Prior Distribution) Prior বা ােয়ার হল, অ া ি েমশন করার আেগ বিসক িকছু ধারণা িনেয় কাজ বেল।

করেত হয় যটােকই ােয়ার

এই সমস ার ােয়ার হল এটা, বািড়র চাকর এই পিরবাের অেনকিদন ধের আেছ এবং িব াসভাজন আর রাঁধুনীেক বিশিদন হল িনেয়াগ দয়া হয় িন, এবং তার স

েক িকছু জবও আেছ

এই ােয়ার ান িদেয় আমরা ধারণা কের ফলেত পাির, রাঁধুনীই আসল খুিন! এবং চাকেরর খুিন হওয়ার স াবনা অেনক কম। ম ােথেমিটক াল নােটশেন িলখেত চাইেল এভােব িলখব,

এখােন Culprit একটা ভ ািরেয়বল যার Cook ।

অজানা।

ট দুইটা হেত পাের, একিট হল Servant এবং আেরকিট হল

যেহতু আমরা এখন পয রহস সমাধান করেত পাির িন তাই Culprit এর আসল

ট আমােদর কােছ

ব ািবিলিটর সাম ল (Sum Rule of Probability) িক ,

তারমােন একটা ব াপাের

আমরা িনি ৎ, খুিন Servant অথবা Cook এেদর মেধ কউ একজন। এটা হল Sum Rule of Probability। উপেরর সমীকরণ দুইটা িদেয় আসেল ব ািবিলিট িডি িবউশন বুঝােনা হে । এখােন অেনক

আসেত পাের, আিশ পােস কন?

হেল িক সমস া? উ র হল এটা আমােদর একটা

ধারণা, আসল পােস কত সটা আমরা া ডটা থেক Infer বা িড করব। আমরা ডটা িনেয় কাজ কিরিন।



ািফকাল নােটশন ব ািবিলিটর িডেপে ি ও ইি েপে ি ভালভােব দখােত পাের। তাই এই নােটশন েলােক ািফক ািল িরে েজ করার চ া করব। িনেচর ছিবটা হল একটা Factor Graph। যটা স

বলা হেব।

Node: এটা ারা র ◌ া ম ভ ািরেয়বল বুঝায়, এখােন যটা হল Culprit এবং যার দুইটা

েক পেরই িব ািরত

ট হল Servant,

Cook । অথবা,

Square: বগ িদেয় ব ািবিলিট িডি িবউশন বুঝায়। অথাৎ,



202

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

কি শনাল িডি িবউশন (Conditional Distribution) ধির, বািড়র চাকেরর লাইেস ড িপ ল ব বহার করার অিভ তা আেছ। এবং স পােসানাল য়াের িপ ল লকড অব ায় রােখ। িক চাকেরর বয়স অেনক বিশ। রাঁধুনীর াভািবকভােবই চাকুর অ াে স আেছ। এখােন কালি ট দখা যােব।

ট দুইটা, তাই িত

েট আমরা অে র একটা ব ািবিলিট টিবল তির কির তাহেল িনেচর মত

খুিন 'যিদ' রাঁধুনী হয়, তাহেল স কান অ ব বহার করেব?

203

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

Pistol 5%

Knife 65%

Rod 30%

াভািবকভােবই রাঁধুনী চাকু িদেয় খুন করার চ া করেব যেহতু তার কােছ সই অে র অ াকেসস পাওয়া সেবেচেয়

সহজ। এখােন সব ব ািবিলিটর মান যাগ করেল ১০০% হে । কারণ, যিদ খুিন আসেলই রাঁধুনী হেয় থােক, তাহেল ওই িতনধরেণর যেকান একিট িদেয় স খুন কেরেছ। আর যেহতু ওই িতনটা ছাড়া কান অপশন নাই তাই িতনটার যেকান একটা হওয়ার ব ািবিলিট শতভাগ।

খুিন 'যিদ' চাকর হয়, তাহেল Pistol 80%

Knife 10%

Rod 10%

এটাও কনিভনিসং লাগেছ, তাই না? এটা িক ডটার িভি েত আমরা Assume কের িনি । এখন যিদ ম াথেমিটক ািল িলখেত যাই,

সাধারণভােব আমরা বিল, Probability of Weapon (Example: Knife) given the Culprit (Example: Servant).

এখােন Weapon আেরকিট র ◌ া ম ভ ◌ ািরেয়বল যার

ট িতনটা, Pistol , Knife , Rod ।

যখনই আমরা কান একটা ঘটনােক বাছাই কির, সটা হেয়েছ িকনা, আমরা আসেল তার িডেপে



েলােক জুম কের দিখ। িনেচর ছিব িদেয় পির ার বাঝা যােব। [The figure will be added later]

তারমােন Culprit র ◌ া ম ভ ািরেয়বল ইনিডেপে এর উপর িডেপে



, িক Weapon এর



ট কানটা হেব সটা Culprit

পিরবিতত Factor Graph,

204

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

অ ােরা িচ িদেয় কানটা কার উপর িনভরশীল বা কি শনাল িডেপে

সটা বুঝােনা হে ।

জেয় িডি িবউশন (Joint Distribution) জেয় িডি িবউশন হল যত েলা র ◌ া ম ভ ািরেয়বল আেছ তােদর জেয় িল য িডি িবউশন সটা। যমন

এখােন Culprit আর Weapon এর সি িলত ব ািবিলিট িডি িবউশন ই হেব তােদর জেয় িডি িবউশন। িনেচর ে র উ র আমরা জেয় িডি িবউশন িদেয় িদেত পারব, রাঁধুনীর িপ ল িদেয় হত া করার স াবনা কত? এই ে র মেধ আসেল দুইটা

আেছ। থমিট হল, "খুিনর রাঁধুনী হওয়ার স াবনা কত? (যিদ খুিন রাঁধুনী হয়)"

ি তীয়িট হল, "খুিনর িপ ল িদেয় হত া করার স াবনা কত?"। থম ে র উ র ি তীয় ে র উ র তাহেল রাঁধুনীর িপ ল িদেয় হত া করার স াবনা হে ,

205

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

এেক Product Rule of Probability বলা হেয় থােক। জনােরল ফেম লেখ এভােব,

এভােব আমরা আরও পাঁচিট কি েনশন তির করেত পাির। যমন, রাঁধুনীর চাকু/রড িদেয় হত া করার স বনা কত বা

চাকেরর িপ ল/চাকু/রড িদেয় হত া করার স াবনা কত। এই মাট ছয়িট কি েনশেনর একিট টিবল িনেচ ক ালকুেলট কের দয়া হল

-

Pistol

Knife

Rod

Cook

4%

52%

24%

Servant

16%

2%

2%

Likelihood এবং Probability এর মেধ

সূ ম তফাৎ আেছ যটা পের বলা হেব।

মািজনাল িডি িবউশন (Marginal Distribution) জেয় িডি িবউশন থেক আমরা সহেজই মািজনাল িডি িবউশন বর করেত পাির। মািজনাল িডি িবউশন মােন হল র ◌ া ম ভ ািরেয়বেলর কান একটা িডি িবউশেন আেছ তার যাগ করা।

ট িসেল কের, স

েটর যত লা ব ািবিলিটর মান জেয়

না বুঝা গেল, আমরা যিদ Pistol এর মািজনাল িডি িবউশন বর করেত চাই তাহেল,

Cook এর মািজনাল িডি

িবউশন বর করব এভােব,

অথাৎ আমরা যটা Prior ধেরিছলাম সটাই। বািক মািজনাল িডি িবউশনও এভােব বর করেত পােরন। জনােরল সূ হল,

206

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

ক আবার কি শনাল ফেম লখা যায়,

এটা গল িডি ট ডটার

ে , কি িনউয়াস ডটার

ে সােমশেনর জায়গায় ইি ে শন বসেব।

ইি েপে ভ ািরেয়বেলর উপর যিদ অন কান ভ ািরেয়বল ারা শত আেরাপ করেলও সটার উপের ওই ভ ািরেয়বেলর কান ট হওয়ার স াবনা অপিরবিতত থােক তাহেল য ভ ািরেয়বেলর উপর শত আেরাপ করা হেয়িছল সটা

ইি েপে

বা াধীন ভ ািরেয়বল।

যিদ বলা হয়, পর পর দুইটা কেয়ন টেস Head উঠার স াবনা কত? যিদ বাইের বৃি পেড়? [ধির কেয়নটা Fair]

বাইের বৃি পড়ুক বা না পড়ুক, তােত টেস হড উঠেব না টইল উঠেব তা িডেপ কের না। তাই আমরা ওটা এড়ােত পাির। এই িবষয়টা খুব সাধারণ মেন হেলও এটা মারা ক শি শালী একিট কনেস , পরবতী টিপক েলােত বারংবার এটা আসেব (Example: Naive Bayes)।

বানুিল ায়াল (Bernoulli Trial) বানুিল ায়াল হল, কান একটা ঘটনার ফলাফল যিদ ধু হ াঁ/না; 1/0; সীমাব থােক তাহেল আমরা তােক Bernoulli Trial বলব।

ট-১/

ট-২; সাে স/ ফইিলওর এর মেধ

উদাহরণ: যমন কেয়ন টস, বৃি হেব িক না, হ াঁ/না িভি ক ে র উ র ইত ািদ।

বানুিল িডি িবউশন (Bernoulli Distribution) ধির, Head ওঠার স াবনা যিদ 0.5 হয় তাহেল Tail উঠার স াবনা কত? অবশ ই 0.5। আবার Head ওঠার স াবনা যিদ 0.7 হয় তাহেল? Tail ওঠার স াবনা? 0.3! এেক ম ােথেমিটক ািল কাশ করা হয় এভােব,

Head

ক যিদ 1 বিল আর Tail ক 0, সে ে Head ওঠার স াবনা,

207

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন

এবং Tail ওঠার স াবনা,

গািণিতকভােব প াক করেল,

এবং

এটাই হল বানুিল িডি িবউশন! [মেন রাখেত হেব আিম টস কেরিছ িক মা একবার!]

বাইেনািময়াল িডি িবউশন (Binomial Distribution) এখন আপনােক যিদ বলা হয়, একটা Fair কেয়ন আপিন 10 বার টস করেবন এখন এেত Head ৫ বার ওঠার

স াবনা কত? (যিদ িত টেসর আেগর টেসর ফলাফল Tail )। 5 টা Head উঠেল বািক 5 টা অবশ ই Tail । যেহতু আিম ১০টা টস িবেবচনা করিছ তাই আমার Tail ও গণনায় ধরেত হেব।

তাহেল আিম সমস া এভােব মেডল করেত পাির,

থেক কীভােব

আসেছ, আিম

এ গলাম? আ া আপিনই িচ া কের দখুন, পেরর টেসর

রজা কী হেব সটা িক আেগর টেসর রজাে র উপর িনভরশীল? অবশ ই নয়! তাই আিম এই শত স

কের সাধারণভােব Head - Tail ওঠার ব ািবিলিট িদেয় ণ িদেত পাির। এটাই ইি েপে িক এেক ম ােথেমিটক ািল কীভােব িলখেত পারা যায়? ধির টস সংখ া এবং টেস Head হওয়ার স াবনা

5 বার তাই



ূণ উেপ া

এবং রজা Head হেত হেব

সুতরাং, ৫ বার Head হওয়ার স াবনা

জনােরল ফেম,

িক

থেকই যাে ,

আসল কাথা থেক? এটা িদেয় বুঝাি

বাছাই করা যায় (Permutation & Combination)। সবিকছু িস

টেস

সংখ ক আউটকাম কতভােব

এর মান যেহতু তাই সটা িদেয় ণ করা হেয়েছ আর

ল রাখার জন থেম আিম উহ রেখিছ। Maximum Likelihood Estimation এ আমরা এই

208

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন কি েনশন িনেয় কাজ না করেলও সমস া নই। কন নই তা পরবতী অধ ােয়র জন তালা থাকল।

বাইেনািময়াল িডি িবউশন ট এখন একটু কাড চেল যাওয়া যাক, যিদ

হয়। তারমােন টেস Head ওঠার স াবনা

এবং

25%, অন কথায় কেয়নটা হাইিল বায়াসড। তাহেল তার িডি িবউশন ট িকরকম হেব? import seaborn as sns import matplotlib.pyplot as plt import scipy plt.figure(figsize=(8, 6)) theta = 0.25 N = 10 head_counts = scipy.linspace(0,10,11) # Number of head counts pmf = scipy.stats.binom.pmf(x,N,theta) sns.barplot(head_counts, pmf)

আউটপুট

এখােন

এি েস দখােনা হে

এর িবিভ মান আর এি েস দখােনা হে সটা হওয়ার স াবনা কতটুকু।

যেহতু আমরা এখােন বেলিছ, এর মান ১০ িট টেস

তাই

ও এর আেশপােশর বার েলা আকাের ল া, মােন

হেল ২ িট হড ওঠার স াবনা বিশ। এভােব

করেত পাির কত লা টেস কত হড উঠেব।

,

ও পিরবতন কের আমরা বর

209

লিজি ক িরে শন : ব ািবিলিট, বানুিল ও বাইেনািময়াল িডি িবউশন পরবতী অধ ােয় ম াি মাম লাইকিল ড এি েমশন িনেয় আেলাচনা করা হেব।

210

Numpy পিরিচিত

Numpy পিরিচিত ব : এখন থেক কাড েলা করা হেব Python 3 এ, আপিন যিদ Python 2 সটাপ িদেয় থােকন তাহেল একিট

ভাচুয়াল এনভায়রনেম তির কের Python 3 সটাপ িদেয় িদন, আেগর কাড েলা Python 3 এ পা িরত করার ি য়া চলেছ।

Numpy ই টেলশন আপনার Numpy না থাকেল কমা উইে া / টািমনােল িনেচর কাড িলখুন, pip install numpy scipy matplotlib ipython jupyter pandas sympy nose

আর আপিন অ ানােকা া সটাপ িদেয় থাকেল আপনার িপিসেত অলেরিড Numpy ই টলড আেছ। কান সমস া দখা িদেল এই ডকুেমে শন দখুন।

িডেয় িডেস আমরা চাইেল একািধক লুপ অ া াই কের িসে ল এিলেম িদেয় করেত পাির িক সটা মােটও

এিফিশেয় হেব না। মিশন লািনংেয়র জন কি

উেটশন টাইম কমােনাটা খুবই

পূণ। আর সটা করেত হেল

আমােদর অবশ ই Numpy লাইে িরর উপর ভাল দখল থাকেত হেব। ধীের ধীের সমস া সমাধােনর মাধ েম Numpy লাইে িরর উপের এমিনেতই দ তা চেল আসেব।

Numpy এ হােতখিড় সােয়ি িফক কি

উেটশেনর জন মূলত Numpy ব বহার করা হয়। মিশন লািনং সমস া েলােত হাই

ডাইেমনশনাল অ াের িনেয় কাজ করেত হয় সকারেণ আমােদর এমন ধরেণর টুল দরকার যটা এই ধরেণর হাই

ডাইেমনশনাল অ াের িনেয় খুবই ফা কাজ করেত পাের। Numpy হল এমন ধরেণর একিট লাইে ির। MATLAB এ আমরা যভােব অ াের িনেয় কাজ কের থািক, Numpy ক আমরা সে ে Python এর MATLAB ই ারেফস বলেত পাির। তেব বশ িকছু িভ তাও আেছ।

পুেরাপুির জানার জন নামপাইেয়র ডকুেমে শন যেথ । তেব এখােন আিম

পূণ িনেয় আেলাচনা করব। তাহেল

করা যাক।

অ াের (Array) Numpy Array হল কত েলা ভ ালুর ি ড। এবং সব লা ভ ালুর টাইপ একই, মােন float , int64 , int8 ইত

ািদ।

একটা অ ােরর ডাইেমনশন যত তােক আমরা Rank বেল থািক । যমন 2 Dimensional Numpy Array ক আমরা বলব Rank 2 Array। Numpy এ অ ােরর Shape Integer এর একটা Tuple যখােন িতিট ডাইেমনশেন কত িল এিলেম আেছ সটা কাশ কের।

211

Numpy পিরিচিত িনেচর উদাহরণ দখা যাক, import numpy as np a = np.array([1, 2, 3]) # Creates a rank 1 array print (type(a)) # Prints "" print (a.shape) # Prints "(3,)" print (a[0], a[1], a[2]) # Prints "1 2 3" a[0] = 5 # Change an element of the array print(a) # Prints "[5 2 3]" b = np.array([[1, 2, 3], [4, 5, 6]]) # Create a rank 2 array print (b.shape) # Prints "(2, 3)" print (b[0, 0], b[0, 1], b[1, 0]) # Prints "1 2 4"

Numpy এ িকছু ফাংশনও আেছ য েলা ব বহার কের আমরা িনিদ আকােরর অ াের তির করেত পাির, a = np.zeros((2, 2)) # Create an array of all zeros print (a) # prints "array([[ 0., 0.], # [ 0., 0.]])" b = np.ones((1, 2)) # Create an array of all ones print (b) # Prints "[[ 1. 1.]]" c = np.full((2, 2), 7) # Create a constant array print (c) # Prints "array([[ 7., 7.], # [ 7., 7.]])" d = np.eye(2) # Create a 2x2 Identity matrix print (d) # Prints "[[1. 0." # [0. 1.]]" e = np.random.random((2, 2)) # Create an array filled with random values print (e) # In my case it printed "array([[ 0.91072458, 0.47086205], #[ 0.20084157, 0.44929267]])"

অ াের স

েক আরও জানেত এই ডকুেমে শনিট দখুন।

অ াের ইনেডি ং (Array Indexing) বশ িকছু উপােয় Numpy অ াের ইে

করা যায়।

াইিসং (Slicing) পাইথন িল আমরা যভােব াইস কির, সভােবই Numpy অ ােরও াইস করা যায়, Array যেহতু

মাি ডাইেমনশনাল হেত পাের সে ে িতটা ডাইেমনশেনর জন উে খ করেত হেব কান ইনেড থেক কত পয আপিন াইস করেত

212

Numpy পিরিচিত

import numpy as np # Create the following rank 2 array with shape (3, 4) # [[1 2 3 4] # [5 6 7 8] # [9 10 11 12]] a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) # Use slicing to pull out the subarray consisting of the first 2 rows and columns 1 an d 2; b is the following array of shape (2, 2): # [[2 3] # [6 7]] b = a[:2, 1:3] # A slice of an array is a view into the same data, so modifying it will modify the o riginal array print (a[0, 1]) # Prints "2" b[0, 0] = 43 # b[0, 0] is the same piece of data as a a[0, 1] print (a[0, 1]) # Prints "43"

চাইেল ইি জার ইে ি ং ও াইস ইে ি ং িমিশেয়ও লখা যায়। িক সটা করেল নতুন অ ােরর Rank ১ কের কমেব, যমন

import numpy as np a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) # Two way of accessing the data in the middle row of the array # Mixing integer indexing with slices yields an array of lower rank # While using only slices yields an array of the same rank as the original array row_r1 = a[1, :] # Rank 1 view of the second row of a row_r2 = a[1:2, :] # Rank 2 view of the second row of a print (row_r1, row_r1.shape) # Prints "[5 6 7 8] (4, )" print (row_r2, row_r2.shape) # Prints "[[5 6 7 8]] (1, 4)" # We can make the same distinction when accessing column of an array col_r1 = a[:, 1] col_r2 = a[:, 1:2] print (col_r1, col_r1.shape) # Prints "[2 6 10] (3,)" print (col_r2, col_r2.shape) # Prints "[[2] # [6] # [10]] (3, 1)"

ইি জার অ াের ইে ি ং (Integer Array Indexing)

213

Numpy পিরিচিত Numpy অ াের ইি জার িদেয় াইিসং করেল নতুন অ াের েলা সবসময়ই আসল অ ােরর সাব অ াের হেব। মােন,

ইি জার অ াের ইে ি ং িদেয় নতুন আরিবটরাির অ াের তির করা যায় য অ ােরর এিলেম আসেব আসল অ াের থেক।

আমােদর যিদ এমন একটা অ াের দরকার হয় যার এিলেম

েলা অ ােসি ং অডাের থাকেব যমন 0, 1, 2, 3

তাহেল np.arange(num) ফাংশন িদেয় ঔরকম অ াের তির করা যায়। উদাহরণ দখেল িবষয়টা বুঝা যােব, import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) # Example of integer array indexing # The new array will have shape (3, ) print (a[[0, 1, 2], [0, 1 0]]) # Prints "[1 4 5]" # Which is equivalent to this one

print (np.array([a[0, 0], a[1, 1], a[2, 0]])) # Prints "[1 4 5]" # We can also write in this way [Plain old indexing] print (np.array([a[0][0], a[1][1], a[2][0]])) # Create sequence of array using `arange` function sequence = np.arange(4) print(sequence) # Prints "[0 1 2 3]"

আেরকটা উপােয় ইে ি ং করা যায়, যমন

214

Numpy পিরিচিত

import numpy as np a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) print(a) # Prints #[[ 1 2 3] # [ 4 5 6] # [ 7 8 9] # [10 11 12]] # Create an array of indices [we can refer this as selector] selector = np.array([0, 2, 0, 1]) # Selecting one element from each row using the selector indices print(a[np.arange(4), selector]) # Prints "[ 1 6 7 11]" # Mutate one element from each row of 'a' using the indices in b a[np.arange(4), selector] += 10 print (a) # Prints # "[[11 2 3] # [ 4 5 16] # [17 8 9] # [10 21 12]]"

বুিলয়ান এ ে শন িদেয় অ াের ইে ি ং (Boolean Array Indexing) বুিলয়ান অ াের ইে ি ং এর মাধ েম আমরা িবিভ শত িদেয় এিলেম বাছাই করেত পাির। Pandas লাইে িরেতও এই কাজটা করা যায়। উদাহরেণর মাধ েম দখা যাক,

215

Numpy পিরিচিত

import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) # Find the elements of 'a' that are bigger than 2 # This returns a numpy array of booleans of the same shape as 'a' # where each slot of bool_idx tells whether that element of 'a' is > 2 bool_idx = (a > 2) print(bool_idx) # Prints # "[[False False] # [True True] # [True True]]" print (a[bool_idx]) # Prints "[3 4 5 6]" # We can reduce all of the statement into a concised single statement print (a[a > 2]) # Prints "[3 4 5 6]"

অেনক সংে েপ এখােন ইে ি ং উপ াপন করা হেয়েছ, আরও িডেটলস এর জন ডকুেমে শন দখেত হেব।

ডটাটাইপ (Datatypes) অ াের তিরর সময় Numpy অনুমান করার চ া কের আপিন কান ডটাটাইেপর অ াের তির করেছন। িক আপিন যিদ চান Integer িদেয় অ াের তির করেবন িক পের float টাইেপর এিলেম ও রাখেত হেত পাের তাহেল

আপনােক তার অনুমানেক Override করেত হেব, সজন Numpy ত একটা অপশনাল আ েম আেছ। উদাহরেণ দখা যাক,

import numpy as np x = np.array([1, 2]) # Let numpy handle the datatype print (x.dtype) # Prints "int32" x = np.array([1.0, 2.0]) # Again let numpy do it's magic print (x.dtype) # Prints "float64" x = np.array([1, 2], dtype=np.int64) # Forcing a particular datatype print(x.dtype) # Prints "int64"

**অ াের ম াথ (Array Math) বিসক ম াথ এই টিপকটা খুবই

পূণ। কারণ এটা ব বহার কেরই আমরা লুপ ব বহােরর হাত থেক বাঁচব।

216

Numpy পিরিচিত মেন রাখেত হেব, ম াথেমিটক াল অপােরটর সাধারণত এিলেম ওয়াইজ কাজ কের। এবং িতটা অপােরটেরর কাজ আবার Numpy এর িব ইন ফাংশন কেরও করা যায়। import numpy as np x = np.array([[1, 2], [3, 4]], dtype=np.float64) y = np.array([[5, 6], [7, 8]], dtype=np.float64) # Element wise sum; both produce this array # "[[6.0 8.0] # [10.0 12.0]]" print(x + y) print np.add(x, y) # Element wise subtraction # "[[-4.0 -4.0] # [-4.0 -4.0]]" print(x - y) print np.subtract(x, y) # Element wise multiplication # "[[ 5. 12.] # [ 21. 32.]]" print(x * y) print (np.multiply(x, y)) # Element wise division # "[[ 0.2 0.33333333] # [ 0.42857143 0.5 ]]" print (x / y) print (np.divide(x, y)) # Element wise Square root # "[[ 1. 1.41421356] # [ 1.73205081 2. ]]" print(np.sqrt(x))

ম াি

অপােরশন

আমরা আেগই দেখিছলাম, মিশন লািনং মােনই ম াি

িনেয় কাজ কারবার, তাই আমােদর Numpy এর মাধ েম

Matrix ম ািনপুেলশন ভালভােব জানেত হেব। এিলেম ওয়াইজ ণ কের কীভােব, ম াি কীভােব। কােড হাত দওয়ার আেগ ডট ণন টা একটু িরভাইজ দওয়া যাক,

মাি ি েকশন কের

ভ েরর ডট ণন (Dot Product of vectors) এবং

এর ডট ডা হেব,

217

Numpy পিরিচিত

ম াি

আকাের

ম াি ে ডট ণন (Dot product of Matrices / Multiplication of Matrices) িক যিদ ম াি ে র ডট ণেনর কথা িচ া কির তাহেল এইরকম হেব,

এখন এই দুইটা ম াি ে র ডট নন কী হেব? দখা যাক,

ধির, একিট ম াি

,

যিদ ক এর সােথ ডট ণন বা ম াি

মাি ি েকশন কির তাহেল,

218

Numpy পিরিচিত িক , করা যােব না, দুইটা ম াি ে র ডট ডাে র শত হল, যিদ থম ম াি ে র ডাইেমনশন ডাইেমনশন

হয় তাহেল

এর ডাইেমনশন

হয় এবং ি তীয় ম াি ে র

হেত হেব

এবং এর ডাইেমনশন

তাই এেদর মাি

াই করা যােব না।

এবার কাড দখা যাক, import numpy as np x = np.array([[1, 2], [3, 4]]) y = np.array([[5, 6], [7, 8]]) v = np.array([9, 10]) w = np.array([11, 12]) # Inner product of vectors print (v.dot(w)) print np.dot(v, w) # Matrix/vector product; print (x.dot(v)) print np.dot(x, v) # Matrix/ matrix product; both produce the rank 2 array # [[19 22] # [43 50]] print (x.dot(y)) print (np.dot(x, y))

এখন আমােদর যিদ সব েলা এিলেমে র যাগফল িকংবা কলামওয়াইজ যাগফল লােগ সে ে Numpy এর sum ফাংশনিট খুব কােজ

দয়।

import numpy as np x = np.array([[1, 2], [3, 4]]) print(np.sum(x)) # Compute sum of all elements; prints "10" print(np.sum(x, axis=0)) # Compute sum of each column; prints "[4 6]" print(np.sum(x, axis=1)) # Compute sum of each row; prints "[3 7]"

ডকাি ং (Broadcasting)

219

Numpy পিরিচিত যিদ িবিভ শেপর অ াের িনেয় কাজ করেত হয় সে ে Numpy এর Broadcasting মকািনজম খুবই কােজ লােগ। যমন, আমরা যিদ Numpy এর ডকাি ং ছাড়া িনেচর কাজটা করেত চাই, import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) v = np.array([1, 0, 1]) # We will now add the vector 'v' to each row of the matrix 'x' # Storing the result in the matrix 'y' y = np.empty_like(x) # Create an empty matrix with the same shape as 'x' # Add the vector 'v' to each row of the matrix 'x' with an explicit loop for i in range(4): y[i, :] = x[i, :] + v # Now 'y' is the following # [[2 2 4] # [5 5 7] # [8 8 10] # [11 11 13]] print(y)

িক , ম াি

যখন অেনক বড় হেব, লুপ িদেয় এভােব কি

িতনটা কিপ কের রা ওয়াইজ সাজােত পাির,

উট করা া হেয় যােব। আমরা যিদ এর আরও

তাহেল িক আমরা সহেজই এর সােথ যাগ করেত পারব। এই কিপ করাটা Numpy এ এভােব করা যায়,

220

Numpy পিরিচিত

import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8. 9], [10, 11, 12]]) v = np.array([1, 0, 1]) # Stacking 4 copies of 'v' on top of each other [4 -> 4 rows, 1 -> 1 rows] vv = np.tile(v, (4, 1)) print(vv) # Prints "[[1 0 1] # [1 0 1] # [1 0 1] # [1 0 1]]" y = x + vv # Adding elementwise print(y) # [[2 2 4] # [5 5 7] # [8 8 10] # [11 11 13]]

আসেল এত সব কাজ করারও কান দরকার িছল না, Numpy এটা িনেজই হ াে ল কের থােক, আর এটাই হল Numpy এর Broadcasting import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8. 9], [10, 11, 12]]) v = np.array([1, 0, 1]) y = x + v print (y) # [[2 2 4] # [5 5 7] # [8 8 10] # [11 11 13]]

ডকাি ং স

েক আরও িব ািরত জানেত Numpy User Guide, Release 1.11.0 - Section 3.5.1

(General Broadcasting Rules)

দখুন

ডকাি ংেয়র অ াি েকশন

221

Numpy পিরিচিত

import numpy as np ## Example 1 # Computing the outer product of vectors v = np.array([1, 2, 3]) # shape (3, ) w = np.array([4, 5]) # shape (2, ) # To compute an outer product, we first reshape 'v' to be a column vector of shape (3, 1) # Then we can broadcast it against 'w' to yield an output of shape (3,2) # Which is the outer product of 'v' and 'w': # [[ 4 5] # [ 8 10] # [12 15]] print(v.reshape(3, 1) * w) # Add a vector to each row of a matrix x = np.array([[1, 2, 3], [4, 5, 6]]) # [[2 4 6] # [5 7 9]] print(x + v) ## Example 2 # Let's add vector 'w' with 'x' [x.T == x.transpose()] z = x.T + w print(z) # prints # [[ 5 9] # [ 6 10] # [ 7 11]] # Now we have to transpose it again to revert back to original shape print(z.T) # prints # [[ 5 6 7] # [ 9 10 11]]

Numpy এর বিসক িকছু অপােরশন দখােনা হল। পরবতী পেবই আমরা Numpy লাই ির ব বহার কের ফরমুলা অ া াই করা

করব।

222

হােত লখা বাংলা সংখ া িরকগিনশন

িমিন েজ : হােত লখা বাংলা সংখ া িডেটকশন কােজর ধারা:

223

কৃি ম িনউরেন অনুরণন পব-১

কৃি ম িনউরেন অনুরণন: পব - ১ ফলুদা হােতর বইটা সশে ব কের ট ট দুেটা তুিড় মের িবরাট হাই তুেল বলল, ' রাবট'। আিম িজে স করলাম, 'এত ণ িক তুিম রাবিটে র বই পড়িছেল?' বইটায় একটা খবেরর কাগেজর মলাট দওয়া, তাই নামটা পড়েত পািরিন। এটা জািন য, ওটা িসধু জ াঠার কাছ

থেক ধার কের আনা। িসধু জ াঠার খুব বই কনার বািতক। সবাইেক ধার দন না, তেব ফলুদােক দন। ফলুদাও িসধু

জ াঠার বই বািড়েত এেনই আেগ সটায় মলাট িদেয় নয়।

একটা চারিমনার ধিরেয় পর পর দুেটা ধাঁয়ার িরং ছেড় ফলুদা বলল, ' রাবিটে র বই বেল আলাদা িকছু নই। সবই মকািন , কৃি ম বুি ম া আর কে াল িসে েমর কি েনশন। তুই য ইউিটউেব িভিডও দিখস, সখােন

িরকেমে শন আেস, তার ইেমইেল আলাদা

াম ফা াের মইল জমা হয়, তুই য অ ামাজন থেক াডা িকিনস

সখােনও বেল, এটার সােথ ওটা িকনুন িকংবা িচ া কের দ াখ তার ফসবুক অ াকাউে র People you may

know এ ব পুরাতন ব ু র আইিড যাদুম বেল খুেঁ জ দয় যার সােথ িকনা গত ৮-৯ বছের কথাই হয় িন। গল সাচ এত ভাল কাজ কের কীভােব কখেনা ভেব দেখিছস? এত য া ািমং কিরস, কখেনা এ েলা িনেয় িচ া কেরিছস? কিরসিন!'

শিনবার সকাল, আমরা দু'জেন আমােদর বািড়র একতলার বঠকখানায় বেস আিছ। কােছই কাথাও পুরাতন বাংলা গােনর আওয়াজ ভেস আসেছ। আমার মাথার হাত িতেনক উপর িদেয় একটা অেটােনামাস কায়াডক ার উেড় গল। আিম ভাবলাম, এটাও তা রাবট হেত পাের!

' কবল সফটওয় ার নয়', ফলুদা বেল চলল, 'এই য অেটােনামাস কায়াডক ার উেড় গল সখােনও আেছ ইে িলেজ ।'

ফলুদার দৗলেত অবশ আমার িবিভ রকম ইে িলেজ িবিশ মানুেষর সােথ পিরচয় হেয়েছ। ফলুদার ইে িলেজ

কান পযােয়র সটাই ভাবিছলাম। ওেক িজে স করােত বলল, 'নন রি ক াবল হাইপারকনশাস ইে িলেজ বলেত

পািরস।'

'আর আিম তাহেল কী?' ' তার ইে িলেজ লেভল একটা িব ুর সমান যটােক অিভধােন বেল পিরমাণহীন ানিনেদশক িচ ।' ফলুদা যতই মজা ক ক, ওর সােথ থাকেল আমার ইে িলেজ লেভল বাড়েব ব কমেব না। সময়টা এখন াজড

সােসর। আিটিফিশয়াল ইে িলেজ এখন সানার হিরণ। কাড, িরসাচ পপার, গ পা স-ব িনিষ । ওেপন সাস

অ াি িভিট কাথাও কাথাও হয় বেল জানা গেছ, িক সটা খুবই চুিপচুিপ। বড় বড় কা ব বসা

ািন েলা একেচিটয়া

কেরেছ। কাথাও কান িথওির বা কাড িলক হেলই তােক ম কের দওয়া হে । আিম খুবই সাধারণ

মােনর া ামার, িস িকছু দরূ িশেখ পাইথন িশখিছ মা । পাইথেন গাটাকেয়ক সােয়ি িফক ক ালকুেলশন আর

া াড লাইে ির ছাড়া িকছু ই এখন আর পাওয়া যায় না। আেগ েনিছলাম আিটিফিশয়াল ইে িলেজ মেডল

তির করা িছল বড়েজার ২ িমিনট এর কাজ। িক এ িনেয় আর কান িরেসাস বতমােন নই। ধু সােয় িফকশেনই

সীমাব ।

224

কৃি ম িনউরেন অনুরণন পব-১ সেবমা কি

উটােরর সামেন বসেত যাব এমন সময় দরজার কড়াটা ক যন সেজােড় নেড় উঠল। দরজা খুেল

দিখ ই েপ র অিমত বাবু।

অিমত বাবু বলেলন, ' তামার দাদা বািড়েত আেছন?' েন ফলুদা সাফা ছেড় দরজার িদেক এিগেয় গল। 'আের অিমত বাবু য, হঠাৎ কী মেন কের?' 'আর বলেবন না িম. েদাষ িম , সাতসকােলই উ ট ঘটনার কুলিকনারা না পেল যা হয় আরিক। আপনােক তা আিম িবল ণ িচিন, তাই দির না কের চেল এলুম।'

ফলুদা আমার িদেক িফের বলল, ' তাপেস, যা তা ভতের চােয়র কথা বেল আয়।' বয়ারা শংকরেক চােয়র ফরমােয়শ িদেয় িফরেতই নেত পলাম ফলুদা হােত একটা কাগজ িনেয় বলেছ, ' ম, বুঝলাম। তাহেল ডােক যসব িচিঠ এেসেছ, সব েলােতই এইরকম ন র দয়া? ভ েলাক মারা যাওয়ার কত আেগ থেক আসা

কের?'

'হ াঁ সব েলাই আইেডি ক াল তেব ন র আলাদা। তেব একটা ব াপার ল সংখ া সমান। িচিঠ আসা

কেরিছ, েত কটা িচিঠেত িডিজট

কের িদন সােতক আেগ থেক।', বলেলন অিমত বাবু।

'ভ েলােকর ব াপাের কতটুকু কী জানেলন?' ' বিশ িকছু নয়, ভ েলাক িনঃস ান এবং িবশাল স

ি র মািলক। উনার ী গত হেয়েছন বছর সােতক হল।

আেশপােশ কান আ ীেয়র নামধাম পলাম না খবর দওয়ার মত।' 'আর খুনীর ব াপাের িকছু জানেত পেরেছন?'

'নাহ, খুন করার পর ঘটনা ল পুেরা ভালভােব ি ন করা কেরেছ। যতটুকু বুঝলাম খুনী বশ েফশনাল।' 'আ া, িচিঠটা আমার কােছ রাখিছ। আপাতত বলেত পাির এটা দামী কাগেজ 2B পি েল লখা। আপিন বািক িচিঠ যত ত স ব প েছ দেবন। হয়ত এটা াি ক াল জাক ছাড়া িকছু ই না। তারপেরও িবষয়টা িসিরয়াসিল িনেত হেব।'

'অেনক ধন বাদ িম. িমি র। তাহেল আজ আিম উিঠ।', বেল চেল গেলন অিমত বাবু। দরজা ব কের ফলুদােক বললাম,

-'ঘটনা কী ফলুদা? কাগেজ কী লখা আেছ? নতুন কান রহস পেয় গেল নািক?' -'সংখ াত !', বেল চুপ মের গল ফলুদা। বুঝলাম এখন আর ওেক িজে স কের কান উ র পাওয়া যােব না। আিম েম িগেয় গল সামার অফ কােডর ি পােরশন নয়া

করলাম।

পের ফলুদার থেক জানেত পারলাম, শশা মুখাজী নােমর এক ভ েলাক তার বািড়েত রহস জনকভােব খুন হন। ঘর থেক িকছু চুির যায় িন। আর তার চেয়ও আ যজনক ব াপার হল, তার নােম স াহখােনক আেগ থেক চুর

পিরমােণ িচিঠ আসা

হয়। সব েলা িচিঠেতই কত েলা সংখ া লখা, বাংলায়, ায় একই হােতর লখায়। িচিঠর

সংখ া ায় শ'িতেনক হেব। তার িতন কূেল কউ নই। িতেবশীেদর থেক জানা গল, িতিন বশ িনঝ াট একজন মানুষ, তার কান শ থাকেত পাের এটা কউ কখেনা ক নাই করেত পাের িন।

225

কৃি ম িনউরেন অনুরণন পব-১

ফলুদােক এই ব াপার িনেয় আর ঘাঁটাই িন। এই ঘটনার মাসখােনক পর যটা ঘটল, তার জন আমরা কউ

পারতপে

ত িছলাম না। সকাল নটা পাঁচ বেজেছ িক বােজিন, এমন সময় টিলেফান বেজ উঠল। ফলুদা

সাফায় বই পড়িছল, তড়াক কের উেঠ টিলেফানটা ধের বলল,

-'হ ােলা, েদাষ িম বলিছ।' -'ও অিমত বাবু, হ াঁ বলুন।' -' স কী! আবার?' িতনবার ম, পাঁচবার আ া, দুইবার ওেক বেল ফান রেখ িদল। আমার চহারা দেখ ফলুদা বলল, 'চ', আবারও ডাক রহস !' িব ুমা দির না করেল তির হেয় রওনা িদলাম ফলুদার সােথ। ট াি েত ওঠার পর থেক ফলুদা পুেরা চুপ।

িকছু ণ পর পর একই কায়দায় আঙুল মটকাে । এখন ওেক িড াব করা চলেব না। িক যন িচ া করেছ। আিমও ভাবা

করলাম, এভােব িচিঠ দয়ার মােন কী? খুন তা অেনকভােবই করা যায়! ন র েলা িদেয় স বাঝােত

চাে টা কী? সটা িক কান িসে ট কাড?

ট াি থেক নেম ভাড়া চুিকেয় ফলুদা আর আিম ঢু কলাম ঘেরর িভতের। ই েপ র অিমত বাবু দখেত পেয় এিগেয় এেলন।

'আসুন িম. িমি র, আপনার জন ই অেপ া করিছলাম' 'ভ েলাক কাথায় খুন হন?' 'বসবার ঘের রাত দুেটা নাগাদ, ফেরনিসক এর লাকেদর একদম িব াস কির না। আপনােক তাই চক করার জন ডেকিছ। আসুন।'

'চল তাপেস।', বেল ফলুদা অিমতবাবুেক অনুসরণ করেত লাগল। খুবই সাধারণ মােনর বািড়, ঢাকবার পেরই যটা নজর কােড় সটা হল িবশালাকােরর ঝাড়বািত। দেখ কী যন মেন হেত থাকল, বুঝেত পারলাম না এমনটা লাগেছ কন। যাই হাক একটা বারা া পিরেয় বসবার ঘের ঢু কলাম।

সাফােসট, িটিভ ও বইেয়র আলমাির িমিলেয় খুব সাধারণ একিট ঘর। আলমািরেত একনজর চাখ বুিলেয় বুঝলাম

বিশরভাগ বই গিণেতর উপর। ঘেরর মােঝ একিট কােঠর টিবল, তার উপের িকছু কাগজ পপারওেয়েটর িনেচ চাপা দয়া এবং পােশ দুইটা বই। দেখই িচনেত পারলাম! এই সই িচিঠ!

'ভ েলােকর নাম কলাস চৗধুির, পশায় গিণেতর িশ ক। ওঁর িকছু ছা েদর থেক জানেত পারলাম ভ েলাক ভাল পড়ােত পােরন না। একটু পাগল টাইেপর। িক তাই বেল তাঁর উপর কারও অ াভািবক।', বলেলন অিমতবাবু।

াভ থাকেত পাের সটা

' ম...। আ া ওনার কান ছাে র সােথ কথা বলা যােব?' 'অবশ ই, আপিন চাইেল এখনই ব ব া করা স ব।'

226

কৃি ম িনউরেন অনুরণন পব-১ 'এখন লাগেব না, পের হেলও চলেব। আমার পযেব ণ করা শষ। আপিন আপনার ফেরনিসক িটম ডেক কাজ করেত পােরন।'

' দেখ কী বুঝেলন িম. িমি র?' 'এখিন িকছু বলেত পারিছ না, তেব িচিঠ েলা পেল ভাল হত; আেগর িচিঠপ থেক িকছু উ ার করেত পািরিন তেব মেন হয় এঁরটা পেল িকছু আেলাকপাত করা যত।'

'িচিঠ আিম আপনােক কালেকর মেধ পািঠেয় িদি ।' 'ধন বাদ অিমতবাবু', বেল ফলুদা আরও একবার িতটা ঘর ভালভােব পরী া কের বলল 'চল তাপেস, এখােনর কাজ শষ। বািকটা ঠা া মাথায় িচ া কের করেত হেব।'

বািড় িফেরই ফলুদা তার িবখ াত সবুজ খাতায় িহিবিজিব লখা ফলুদা সটা ল

কের বলল, 'িতনটা

।'

করল। আিম মেনর অজাে ই উসখুশ করিছলাম,

'মােন?' 'একটা শষ!' মেন মেন বললাম,'এই র, ি কটা বাঝা উিচৎ িছল!', একরাশ িবরি িব ুমা না কাশ কের বললাম 'িচিঠর ন র েলার মােন কী?' 'এখেনা জািননা' 'তুিম ি তীয়বার ঘর পরী া করেত গেল কন?' ' থমবার আেরকটু হেলই িমস কের গ লাম। টিবেলর উপের ি তীয় বইেত একটা বুকমাক িছল, চক করেতই একটা ফান না ার পেয় গলাম।'

'অিমতবাবুেক জানাও িন কন তাহেল?', অবাক হেয় িজে স করলাম। 'উ ঁ আর নয়, পের জানেত পারিব!', বেল টকাস কের মাথায় একটা ছা গাঁ া িদেয় তারপর চারিমনার ধিরেয় ফলুদা িনেজর ঘের িগেয় দরজা আটিকেয় িদল। এখন ওর িচ া করার পালা, আশা করিছ জলিদ িকছু জানেত পারব এই জিটল রহস স

েক।

পরিদন সকােল ঘুম থেক উেঠ দখলাম ফলুদা বািড় নই। কাথাও বিরেয়েছ। আিম বর হব িকনা ভাবিছ এমন

সময় কিলং বল এর আওয়াজ নেত পলাম। দরজা খুেল দিখ হােত দুইটা প ােকট িনেয় লালেমাহনবাবু হািসমুেখ দাঁিড়েয় আেছন।

'তেপশবাবু, ফলুবাবু আেছন নািক?' 'না দাদা নই, আপিন িভতের আসুন। কান ভাল খবর িনেয় এেলন নািক?'

227

কৃি ম িনউরেন অনুরণন পব-১ 'হ াঁ, তামার দাদার েণ আমার বইেয়র ভুলটুল তা অেনকটাই কেম এল তাই ভাবলাম ইেয় মােন ওনােক একটা ি িবউট িদ। তা কান নতুন রহস টহস পেয়েছন নািক?'

'লালেমাহনবাবু, ভাল কান সংবাদ িনেয় এেসেছন মেন হে ?', কাে েক ফলুদা হািজর হেয় বলল। 'আের বলেবন না মশাই, আমার বই িনেয় তা িফ বানােনার

াব এেসেছ। ফলু িমি েরর পিরচযায় খর

িদেন

িদেন আরও খর হেয় উঠেছ। িক আপিন ঘের ঢাকার আেগই বুঝেলন কীভােব?' 'সহজ, আপিন কান ভাল সংবাদ িনেয় আসেল এই াে র বিড

মেখ এবং সু াদু খাবার সেমত আেসন,

দুইটারই গ এখনও িবদ মান। আর তাছাড়া নতুন পা ািব পেরেছন; গলার কাছটার বাতাম লাগােত বশ কসরৎ করেত হেয়েছ িন য়ই, তাই অনুমান করেত একটু ক হয় িন।'

'বাহ বাহ, আপনার জবাব নই। যটা বলিছলাম, আপিন তা এইসমেয় সাধারণত বর হন না; কান নতুন কস হােত িনেয়েছন নািক?', বলেলন লালেমাহনবাবু।

'আপনােক সব বলব তেব তার আেগ বলুন আপনার গািড়টা আজেকর িদেনর জন পাওয়া যােব িকনা?' 'িবল ণ, ইেয় মােন, আিম তা অলেয়জ অ াট ইওর সািভস! ধু বেল ফলুন কাথায় যেত হেব।' 'আপিন িনেচ িগেয় গািড় রিড ক ন আিম আসিছ', বেল আমার িদেক িফের বলল, 'তুই তির হেয় লালেমাহনবাবুর সােথ গািড়েত উেঠ বস।', বেলই ফলুদা ত িনেজর ঘের চেল গল। আিম অগত া ফলুদার কথামত িনেজর ঘের

িগেয় তির হেয় লালেমাহনবাবুর গািড়েত উঠলাম। িমিনট পাঁেচক পর দিখ হঠাৎ অেচনা এক মধ বয় লাক গািড়েত উেঠই নাঁিকসুের বলল, 'চলুন লালেমাহনবাবু'। আিম চমেক উঠার পরমুহূেতই বুঝলাম, বড় জুলিপওয়ালা, কাঁচাপাকাচুল িবিশ নাঁিকসুেরর ক ধারী লাকিট আর কউ নন, ফলুদা। 'তুই হিল আমার দুঃস

েকর আ ীয় এবং শা িশ লজিবিশ একটা ছেল। বিশ কথা বেলছ কী গাঁ া খেয়ছ।

করিব না একদম, ধু আমার কথার সােথ তাল মলািব। বুেঝিছস?', বেল মাথায় একটা টাকা িদেয় বলল, 'এটা হল অিজনাল গাঁ ার ডেমা ভাসন।'

'বুেঝিছ', বেল রােগ গজগজ করেত থাকলাম। আিম যই িতিমের িছলাম সই িতিমেরই আিছ, ফলুদা আেগ আমােক ওর কেসর ব াপাের সবসময় আপেডেটড রাখত। হঠাৎ কী হল বুঝেত পারলাম না।

যাওয়ার পেথ আমার জানা অংশটুকুই ফলুদা লালেমাহনবাবুেক জািনেয় রাখল। লালেমাহনবাবু বার কতক 'হাইিল সাসিপশাস' বেল চুপ মের গেলন।

গািড় থামল একটা ছাটখাট কি

উটােরর দাকােনর সামেন, ধুেলামাখা সাইনেবােড লখা 'ইেলে া লাস িরসাচ

অ া ডেভলপেম সাসাইিট'। মােন বুঝলাম না, এরা িক বলেত চায়? একই সােথ দাকান এবং R&D ? দাকােন ঢু কেতই ূ লকায় একজন লাক এিগেয় এেস বলেলন, 'কী চাই?'

ফলুদা বলল, 'আঁিম জয়নারায়ণ বাগিচ বলিচ। আিমই আপনােক ফান কেরিছলাম আমার ভাইেপার ব াপাের।' 'আ া, আপনার ভাইেপা িডিজটাল ইেমজ েসিসং িশখেত চায়, তাইেতা?'

228

কৃি ম িনউরেন অনুরণন পব-১ 'হ াঁ হ াঁ, আঁপনার মমির দকিচ খুব ইেয় িক বেল যন...' 'শাপ?' 'শাপ; শাপ রাইট', বা া ছেলর মত হাততািল িদেয় উঠল ফলুদা। বলল, 'ইেয় মােন, আঁপনার নামটা জানা হয় িন। আর িফ এর ব াঁপােরও িকছু বঁেলনিন।'

'আসেল এটা িনভর কের স আেগ থেক কতটুকু জােন তার উপের। তার যিদ বিসক া ািমং ি ল থােক তাহেল আমরা সটা নতুন কের শখাই না, সজন িফ কম িদেলও চেল। আিম আেগ একটু চক কের দখব আপনার ভাইেপার ান কতটুকু। আর আমার নাম মানস, আিম এই দাকােনর একজন কমচারী।' তারপর উিন আমার িদেক িফের বলেলন, 'এই কি

উটােরর সামেন বেসা। তামার নাম কী?', উ র দয়ার পর বলেলন, 'আ া তেপশর ন, তুিম িক িক

া ািমং ল া ুেয়জ পােরা?'

বললাম, 'C++ এবং Python িকছু টা পাির' ' ড ড, পাইথেনর বিসক জানেলই চলেব। সবিকছু িস শখাব। কমন?'

ল রাখার জন আিম তামােক পাইথেনই ইেমজ েসিসং

িতনঘ া াশ করার পর মাথাটা ভাঁ ভাঁ করিছল। মাথামু ু িকছু ই বুঝিছ না য, ফলুদা কন আমােক এই ধরেণর কাস কিরেয় িনে । অবশ িজিনসটা বশ ই ােরি ং। ভাবলাম বািড় িফেরই িজিনস েলা েয়াগ কের দখব।

দাকান থেক বর হেয় দখলাম, ফলুদা হাসেছ। বলল, ' তার উপর অেনক শার গল। আর নয়, যেত যেত সব

বলিছ। গািড়েত ওঠ।'

ফলুদার আর আমার কেথাপকথেনর সারমম মাটামুিট এই, বইেয়র বুকমােকর ভতের এই দাকােনর ফান না ার ফলুদা পায়। খাঁজ খবর িনেতই জানা গল এই ভ েলাক কলাস চৗধুিরেক িচনত এবং তাঁর বািড়েত যাতায়াত িছল। ভ েলােকর স

েক অনলাইেন ভালমত খাঁজ িনেয়

তমন িকছু জানা যায় িন। এেতই ফলুদার সে হ হয়, স একজন কাস পিরচালক িক দাকান অিধকাংশ সময়

ফাঁকা থােক এবং এই দাকােনর নাম খুব কম লােকই জােন। যেহতু মাণ নই তাই সরাসির িজ াসাবাদ সে েহর

উে ক করেব এবং উিন পািলেয়ও যেত পােরন। সই কারেণই ফলুদা ছ েবশ িনেয় তাঁর সােথ দখা কের। আর িম. মানেসর কােছ

পূণ তথ থাকা অ াভািবক িকছু না। সটা বর করার পাশাপািশ সই িচিঠপে র সংখ া িবে ষণ

করার জন ও িডিজটাল ইেমজ েসিসংেয়র ান থাকেত হেব। তাই ফলুদা আমােক িদেয় কাস কিরেয় িনে , যােত এক িঢেল দুই পািখ মের।

বািড় ফরার পর ফলুদা একটা SD Card Adapter ধিরেয় িদেয় বলল, ' ন এইখােন িচিঠপে র সকল ন েরর ছিব

তালা আেছ। তুই যা িশেখিছস তা অ া াই কের িডিজটাল এিডট াবল িডিজট বানােত পািরস িকনা দ াখ। আমার

য ুর মেন হয়, এই ন র েলােতই রহেস র চািব লুিকেয় আেছ। িক এত এত ন র খাতা-কলেম িবে ষণ করেত করেত আেরকটা খুন হেয় যেত পাের। তাই আমােদর আপাতত এমন একিট িসে ম বানােত হেব যটা ইেমজ থেক এিডট াবল িডিজেট পা র করেত পাের। এবং এই কাজটা আিম তােক িদলাম।'

229

কৃি ম িনউরেন অনুরণন পব-১ 'আ া ফলুদা, আিম চ া কের দখিছ।', বেল িনেজর ঘের আসলাম। িবছানায় শরীর এিলেয় িদেয় িচ া করেত

থাকলাম, এটা কীভােব স ব? আমার িনেজরই বােজ হােতর লখা দখেল িচনেত অসুিবধা হয়, সখােন এমন িসে ম কীভােব বানাব? আ া বরং এক কাজ কির। ছিব েলার কী অব া সটা একটু দেখ নই। কি

উটার চালু কের SD Card Adapter Reader িদেয় কাডটা িরড করা

ইেমজ ওেপন কির।

কির। ফা াের ঢু েক কেয়টা

িচ ার িবষয়! ওেপন করা ফা ােরর একটা ি নশট।

230

কৃি ম িনউরেন অনুরণন পব-১

তেব একিদক থেক মুি পলাম। িতটা ইেমজ একই আকােরর অথাৎ

করেত সুিবধা হেব। নইেল আমার িনেজর এই ছিব েলােক িরসাইজ কের িনেত হত।

। তাই এেদর েসস

িতটা ফাইেলর শেষর িডিজট বেল িদে ইেমজটা কান িডিজেটর। ফলুদার আসেলই জবাব নই। আ া একটা কাজ করা যায় না? িতটা ১ এবং ০ ত গেড় কত েলা সাদা এবং কােলা িপে ল আেছ, স েলা গণনার িভি েত যিদ এেদর ভাগ করেত পাির তাহেল তা দুইটা সংখ ার মেধ পাথক ধরেত পারব!

আেগই একগাদা িচ া করার চেয় কােজ হাত িদেয় তারপর িচ া করা আমার পে যুি যু মেন হল, তাই Jupyter Notebook ওেপন কের কাড লখা

করলাম।

ইেমজ লাড করার কাড লখা

কির

যেহতু ইেমজ বারবার লাড কের পরী া করেত হেব, তাই ভাবলাম এটা করার জন একটা ফাংশন িলিখ, যটা কল

করেল অেটােমিটক েয়াজনমািফক ইেমজ লাড হেব। এই অংশটুকু আমার পে করা অত সহজ। from scipy.ndimage import imread import matplotlib.pyplot as plt from skimage.color import rgb2gray import numpy as np image_path = "./BengaliBMP/" image_count = 6000 %matplotlib inline

images = [image_path + 'bn' + str(num).zfill(5) + '.bmp' for num in range(image_count) ]

231

কৃি ম িনউরেন অনুরণন পব-১ ফলুদার দওয়া ইেমজ েলা RGB িছল অথাৎ Red , Green , Blue এই িতন চ ােনেলর সমি । এই রকম

আরও অেনক চ ােনল আেছ, যমন CMYK , Grayscale , Binary ইত ািদ। আমরা যভােব ছিব দিখ কি

উটার সভােব দেখ না। ও ধু চেন ন র। RGB হল মৗিলক িতনটা রং, যা িদেয় বািক সব রং তির করা

যায়। তাই RGB চ ােনেলর ইেমজ সাধারণত রিঙন হয়।

এইভােব কি

উটাের ম াি

আকাের সাজােনা থােক RGB চ ােনেলর ইেমজ। আমরা এেক বলেত পাির ৩

লয়ােরর 2D Matrix Array। Grayscale এবং Binary ইেমেজর

একটা।

ফলুদার দয়া ছিব েলার সাইজ িছল

ে এই চ ােনেলর সংখ া হয় মা

এবং RGB । এর মােন হে এেককটা 2D Matrix অ ােরর Row

এবং Column 32 টা কের। আমরা যিদ এর শপ িলখেত চাই তাহেল িলখব,

আকাের।

আিম এখন া াম কের এই িতনটা চ ােনল থেক কিমেয় একটা চ ােনেল আনব বা ে েল আনব। আিম যিদ এই কনভাসন না কির তাহেল আমার িনেয় আসেল আমার

সংখ ক িপে ল িনেয় কাজ করেত হত, ে েল টা িপে ল িনেয় কাজ করেত হেব যা তুলনামূলক সহজ কাজ।

এমন একটা ফাংশন এখন িলখেত হেব যখােন আিম িডিজট ইনপুট িদেল ধু ঔ িডিজেটর ইেমজ প াথ দয়। িকছু ণ িচ া কের ঝটপট িলেখ ফললাম,

def load_digit(digit, ip=image_path, ic=image_count): return [ip + 'bn' + str(num).zfill(5) + '.bmp' for num in range(ic) if str(num)[-1 ] == str(digit)]

একটু ট করা যাক িঠকঠাক কাজ করেছ িকনা, ones = load_digit(1) for one in ones: print(one)

আউটপুট আসল,

232

কৃি ম িনউরেন অনুরণন পব-১

./BengaliBMP/bn00001.bmp ./BengaliBMP/bn00011.bmp ./BengaliBMP/bn00021.bmp ./BengaliBMP/bn00031.bmp ./BengaliBMP/bn00041.bmp ./BengaliBMP/bn00051.bmp ./BengaliBMP/bn00061.bmp ./BengaliBMP/bn00071.bmp ........................

আিম ইেমজ লাড করার সাধারণ কােডর সােথ ছা একিট শত জুেড় িদলাম, যটা িকনা চক কের ন েরর শেষর িডিজট আ েমে পাস করা িডিজেটর সােথ মেল িকনা, যিদ িমেল যায় তাহেল আিম সই পথটা রেখ দব।

ইেমজ শা কির ইেমজ িঠকঠাক লাড হে িকনা সটা চক করেত হেব, one_img = imread(ones[0]) plt.imshow(one_img)

িঠকঠাক লাড হল,

ইেমজ চ ােনল চক কির এটা আসেলই RGB ইেমজ িকনা সটা চক করা দরকার, print(one_img.shape)

আউটপুট

233

কৃি ম িনউরেন অনুরণন পব-১

(32, 32, 3)

হ াঁ যটা বলিছলাম, সটাই।

ইেমেজর চ ােনল কনভাট কির ও চ ােনল চক কির one_img_gray = rgb2gray(one_img) print(one_img_gray.shape)

আউটপুট (32, 32)

এর মােন হল এর চ ােনল একটাই। ইেমেজর িপে ল কাউ করেত যাব এমন সময় ফলুদা ডাক িদল, ' তাপেস খেত চেল আয়'। কখন য ি েদ পেয় িগেয়িছল টরও পাইিন। ফলুদার ডােক খয়াল হল। সব ফাইল েলা সভ কের ডাইিনং েম িগেয় খেত বসার সময় ফলুদা বলল,

'িসধু জ াঠার কােছ একবার যেত হেব। ওেপনেসাস অ াি িভিট িনেয় কান সংবাদ আেছ িকনা তার কােছ।' ' কন ফলুদা?' 'এত বক বক কিরসেন তা। যটা বলিছ মন িদেয় শান.... '

234

কৃি ম িনউরেন অনুরণন পব-২

কৃি ম িনউরেন অনুরণন - পব ২ সি র বািটটা ফলুদা হােত িনেয় বলল, "যারা যারা খুন হেয়েছন, তারা েত েকই ত অ াি িভিটর সােথ জিড়ত।"

বা পেরা ভােব ওেপনেসাস

বললাম, " সটা বুঝেল কী কের?" -"ওের বাকচ র, সটা তা একটু গল আর িফ ওয়াক করেলই বাঝা যায়। তােক য কাজ িদেয়িছলাম তার কী খবর?"

-"আমার মেন হয় কাজটা অেনক জিটল, আমার মাথায় িকছু আইিডয়া এেসেছ, স েলা একটু েয়াগ কের দখবখন।"

-"তা কিরস, আর মাথায় রািখস কাজটা খুবই ত করেত হেব, িসধু জ াঠার সােথও একটু আেলাচনা করেত এটা িনেয়। দিখ উিন িকছু আেলাকপাত করেত পােরন িকনা।"

এরপর আর তমন কান কথা হল না, খাওয়া শষ কের িনেজর েম িফের িগেয় কি ওেপন করলাম।

উটার চালু কের ফাইল েলা

িপে ল কাউি ং ও িহে া াম িটং য কাজটা করব ভেবিছলাম সটা িদেয়ই

করা উিচৎ বেল মেন হল। এখােন একটু বেল রাখা দরকার, আিম

ছিব েলা সব বাইনাির লেভেল িনেয় আসব rgb2gray ফাংশেনর মাধ েম, মােন কােলা িপে ল েলার

িনউেমিরকাল ভ ালু এবং সাদা েলার । এই দুই মান ছাড়া অন কান মােনর িপে ল ছিবেত থাকেব না। থেম যটা করা দরকার, আরও িকছু হ ার ফাংশন িলখেত হেব যটা িদেয় আিম িটং আর কাউি ংেয়র কাজ

সহেজই করেত পারব।

import matplotlib.image as mpimg # Plots histogram of a given digit def plot_hist(digit, index): data = rgb2gray(mpimg.imread(load_digit(digit)[index])).ravel() plt.hist(data, alpha=0.5) plt.title("Histogram of " + str(digit) + " at index: " + str(index)) plt.xlabel("Pixel Value") plt.ylabel("Count") plt.show()

এই ফাংশেনর সাহােয আিম যেকান িডিজেটর িহে া াম ট করেত পারব। এর আেগ একটু িহে া াম স বিল। িহে া াম হে একটা রে র মেধ একটা ভ ালু কতবার আেছ তার বার ট।

েক

235

কৃি ম িনউরেন অনুরণন পব-২

সহজভােব বলেল এভােব ব াখ া করা যায়,

{ ধির আিম একজন ু লিশ ক এবং আিম আমার

জন ছা েদর গিণত িবষেয়র ন েরর িহে া াম ট করেত

চাি । তাহেল আিম থেমই য কাজটা করব সটা হে পরী ায় সেবা ন র ভাগ করব। িহসােবর সুিবধােথ আিম

ক আিম কত েলা রে

ক ভাগ কির তাহেল িতভােগ র হেব অেনকটা এরকম

এই য আিম কত লা রে ক াটাগির করলাম এ েলােক বেল এক একটা bin এরপর আিম িহসাব করব,

মাক পেয়েছ এমন কতজন ছা আেছ,

কতজন আেছ এভােব একিট ডটা টিবল তির করব।

মাক পেয়েছ এমন

িনেচর সাজােনা ডটােটিবল পাইথেন অেটােমিটক তির করা যায় ধু hist ফাংশন কল করার মাধ েম।

া ন েরর তািলকা 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 100, 100, 100, 100, 100

Bins of Mark ( া ন র)

Count (কতজন পেয়েছ)

236

কৃি ম িনউরেন অনুরণন পব-২

# Plotting histogram of the above data table data = np.array([20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 , 40, 40, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 100, 100, 100, 100, 100]) # For simplicity, bin starts from 20 upto 100 and the width of a bin is 20 bins = np.arange(20, 120, 20) plt.hist(data, bins=bins) plt.show()

া ন র থেক া িহে া াম

} আমােদর ইেমেজ আেছই দুইরকেমর মান, একিট হল আেরকিট হল । সে ে িহে া াম আসেব দুইটা বার িক তােদর হাইট কত হেব সটা িনভর করেব বা কতবার আেছ তার উপর। একটা ইেমেজর িহে া াম বর করা দখা যাক আমার তিরকৃত ফাংশন িদেয়। আিম এখন '১' এর যত েলা ছিব আেছ তােদর িলে র থম ছিবটার িহে া াম ট করব িনেচর কাড িদেয়।

237

কৃি ম িনউরেন অনুরণন পব-২

# Plotting histogram of digit 1 from index 0 plot_hist(1, 0)

আউটপুট

এখন দখেত হেব িতটা িডিজেটর িহে া াম কতটা আলাদা হয়, কারণ তাহেল আিম একটা সেহাি ং বসােত পারব য িপে ল ভ ালু এর সংখ া বা িপে ল ভ ালু এর সংখ া এত েলা হেল সটা িডিজট হেব।

ইত ািদ

ò ও ó এর মােঝ তু লনা দুইটা িডিজট যিদ আিম িচনেত চাই তাহেল তােদর মেধ এমন একটা সাধারণ বিশ থাকেব যটার মাধ েম আিম

আলাদা করেত পারব। যমন হেত পাের কত েলা কােলা/সাদা িপে ল িত ইেমেজ আেছ। যিদ আিম দিখ য ò এর

ে কােলা িপে েলর সংখ া ó এর তুলনায় ৫০ টা বিশ থােক তাহেল আিম বলেত দুইটা ইেমজ তুলনা কের

বেল িদেত পারব কানটা ò এবং কানটা ó ।

িহে া াম িটংেয়র মাধ েম তুলনা সংখ াগত তুলনায় যাওয়ার আেগ িভজুয়াল ক সা

ািরজেনর িবষয়টা মেন ধরল। তাই সংখ া ১ এর কেয়কটা

েলর িহে া াম ট কের দখব কান প াটান পাওয়া যায় িকনা।

# Plotting histogram of five instances of digit 1 for i in range(5): plot_hist(1, i)

চারটা িহে া াম ট পলাম,

238

কৃি ম িনউরেন অনুরণন পব-২

239

কৃি ম িনউরেন অনুরণন পব-২

এখােন একই সংখ ার িবিভ স া

েলর িহে া াম ট করলাম। আশানু প ফলাফল পাি না কারণ সাদা ও

কােলার িপে ল সংখ ার কান িনিদ মান নই!

িনউেমিরকাল ভ ালু িদেয় তু লনা এই তুলনা করার আেগ আমার দখেত হেব আিম য িভি েত আগাি সটা কাজ করেব িকনা। তাই আমার অেনক েলা স া

ল িনেয় আমার ধারণা েয়াগ কের দখেত হেব আিম কতটা িঠক বা ভুল। আিম ১ ও ২ এর থেক

িত িডিজেটর ১০০ িট কের ইেমজ িনেয় গড় কের দখব ১ ও ২ সংখ ায় কােলা ও সাদা িপে ল কত েলা আেছ।

যিদ একটা িবশাল পাথক পাই তাহেল খুব সহেজই আিম এমন একিট িসে ম তির করেত পারব যটা ১ ও ২ িচনেত পাের।

আর দির না কের ঝটপট

করলাম,

240

কৃি ম িনউরেন অনুরণন পব-২

# Returns the pixel count by category def pixel_count(digit, index): # Reading an image, squishing the multidimensional array into single dimension data = rgb2gray(mpimg.imread(load_digit(digit)[index])).ravel() ones = [i for i in data if i == 1] zeros = [i for i in data if i == 0] value_dict = { "white_count" : len(ones), "black_count" : len(zeros) } return value_dict

# Comparison between two digits [applying basic statistics] one_black_pixels = [] one_white_pixels = [] two_black_pixels = [] two_white_pixels = [] for i in range(100): one_black_pixels.append(pixel_count(1, i)['black_count']) one_white_pixels.append(pixel_count(1, i)['white_count']) two_black_pixels.append(pixel_count(2, i)['black_count']) two_white_pixels.append(pixel_count(2, i)['white_count']) # Calculating the mean one_black_pixel_mean = np.mean(one_black_pixels) one_white_pixel_mean = np.mean(one_white_pixels) two_black_pixel_mean = np.mean(two_black_pixels) two_white_pixel_mean = np.mean(two_white_pixels) print("1 [white] : {0}\n1 [black] : {1}".format(one_white_pixel_mean, one_black_pixel_mean )) print(" -- ") print("2 [white] : {0}\n2 [black] : {1}".format(two_white_pixel_mean, two_black_pixel_mean ))

আউটপুট

241

কৃি ম িনউরেন অনুরণন পব-২

1 [white] : 646.16 1 [black] : 377.84 -- 2 [white] : 726.47 2 [black] : 297.53

অথাৎ সংখ া ১ এর ১০০ িট ইেমজ িনেয় তােদর সাদা ও কােলা িপে েলর সংখ া গড় করেল আমরা পাই যথা েম এবং সংখ া ২ এর

ে সটা

এবং

এতিট।

একটা পাথক ল ণীয়। িক আমােক গড় না কের আলাদাভােব তােদর কাউ দখেত হেব। গড় সবসময় এ ি ম মােনর িদেক ধািবত হয়।

১ ও ২ এর িপে ল কাউ এর পাথেক র িবে ষণ আিম সংখ া ১ ও ২ থেক িত সংখ ার ৫০ িট কের স া

ল নব। তারপর তােদর সাদা িপে ল কাউে র পাথক

একিট অ ােরেত রাখব। আিম আসেল দখেত চাি ১ ও ২ এর মেধ িপে ল কাউ কতটা পিরবিতত হয়। যিদ

িমিনমাম িপে ল সংখ া একদম কম হয় তাহেল আিম তােদরেক ধু িপে ল কাউে র মাধ েম আলাদা করেত পারব না।

# Finding out difference between white count between 1 and 2 values = [] for i in range(50): values.append(abs(pixel_count(1, i)['white_count'] - pixel_count(2, i)['white_coun t'])) ## If checking is needed #print(values[i]) # Maximum and minimum of the collected difference print ("Minimum: {0}".format(np.min(values))) print ("Maximum: {0}".format(np.max(values)))

আউটপুট: Minimum: 6 Maximum: 335

নাহ, িমিনমাম একদমই কম! যিদ ৫০-১০০ হত তাহেল হয়ত একটা জেহা িদেত পারতাম, িক এখন সটা স ব হেব না। আিম আবার এখােন absolute মান ব বহার কেরিছ। এর মােন হল, এমনও হেত পাের ১ এ সাদা

িপে েলর সংখ া ২ এর চেয় বিশ অথবা কম! তার মােন িপে ল কাউ প িতেত আেদৗ বাঝার কান উপায় নই!

242

কৃি ম িনউরেন অনুরণন পব-২

িদেশহারা হেয় গলাম। এমন সময় ফলুদা ঘের েবশ করল। -'িসধুজ াঠােক ফান কের পলাম, চল দখা কের আিস।' -' ফলুদা, আিম য আইিডয়া বর কেরিছ সটা কাজ করেছ না।' -' তার আইিডয়াটা কী িছল?' -'সাদা আর কােলা িপে ল কাউ কের সংখ া িনধারণ!' িকছু ণ আ ুল মটিকেয় ফলুদা বলল, -' টাটাল িপে ল কাউ যিদ ায় একই আেস সে ে তুই পিজশন ভেদ িপে ল ডনিসিট মজার করেত

পািরস। যমন আমরা ৪ িলখেল মাঝখােনর িদেক যতটা কােলা িপে ল পাওয়া যােব ০ ত সই তুলনায় অেনক কম পাওয়া যােব এবং কান

ে যােবই না।'

-'বুঝলাম না, আেরকটু পির ার কের বল তা?' সাইেজর একটা 2D Square Magnifying ােসর কথা িচ া কর, এটা আিম ইেমজ ম াি ে র

-'

একটা অংেশ েজ করেল সখানকার িপে ল েলা দখেত পাব, তাই না?' 'হ াঁ, তাহেল?' -'তাহেল ম াগিনফাইিয়ং াস টা আিম যিদ আরও ডােন ৫ ঘর বা ছিবর আেগর িপে ল েলা দখেত পাব?'

ে িপে ল সরাই, তাহেল কী আিম

-'না!', পর েণই ফলুদার কথা বুঝেত পারােত বললাম, 'আ া তারমােন আিম একটা আিবটরাির সাইেজর ম াি

ক এভােব 2D েন ইটােরট কের পিজশনওয়াইজ িপে ল ডনিসিট মাপব?!'

-'হ াঁ, সটা পের কিরস, আপাতত আর কথা নয় এ ু িণ বর হেত হেব আমােদর।' মেন মেন ফলুদার তািরফ না কের পারলাম না, ওর অেনক েলা েণর মেধ একটা হল; নতুন কান সমস া হােত এেলই ও সটার উপর ািড করা

কের দয় এবং যত ত স ব সটা স

আিম য কেব িশখব সটাই বুঝেত পারিছ না। জানুয়ািরর মাঝামািঝ, শীত মােট পড়া

েক আপেডেটড হওয়ার চ া কের।

কেরেছ, তােতই বাইের বশ ঠা া, আর িবেকেলর িদেক তা এেলােমেলা

দমকা হাওয়ায় বরেনাই মুি ল। সসব িকছু র তায়া া না কের একটা পুলওভার চািপেয় বর হেয় গলাম ফলুদার সােথ।

-' ফলু িমি র, এতিদন পর হঠাৎ রণ করেল য? পসার খুব বেড় গেছ মেন হয়?', সাফায় বেস বলেলন িসধুজ াঠা।

-'আপনার আশীবােদ তা িকছু টা বেড়েছ বিক!' -'তুিম িন য়ই অধ াপক হত াকাে র ব াপাের আমার সােথ দখা করেত এেসছ?'

243

কৃি ম িনউরেন অনুরণন পব-২ একটা চওড়া হািস িদেয় ফলুদা বলল, 'কীভােব বুঝেলন?' -'কারণ, তুিম জান আিম ই ােরি ং ঘটনা পড়েত ও সং হ করেত ভালবািস, ধু ধু একজন মধ িব অধ াপকেক কন খুন করা হল সটা বশ রহস জনক ব াপার। ভ েলাক যেহতু ওেপনেসাস অ াি িভিটর সােথ জিড়ত িছল,

তামার ধারণা সকারেণই হয়ত উিন খুন হন। আর আিম িনেজও ওেপনেসাস কিমউিনিটর একজন অ াি ভ সদস

িছলাম। তাই দুইেয় দুইেয় চার করেত কান সমস া হয় িন।'

-'আপিন গােয় ািগির করেল আমােদর মত াইেভট ইনেভি েগটরেদর পেথ বসেত হত!', পিরেবশ হা া কের ফলুদা বলল।

-'হাহা, আিম অেনক িকছু করেল অেনেকরই পেথ বসেত হত, তাই িকছু ই কিরিন! ধু মাই ওেপন রেখ যতটা স ব ানাজন করা যায় ধু সই পেথই হাঁটিছ! তা বল, কী জানেত চাও?'

-'অধ াপেকর পাশাপািশ শশা মুখাজী নােমর একজন ভ েলাক খুন হন, ওনার পশা জানা যায় িন। এমনিক স

িতেবশীরাও জােন না এ ব াপাের িকছু বলেত পারেছ না। আিম ধারণা করিছ এই দুই ভ েলাকই কানভােব িকত। অিভয়াসিল এটাও একটা কারণ য তাঁেদরেক একইভােব হত া করা হয়। আপিন শশা বাবু স

জােনন িকনা সটা িজ াসা করেত আসলাম'

েক িকছু

িকছু ণ সবাই চুপচাপ, বয়ারা এেস চা, চানাচুর আর িব ু ট িদেয় গল। িকছু করার িছল না দেখ আিম একটা িব ু ট িনেয় খেত

করলাম। িসধুজ াঠা বলেলন, 'নাহ, নামটা একদম মেন পড়েছ না, আ া এক িমিনট।', বেলই ঘেরর

ভতের চেল গেলন।

িঠক ায় তৎ ণাৎই একটা বই হােত েবশ করেলন, 'এটােক বলেত পােরা ওেপনেসাস কি িবউটর িডের ির, এখন এইসব িজিনস আমার কােছ আেছ জানেল পুিলেশ ধের িনেয় যােব। যিদ শশা বাবু সিত ই ওেপনেসাস অ াি িভিটর সােথ জিড়ত থােকন তাহেল অবশ ই তার বােয়া এখােন থাকেব।'

বেল বইটা টিবেল রেখ পাতা ও ােত

করেলন। আিম বশ আ েহর সােথ দখেত থাকলাম। টকেনালিজক াল

অ াডভা েমে র অন তম হািতয়ার ওেপনেসাস কি িবউশন। এত এত কা ক পুিঁ জ কের। হয়ত কি িবউশন এখন িনিষ িক িরসাচ থেক

সফটওয় ার

ািন দাঁিড়েয় আেছ ওেপনেসাস টুলস

কের সবকােজর িভি িছল এই ওেপন

াক।

িডের ির ঘাঁটেত ঘাঁটেত িসধুজ াঠা বলেলন, 'নাহ এখােন তা ঔ নােম কাউেক খুেঁ জ পাি না!' এমন সময় আিম জাের বেল উঠলাম, 'িসধু জ াঠা থামুন!'

িসধুজ াঠা চমেক আমার িদেক তাকােত ফলুদা িডের ির থেক চাখ না সিরেয় বলল, 'মানসবাবুও তাহেল ওেপনেসাস কি িবউটর িছেলন!'

-'ও আ া উিন? উিন তা তমন কি িবউট করেতন না, তখন একটা

িছল এবং কি িবউটরেদর অন চােখ

দখা হত। উিন বাধহয় জুেগ িনেজ নাম এি কেরিছেলন। উে খেযাগ কান কি িবউশন তার ঝুিলেত নই। তামরা চেনা কীভােব এঁেক?' বলেলন িসধু জ াঠা।

-' স অেনক কািহনী িসধু জ াঠা, আপনােক অন সময় বলব। হেত পাের এটা কাইি েড , শশা মুখাজীর মৃ তু র কারণ হয়ত অন িকছু । যাই হাক, একটা িসে ম িব করেত চাি সটা হােত লখা বাংলা িডিজট িরকগনাইজ করেত পাের। তাপেসই মূল কাজ করেছ িক এ ব াপাের আপনার মতামত নেল ভাল হত!', বলল ফলুদা।

244

কৃি ম িনউরেন অনুরণন পব-২ -'আ া, তামরা িন য়ই নেলজ বজড মথেড আগা ? সটা খুব একটা ভাল কাজ করেব না, তামরা বরং

ািটসিটক াল ও ব ািবিলি ক অ ানালাইিসস কর। আিম একটা বই িদেয় িদি , পড়েল বশ িকছু িজিনস পির ার

হেব। আর কান িকছু ইি েমে শেন সমস া হেল আমােক বলেত পার। তেব ঘুণা েরও কউ যন টর না পায় তামরা এ িজিনস ডেভলপ করছ!'

বেল িসধুজ াঠা আবারও ঘের চেল গেলন ও িকছু ণ পেরই চেল আসেলন, তার হােত একটা ছাট বই। বইটা

ফলুদার হােত িদেয় বলেলন, 'বইটা বশ ভাল, তেব আবারও একই কথা। খুব সাবধােন কাজ করেব। ব অফ লাক!' ব ািবিলিট কেলেজ থাকেত পেড়িছলাম, মেন নই িক পেড়িছলাম। স বত বুিঝিন, যাই হাক িসধু জ াঠার দওয়া

বইটার নাম, A First Course in Probability।

বািড়েত িফেরই আমােক ফলুদা বলল, 'আিম রােত আর িকছু খাব না, িড াব করিব না একদম। য কাজ িদেয়িছ ডবেয়র মত কের রািখস, তার সােথ এ িনেয় কাল আমার কথা হেব। বুেঝিছস?'

আিম মাথা নেড় িনেজর ঘের চেল গলাম। কাজটা করেত বশ আলেসিম লাগিছল। তাই মনি র করলাম একটু বাইের থেক বিড়েয় আিস।

রােতর বলা িফের শংকরেক ফলুদার কথা িজে স করেত বলল, ' ফলুবাবু তা ঘর থেক বর হনিন, তামার খাবার িক িদেয় দব?'

আিম মাথা নেড় িচ া করেত থাকলাম, ফলুদা িক আজেকর মেধ বইটা শষ করেব নািক? নািক ও রহেস র জট

ছাড়াে ? আর বিশ ণ িচ া করেল হয়ত আমার িনেজর মাথায়ই জট লেগ যত তাই আিম িচ া করা বাদ িদেয় খেয় ঘুিমেয় গলাম।

সকােল উেঠই বঠকখানায় ফলুদােক পেয় গেল বললাম, 'িকছু কূলিকনারা করেত পারেল?' ফলুদা স কথার জবাব না িদেয় হােতর কেয়ন দিখেয় বলল, ''এই কেয়নটা আিম যিদ টস কির তাহেল নািক

উঠেব

?

বললাম, 'এত খুব সহজ, ৫০%-৫০% চা !' -'তুই ৫০-৫০ কীভােব িহসাব করিল? আর এ -'ইনটুইশন িদেয়! এ

া িল বলেত পারিব হড হেব নািক টইল?'

া িল িক হেব সটা বলেত পারব না, সেতা খুব কিঠন কাজ!'

আ া, এবার আেরকটা

কির,

-'ধর, আিম কেয়নটা একটু বাঁিকেয় ফললাম। এরপর তােক বললাম, পরপর িতন টেস দুইটা হড ওঠার স াবনা কত?'

িকছু ণ মাথা চুলেক বললাম, 'নাহ ফলুদা, পারিছ না!'

245

কৃি ম িনউরেন অনুরণন পব-২ -"পড়ােলখা িক কিরস িকছু ? িক ম াথ িশখায় তােদর ু েল? তােক ধমক িদেয় আসেল লাভ নই, িশ াব ব াই এরকম। গিণেত আমরা ইনটুইশন থেক কি কি

উেটশেনর জন আমােদর তা কি

"আ া এটা বলেত পারিব কন এ

উেটশন বিশ কির আর স কারেণই ম াথ বািরং লােগ।

উটার আেছই। সবেথেক বিশ জ ির ইনটুইশন।"

া িল বলাটা টাফ য

টস

হেব নািক

?"

মাথা নাড়েতই ফলুদা বলল, "নাহ, তােক িদেয় িক ু হেব না। এখন দখ, " ধমক িদেয় ফলুদা একটা কাগেজ লখা করল সােথ বলেত লাগল, "ধর এটা একটা কেয়ন যটা আিম টস করব, িফিজে এেক যিদ আিম ইকু েয়শন িদেয় মেডল করেত চাই তাহেল ব াপারটা হেব এরকম"

246

কৃি ম িনউরেন অনুরণন পব-২

" দেখিছস কতটা জিটল হেয় যাে ? এসব বেলমেক ম ােথেমিটক ািল হ াে ল করেত ও জিটল মেডল িস

ল করেত আমরা ব ািবিলিটর সাহায নই। আিম যিদওবা কানভােব িফিজ খািটেয় মেডল তির কির

তবুও তুই অত েলা মান কখেনাই ঔ সমেয় মাপেত পারিব না। আ া তুই য ৫০-৫০% চা বলিল, সটা কী হােত কলেম দখােত পারিব?"

নাহ, সটাও আমার ারা স ব না, তাই চুপ কের থাকাই বুি মােনর কাজ মেন হল। ফলুদা ওর ল াপটপ বর কের পাইথেন একটা কাড িলখল,

247

কৃি ম িনউরেন অনুরণন পব-২

import numpy as np import matplotlib.pyplot as plt # Expressing Head|Tail in terms of 1|0 TAIL = 0 HEAD = 1 SMALL_SAMPLE_COUNT = 10 LARGE_SAMPLE_COUNT = 5000 ## Taking 10 samples & 5000 samples for plotting histogram coin_toss_10_samples = np.random.choice([TAIL, HEAD], SMALL_SAMPLE_COUNT) coin_toss_5000_samples = np.random.choice([TAIL, HEAD], LARGE_SAMPLE_COUNT) data = [coin_toss_10_samples, coin_toss_5000_samples] titles = ['10 Coin Toss Result', '5000 Coin Toss result'] f, a = plt.subplots(2, 1) a = a.ravel() for index, axis in enumerate(a): axis.hist(data[index]) axis.set_title(titles[index]) axis.set_xlabel("Heads or Tails") axis.set_ylabel("Head / Tail Count") plt.tight_layout() plt.show()

রান করােত এটা আসল,

248

কৃি ম িনউরেন অনুরণন পব-২

" থেম আিম যখন ১০ বার টস করলাম, দখ যতটা না (ি

এেসেছ তার তুলনায়

এর সংখ া বিশ

েণরও বিশ!)। িক আিম যখন ৫০০০ বার টস করলাম তখন দখ পাথক কতটা কেম আসেছ? এখন

িক বলা যেতই পাের

। বেল, স া

েলর সংখ া যত বিশ হেব.."

249

কৃি ম িনউরেন অনুরণন পব-৩

কৃি ম িনউরেন অনুরণন: পব - ৩ "...র ◌ া ম ভ ািরেয়বেলর মান েলা তত নরমািল িডি িবউট হেব! এখান থেকই নরমাল িডি িবউশন বা

গাউিসয়ান (Gaussian) িডি িবউশেনর উৎপি িক অেনেক মেন কের নরমাল িডি িবউশেনর ফলাফল স াল িলিমট িথওেরম।"

মাথামু ু িকছু ই বুঝলাম না, ফলুদা একনজর দেখ একটা চারিমনার ধিরেয় বলা

করল,

-" তার ােস খুব ল া কয়জন াসেমট আেছ?" -"উম, বিশ নয় দুই একজন হেব।" -"খুব খােটা?" -"তাও বিশ নয়, দুই িতনজন।" -"বািক সবাই মাঝাির?" -"হ াঁ" বেল িচ া করেত থাকলাম ফলুদা হঠাৎ আমার াসেমটেদর হাইট িনেয় এত িচি ত কন। পর েণই ও বলল, -"এটাই হল নরমাল িডি িবউশন!" -"মােন?" -"মােন হল, তােদর সবার হাইট িনেয় আিম যিদ গড় কির তাহেল দখা যােব গেড়র মান মাঝাির হাইেটর আেশপােশই

আেছ। তােদর ােস যিদ বিশ হাইেটর ছা বিশ থাকত তাহেল গেড়র মান অবশ ই বিশ আসত। ধু তার ােস

না, তার আেশপােশ একটু নজর িদেলই দখেত পারিব সবিকছু ই নরমািল িডি িবউেটড। তেব আিম ধু তার াস িবেবচনা করেল সটা িকছু টা ইউিনফম হেব। িক যখন আিম আরও কেয়কিট ােসর সবার হাইট মাপব তখন সই

িডি িবউশনটা নরমাল িডি িবউশেনর আকার ধারণ করেব। গাউিসয়ােনর দুইটা প ারািমটার হল এ েপে শন বা গড় এবং ভ ািরেয় । আিম তােদর সব ােসর সবার গড় আর ভািরেয় পেল আিম বেল িদেত পারব িঠক কত শতাংশ ছাে র উ তা িঠক কতটুকু হেত পাের।"

ছাইদািনেত ছাই ঝেড় ফলুদা বলেত থাকল, "এখন যিদ তুই বাে টবল য়ারেদর কথা িচ া কিরস, তাহেল দখিব তারা হাইেট কমেবিশ একই। এেক আমরা বলব ইউিনফম িডি িবউশন।

ম াথেমিট যতটা আকাশ কুসুম ভািবস অতটা িক না, কারণ কাল ি ডিরখ গাউস কখেনাই নরমাল

িডি িবউশেনর জন এত সু র একটা ইকু েয়শন তির করেতন না। তার নরমাল িডি িবউশেনর ডিফিনশন

ািটি কাল ক ালকুেলশন অেনক সহজ কের দয়। জািনস িক? দুইটা গাউিসয়ােনর যাগফল / ণফলও হয়

আেরকটা গাউিসয়ান। তারমােন আিম যিদ একটা মান এক নরমাল িডি িবউশন থেক িনই, আেরকটা মান আেরকটা নরমাল িডি িবউশন থেক িনই; তােদর ক ালকুেলশেনর ফেল আিম আেরকটা িডি িবউশন পাব িক সটাও হেব

250

কৃি ম িনউরেন অনুরণন পব-৩ নরমাল এবং তার গড় ও ভ ািরেয় আিম ক ালকুেলট কেরই পেত পাির। আরও মজার িবষয় হে এই িম ড গাউিসয়ান থেক অেনক িকছু ধারণা করা যায়। তেব পৃিথবীেত িপওর গাউিসয়ান বেল কান িকছু নাই, নরমাল িডি িবউশন হে ন াচারাল িডি িবউশেনর একটা অ া ি েমশন মা ।"

গাউিসয়ান জনােরশন এরপর ফলুদা ঘর থেক ল াপটপটা এেন আমােক বলল, -" তােক আিম এখন হােত কলেম দখাব, আিম িক বাঝােত চাইিছ। দখ," N = 1 number_of_students = 10000 u_ = np.random.uniform(0.,1.,(number_of_students,N)) mean_ = np.mean(u_,axis=1) print (u_.shape) plt.figure() plt.hist(mean_,bins=10, normed=True) plt.show()

"গাউিসয়ান িডি িবউশন যেহতু কি িনউয়াস র ◌ া ম ভ ািরেয়বেলর জন হয়, যখােন হাইট একটা িডি ট ভ ালু। তাই আমােক এখােন একটু ি েয়িটিভিট খাটােত হেব। ধের ন, তােদর হাইট কি িনউয়াস এবং এর মান থেক এর মেধ । তাহেল এই

এর মােন হে তােদর ােস এতজন ু েড আর

এর মােন আিম একটা

াস িবেবচনা করিছ। এটা যিদ আিম ট কির তাহেল াফ হেব মাটামুিট এরকম।"

-"এবার যিদ আিম

বসাই, অথাৎ ধর তােদর ােসর মত আেরকটা াস িক সখােনও

আেছ। তাহেল তার গড় যিদ আিম ট কির তাহেল াফ আসেব এমন। "

ু েড

251

কৃি ম িনউরেন অনুরণন পব-৩

N = 2 number_of_students = 10000 u_ = np.random.uniform(0.,1.,(number_of_students,N)) mean_ = np.mean(u_,axis=1) print (u_.shape) plt.figure() plt.hist(mean_,bins=10, normed=True) plt.show()

"ব াপারটা বুেঝিছস? আেরকটু পির ার করেল, ধর তােদর ােস ু েড আেছ িতনজন অথাৎ িকনা number_of_students = 3 এবং যােদর হাইট ধির

যখােনও ু েড িতনজনই এবং তােদর হাইট

ভ ালু িদেয়,

এবং আেরকটা াসও আিম িবেবচনায় আিন, । তাহেল আিম

এর ট টা করব এই

এখন িচ া কর number_of_student এবং N এর মান বাড়েত বাড়েত অেনক হয় তাহেল তার ট হেব কীরকম? আিম ঢাঁক িগেল বললাম, "গাউিসয়ান িডি িবউশন?" -"রাইট! এই দ াখ"

252

কৃি ম িনউরেন অনুরণন পব-৩

N = 1000 number_of_students = 10000 u_ = np.random.uniform(0.,1.,(number_of_students,N)) mean_ = np.mean(u_,axis=1) print (u_.shape) plt.figure() plt.hist(mean_,bins=100, normed=True) plt.show()

ফলুদা বেল চলল, -"সবসময় সবিকছু েত নরমাল িডি িবউশন থাকেব এমন কান কথা নাই, যমন িচ া কর, কান একটা রা ায় একটা এি েড হেল সখােন সতকতা বােড় এবং িকছু সময় ধের অ াি েডে র সংখ া কেম আেস। অথাৎ অেনকটা এ েপােননিশয়ািল ড া

ড একটা ইকু েয়শন। এটােক আমরা নরমাল িডি িবউশেনর আওতায় আনেল

ক ালকুেলশন ভুল হেব, সে ে আমরা ব বহার করব পয়জন িডি িবউশন (Poisson Distribution)। এভােব িবিভ

ে র জন িবিভ িডি িবউশন ব বহার করেত হয়, আর সটা িডেপ কের তুই সমস াটা কীভােব মেডল

করিব। বুেঝিছস? এর মান বাড়ার সােথ সােথ দখ পয়জন িডি িবউশন গাউিসয়ােন পা িরত হে ।"

253

কৃি ম িনউরেন অনুরণন পব-৩

িকছু বুেঝিছ িকছু বুিঝিন, র ◌ া ম ভ ািরেয়বল কী িজিনস?! গাউিসয়ােনর গড় আর ভ ািরেয় ই বা কী? ক জােন। "এই িডি িবউশন ফাংশন েলার পাষািক নাম ব ািবিলিট িডি িবউশন ফাংশন। কি িনউয়াস ডটার জন হয় PDF আর িডসি ট ডটার জন হয় ব ািবিলিট মাস ফাংশন বা PMF। আেরকটা তথ জেন রাখ,

Distribution Function এর এিরয়া আ ার কাভ সবদা ১ হয়। তেব অবজােভশন যিদ অেনক বড় হয় বা

এর

মান যিদ অেনক বড় হয় তাহেল অন ান িডি িবউশনও নরমাল িডি িবউশেনর মত হেয় যায়। সটােতা একটু আেগ দখালামই। তােক আেরকিদন িব ািরত বলব গাউিসয়ান স

েক।"

এমন সময় ফান এল, ফলুদা ধের িকছু ণ ওিদেকর কথা েন বলল, ' সকী? ডাকািত?' ... 'আ া আসিছ।' চল তাপেস, খুেন বািড়েত এবার ডাকািত।

প িছেয় অিমতবাবুর সােথ দখা হেতই বলেলন, "মশাই আিম আমার ১০ বছেরর চাকির জীবেন এেহন কা দিখিন।

টাকা পয়সা িকছু না, একটা ডায়িরর জন একটা মানুষ কীভােব এতটা মিরয়া হেত পাের?"

254

কৃি ম িনউরেন অনুরণন পব-৩ "চাকর প ানন কমন আেছ এখন?" " কফা করােনার পর একটু সু এখন। চলুন" বঠকখানায় ঢু েকই পাওয়া গল প াননেক। স ব াথায় কাতরাে , পুেরা কািহনী এখেনা আমার জানা হয় িন।

ফলুদার কথােত মাটামুিট আ াজ করেত পারলাম। "ডাকাত এেসিছল কখন মেন পেড়?"

"বাবু, আিমেতা মেঝয় ঘুমুি লাম, সময় তা দিখিন। হঠাৎ দিখ জানলার কােছ একটা লািঠ; বইেয়র আলমািরর

উপর থেক িক যন একটা নামাে । নািমেয় যখন জানালার কােছ িনেয় আেস আিম তত েণ ঠাহর করেত পাির িক হয়। দৗেড় ধরেত িগেয় ওর সােথ আেস।"

া ি হয়। আিম যখন বইটা ধের টান িদই আমার সােথ কত িল কাগজ িছঁেড়

" চহারা দখেত পাও িন িন য়, অবয়েবর গড়ন মেন আেছ?" "তা মেন নই বাবু" "আ া, অিমতবাবু; বইেয়র কাগজ েলা পাওয়া যােব?" "ওেতা আিম রিড কেরই রেখিছ। দখুন।" আিমও িক িদেয় দখার চ া করলাম, বুঝলাম না িকছু । িহিবিজিব লখা, িকছু ডায়া াম িকছু ইকুেয়শন।

255

কৃি ম িনউরেন অনুরণন পব-৩

ধু বুঝলাম ডিরেভশেনর চইন ল ও পািশয়াল ডিরেভিটভ করা হেয়েছ। এর বাইের িকছু বাঝা গল না। ফলুদা অেন ণ কুঁচেক তািকেয় রইল কাগজটার িদেক। Local Gradient, Sigmoid টােমর সােথ আিম

একদম পিরিচত না, ফলুদাও িক অপিরিচত?

িকছু ণ পের ফলুদা বলল, "কাগজটা আিম িনেয় যাি অিমতবাবু।" 256

কৃি ম িনউরেন অনুরণন পব-৩ অিমতবাবু বলেলন, "অবশ ই। িচিঠর ব াপারটা িনেয় িকছু সুরাহা করেত পারেলন?" ফলুদা বলল, " সটা হেয় গেল সবার আেগ আপিনই জানেত পারেবন। আজ তাহেল চিল, চল তাপেস।" শানামা

ওর সােথ সােথ রওনা িদলাম।

বর হেয় িজ াসা করলাম, "আ া ফলুদা িসগমেয়ড আর লাকাল িডেয় কী? কাগেজ াবাল িডেয় লখা নই কন?"

-"আমােক এটা বল, তুই িডেয় বলেত কী বুিঝস?" -"ফাংশন ডিরেভিটভ করেল যটা আেস, বাংলায় যােক বেল ঢাল" -" ড, তারমােন লাকাল িডেয় মােন?" -"তারমােন কান একটা ফাংশেনর অেনক েলা পেয়ে র িডেয়ে র একটা?" -" ভির ড, আমার তাই মেন হে । িক াবাল িডেয় বলেত িকছু হওয়ার কথা না আবার হেতও পাের। হয়ত বইেয়র বািক অংেশ এর ব াখ া থাকেত পাের যটা আমােদর হােত নই। তুই ট াি িনেয় সটান বািড় চেল যা। আিম আসিছ ঘ াখােনক পের।"

িক করব ভেব পাি লাম না, ভাবলাম িগেয় হােত লখা বাংলা িডিজেটর কাজটা আগাই। ফলুদা য বুি িদেয়িছল, সটা কােজ লাগােনার দরকার। মেন পড়েছ িকছু িকছু , ছিব থেক

পূণ বেল মেন হয় তােক Region of Interest (ROI) বেল।

যেহতু ছিবর আকার

পূণ অংশ িচি ত করােক বা য অংশ

তাই ভাবলাম বরং ছিবেক আিম টাটাল ৯ টা িরিজওেন ভাগ কির। তারমােন

এটায় প াচ হেব নয়টা আর প ােচর আকার হেব িদেয় িসেল করেত পারব না। তাই আমার

এত, িক আিম তা আর ছিবর অ াের ভ াংেশর ইে

এর সবিন রাউ মান বা

ব বহার করেত হেব।

আিম যিদ এমন একটা কাড িলিখ যটা একটা ছিবর ৯ টা িরিজওন ব আকাের দখােত পাের তাহেল আমার সখান থেক ভ ালু িনেত সুিবধা হেব। এটা মেন কের আিম কাড লখা

কের িদলাম।

257

কৃি ম িনউরেন অনুরণন পব-৩

# Importing necessary libraries from scipy.ndimage import imread import matplotlib.pyplot as plt import matplotlib.image as mpimg from skimage.color import rgb2gray import matplotlib.patches as patches import numpy as np from PIL import Image import math from skimage import io, filters, draw # Loading and converting an image into numpy array one_array = np.array(Image.open(load_digit(1)[0]), dtype=np.uint8) # Getting region of interest [ROI] height = math.floor(32/3) width = math.floor(32/3) for i in range(3): for j in range(3): fig, ax = plt.subplots(1) ax.imshow(one_array) print("Patch Coordinates: {}, {}".format(j, i)) rect = patches.Rectangle((height * i, width * j), height, width, linewidth=5, edgecolor='r', facecolor='none') ax.add_patch(rect) plt.show()

আউটপুট আসল এটা, Patch Coordinates: 0, 0

Patch Coordinates: 1, 0

258

কৃি ম িনউরেন অনুরণন পব-৩

Patch Coordinates: 2, 0

Patch Coordinates: 0, 1

Patch Coordinates: 1, 1

259

কৃি ম িনউরেন অনুরণন পব-৩

Patch Coordinates: 2, 1

Patch Coordinates: 0, 2

Patch Coordinates: 1, 2

260

কৃি ম িনউরেন অনুরণন পব-৩

Patch Coordinates: 2, 2

যেহতু এটা বারংবার ব বহার করব তাই এটােক ফাংশন বানােনাই উিচৎ বেল মেন হল। def draw_roi(digit, index): image_array = np.array(Image.open(load_digit(digit)[index]), dtype=np.uint8) height = math.floor(32/3) width = math.floor(32/3) for i in range(3): for j in range(3): fig, ax = plt.subplots(1) ax.imshow(image_array) print("Patch Coordinates: {}, {}".format(j, i)) rect = patches.Rectangle((height * i, width * j), height, width, linewidth= 5, edgecolor='r', facecolor='none') ax.add_patch(rect) plt.show()

এবার আিম সহেজই য িডিজট ও যত ন র ছিবর িরিজওন দখেত চাই এই ফাংশন করেলই হেব।

261

কৃি ম িনউরেন অনুরণন পব-৩ এখন সবেচেয়

পূণ কাজ, ROI এ িপে ল ডনিসিট মজার করেত হেব এবং পিজশনওয়াইজ ডনিসিট কত হয়

তার একটা িহেসব রাখেত হেব। যমন ন এর চািরিদেক িকছু না িকছু থাকার কথা। আবার ১ এর অন ান



পিজশেন িপে ল ডনিসিট কম হওয়ার কথা িক



পিজশেন ডনিসিট কম হেব িক

ে বিশ থাকেব। এভােব আিম িকছু ল তির কের সহেজই ািসফাই করেত পারব।

দরজায় কড়া নেড় উঠল, আিম িগেয় দরজা খুলেতই দিখ ফলুদা। সটান ঢু েক সাফায় গা এিলেয় িদেয় বলল। চা

বেল িদেয় আয়েতা। চােয়র কথা বেল ফলুদার সামেন বসলাম। এরমেধ ফলুদা একটা চারিমনার ধিরেয় ধাঁয়ার িরং ছাড়েত ছাড়েত বলল, "বল কী জানেত চাস!"

বাহ, মঘ না চাইেতই জল, সচরাচর এমনটা হয় না। সুেযাগটা আিম লুেফ িনেয় বললাম, "ডায়িরটা কন খুেনর িদন িনল না?"

-"তুই বুঝিল কী কের খুন য কেরেছ ডাইিরও স িনেয়েছ?" এই র, এটা তা মাথায় আেস িন। ফলুদা বলল, -"এখােনই িবষয়টা অত ািধক জিটল হেয় যাে । য খুন কেরেছ িক খুেনর িদন ডায়ির নয় িন। ধির খুিন য ডায়ির িনেয়েছ স হল , নািক ? নািক

হে , ও

পর

রেক চেন িকনা? আরও বড়

হে ,

, তাহেল

িচিঠ পািঠেয়েছ

এর খুেনর সুেযাগ িনেয় ােথা ার করল?"

-"তুিম এত ণ কাথায় িছেল?" ফলুদা সকথার জবাব না িদেয় বলল, " তার কাজ কতদূর?" -"এেগাে , আিম পিজশন ভেদ িপে ল ডনিসিট মাপেত যাি লাম। আ া ফলুদা, কাগেজ য িহিবিজিব লখা িছল, তার িকছু বুঝেত পেরছ?"

-" সটা বাঝার জন ই বিরেয়িছলাম, দুইজন ম ােথেমিটিশয়ােনর সােথ দখা কের, িতনেট লাইে ির ঘুের আর একজন িনউেরাসােয়ি ে র সােথ দখা কের এলাম।" -"িনউেরাসােয়ি

?! এখােন িনউেরাসােয় আসেলা কাে েক? ম ােথেমিটিশয়ােনর ব াপার না হয় বুঝলাম।"

-" তার অত বুি থাকেল আমার কাজটা তুইই করিত, এবার শান িনউেরাসােয়ি

থেক অ ু ত সব তথ পলাম

তেব সটার ধারণা পাই লাইে ির থেক, বলেল িচ াও করেত পারিব না িজিনসটা এত প াঁচােলা, যা জানলাম সটা হল...."

262

More Documents from "Azizul Huq"