অ্যাডাবুস্টে দুর্বল শিক্ষার্থী হিসাবে কীভাবে সিদ্ধান্তের স্টাম্প ব্যবহার করবেন?


12

আমি সিদ্ধান্ত স্টম্প ব্যবহার করে অ্যাডাবোস্ট বাস্তবায়ন করতে চাই। অ্যাডাবুস্টের প্রতিটি পুনরাবৃত্তিতে আমাদের ডেটা সেটের বৈশিষ্ট্যগুলি যতটা সিদ্ধান্তের স্টাম্প করা ঠিক?

উদাহরণস্বরূপ, আমার যদি 24 টি বৈশিষ্ট্য সহ একটি ডেটা সেট থাকে তবে আমার প্রতিটি পুনরাবৃত্তিতে 24 টি সিদ্ধান্ত স্টাম্প শ্রেণিবদ্ধ হওয়া উচিত? অথবা আমি এলোমেলোভাবে কিছু বৈশিষ্ট্যগুলি বেছে নিয়ে তাদের সমস্ত বৈশিষ্ট্যের পরিবর্তে সেগুলিতে শ্রেণিবদ্ধকরণ করা উচিত?

উত্তর:


12

প্রশিক্ষণের সাধারণ উপায় (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)

ধন্যবাদ। সিদ্ধান্তের স্টাম্প কি সর্বোচ্চ গভীরতা 1 সহ একটি rpart হিসাবে (সিদ্ধান্ত গাছের অ্যালগোরিদম হিসাবে) ব্যবহৃত হয়? মানে আমি এলোমেলোভাবে কোনও বৈশিষ্ট্য নির্বাচন করব বা জিনি সূচকগুলির মতো নির্দিষ্ট মানদণ্ডের ভিত্তিতে গাছটি বিভক্ত হওয়া উচিত? @ আলেক্সিগ্রিগরেভ
পেগাহ

সিদ্ধান্তের স্টাম্প = 1-বিধি = একটি নোড (সর্বোচ্চ গভীরতার 1 সহ) একটি সিদ্ধান্ত গাছ। আপনার কিছু অপরিষ্কার পরিমাপের উপর ভিত্তি করে বিভাজন নির্বাচন করা উচিত, উদাহরণস্বরূপ, গিনি সূচকের ভিত্তিতে।
আলেক্সি গ্রিগোরভ

এই বিস্তারিত উত্তরের জন্য ধন্যবাদ!
xsari3x
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.