হাতে কলমে মেশিন লার্নিং
  • হাতেকলমে মেশিন লার্নিং
  • উৎসর্গ
  • প্রথম পাতা
  • মুখবন্ধ
  • কৃতজ্ঞতা
  • কাদের জন্য বইটা?
  • কাদের জন্য নয়
  • কিভাবে পড়বেন বইটা?
  • পর্ব ১: পাল্টে যাবার ঘটনা
    • ১.১. সিডিসি’র ওয়ার্নিং
    • ১.২. ইন্টারকানেকশন কস্ট মডেলিং
    • ১.৩. মানুষের পাশে ডাটা
    • ১.৪. গুগল ফটোজ, টেক্সট টু স্পিচ
    • ১.৫. সরকারি ওপেন ডাটা
    • ১.৬ প্রাইভেট সেক্টর + পাবলিক সেক্টর (ডাটা শেয়ারিং)
    • ১.৭. আর্টিফিসিয়াল ইন্টেলিজেন্স - মেশিন লার্নিংএর প্রসার
    • ১.৮. মেশিন লার্নিং ব্যবহারে এগিয়ে যে ইন্ডাস্ট্রিগুলো
  • পর্ব ২: ডাটা থেকে ভবিষ্যৎ দেখার ধারণা
    • ২.১. মেশিন লার্নিং হ্যাক
    • ২.২. ভবিষ্যৎ দেখার ধারণা + ডাটার গল্প বলার ক্ষমতা
    • ২.৩. মৃত্যু অ্যালগরিদম
    • ২.৪. দেশের নীতিনির্ধারণী ড্যাশবোর্ড
  • পর্ব ৩: মেশিন লার্নিং কি? (৩০ মিনিট)
    • ৩.১. মেশিন লার্নিং জিনিসটা কি?
    • ৩.২. কেন দরকার মেশিন লার্নিং?
    • ৩.৩. মেশিন লার্নিং এর কিছু ভাগ
    • ৩.৪. শুরুর ধারণা - ডাটা নিয়ে
    • ৩.৫. ডাটার তত্ব আর তার প্রসেস
    • ৩.৬. কিভাবে শিখবেন?
  • পর্ব ৪: ক্যাগল প্রতিযোগিতা (৪ সপ্তাহ-৬ সপ্তাহ)
    • ৪.১. ‘ক্যাগল’ কি? আর দরকারই বা কেন?
    • ৪.২. কি করতে হবে ক্যাগলে?
    • ৪.৩. থিওরি বাদ, কেন প্রজেক্ট দিয়ে শুরু?
    • ৪.৪. কেন শুরুতেই ‘আর’ প্রোগ্রামিং এনভায়রনমেন্ট?
    • ৪.৫. মেশিন লার্নিং কমিউনিটি
    • ৪.৬. ক্যাগল কার্নাল এবং অনলাইন হোস্টেড স্ক্রিপ্ট
  • পর্ব ৫: "আর" এনভায়রনমেন্ট
    • ৫.১. "আর" + "আর" ষ্টুডিও
    • ৫.২. "আর" ষ্টুডিওর কিছু খুঁটিনাটি
    • ৫.৩. প্রজেক্ট টাইটানিক + 'আর' ষ্টুডিও
    • ৫.৪. প্রজেক্টের গিটহাব স্ক্রিপ্ট
  • পর্ব ৬: প্রজেক্ট টাইটানিক: বিপর্যয়ে মেশিন লার্নিং
    • ৬.১. টাইটানিকের গল্প
    • ৬.২. কেন প্রজেক্ট" টাইটানিক "? ডাটা কোথায়?
    • ৬.৩. ‘ট্রেনিং’ আর ‘টেস্ট’ ডাটা সেট
    • ৬.৪. ক্যাগলের কোন কোন কার্নাল?
    • ৬.৫. "আর" স্টুডিওতে ডাটা লোড
    • ৬.৬. মেন্যু দিয়ে নাকি স্ক্রিপ্ট ভালো ?
  • পর্ব ৭: প্রেডিকশন
    • ৭.১. প্রথম প্রেডিকশন
    • ৭.২. ডাটা ভিজ্যুয়ালাইজেশন
    • ৭.৩. দ্বিতীয় প্রেডিকশন
    • ৭.৪. তৃতীয় প্রেডিকশন
    • ৭.৫. ডিসিশন ট্রি
    • ৭.৬. চতুর্থ প্রেডিকশন (মেশিন লার্নিং)
    • ৭.৭. পঞ্চম প্রেডিকশন (ফিচার ইঞ্জিনিয়ারিং)
    • ৭.৮. ডাটা প্রি-প্রসেসিং, ডাটা ক্লিনিং এবং ষষ্ঠ প্রেডিকশন
    • ৭.৯. সপ্তম প্রেডিকশন (র‌্যান্ডম ফরেস্ট)
  • পর্ব ৮: কি আছে সামনে?
    • ৮.১. কি শিখলাম আমরা?
    • ৮.২. কোথায় যাচ্ছি এর পর?
    • ৮.৩. সামনের বই
    • ৮.৪. যোগাযোগের মাধ্যম
  • পর্ব ৯: পাইথনে টাইটানিক প্রজেক্ট
    • জুপিটারে প্রজেক্ট টাইটানিক
  • একটা ট্রেনিং প্রোগ্রাম
