سوفٹ ویئر انجینئری اور تنصیب کار
تعمیر کا فیصلہ پیڑوں سے کرنا : ایک بیگنر کا کوڈنگ ٹوریٹریٹ
Table of Contents
فیصلہ کرنے والے درخت ایک دوسرے سے جڑے ہوئے ہیں اور ایک دوسرے کے ساتھ ساتھ ساتھ کلاس اور ان کی مرمت کے لئے مشین سیکھنے کے لئے مختلف طریقے ہیں. وہ معلومات کو انتہائی اہم اقدار پر مبنی شاخوں میں تقسیم کرتے ہیں،
ایک فیصلہکُن درخت کیا ہے ؟
ایک فیصلہکُن درخت ایک ایسا ترکیب ہے جہاں ہر اندرونی حصے میں ایک امتحان کی نمائندگی کرتا ہے (جیسے کہ ” ہماری عمر ۳۰ سال ہے) ۔
درخت کو دوبارہ تعمیر کِیا جاتا ہے : جڑ سے شروع ہونے والا ، الموت سب سے بہترین خصوصیت اور تقسیمشُدہ نقطہ انتخاب کرتا ہے جو ڈیٹا کو نہایت صافوغریب طور پر الگ کرتا ہے ۔
کو دیکھیں
نودی، شاخ اور ترک ہیں۔
جڑے ہوئے پلگ انس میں مکمل تربیتی ڈیٹا سیٹ موجود ہے اندرونی نظاموں میں ایک خصوصیت کو جانچ کر ڈیٹا کو دو یا دو سے زائد بچے کے حساب میں تقسیم کر کے تقسیم کراتے ہیں۔بُکُکُن وہ تعلقات ہیں جو کسی ٹیسٹ کے نتائج کی نمائندگی کرتے ہیں۔ Leaf Goss (councils) on the آخری مفروضات – کلاس میں سب سے زیادہ عام مقدار میں کمی یا مقدار کے معنی کی مقدار حاصل کرتے ہیں۔
کریتیشیا
درخت کی تعمیر کے لیے ممکنہ تقسیم کی کیفیت کا اندازہ لگانے کے لیے ایک طریقہ درکار ہے. سب سے عام معیار یہ ہیں:
- Gini sque [ – کلاس میں استعمال ہونے والا استعمال کیا جاتا ہے تاکہ اندازہ لگایا جاسکے کہ اگر اکثر انتخابی عناصر کو زیریں طبقوں کی تقسیم کے مطابق نامزد کیا جاتا تو اس کا نامناسب رکھا جاتا ہے. Lower Gni بہتر ہے۔
- Entropy – کسی سیٹ میں موجود اضطراب یا غیر یقینی کی مقدار کا اندازہ لگانا. تقسیم کے بعد سے مراد تقسیم (formation active) کے بعد entropy کی ہوتی ہے۔
- Variance کمی – استعمال شدہ درختوں کے لیے استعمال ہونے والا استعمال۔ یہ تقسیم سے مراد فرق (یا معنی مربع غلطی) ہے۔
الجبرا ہر ممکنہ طور پر ہر ممکنہ فرق کا تجزیہ کرتا ہے اور وہ چیز وصول کرتا ہے جو گندھک میں سب سے بڑی کمی (یا معلومات میں حاصل ہونے والی آمدنی) کو جنم دیتا ہے۔
معلومات گین اور گیس کی جگہ
معلومات حاصل کرنا والدین کے آلودہ ہونے اور بچوں کی وزنی کمی میں فرق ہے ۔ جب کہ معمولی مقدار میں مقبولیت حاصل کرنا بہت زیادہ ہوتا ہے ۔
ایک فیصلہکُن درخت کی اُونچائی بنانا
1۔ اپنی معلومات تیار کرو۔
آپ کو خصوصیات اور ہدف لیبل کے ساتھ اعداد و شمار کی ضرورت ہے۔ سادگی کے لیے بینری کلاسی شناختی ڈیٹا سیٹ استعمال کریں نُمْرِک خصوصیات کے ساتھ. مثال کے طور پر:
- [Features: عمر، انکم (انگریزی: Eye, Incom) ریاستہائے متحدہ امریکا کا ایک رہائشی علاقہ جو اناطولیہ میں واقع ہے۔
- [Target: [1] [1] یا Not not settlement (0])۔
اعداد و شمار : گم شدہ اقدار کو ختم کرنا، اناطولیہ کو دور کرنا اور اسے یقینی بنانا۔ فیصل درخت مخلوط ڈیٹا اقسام کو حل کر سکتے ہیں لیکن ہم عملے کے لیے نیوٹریۃ تک محدود رہیں گے۔
۲ : ایک دوسرے کی قدر کریں
ہم جنی نجاستوں پر عمل کریں گے.
جہاں پی پی اے کلاس میں موجود چیزوں کا تناسب ہوتا ہے یعنی بین الاقومی تقسیم کے لیے مجموعی جین اس کے بچے کی اوسط وزنی مقدار ہے۔
3۔ سپلٹی ایوارڈ حاصل کرنا۔
ہر ایک امیدوار کی فہرست کو بائیں اور دائیں گروہوں میں تقسیم کرنا ، جینی کو شمار کرنا اور سب سے بہتر فرق کو سمجھنا
۴ : درخت کو دوبارہ تعمیر کریں
ایسا عمل بنائیں جو اعداد و شمار کے ذیلی نصف مرتبے اور موجودہ گہرائیوں کا احاطہ کرے گا۔ یہ انتہائی گہرائی تک پہنچ جاتا ہے، کم از کم گہرائی میں پہنچ گیا ہے، ورنہ کوئی شرط پوری ہو جائے تو پتے کا بٹن اکثریتی کلاس کے ساتھ تخلیق کر نے کے ليے فاعل کو بہتر طور پر تقسیم کر نے کے ليے اور اندرونی اصل ميں کچھ حصے کو ایجاد کريں پھر اس کے بعد با ئيں اور اختلافی طور پر عمل نامزد کريں
5۔ امانتیں بنائیں
جب درخت کی تعمیر کی جاتی ہے تو یہ بہت واضح ہے : جڑ سے شروع کریں ، نئی مثالوں پر ٹیسٹ کرنے سے شاخوں کی پیروی کریں اور پھر آپ کے پتے پر حاصل ہونے والی مقدار کو واپس کر دیں ۔
پافوس میں مکمل شمولیت
نیچے ایک مکمل، فیصلہ کن درخت کا اطلاق ہے جس میں جنی نجاست استعمال کی گئی ہے یہ کوڈ سیکھنے کے لیے ہے –
import numpy as np
from collections import Counter
class DecisionTree:
def __init__(self, max_depth=None, min_samples_split=2):
self.max_depth = max_depth
self.min_samples_split = min_samples_split
self.tree = None
def fit(self, X, y):
dataset = np.column_stack((X, y))
self.tree = self._grow_tree(dataset)
def _grow_tree(self, dataset, depth=0):
X, y = dataset[:, :-1], dataset[:, -1]
n_samples, n_features = X.shape
n_labels = len(np.unique(y))
# Stopping conditions
if (n_labels == 1 or depth == self.max_depth or n_samples < self.min_samples_split):
leaf_value = Counter(y).most_common(1)[0][0]
return {'leaf': True, 'value': leaf_value}
best_feature, best_threshold = self._best_split(dataset, n_features)
if best_feature is None:
leaf_value = Counter(y).most_common(1)[0][0]
return {'leaf': True, 'value': leaf_value}
left_idx, right_idx = self._split(dataset[:, best_feature], best_threshold)
left_subtree = self._grow_tree(dataset[left_idx], depth+1)
right_subtree = self._grow_tree(dataset[right_idx], depth+1)
return {'leaf': False,
'feature': best_feature,
'threshold': best_threshold,
'left': left_subtree,
'right': right_subtree}
def _best_split(self, dataset, n_features):
best_gini = float('inf')
best_feature, best_threshold = None, None
for feature in range(n_features):
thresholds = np.unique(dataset[:, feature])
for i in range(len(thresholds)-1):
thresh = (thresholds[i] + thresholds[i+1]) / 2
left_idx, right_idx = self._split(dataset[:, feature], thresh)
if len(left_idx) == 0 or len(right_idx) == 0:
continue
gini = self._gini_gain(dataset, left_idx, right_idx)
if gini < best_gini:
best_gini = gini
best_feature = feature
best_threshold = thresh
return best_feature, best_threshold
def _split(self, values, threshold):
left_idx = np.where(values <= threshold)[0]
right_idx = np.where(values > threshold)[0]
return left_idx, right_idx
def _gini_gain(self, dataset, left_idx, right_idx):
total = len(left_idx) + len(right_idx)
gini_left = self._gini(dataset[left_idx, -1])
gini_right = self._gini(dataset[right_idx, -1])
return (len(left_idx)/total) * gini_left + (len(right_idx)/total) * gini_right
def _gini(self, labels):
_, counts = np.unique(labels, return_counts=True)
p = counts / np.sum(counts)
return 1 - np.sum(p**2)
def predict(self, X):
return np.array([self._predict_row(x, self.tree) for x in X])
def _predict_row(self, x, node):
if node['leaf']:
return node['value']
if x[node['feature']] <= node['threshold']:
return self._predict_row(x, node['left'])
else:
return self._predict_row(x, node['right'])
درخت کا ٹیسٹ
ایک سادہ ڈیٹا سیٹ استعمال کریں جیسے کلاسیکی کمپیوٹر ڈیٹا بیس ( بینری کلاسز کی شناخت کے لیے دو خصوصیات). [scicit ⁇ s mirits dataset. کام.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
data = load_iris()
X = data.data[:100] # take only first two classes (binary)
y = data.target[:100]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
tree = DecisionTree(max_depth=3)
tree.fit(X_train, y_train)
preds = tree.predict(X_test)
accuracy = np.mean(preds == y_test)
print(f'Accuracy: {accuracy:.2f}')
درخت کو دوبارہ سے صاف کرنے کیلئے زیادہتر تکنیک
حد سے زیادہ شراب پینے سے گریز کرنا
تربیتی ڈیٹا میں مکمل طور پر ترقی یافتہ درخت شور مچا سکتا ہے جس کی چھوٹی سی پیشینگوئیوں کو پورا کرنے والی شاخیں ختم کر سکتی ہیں۔عام طریقوں سے پہلے سے ترقی (FLT:4 ) یا اور پوسٹ اپنگ (FLT) سے جڑے ہوئے شاخیں بنانے کے لیے ہمارا کام پہلے سے ہی استعمال کرنا ہے۔
ہاتھ دھونا اور کیٹورکل کی یادوں
مسلسل خصوصیات کے لیے ہم نے مختلف اقسام کے درمیان درمیان میں ایک دوسرے کے لیے استعمال کیا جیسے کہ "Color = سرخ/ سبز/wood" (مثلاً ہر ایک کی خصوصیات)، ہر ایک الگ شاخ (مُٹّلّیّے / سبز) بن سکتی ہیں یا پھر آپ binary ⁇ encode بن سکتے ہیں. زیادہ تر جدید عمل آوری (جیسے skit ⁇ strict) تمام صوبوں کے ذریعے بینکاری کے لیے بھی استعمال کی جاتی ہے۔
گم شدہ اقدار سے متعلقه
ایک سادہ طریقہ یہ ہے کہ تربیتی اداروں میں سب سے زیادہ وقت ضائع ہونے والی اقدار کو اُجاگر کریں ۔
لائبریریوں اور مزید پڑھائی سے بھرپور فائدہ اُٹھانا
اگرچہ نقلمکانی کرنے کے نظام تعلیمی ہیں توبھی پیداواری نظاموں میں نقلمکانی کرنے والی لائبریریز استعمال کرتے ہیں جیسے کہ قابلِبھروسا کام انجام دینے والی لائبریریز ۔
کُنَّا
آپ نے سیکھا ہے کہ کیسے سادہ سا ری ایکٹر ایک ماڈل بنا سکتا ہے ۔