বুস্টিংয়ের জন্য আপেক্ষিক পরিবর্তনশীল গুরুত্ব


33

আমি গ্রেডিয়েন্ট বুস্টেড ট্রিগুলিতে তুলনামূলকভাবে পরিবর্তনশীল গুরুত্বকে কীভাবে গণনা করা হয় যা অতিরিক্ত সাধারণ / সরল নয় যেমন:

প্রতিটি বিভাজনের ফলে মডেলটির বর্গক্ষেত্রের উন্নতি দ্বারা ওজন করা এবং সমস্ত গাছের গড় গড়ে এই ব্যবস্থাগুলি বিভাজনের জন্য কতবার পরিবর্তনশীল নির্বাচন করা হয় তার ভিত্তিতে করা হয় । [ এলিথ এট আল। ২০০৮, বাড়ানো রিগ্রেশন ট্রি সম্পর্কিত কার্যনির্বাহী গাইড ]

এবং এটি তুলনায় কম বিমূর্ত:

আমি2^(টি)=Σটি=1জে-1আমিটি2^1(বনামটি=)

কোথায় সঙ্কলন শেষ হয়ে গেছে nonterminal নোড এর -terminal নোড ট্রি , বিভাজন নোড সঙ্গে যুক্ত পরিবর্তনশীল , এবং স্কোয়ারড ভুলবশত সংশ্লিষ্ট গবেষণামূলক উন্নতি হয় বিভাজনের ফলস্বরূপ, হিসাবে সংজ্ঞায়িত , যেখানে যথাক্রমে বাম এবং ডান প্রতিক্রিয়া, এবং সাথে সম্পর্কিত পরিমাণ। J T v t t ^ i 2 t i 2 ( R l , R r ) = w l w rটিজেটিবনামটিটিআমিটি2^ ¯ y l , ¯ y r wl,wrআমি2(আর,আরR)=WWRW+ +WR(Y¯-YR¯)2Y¯,YR¯W,WR[ ফ্রেডম্যান 2001, লোভী ফাংশন আনুমানিক: একটি গ্রেডিয়েন্ট বুস্টিং মেশিন ]

পরিশেষে, আমি এখানে পরিসংখ্যানগত শিক্ষার উপাদানগুলি (হাসটি এট আল। ২০০ 2008) খুব সহায়ক হতে পেলাম না, কারণ প্রাসঙ্গিক বিভাগটি (10.13.1 পৃষ্ঠা 367) উপরের দ্বিতীয় রেফারেন্সের সাথে খুব মিল (যা ব্যাখ্যা করা যেতে পারে) সত্য যে ফ্রেডম্যান বইটির সহ-লেখক)।

দ্রষ্টব্য: আমি জানি আপেক্ষিক পরিবর্তনশীল গুরুত্ব পরিমাপ করে দেওয়া হয় summary.gbm gbm আর প্যাকেজের মধ্যে। আমি উত্স কোডটি অন্বেষণ করার চেষ্টা করেছি, তবে প্রকৃত গণনাটি কোথায় ঘটে তা খুঁজে পাচ্ছি না।

ব্রাউনি পয়েন্টস: আমি ভাবছি যে কীভাবে এই প্লটগুলি পাওয়া যায়।


আমি শুধু যা সহায়ক হতে পারে কিভাবে বর্গ দ্বারা পরিবর্তনশীল গুরুত্ব প্লটে বিভক্ত সম্পর্কে লিঙ্ক প্রশ্নের একটি নতুন উত্তর যোগ stackoverflow.com/a/51952918/3277050
see24

উত্তর:


55

আমি স্কলারন কোডটি ব্যবহার করব , কারণ এটি Rকোডের চেয়ে সাধারণত পরিষ্কার থাকে ।

এখানে গ্রেডিয়েন্টবুস্টিংক্লাইসিফায়ারের বৈশিষ্ট্য_গুরুত্বপূর্ণ সম্পত্তিটির বাস্তবায়ন (আমি কোডের কয়েকটি লাইন সরিয়েছি যা ধারণাগত স্টাফের পথে আসে)

def feature_importances_(self):
    total_sum = np.zeros((self.n_features, ), dtype=np.float64)
    for stage in self.estimators_:
        stage_sum = sum(tree.feature_importances_
                        for tree in stage) / len(stage)
        total_sum += stage_sum

    importances = total_sum / len(self.estimators_)
    return importances

এটি বোঝা বেশ সহজ। self.estimators_বুস্টারটিতে পৃথক গাছ সমন্বিত একটি অ্যারে, তাই লুপের জন্য পৃথক গাছের উপরে পুনরাবৃত্তি হয়। এর সাথে একটি হিকআপ আছে

stage_sum = sum(tree.feature_importances_
                for tree in stage) / len(stage)

এটি নন-বাইনারি প্রতিক্রিয়া ক্ষেত্রে যত্ন নিচ্ছে। এখানে আমরা এক-বনাম-সমস্ত উপায়ে প্রতিটি পর্যায়ে একাধিক গাছ ফিট করি। বাইনারি কেসে ফোকাস করা এর পক্ষে সবচেয়ে সহজ ধারণা, যেখানে যোগফলটির এক যোগফল থাকে এবং এটি ঠিক tree.feature_importances_। বাইনারি ক্ষেত্রে, আমরা এই সব হিসাবে আবার লিখতে পারেন

def feature_importances_(self):
    total_sum = np.zeros((self.n_features, ), dtype=np.float64)
    for tree in self.estimators_:
        total_sum += tree.feature_importances_ 
    importances = total_sum / len(self.estimators_)
    return importances

