Machine Learning Introduction – 1: Set up your workstation


Recently, we are planning to use machine learning in one of our core product in Telenor Health. So, I am seriously looking into machine learning for the last few days. Though I have a computer science degree, to be honest, I didn’t have a good grasp on machine learning rather than having some basic knowledge of some algorithm like linear regression, K nearest neighbor algorithm and some familiarity with some machine learning term like neural network, deep learning etc. Many people are doing machine learning without having CS degree. So I thought, why not give it a try?

machine_learning-1024x724

I am writing this series in English, though I English is not very good. One reason is this will improve my English writing skill and other thing is my foreign friends could understand what I learn. So, pardon me for my writing.

I knew in the field of machine learning, two languages are very popular. One is R and another is Python. As I am already very familiar with Python, so I am going for Python. First you need to install python and other machine learning library. I assume you have already installed python in your machine. Rather than windows every operating system comes with python installed. If not, then do a quick google search and I guarantee you will figure it out.

Python has some great library for machine learning. I am going to install them right now. I will be using virtualenv for this cause I don’t want my machine filled with these libraries. Python has a very popular distribution called Anaconda. If you are using that, you will have lot of these tools already installed. But I am going for the simpler approach. I will be using pip to install these package. But before that, lets start with virtualenv setup. In your terminal just type-

pip install virtualenv

Then, I am going to create a new environment called env.

virtualenv env -p /usr/local/bin/python3

I will be using python 3.6 throughout this series. So I pass -p flag for the python3 path. As I am in macOS, that is my path. You could find the path by writing which python3 in the terminal. As the environment is created, then you can activate that by typing-

source env/bin/activate

Make sure whenever you are working with this setup, you always start is form the terminal. If you close the terminal windows, then the environment will be deactivated. You can also deactivate it by typing-

deactivate

As, our environment is ready, then lets start with numpy. This is a very popular look for numerical calculation in python.

pip install numpy

Then we will install two other dependencies named pandas and matplotlib. First one is a data analysis tool and second one is for plotting numerical data into beautiful diagram.

pip install pandas matplotlib

Then lastly install scikit-learn with pip by following command-

pip install scikit-learn

Though pip should install all the dependencies of scikit-learn, but for some weird reason, it didn’t install scipy. So, we have to install it manually as well.

pip install scipy

Now, as we have setup all our dependencies, we could check it by running-

pip freeze

You will find a tons of module installed. Thats because the libraries we installed are dependent on those libraries.

Our machine is ready for doing some fun with machine learning. See you in next episode. Happy learning.

সহজে পাইথন শেখা-০৭


আমরা এতদিন শুধুমাত্র আমাদের দেয়া ভ্যালু নিয়েই কাজ করেছি। কিন্তু কম্পিউটার প্রোগ্রামে দেখা যায় আমরা ইউজারের কাছ থেকে বিভিন্ন তথ্য সংগ্রহ করে থাকি। যেমন- আমরা হয়ত ইউজারের কাছ থেকে তার নাম, বয়স ইত্যাদি জানতে চাইতে পারি। এটা পাইথনে করা খুবই সহজ। ছোট্ট একটা উদাহরন দেখি-

>>>print “What is your name?”
>>>name=raw_input()
>>>print “Hoe old are you?”
>>>age=raw_input()
>>>print “Hello %s, you are %s years old.” % (name, age)

উপরের প্রোগ্রামটি ইউজারের কাছ থেকে তার নাম এবং বয়স জানতে চাইবে এবং সবশেষে সে তার নাম এবং বয়স প্রদর্শন করবে। এক্ষেত্রে একেক ব্যবহারকারী একেক ধরনের ইনপুট দেবে, কিন্তু আমাদের প্রোগ্রাম সে সকল ধরনের ইনপুট নিয়েই কাজ করতে পারবে।

