মেশিন লার্নিং - ডিসিশন ট্রি


ডিসিশন ট্রি (Decision Tree)

এই চাপে, আমরা আপনাকে কিভাবে 'ডিসিশন ট্রি' তৈরি করবে দেখাব। ডিসিশন ট্রি একটি প্রোগ্রাম, যা আপনাকে পূর্ববর্তী অভিজ্ঞতার ভিত্তিতে সিদ্ধান্ত গ্রহণ করতে সাহায্য করে

এই উদাহরণে, একজন সেলেকশন করবেন কিনা তিনি/তিনি কমেডি প্রোগ্রামে অংশগ্রহণ করবেন

সুখ হল যে, আমাদের উদাহরণের চরিত্র প্রত্যেকবার শহরে কমেডি প্রোগ্রাম আয়োজনের সময় নিবন্ধিত হয়, এবং কমেডি অভিনেতা সংক্রান্ত কিছু তথ্যও নিবন্ধিত হয়, এবং সে/বাবা যেখানে গিয়েছেন তা নিবন্ধিত হয়

বয়স অভিজ্ঞতা Rank Nationality Go
36 10 9 UK NO
42 12 4 USA NO
23 4 6 N NO
52 4 4 USA NO
43 21 8 USA YES
44 14 5 UK NO
66 3 7 N YES
35 14 9 UK YES
52 13 7 N YES
35 5 9 N YES
24 3 5 USA NO
18 3 7 UK YES
45 9 9 UK YES

এখন, এই ডাটাসেট ভিত্তিক, Python একটি প্রস্তুত করতে পারে, যা কোনও নতুন অনুষ্ঠানে যোগ দেওয়ার ক্ষমতা নিয়ে নিয়ে নিতে পারে。

কার্যকারিতা

প্রথমে, প্রয়োজনীয় মডিউলগুলি আমদানিকরণ করুন এবং pandas-এর মাধ্যমে ডাটাসেট পড়ুন:

প্রক্রিয়াকরণ

ডাটাসেট পড়া এবং প্রদর্শন করুন:

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg
df = pandas.read_csv("shows.csv")
print(df)

প্রক্রিয়াকরণ করুন

যদি প্রস্তুত করতে হয় তবে, সব তথ্যকে নম্বরযুক্ত করতে হবে。

আমরা নম্বরযুক্ত নয় কলাম 'Nationality' এবং 'Go' কে নম্বরযুক্ত করতে হবে。

Pandas-এর map() এই পদ্ধতি, যা একটি ডিকশনারি গ্রহণ করে, যার মধ্যে মানকে রূপান্তর করার তথ্য রয়েছে。

{'UK': 0, 'USA': 1, 'N': 2}

এটি মান 'UK' কে 0, 'USA' কে 1, 'N' কে 2 হিসাবে রূপান্তর করতে বোঝায়:

প্রক্রিয়াকরণ

স্ট্রিং মানকে সংখ্যায় রূপান্তর করুন:

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)
print(df)

প্রক্রিয়াকরণ করুন

তারপর, আমাদের বৈশিষ্ট্য কলাম এবং লক্ষ্য কলামকে ভেঙে দিতে হবে。

বৈশিষ্ট্য কলামগুলি হল যেগুলি থেকে আমরা পূর্বাভাস করার চেষ্টা করি, এবং লক্ষ্য কলামগুলি হল যেগুলির মান আমরা পূর্বাভাস করার চেষ্টা করি:

প্রক্রিয়াকরণ

X হল বৈশিষ্ট্য কলাম, y হল লক্ষ্য কলাম:

features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)

প্রক্রিয়াকরণ করুন

এখন, আমরা আমাদের বিস্তারিত বিষয়গুলির জন্য একটি প্রকল্পকৃত প্রস্তুত করতে পারি, এবং তা কম্পিউটারে .png ফাইল হিসাবে সংরক্ষণ করতে পারি:

প্রক্রিয়াকরণ

একটি নিষ্কপত ট্রি তৈরি করুন, তাকে চিত্র হিসাবে সংরক্ষণ করুন এবং তা দেখান:

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')
img=pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()

প্রক্রিয়াকরণ করুন

ফলাফল ব্যাখ্যা

প্রক্রিয়াকরণ ট্রি আপনার পূর্ববর্তী পদক্ষেপ ব্যবহার করে গণনা করে আপনি হাস্যরস অভিনেতা দেখার সম্ভাবনা কত হবে তা নির্ধারণ করে。

আমরা নিষ্কপত ট্রির বিভিন্ন দিক পড়তে চাই:


Rank

Rank <= 6.5 এটা বলতে আছে যে ৬.৫ এর নিচের র‍্যাঙ্কিংযুক্ত হাস্যরস অভিনেতারা তারপর অনুসরণ করবে True ত্রিশূন্য (বামের দিকে), বাকিরা তারপর অনুসরণ করবে False ত্রিশূন্য (ডানের দিকে)。