Powered by GitBook
On this page
  • তৃতীয় প্রেডিকশন
  • সাবমিশন ফাইল তৈরি
  • ক্যাগলে আপলোড
  • ব্যবহৃত গিটহাব স্ক্রিপ্ট (অনলাইন)

Was this helpful?

  1. পর্ব ৭: প্রেডিকশন

৭.৪. তৃতীয় প্রেডিকশন

Previous৭.৩. দ্বিতীয় প্রেডিকশনNext৭.৫. ডিসিশন ট্রি

Last updated 5 years ago

Was this helpful?

তৃতীয় প্রেডিকশন

মৃত্যুর সাথে টিকিটের দামের সম্পর্ক কোথায়? শুরুতে মনে হয়েছিল টিকিটের দামের সাথে মানুষের মৃত্যুর সম্পর্ক - সম্ভব কি সেটা? সেটা দেখতে খুলে দেখলাম সম্পর্কিত কাছাকাছি দুটো ভ্যারিয়েবল। তার মধ্যে একটা হচ্ছে জাহাজ ভাড়া (Fair) আরেকটা হচ্ছে প্যাসেঞ্জার ক্লাস (Pclass)। ভালভাবে দেখলে দেখা যাবে, Pclass ভেরিয়েবলটার তিনটা ভ্যালু মোটে। ফার্স্ট, সেকেন্ড আর থার্ড ক্লাস। হিসেবেও সুবিধা। ঘ্যাঁচ করে ফেলা যায় টেবিলে। Fare ভ্যারিয়েবলটা দেখতেই চক্ষুচড়কগাছ। এতো পুরো কন্টিনিউয়াস ভ্যারিয়েবল। শত শত উল্টাপাল্টা সংখ্যা। বেশি সংখ্যাতে সমস্যা আমাদের। এক, টেবিলে ফেলা দুস্কর। দুই, ধারণা আসবে না খালি চোখে। কি করি, কি করি? সমাধানে এগিয়ে এলেন ট্রেভর স্টিফেন্স। তার নোটবই নিয়ে। তৈরি করলেন নতুন ভ্যারিয়েবল। ভাড়ার বাচ্চা ভ্যারিয়েবল “Fare2”। আনকোরা নতুন ভ্যারিয়েবল বলে কথা। টেবিলে ফেলার জন্য ভাগও করা হলো ৪ ভাগে। চোখে পড়বে সহজে। সমস্যা একটাই। ভাড়া কিন্তু ক্লাসের ওপর ভিত্তি করে নয়। মানে, প্লেনের টিকেটের মতো। সময় ঘনায় - দাম বাড়ে। ক্লাসের দামে নয়।

