প্রশিক্ষণের সাধারণ উপায় (1-স্তর) সিদ্ধান্ত গাছ এমন একটি বৈশিষ্ট্য সন্ধান করছে যা বিশুদ্ধতম বিভাজন দেয়। উদাহরণস্বরূপ, আমরা যদি আমাদের ডেটাসেটকে দুটি উপসরে বিভক্ত করি, আমরা চাই এই সাবসেটগুলির অভ্যন্তরের লেবেলগুলি যথাসম্ভব সমজাতীয় হোক। সুতরাং এটি অনেকগুলি গাছ তৈরির ক্ষেত্রেও দেখা যায় - প্রতিটি বৈশিষ্ট্যের জন্য একটি গাছ - এবং তারপরে সেরা বিভাজন তৈরি করে এমন গাছ নির্বাচন করা।
কিছু ক্ষেত্রে এট্রিবিউটসের একটি সাবসেট নির্বাচন করা এবং তারপরে সাবসেটে গাছ প্রশিক্ষণ দেওয়াও বোধগম্য। উদাহরণস্বরূপ, এটি পৃথক গাছের মধ্যে সম্পর্ক হ্রাস করার জন্য র্যান্ডম ফরেস্টে ব্যবহৃত হয়।
তবে যখন এটি অ্যাডাবুস্টের কথা আসে তখন সাধারণত এটি নিশ্চিত করা যথেষ্ট যে বেস শ্রেণীবদ্ধকারীকে ওজনযুক্ত ডেটা পয়েন্টগুলিতে প্রশিক্ষণ দেওয়া যেতে পারে এবং এলোমেলো বৈশিষ্ট্য নির্বাচন কম গুরুত্বপূর্ণ is সিদ্ধান্ত গাছগুলি ওজন পরিচালনা করতে পারে (উদাহরণস্বরূপ এখানে বা এখানে দেখুন )। এটি প্রতিটি উপাত্তের অবদানকে মোট সাবসেটের অপরিচ্ছন্নতার দিকে ঝাঁকিয়ে দেখিয়ে করা যেতে পারে।
অবগতির জন্য আমি numpy এবং ব্যবহার পাইথন আমার AdaBoost বাস্তবায়ন যুক্ত করতে হবে sklearn এরDecisionTreeClassifier
সঙ্গে max_depth=1
:
# input: dataset X and labels y (in {+1, -1})
hypotheses = []
hypothesis_weights = []
N, _ = X.shape
d = np.ones(N) / N
for t in range(num_iterations):
h = DecisionTreeClassifier(max_depth=1)
h.fit(X, y, sample_weight=d)
pred = h.predict(X)
eps = d.dot(pred != y)
alpha = (np.log(1 - eps) - np.log(eps)) / 2
d = d * np.exp(- alpha * y * pred)
d = d / d.sum()
hypotheses.append(h)
hypothesis_weights.append(alpha)
লেবেলগুলির পূর্বাভাস দেওয়ার জন্য:
# X input, y output
y = np.zeros(N)
for (h, alpha) in zip(hypotheses, hypotheses_weight):
y = y + alpha * h.predict(X)
y = np.sign(y)