সুতরাং, কথায় কথায়, পৃথক গাছগুলির বৈশিষ্ট্য আমদানিগুলি যোগ করুন, তারপরে মোট গাছের সংখ্যা দ্বারা ভাগ করুন । এটি একটি গাছের জন্য কীভাবে বৈশিষ্ট্য আমদানি গণনা করা যায় তা দেখতে পাওয়া যায়।

গাছের গুরুত্ব গণনাটি সাইথন স্তরে প্রয়োগ করা হয় , তবে এটি এখনও অনুসরণযোগ্য। কোডটির একটি পরিষ্কার সংস্করণ এখানে

cpdef compute_feature_importances(self, normalize=True):
    """Computes the importance of each feature (aka variable)."""

    while node != end_node:
        if node.left_child != _TREE_LEAF:
            # ... and node.right_child != _TREE_LEAF:
            left = &nodes[node.left_child]
            right = &nodes[node.right_child]

            importance_data[node.feature] += (
                node.weighted_n_node_samples * node.impurity -
                left.weighted_n_node_samples * left.impurity -
                right.weighted_n_node_samples * right.impurity)
        node += 1

    importances /= nodes[0].weighted_n_node_samples

    return importances

এটি বেশ সহজ। গাছের নোডের মধ্য দিয়ে ইটারেট করুন। যতক্ষণ আপনি কোনও পাতার নোডে নেই, ততক্ষণ এই নোডের বিভাজন থেকে নোডের বিশুদ্ধতার ওজন হ্রাসের গণনা করুন এবং এটিতে যে বৈশিষ্ট্যটি বিভক্ত হয়েছিল তার জন্য এটি বিশিষ্ট করুন

importance_data[node.feature] += (
    node.weighted_n_node_samples * node.impurity -
    left.weighted_n_node_samples * left.impurity -
    right.weighted_n_node_samples * right.impurity)

তারপরে, সম্পন্ন হয়ে গেলে, এটি সমস্ত ডেটার মোট ওজন দ্বারা ভাগ করুন (বেশিরভাগ ক্ষেত্রে, পর্যবেক্ষণের সংখ্যা)

importances /= nodes[0].weighted_n_node_samples

এটি মনে রাখার মতো বিষয় যে গাছে জন্মানোর সময় কী বিভাজন করতে হবে তা নির্ধারণ করার সময় মেট্রিকের ব্যবহারের জন্য অপরিষ্কারের একটি সাধারণ নাম। এই আলোকে আমরা প্রতিটি সংক্ষিপ্ত বিবরণে গাছের সমস্ত বিভাজনকে অপরিচ্ছন্নতা কমাতে কতটা বিভক্ত করে দেওয়া হয়েছিল তার সংক্ষিপ্তসারটি করছি।

গ্রেডিয়েন্ট বৃদ্ধির প্রসঙ্গে, এই গাছগুলি সর্বদা রিগ্রেশন ট্রি (লোভের সাথে স্কোয়ার ত্রুটি হ্রাস করুন) ক্ষতি ফাংশনের গ্রেডিয়েন্টের সাথে উপযুক্ত।


এই খুব বিস্তারিত উত্তরের জন্য অনেক ধন্যবাদ। আমি এটি গ্রহণ করার আগে আমাকে সাবধানতার সাথে এটি করার জন্য কিছু সময় দিন।
এন্টোইন

4
যদিও মনে হয় যে বিভিন্ন অপরিষ্কারের মানদণ্ড ব্যবহার করা যেতে পারে, জিনির সূচকটি ফ্রেডম্যান ব্যবহার করেন এমন মানদণ্ড ছিল না। আপনার তৃতীয় লিঙ্কটির আমার প্রশ্ন এবং লাইন 878-তে উল্লিখিত হিসাবে ফ্রিডম্যান উন্নতি স্কোর সহ গড় স্কোয়ারড ত্রুটি অপূর্ণতার মানদণ্ডটি ব্যবহার করেছেন । আপনি যদি নিজের উত্তরের এই বিভাগটি আপডেট করতে পারেন তবে তা দুর্দান্ত। এবং হ্যাঁ, আপনি ঠিক বলেছেন, ওজনগুলি পর্যবেক্ষণের সংখ্যা indeed
এন্টোইন

3
অথবা সম্ভবত জিনির সূচী এবং ফ্রেডম্যানের মূল মাপদণ্ড সম্পর্কে উভয় অংশই রাখা আপনার উত্তরকে আরও উত্তম করে তুলবে, জোর দিয়ে যে প্রথমটি শ্রেণিবদ্ধকরণের জন্য এবং দ্বিতীয়টি প্রতিরোধের জন্য ব্যবহৃত হয়?
এন্টোইন

এন্টোইন, এই আপডেটের জন্য ধন্যবাদ। প্রকৃতপক্ষে স্কোয়ার ত্রুটিটি হ'ল রিগ্রেশন ট্রিগুলির জন্য ব্যবহৃত উন্নতির মানদণ্ড এটি জেনে রাখা সত্যিই সহায়ক। এটি শ্রেণিবদ্ধের জন্য কীভাবে ব্যবহৃত হবে তা স্পষ্ট ছিল না। তবে, শ্রেণিবদ্ধকরণের জন্য গ্রেডিয়েন্ট উত্সাহদানের পরেও, আমি মনে করি যে শ্রেণিবিন্যাস গাছের বিপরীতে রিগ্রেশন গাছগুলি এখনও ব্যবহার করা হচ্ছে। কমপক্ষে পাইথনে, প্রতি বৃদ্ধির পর্যায়ে বর্তমান ত্রুটির উপর রিগ্রেশন বিশ্লেষণ করা হচ্ছে।
মোটামুটি Nerdy

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