তো, আলাদা করে ফেলি - ওই মানুষগুলোর সংখ্যা - যারা দিয়েছেন

১. ৩০ ডলারের ওপরের ভাড়া

২. ২০ থেকে ৩০ ডলারের ভাড়া

৩. ১০ থেকে ২০ ডলারের ভাড়া

৪. ১০ ডলারের নিচের ভাড়া

ব্যাপারটা লিখে ফেলি আর ষ্টুডিওতে। টেক্সট এডিটরে। তবে আপনাদের সাথে একটা চুক্তি ছিলো। কোন লেখালেখি নয়, আমাদের স্ক্রিপ্টটা লোড করে নিয়ে আসি ওয়ার্কিং ডিরেক্টরি থেকে। নাম: 3rd-prediction.R

train$Fare2 <- '30+'

train$Fare2[train$Fare < 30 & train$Fare >= 20] <- '20-30'

train$Fare2[train$Fare < 20 & train$Fare >= 10] <- '10-20'

train$Fare2[train$Fare < 10] <- '<10'

ছবি: নতুন ভ্যারিয়েবলমনে আছে আমরা প্রথম এবং দ্বিতীয় প্রেডিকশনে কিভাবে ডাটা দেখেছিলাম? ঠিক তাই, “টেবিল” কমান্ড দিয়ে। এরপর আমরা সেটাকে ‘প্রপোর্শন’ টেবিলে পার করে দিয়েছিলাম। ডাটাকে ঠিকমতো দেখার জন্য টেবিল বা ‘প্রপোর্শন’ টেবিলে অতটা জুৎসই নয়। যেমন, আমরা প্রথমে দেখতে চেয়েছিলাম কতজন মারা গিয়েছিলেন টাইটানিক জাহাজডুবিতে, অথবা বেঁচে গিয়েছিলেন। সেটাকে ঠিকমতো দেখা গিয়েছে টেবিল কমান্ডএর আউটপুট হিসেবে - আমাদের টার্গেট ভেরিয়েবলের পাশাপাশি। এরপর দেখতে চাইলাম মহিলা না পুরুষ? মানে, যারা বেঁচে গিয়েছেন তাদের মধ্যে কত সংখ্যক মহিলা ছিলেন? সেটাও পেয়েছি কিন্তু এই টেবিল কমান্ডের মাধ্যমে।

এখন যদি মহিলা পুরুষের ব্যাপারটার সাথে বয়সটাকেও যদি আমরা ‘প্রপোর্শন’ বা অনুপাত হিসেবে জানতে চাই, তাহলে আমাদের টেবিল কমান্ডটা পারবেনা এইক্ষেত্রে। এজন্য আমরা নতুন "আর" কমান্ড নিয়ে এসেছি aggregate - “এগ্রিগেট”। একটা জিনিস কিন্তু চিন্তা করতে হবে আমাদের সবসময়। আমাদের টার্গেট ভ্যারিয়েবল অর্থাৎ কে বেঁচে অথবা মারা গিয়েছিলেন, তার সাথে বের করতে হবে বিভিন্ন সাবসেটের হিসেব। মানে কত বয়সের মানুষজন বেশি মারা গিয়েছেন অথবা সে কি বাচ্চা ছিল কিনা অথবা যিনি মারা গিয়েছেন, তিনি কোথায় ছিলেন - কোন ক্লাসে - মহিলা হলে কতো বয়স ছিলো উনার, বড় পরিবারের ক্ষেত্রে কি ঘটেছিলো, তাদের পদবি কিভাবে সাহায্য করেছে বেঁচে যেতে, তাদের জাহাজের ভাড়া (ক্লাস ভিত্তিক নয়) কেমন ছিল, এ ধরনের অনেক প্রশ্ন জিজ্ঞাসা করতে হবে নিজেকে।