gini = 0.497 এটা বলতে আছে যে ভাগ করার গুণমান, এটা সবসময় ০.০ থেকে ০.৫ এর মধ্যে একটি সংখ্যা, ০.০ বলতে আছে যে সকল নমুনাই একই ফলাফল পায়, ০.৫ বলতে আছে যে ভাগ করা সম্পূর্ণভাবে মধ্যবর্তীভাবে হয়।

samples = 13 এটা বলতে আছে যে এই পদক্ষেপে ১৩ জন হাস্যরস অভিনেতা আছে, কারণ এটা প্রথম পদক্ষেপ, তাই তারা সবাই হাস্যরস অভিনেতা।

value = [6, 7] এটা বলতে আছে যে ১৩ জন হাস্যরস অভিনেতার মধ্যে ৬ জন আছে "NO" পাবে, ৭ জন "GO" পাবে。

Gini

সমস্ত নমুনা ভাগ করার পদ্ধতি অনেকগুলি আছে, আমরা এই ট্যুটোরিয়ালে GINI পদ্ধতি ব্যবহার করি。

গিনি পদ্ধতি নিম্নোক্ত ফর্মুলা ব্যবহার করে:

Gini = 1 - (x/n)2 - (y/n)2

যেখানে, x হল আমূল্য উত্তরের সংখ্যা ("GO"), n হল নমুনার সংখ্যা, y হল আমূল্য উত্তরের সংখ্যা ("NO"), এটা নিম্নোক্ত ফর্মুলা ব্যবহার করে গণনা করা হয়:

1 - (7 / 13)2 - (6 / 13)2 = 0.497


পরবর্তী পদক্ষেপে দুটি বাক্স আছে, একটি হাস্যরস অভিনেতার জন্য, যার 'Rank' ৬.৫ বা তার নিচে, বাকি একটি বাক্স আছে。

True - ৫ জন হাস্যরস অভিনেতা এখানে শেষ হয়:

gini = 0.0 এটা বলতে আছে যে সকল নমুনাই একই ফলাফল পায়।

samples = 5 এটা বলতে আছে যে এই শাখায় ৫ জন হাস্যরস অভিনেতা আছে (৫ জনের গ্রেড ৬.৫ বা তার নিচে)。

value = [5, 0] 5 জন "NO" পাবে এবং 0 জন "GO" পাবে。

তৃতীয়ত - 8 জন নাটকরসিক অভিনেতা অব্যাহত থাকছে:

Nationality(জাতীয়তা)

Nationality <= 0.5 এটা মানা হয় যে, Nationality মান 0.5 বা তার কম হাস্যরসিক অভিনেতা বাম দিকের তোলাকে অনুসরণ করবে (এটা মানা হয় যে, যুক্তরাজ্য থেকে সকলে এই ক্ষেত্রে অন্তর্ভুক্ত)

gini = 0.219 মানা হয় যে, প্রায় 22% নমুনা একদিকে চলবে。

samples = 8 এটা মানা হয় যে, এই শাখায় 8 জন হাস্যরসিক অভিনেতা বাকি আছে (8 জন হাস্যরসিক অভিনেতার গ্রেড 6.5 বেশি)

value = [1, 7] এটা মানা হয় যে, এই 8 জন হাস্যরসিক অভিনেতার মধ্যে, 1 জন "NO" পাবে এবং 7 জন "GO" পাবে。


তৃতীয়ত - 4 জন নাটকরসিক অভিনেতা অব্যাহত থাকছে:

Age(বয়স)

Age <= 35.5 এটা মানা হয় যে, 35.5 বছর বা তার কম বয়সী হাস্যরসিক অভিনেতা বাম দিকের তোলাকে অনুসরণ করবে, অন্যদিকের বাকি অভিনেতা ডান দিকের তোলাকে অনুসরণ করবে。

gini = 0.375 মানা হয় যে, প্রায় 37.5% নমুনা একদিকে চলবে。

samples = 4 এটা মানা হয় যে, এই শাখায় 4 জন হাস্যরসিক অভিনেতা বাকি আছে (যুক্তরাজ্য থেকে 4 জন হাস্যরসিক অভিনেতা)

value = [1, 3] এটা মানা হয় যে, এই 4 জন হাস্যরসিক অভিনেতার মধ্যে, 1 জন "NO" পাবে এবং 3 জন "GO" পাবে。

তৃতীয়ত - 4 জন হাস্যরসিক অভিনেতা এখানে শেষ হয়েছে:

gini = 0.0 এই মানে সমস্ত নমুনাগুলি একই ফলাফল পায়。