আর একটা বিষয়, আমরা অনেক বড় বড় প্রোগ্রাম করার সময় চাইলে প্রোগ্রাম কোডে বিভিন্ন কমেন্ট লিখে রাখতে পারি। যা পরবর্তীতে আমাদেরকে ঐ প্রোগ্রাম দেখা মাত্রই বুঝতে সাহায্য করবে। এছাড়া বড় বড় প্রজেক্টে দেখা যায় অনেকে মিলে একটা প্রোগ্রাম তৈরী করে। সেক্ষেত্রে একজনের কোড অন্যজনের বুঝতে অসুবিধা হতে পারে। তাই কমেন্ট ব্যবহার করলে এক্ষেত্রে সুবিধা পাওয়া যাবে। উপরের উদাহরনটিই আমরা কমেন্ট ব্যবহার করার পরের অবস্থা দেখি-

>>>#This is a sample program
>>>print “What is your name?”	#ask name
>>>name=raw_input()			#take input as name 
>>>print “Hoe old are you?”		#ask age
>>>age=raw_input()			#take input as age
>>>#Next line will print the values
>>>print “Hello %s, you are %s years old.” % (name, age)

কমেন্ট ব্যবহার করার পর যে কেউ প্রোগ্রামটি দেখলেই বুঝতে পারবে এটা দিয়ে কি কাজ করা হচ্ছে। পাইথনে কমেন্ট করার জন্য হ্যাশ(#) ব্যবহার করা হয়। হ্যাশ চিহ্ন পাওয়ার পর পাইথন ইন্টারপ্রিটার ঐ লাইনের আর কোন কোডকে কম্পাইল করে না।

সহজে পাইথন শেখা-০৬


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

“My name is Milon.”
'I am a student of Information Technology.'

আমরা স্ট্রিংকে একটা ভ্যারিয়েবল হিসেবে ধরতে পারি। যেমন-

>>>name=”My name is Milon.”
>>>print name
My name is Milon.

এছাড়া মাল্টিলাইন স্ট্রিংও হতে পারে। মাল্টিলাইন স্ট্রিং লেখা হয় তিনটা সিঙ্গেল বা ডাবল কোটেশন ব্যবহার করে। যেমন-

>>>”””This is a multi line String.
...This is the second line.
...This is the last line of the string.”””

মাল্টিলাইন স্ট্রিং লেখার সময় আমরা পাইথন টার্মিনালে তিনটা করে ডট(. . .) দেখতে পাব।

আমরা স্ট্রিং দিয়ে মাল্টিপ্লিকেশন বা গুন অপারেটর ব্যবহার করে অনেক কিছু লিখতে পারি। যেমন-

>>>”Milon”*5
MilonMilonMilonMilonMilon

এবারে আমরা স্ট্রিংএর আরেকটা মজার ব্যবহার শিখবো। আমরা স্ট্রিংএ % নোটেশনকে প্লেসহোল্ড ক্যারেকটার হিসেবে ব্যবহার করতে পারি। যেমন-

>>>string=”Hello %s, How are you?”
>>>print string % Milon
Hello Milon, How are you?

আমরা চাইলে একাধিক ভ্যারিয়েবলও ব্যবহার করতে পারি। যেমন-

>>>name1=”Rahim”
>>>name2=”Karim”
>>>print “%s and %s are two brothers.” % (name1, name2)
Rahim and Karim are two brothers.

স্ট্রিং একটা প্রোগ্রামিং ভাষার একটা অত্যন্ত গুরুত্বপূর্ণ অংশ। ছোট্ট একটা টিউটোরিয়াল স্ট্রিংয়ের মত বিশাল বিষয়কে জানার জন্য মোটেও যথেষ্ট না। ফাংশন, লিস্ট আর টাপল সম্পর্কে জানার পর আমরা স্ট্রিং সম্পর্কে আরো বিস্তারিত জানবো।

সহজে পাইথন শেখা-০৫


এতদিন পর্যন্ত আমরা সরাসরি বিভিন্ন সংখ্যা নিয়ে কাজ করেছি। আজ আমরা দেখবো ভ্যারিয়েবল নিয়ে কিভাবে কাজ করতে হয়। ভ্যারিয়েবল শব্দটা মনে হয় বেশ ভারিক্কি হয়ে গেছে। এটাকে বাংলাতে বলে চলক। যেমন, মনে করি “রহিম” বা “করিম”। আমরা যদি রহিম বা করিম দিয়ে তাদের বয়স প্রকাশ করতে চাই, যেমন- রহিমের বয়স ২০ আর করিমের বয়স ১৮ তাহলে আমাদেরকে লিখতে হবে-
রহিম = ২০
করিম = ১৮
তাদের বয়স যদি ২০ আর ১৮ না হয়ে ২৫ আর ৩০ হয় তাহলে লিখতে হবে-
রহিম=২৫
করিম=৩০
এটাই হচ্ছে ভ্যারিয়েবল যার মান পরিবর্তিত হতে পারে।
পাইথনে ভ্যারিয়েবল লেখার পদ্ধতিটিও উপরের মতই। যেমন-

>>>rahim=20
>>>karim=18

এখন প্রশ্ন হচ্ছে ভ্যারিয়েবল তৈরী করে আমাদের লাভ কি?
আমাদেরকে প্রশ্ন করা হল, রহিম এবং করিমের মোট বয়স কত? তখন আমরা এর উত্তর দেব-

>>>rahim=20
>>>karim=18
>>>rahim+karim
38

এখন যদি রহিম বা করিমের বয়স আমরা পরিবর্তনও করি তবুও rahim+karim স্টেটমেন্ট ব্যবহার করে আমরা তাদের বয়স বের করতে পারবো। এটাই হচ্ছে ভ্যারিয়েবলের সুবিধা।

আরও অনেক প্রশ্ন থেকে যায়। ভ্যারিয়েবলের নাম কি শুধু rahim বা karim ই দেব নাকি অন্য নামও দেয়া যায়? এর উত্তর হচ্ছে যে কোন নামই দেয়া যায়। তবে নামে শুধুমাত্র লেটার, নাম্বার আর আন্ডারস্কোর(_) ব্যবহার করা যাবে। নাম দেয়ার ক্ষেত্রে একটা বিষয় খেয়াল রাখা উচিৎ, নাম অর্থপূর্ণ হওয়া উচিৎ যাতে নাম দেখেই এটা কি সেটা বোঝা যায়। যেমন-

>>>no_of_students=50
>>>marks_in_math=75

তবে অনেক বড় নাম দেয়া সুবিধাজনক না। যেমন-

>>>this_is_also_a_variable_but_not_so_useful=0

এছাড়াও প্রত্যেক ল্যাংগুয়েজেরই কিছু নিজস্ব সংরক্ষিত শব্দ আছে। এদেরকে বলে কী-ওয়ার্ড। পাইথনে এমন কী-ওয়ার্ড আছে ২৯ টি। এদেরকেও ভ্যারিয়েবলের নাম হিসেবে ব্যবহার করা যাবে না। এই কী-ওয়ার্ডগুলো হচ্ছে-

and assert break class continue
def del elif else except
exec finally for from global
if import in is lambda
not or pass print raise
return try while yield

আরো প্রশ্ন আছে। ভ্যারিয়েবলে কি শুধু নাম্বারই রাখা যায় নাকি অন্যান্য জিনিসও রাখা যায়? উত্তর হচ্ছে ভ্যারিয়েবলে যে কোন কিছুই রাখা যায়, যেমন- নাম্বার, ক্যারেকটার, স্ট্রিং(অনেকগুলো ক্যারেকটারের সমষ্টি) এমনকি অন্যান্য ভ্যারিয়েবলও রাখা যায়। যেমন-

>>>name=”Nuruzzaman Milon”
>>>Dept='ICT'

খেয়াল রাখা দরকার, স্ট্রিং লেখার সময় এটাকে অবশ্যই ডাবল কোটেশনের (“ ”) বা সিঙ্গেল কোটেশনের(‘ ‘) মধ্যে লিখতে হয়। আমরা ভবিষ্যতে স্ট্রিং নিয়ে আরো বিস্তারিত জানবো।

এবার আমরা জানবো ভ্যারিয়েবলের টাইপ সম্পর্কে। যেমন- 2 বা 5 হচ্ছে integer টাইপের ভ্যারিয়েবল, 2.5 বা 8.9 হচ্ছে float টাইপের ভ্যারিয়েবল। কোন ভ্যারিয়েবলের টাইপ জানার জন্য আমরা ব্যবহার করবো type() নামের একটা ফাংশন। এই ফাংশনের ব্র্যাকেটের ভেতরে ভ্যারিয়েবলের নাম লিখলেই সেটা কোন টাইপের ভ্যারিয়েবল সেটা বলে দেবে। যেমন-

>>>type(5)
<type 'int'> 
>>>type(8.9)
<type 'float'>
>>>type(“Python”)
<type 'str'>

সহজে পাইথন শেখা-০৪


আজকে আমরা দেখবো পাইথনে কিভাবে হিসাব-নিকাশ করতে হয়। হিসাবের কথা আসলেই প্রথমে আমাদের মনে আসে যোগ-বিয়োগের কথা। পাইথনে যোগ, বিয়োগ, গুন ভাগ করা খুবই সহজ।

প্রথমেই আসে যোগের কথা। পাইথনে দুইটা সংখ্যা যোগ করতে হলে লিখতে হয়-

>>>2+8
10
>>>5+27
32

একইভাবে তিন, চার বা পাঁচটা সংখ্যাও যোগ করা যায়।

>>>2+9+7
18

বিয়োগ গুন বা ভাগও একই ভাবে করা যায়। যেমন-

>>>5-3
2
>>>5*4
20
>>>25/5
5

পাইথনে যোগ, বিয়োগ, গুন বা ভাগ করার জন্য যেসব নোটেশন ব্যবহার করা হয় তা হল-
যোগঃ +
বিয়োগঃ –
গুনঃ *
ভাগঃ /

এখানে ভাগ করার সময় একটা জিনিস লক্ষ্য করি-

>>>10/3
3
>>>11/2
5

যদিও উপরের দুইটি ক্ষেত্রে আসা উচিৎ ছিল

3.33333333
5.5

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

>>>10.0/2
3.33333333
>>>10/3.0
3.33333333

যেখানে C, C++ বা Java তে কাস্টিং করার নিয়ম-

(float)10/3 	or 
(double)10/3

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

>>>10%3
1
>>>17%5
2

এটা প্রকাশ করা হয় % চিহ্ন দ্বারা।

এবার আমরা দেখবো, কিভাবে এক্সপোনেনশিয়াল বা ঘাত বের করতে হয়। যেমন ২^৪ মান বের করবো। এর জন্য লিখতে হবে-

>>>2**3
8
>>>4**5
1024

এক্সপোনেনশিয়াল বের করার জন্য আমরা ব্যবহার করবো জোড়া এস্টেরিক্স(**)।

আজকে আমরা যতগুলো অপারেটর দেখলাম তার সবই বাইনারী অপারেটর, অর্থাৎ এগুলো নিয়ে কাজ করতে চাইলে কমপক্ষে দুইটা অপারেন্ড লাগবে। যেমন + বা * অপারেটর ব্যবহার করতে হলে কমপক্ষে দুইটা সংখ্যা লাগবে।
এবার আসবে অপারেটরের অর্ডার। আমরা ছোট্ট একটা উদাহরন দেখি-

>>>5+30*20
605
>>>(5+30)*20
700

অর্থাৎ একই স্টেটমেন্ট শুধুমাত্র ব্র্যাকেটের কারনে দুই ধরনের ফলাফল দিচ্ছে। এর কারন সহজ। প্রত্যেকটা অপারেটরেরই কাজ করার একটা ক্রম থাকে। যেমন আমরা যদি একটা স্টেটমেন্ট লিখি-

>>>2+5-3*7/4%2**4
2

এক্ষেত্রে প্রথমে কাজ করেছে এক্সপোনেনশিয়াল(**), তারপর ভাগ(/), তারপর গুন(*), এরপর মডুলাস(%) এবং শেষে যোপাইথনের সহজ পাঠ-০৪গ(+) এরপর সবশেষে বিয়োগ(-)।
উপরের ক্রমটাই হচ্ছে অপারেটরগুলোর ওয়ার্কিং অর্ডার। বাই ডিফল্ট অপারেটরগুলো এই ক্রম অনুসারেই কাজ করে। আমরা চাইলে প্রয়োজনমত ব্র্যাকেট ব্যবহার করে আমাদের ইচ্ছামত হিসাব করতে পারি।