আমরা জানি যে পুরুষরা বেশি মারা গিয়েছেন, তাহলে বের করতে হবে মহিলাদের মধ্যে কোন “সাবসেট” মানে কোন অংশ বেশি মারা গেছেন? তার মধ্যে ক্রিটিক্যাল অংশ কতোটুকু? যেহেতু আমাদের নতুন “আর” কমান্ড হচ্ছে এগ্রিগেট, সেটার ফর্মুলাটাও বুঝতে চাই আমরা। আমাদের কমান্ড প্রথমে নেবে টার্গেট ভ্যারিয়েবল ($Survived), কি পেতে যাচ্ছি আমরা। সেটাকে সে রাখবে সবচেয়ে বামে, তারপরে একটা “টাইলডি” = “~” চিহ্ন - পাশাপাশি ওইসব ভ্যারিয়েবলগুলোর নাম যেগুলোর সম্পর্ক আমরা বের করতে চাচ্ছি। আমাদের যতগুলো ভ্যারিয়েবলের মধ্যে সম্পর্ক বের করা দরকার সেগুলো আমরা সংযোগ করব যোগ (+) চিহ্ন দিয়ে। এরপর - আমরা বলব কোন ডাটাফ্রেমে দেখতে হবে আমাদের। সেই ডাটাফ্রেমে আমরা কি ধরনের "আর্গুমেন্ট" ব্যবহার করব সেটাও থাকবে সাথে। আর্গুমেন্ট কি এখানে? কমান্ডের মধ্যে দরকারি 'আর্গুমেন্ট' পাঠিয়ে দিলে অনেক কাজ সহজ হয়ে যায়।ছবি: নতুন “আর” কমান্ড "এগ্রিগেট"

আসি আজকের কমান্ডে। আমাদের টার্গেট ভেরিয়েবল হচ্ছে “Survived” কলাম, এরপরে রাখছি “টাইলডি” মানে “~” চিহ্ন। তারপর রাখছি ওইসব ভ্যারিয়েবল যাদেরকে আমরা ধারণা করছি সংযোগ আছে মানুষের বাঁচা মরার সাথে। এরপর ডাটাফ্রেম হিসেবে দেখিয়ে দিচ্ছি আমাদের train ডাটাফ্রেমকে। শেষের আর্গুমেন্ট মানে ফাংশনে বলে দিচ্ছি পুরোটাই মানে প্রতিটা সাবসেট আসবে যারা বেঁচেছে তাদের সংখ্যার যোগফল হয়ে। এজন্যই এই আর্গুমেন্ট হচ্ছে “সাম” মানে যোগফল। যেহেতু আমাদের টার্গেট ভেরিয়েবল এর আউটকাম ০ আর ১, এখানে বের হয়ে আসবে আমাদের মোট বেঁচে যাওয়া মানুষের সংখ্যা - সাবসেট ধরে। ভালো কথা, পেলাম ডাটা আমাদের কথা মত, কিন্তু প্রতিটা সাবসেটে আসলে কতগুলো মানুষ ছিল সেটা কি জানা যাবে? আলবত যাবে। সেজন্য আমরা ব্যবহার করছি পরের কমান্ড। পাল্টেছি শুধু আর্গুমেন্ট। বলেছি বের করো আউটপুটের লেংথ। চমৎকার, আমরা পেয়ে গেলাম পুরো সাবসেটের মানুষের সংখ্যা।ছবি: সাবসেট ধরে ধরে মানুষের সংখ্যা

আমাদের দরকার একটা অনুপাত। ওই টেবিল এরমতো। তবে বেশি ভ্যারিয়েবল দিয়ে।

১. কি পেলাম প্রথম কমান্ডে?

> aggregate(Survived ~ Fare2 + Pclass + Sex, data=train, FUN=sum)

আমাদের মোট বেঁচে যাওয়া মানুষের সংখ্যা - একেকটা সাবসেট ধরে। মানে Fare2, Pclass আর Sexএর ভিত্তিতে।