samples = 4 এটা মানা হয় যে, এই শাখায় 4 জন হাস্যরসিক অভিনেতা বাকি আছে (যুক্তরাজ্য থেকে 4 জন হাস্যরসিক অভিনেতা)

value = [0, 4] এটা মানা হয় যে, এই 4 জন হাস্যরসিক অভিনেতার মধ্যে, 0 জন "NO" পাবে এবং 4 জন "GO" পাবে。


তৃতীয়ত - 2 জন হাস্যরসিক অভিনেতা এখানে শেষ হয়েছে:

gini = 0.0 এই মানে সমস্ত নমুনাগুলি একই ফলাফল পায়。

samples = 2 এটা মানা হয় যে, এই শাখায় 2 জন হাস্যরসিক অভিনেতা বাকি আছে (2 জন 35.5 বছর বা তার কম বয়সী হাস্যরসিক অভিনেতা)

value = [0, 2] এটা মানা হয় যে, এই 2 জন হাস্যরসিক অভিনেতার মধ্যে, 0 জন "NO" পাবে এবং 2 জন "GO" পাবে。

তৃতীয়ত - 2 জন নাটকরসিক অভিনেতা অব্যাহত থাকছে:

Experience(অভিজ্ঞতা)

Experience <= 9.5 এটা মানা হয় যে, 9.5 বছর বা তার বেশি অভিজ্ঞতাসম্পন্ন হাস্যরসিক অভিনেতা বাম দিকের তোলাকে অনুসরণ করবে, অন্যদিকের বাকি অভিনেতা ডান দিকের তোলাকে অনুসরণ করবে。

gini = 0.5 এটা মানা হয় যে, 50% নমুনা একদিকে চলবে。

samples = 2 এটা মানা হয় যে, এই শাখায় 2 জন হাস্যরসিক অভিনেতা বাকি আছে (2 জন 35.5 বছরের বেশি বয়সী হাস্যরসিক অভিনেতা)

value = [1, 1] এটা মানা হয় যে, এই 2 জন হাস্যরসিক অভিনেতার মধ্যে, 1 জন "NO" পাবে এবং 1 জন "GO" পাবে。


তৃতীয়ত - 1 জন হাস্যরসিক অভিনেতা এখানে শেষ হয়েছে:

gini = 0.0 এই মানে সমস্ত নমুনাগুলি একই ফলাফল পায়。

samples = 1 এই মানে এই শাখায় এখনও ১জন কমেডি অভিনেতা/অভিনেত্রী রয়েছে (৯.৫ বছর বা তার কম অভিজ্ঞতা সহযোগী)。

value = [0, 1] এই মানে 0 জানায় "NO", 1 জানায় "GO"。

False - ১জন কমেডি অভিনেতা/অভিনেত্রী এখনও রয়েছে:

gini = 0.0 এই মানে সমস্ত নমুনাগুলি একই ফলাফল পায়。

samples = 1 এই শাখায় এখনও ১জন কমেডি অভিনেতা/অভিনেত্রী রয়েছে (যার মধ্যে ১জন ৯.৫ বছরের অভিজ্ঞতা সহযোগী)。

value = [1, 0] 1 জানায় "NO", 0 জানায় "GO"。

পূর্বাভাস মূল্য

আমরা প্রক্রিয়াকরণ গাছকে নতুন মূল্য পূর্বাভাস দেওয়ার জন্য ব্যবহার করতে পারি。

উদাহরণ: আমি ৪০ বছর বয়সী একজন মার্কিন কমেডি অভিনেতা/অভিনেত্রীর একটি প্রোগ্রাম দেখব কি উচিত, যে অভিনেতা/অভিনেত্রী ১০ বছর অভিজ্ঞতা রাখে, কমেডি র‍্যাঙ্কিং ৭?

প্রক্রিয়াকরণ

ব্যবহার করুন predict() নতুন মূল্য পূর্বাভাস দেওয়ার পদ্ধতি:

print(dtree.predict([[40, 10, 7, 1]]))

প্রক্রিয়াকরণ করুন

প্রক্রিয়াকরণ

যদি কমেডি স্তর ৬ হয়, তবে জবাব কি হবে?

print(dtree.predict([[40, 10, 6, 1]]))

প্রক্রিয়াকরণ করুন

ভিন্ন ফলাফল

যদি পর্যাপ্তভাবে বার চালানো হয়, তবে আপনার প্রবেশ করা ডাটা যদি একই হয়, তবুও প্রক্রিয়াকরণ গাছ আপনাকে ভিন্ন ফলাফল দিতে পারে。

এটাই হলে প্রক্রিয়াকরণ গাছকে ১০০% নিশ্চিত জবাব দেওয়া যায় না। তা ফলাফলের সম্ভাবনা ভিত্তিতে, জবাব ভিন্ন হতে পারে。