২. কেন দরকার পড়লো দ্বিতীয় কম্যান্ড?

> aggregate(Survived ~ Fare2 + Pclass + Sex, data=train, FUN=length)

পুরো সাবসেটের মানুষের সংখ্যা, বেঁচে না মারা গিয়েছেন সেটা বিবেচ্য নয়। তাহলে বেঁচে যাওয়া মানুষ / পুরো সাবসেটের মানুষ = আমাদের দরকারি অনুপাত

তাহলে সেটার কমান্ড কি?

> aggregate(Survived ~ Fare2 + Pclass + Sex, data=train, FUN=function(x) {sum(x)/length(x)})

ডাটা থেকে কিছু জ্ঞান নেই। সিরিয়াল নম্বর ধরে কথা বলি বরং।

যারা বেঁচেছেন বেশি তাদের দিয়ে শুরু;

৫. যিনি মহিলা, ২য় শ্রেণীর যাত্রী এবং ৩০ ডলারের বেশি দিয়ে টিকেট কিনেছিলেন - তারা বেঁচেছেন সবাই। ১০০% বেঁচেছেন।

২. আবারো যিনি মহিলা, ১ম শ্রেণীর যাত্রী এবং আবারো ৩০ ডলারের বেশি টিকেটধারীরা বেঁচেছেন ৯৮%, এটাও বেশ ভালো।

পুরুষদের ব্যাপারে বলছি না আর। দেখতেই পাচ্ছেন হিসেবে। খুব খারাপ অবস্থা। আবার মহিলাদের মধ্যে যাদের সম্ভাবনা ছিল অনেক কম সেটাও দেখার বিষয়।

৮, ৯ সিরিয়ালের মহিলা, যারা ৩য় শ্রেণীর যাত্রী, ২০ ডলারের বেশি দিয়েছিলেন ভাড়া হিসেবে - তারাও ধরতে পারেন নি লাইফবোট।

কেন? সেটাই তো বলছে ডাটা।

চলুন তৈরি করি আজকের প্রেডিকশন। আমাদের ৩য় প্রেডিকশন ওপরের ধারণা থেকে -

test$Survived <- 0 ## [সবাই মারা গিয়েছেন]

test$Survived[test$Sex == 'female'] <- 1 ## [শুধু মহিলারা বেঁচেছেন]

test$Survived[test$Sex == 'female' & test$Pclass == 3 & test$Fare >= 20] <- 0 ## [মারা গিয়েছেন শুধু ওই মহিলারা, ৩য় শ্রেণীর আর ২০ ডলারের বেশি টিকেটের দাম দিয়েছেন যারা]

সাবমিশন ফাইল তৈরি

নতুন করে বলতে হবে কিছু? স্ক্রিপ্ট থেকে তুলে দিচ্ছি বরং।

prediction3rd <- data.frame (test$PassengerId, test$Survived)

names (prediction3rd) <- c("PassengerId","Survived")

rownames (prediction3rd) <- NULL

write.csv (prediction3rd, file = "prediction3.csv", row.names=FALSE)

ক্যাগলে আপলোড

অনুগ্রহ করে দেখুন প্রথম আর দ্বিতীয় প্রেডিকশনের অংশ।

ব্যবহৃত গিটহাব স্ক্রিপ্ট (অনলাইন)

এই পর্যন্ত প্রতিটা “এগ্রিগেট” কমান্ড থেকে যে আউটপুটগুলো এসেছে তার প্রতিটা আমাদের দেখা উচিত। সেখানে ভাল করে যদি আমরা দেখি তাহলে প্রতিটা ভ্যারিয়েবলের এগেইনস্টে যে ডাটা এসেছে সেগুলো বেশ "ইনসাইটফুল"। এখনকার এগ্রিগেটের একটা ছবি দেখি বরং। ছবি: কথা বলছে ডাটা

https://github.com/raqueeb/mltraining/blob/master/ML-workbook/3rd-prediction.R