র‌্যান্ডমফোরস্টক্ল্যাসিফায়ারে ফিচার_প্রয়োজনগুলি কীভাবে নির্ধারণ করা হয়?


125

ডেটা ইনপুট হিসাবে টাইম-সিরিজ সহ আমার একটি শ্রেণিবদ্ধকরণ টাস্ক রয়েছে, যেখানে প্রতিটি অ্যাট্রিবিউট (এন = ২৩) সময় একটি নির্দিষ্ট পয়েন্ট উপস্থাপন করে। পরম শ্রেণিবদ্ধকরণ ফলাফল ছাড়াও আমি এটি জানতে চাই, কোন বৈশিষ্ট্য / তারিখগুলি ফলাফলকে কতটা অবদান রাখে। অতএব আমি কেবলমাত্র ব্যবহার করছি feature_importances_, যা আমার পক্ষে ভাল কাজ করে।

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


10
ওহো তিনটি কোর এক এস থ্রেডে চলছে। এটি একরকম রেকর্ড হতে হবে And
আন্দ্রেস মোলার

উত্তর:


158

বৈশিষ্ট্যটি "আমদানি" পাওয়ার জন্য বেশ কয়েকটি উপায় রয়েছে। প্রায়শই, এই শব্দটির অর্থ কী তা নিয়ে কোনও কঠোর sensক্যমত্য নেই।

সাইকিট-লার্নে, [1] এ বর্ণিত হিসাবে আমরা গুরুত্বটি প্রয়োগ করি (প্রায়শই উদ্ধৃত করা হয়, তবে দুর্ভাগ্যক্রমে খুব কমই পড়ি ...)। এটিকে কখনও কখনও "গিনি গুরুত্ব" বা "মানে হ্রাস অপূর্ণতা" বলা হয় এবং নোডের অপরিষ্কারের মোট হ্রাস হিসাবে সংজ্ঞায়িত করা হয় (সেই নোডে পৌঁছার সম্ভাবনা দ্বারা ভারিত (যা সেই নোডে পৌঁছানোর নমুনার অনুপাতে প্রায় হয়)) গড়পড়তা গড় জমায়েত গাছ

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

(মনে রাখবেন যে উভয় অ্যালগরিদম এলোমেলোভাবে প্যাকেজে উপলব্ধ)

[1]: ব্রেইম্যান, ফ্রেডম্যান, "শ্রেণিবদ্ধতা এবং রিগ্রেশন ট্রি", 1984।


48
যদি এই উত্তরটি গুরুত্ব বৈশিষ্ট্য / উদাহরণের ডকুমেন্টেশনে উল্লেখ করা হত তবে দুর্দান্ত হতে পারে। কিছুক্ষণের জন্যও এটি অনুসন্ধান করা হয়েছিল :)
d1337

2
মনে হয় গুরুত্ব স্কোরটি আপেক্ষিক মান হয়? উদাহরণস্বরূপ, সমস্ত বৈশিষ্ট্যের গুরুত্বের স্কোরগুলির যোগফল সর্বদা 1 (উদাহরণটি এখানে বিজ্ঞান-পত্রিকা দেখুন / স্টেবল / আউটো_এক্সামস / সেনসবল / / দেখুন )
আরএনএ

5
@ আরএনএ: হ্যাঁ, ডিফল্টরূপে ভেরিয়েবলের আমদানিগুলি সাইকিট-লার্নকে স্বাভাবিক করা হয়, যেমন তারা একত্রে যোগ করে। আপনি পৃথক বেস অনুমানকারীকে কল করে এবং কল করে এটিকে রোধ করতে পারেন tree_.compute_feature_importances(normalize=False)
গিলস লুপ্প

2
@ গিলসলাপ্প আপনি প্রতিটি গাছে সিদ্ধান্ত গাছের রেজিস্ট্রারদের বনাঞ্চলের জন্য এমএসইতে হ্রাস হ্রাস করার জন্য ব্যাগের নমুনাগুলি ব্যবহার করছেন না? বা গাছের সমস্ত প্রশিক্ষণ ডেটা ব্যবহার করা হয়?
কোকস

1
দুটি দরকারী সংস্থান। (১) ব্লগ.ডাটাডাইভ.এন.এ.এন্ডো সাবাসের একটি ব্লগ গিলস দ্বারা উল্লিখিত "মানে হ্রাস হ্রাস অপূর্ণতা" এবং "নির্ভুলতার অর্থ হ্রাস" উভয়ই প্রয়োগ করে। (২) গিলস লুপের থিসিসটি ডাউনলোড এবং পড়ুন।
মার্ক টিজ

54

একক গাছের বৈশিষ্ট্য গুরুত্বের মানগুলি গণনা করার স্বাভাবিক উপায়টি হ'ল:

  1. আপনি feature_importancesআকারের সাথে সমস্ত শূন্যের একটি অ্যারে শুরু করুন n_features

  2. আপনি গাছটিকে অতিক্রম করেন: প্রতিটি অভ্যন্তরীণ নোডের জন্য যা iআপনাকে বৈশিষ্ট্য অনুসারে বিভক্ত করে সেই নোডের ত্রুটি হ্রাসের গণনা করে নোডের দিকে যে পরিমাণ নমুনা পাঠানো হয়েছিল তার দ্বারা গুণিত করে এই পরিমাণটি যুক্ত করে feature_importances[i]

ত্রুটি হ্রাস আপনি যে অপরিষ্কার মানদণ্ড ব্যবহার করেন তার উপর নির্ভর করে (যেমন গিনি, এন্ট্রপি, এমএসই, ...)। এর উদাহরণগুলির সেটগুলির অপরিচ্ছন্নতা যা অভ্যন্তরীণ নোড বিয়োগ দ্বারা বিভক্ত হয়ে দুটি পার্টিশনের অমেধ্যের যোগফলকে যোগ করে।

এটি গুরুত্বপূর্ণ যে এই মানগুলি একটি নির্দিষ্ট ডেটাसेटের সাথে সম্পর্কিত (উভয় ত্রুটি হ্রাস এবং নমুনার সংখ্যা ডেটাसेट নির্দিষ্ট) এইভাবে এই মানগুলি বিভিন্ন ডেটাসেটের মধ্যে তুলনা করা যায় না।

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


12

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

সিদ্ধান্তের গাছগুলির শীর্ষ স্তরের নোডের সাথে জড়িত বৈশিষ্ট্যগুলি আরও নমুনা দেখতে ঝোঁক তাই আরও বেশি গুরুত্ব পাবে সম্ভবত।

সম্পাদনা করুন : এই বিবরণটি কেবল আংশিকভাবে সঠিক: গিলস এবং পিটারের উত্তরগুলি সঠিক উত্তর।


1
সঠিক পদ্ধতি সম্পর্কে কিছু কাগজ / ডকুমেন্টেশন আছে কিনা জানেন? যেমন। ব্রেইম্যান, 2001. আমার কাছে যদি এমন কিছু সঠিক নথি থাকে যা আমি পদ্ধতিটির জন্য তুলে ধরতে পারি তবে এটি দুর্দান্ত হবে।
ব্যবহারকারী2244670

@ योगাইসেল আপনি আপনার প্রতিক্রিয়াটিকে "ওয়েটিং" এর ব্যাখ্যা হিসাবে পরিষ্কারভাবে চিহ্নিত করতে পারলে এটি দুর্দান্ত হবে। একা ওয়েট করা বৈশিষ্ট্যের গুরুত্ব নির্ধারণ করে না। "অপরিচ্ছন্নতা মেট্রিক" ("গিনি-গুরুত্ব" বা আরএসএস) ওজনের সাথে মিলিত হয়ে গাছগুলির গড় গড় সামগ্রিক বৈশিষ্ট্যের গুরুত্ব নির্ধারণ করে। দুর্ভাগ্যক্রমে সাইকিট-লার্ন সম্পর্কে ডকুমেন্টেশন এখানে: scikit-learn.org/stable/modules/… সঠিক নয় এবং ভুলভাবে "গভীরতা " টিকে অপরিষ্কারের মেট্রিক হিসাবে উল্লেখ করেছে।
অ্যারিয়েল

11

@ গিলসলুপের উপরে উল্লিখিত হিসাবে, সাইকিট-লার্ন বর্তমানে বৈশিষ্ট্য আমদানির জন্য "গড় হ্রাস অযোগ্যতা" মেট্রিক প্রয়োগ করে। আমি ব্যক্তিগতভাবে দ্বিতীয় মেট্রিককে কিছুটা আকর্ষণীয় মনে করি, যেখানে আপনি এলোমেলোভাবে আপনার প্রতিটি বৈশিষ্ট্যের মানকে একের পর এক ক্রমান্বিত করেন এবং দেখুন যে আপনার ব্যাগের বাইরে পারফরম্যান্স কতটা খারাপ।

যেহেতু আপনি বৈশিষ্ট্যটির গুরুত্ব সহকারে যা করছেন তা হ'ল প্রতিটি বৈশিষ্ট্যটি আপনার সামগ্রিক মডেলের ভবিষ্যদ্বাণীপূর্ণ পারফরম্যান্সে কতটুকু অবদান রাখে, দ্বিতীয় মেট্রিক আসলে আপনাকে এটির সরাসরি পরিমাপ দেয় যেখানে "মানে হ্রাস হ্রাস অযোগ্যতা" কেবল একটি ভাল প্রক্সি।

আপনি যদি আগ্রহী হন তবে আমি একটি ছোট প্যাকেজ লিখেছিলাম যা পারমিটেশন ইমপোর্টেন্স মেট্রিক প্রয়োগ করে এবং বিজ্ঞান-শিখার এলোমেলো বন শ্রেণীর উদাহরণ থেকে মানগুলি গণনা করতে ব্যবহার করা যেতে পারে:

https://github.com/pjh2011/rf_perm_feat_import

সম্পাদনা: এটি পাইথন ২.7 এর জন্য কাজ করে, ৩ নয়


হাই @ পিটার আমি যখন আপনার কোড ব্যবহার করি তখন আমি এই ত্রুটিটি পাই: নেম ইরার: নাম 'এক্সরেঞ্জ' সংজ্ঞায়িত হয়নি।
আইজাযাক

হাই @ আইজ্জাাক দুঃখিত আমি প্যাকেজ লেখার ক্ষেত্রে নতুন, তাই আমি লক্ষ করেছি যে আমি এটি পাইথন ২.7 এর জন্য লিখেছি। ডিএফ এক্সরেঞ্জ (এক্স) চেষ্টা করুন: চালানোর আগে এটির (রেঞ্জ (এক্স)) রিটার্ন করুন
পিটার

2

আমাকে প্রশ্নের উত্তর দেওয়ার চেষ্টা করুন। কোড:

iris = datasets.load_iris()  
X = iris.data  
y = iris.target  
clf = DecisionTreeClassifier()  
clf.fit(X, y)  

সিদ্ধান্ত_বৃক্ষের প্লট:
চিত্রের বিবরণ এখানে প্রবেশ করান
আমরা গণনা_পরিচয়_পরিচয় পেতে পারি: [0। , 0.01333333,0.06405596,0.92261071]
উত্স কোডটি পরীক্ষা করুন:

cpdef compute_feature_importances(self, normalize=True):
    """Computes the importance of each feature (aka variable)."""
    cdef Node* left
    cdef Node* right
    cdef Node* nodes = self.nodes
    cdef Node* node = nodes
    cdef Node* end_node = node + self.node_count

    cdef double normalizer = 0.

    cdef np.ndarray[np.float64_t, ndim=1] importances
    importances = np.zeros((self.n_features,))
    cdef DOUBLE_t* importance_data = <DOUBLE_t*>importances.data

    with nogil:
        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

    if normalize:
        normalizer = np.sum(importances)

        if normalizer > 0.0:
            # Avoid dividing by zero (e.g., when root is pure)
            importances /= normalizer

    return importances

বৈশিষ্ট্যটির গুরুত্ব গণনা করে দেখুন:

print("sepal length (cm)",0)
print("sepal width (cm)",(3*0.444-(0+0)))
print("petal length (cm)",(54* 0.168 - (48*0.041+6*0.444)) +(46*0.043 -(0+3*0.444)) + (3*0.444-(0+0)))
print("petal width (cm)",(150* 0.667 - (0+100*0.5)) +(100*0.5-(54*0.168+46*0.043))+(6*0.444 -(0+3*0.444)) + (48*0.041-(0+0)))

আমরা বৈশিষ্ট্য_ গুরুত্ব: এনপি.আরে ([0,1.332,6.418,92.30]) পাই।
স্বাভাবিক করার পর, আমরা অ্যারে ([0, 0,01331334, 0,06414793, 0,92253873]) পেতে পারেন, এই হিসাবে একই clf.feature_importances_
সাবধানতা অবলম্বন করুন সমস্ত শ্রেণীর ওজন এক হওয়ার কথা।


1

যারা এই বিষয়ে সাইকিট-লারির ডকুমেন্টেশনের জন্য একটি রেফারেন্স খুঁজছেন বা @ গিলসলুপের উত্তরের একটি রেফারেন্স খুঁজছেন তাদের জন্য:

র্যান্ডমফোরস্টক্লাসিফায়ারে, estimators_অ্যাট্রিবিউটটি হ'ল ডিসিশনট্রি ক্লাসিফায়ারের একটি তালিকা ( ডকুমেন্টেশনে উল্লিখিত হিসাবে )। সাইকিট-লার্নের সোর্স কোডেfeature_importances_ র‌্যান্ডমফোরস্টক্লাসিফায়ারের জন্য গণনা করার জন্য, এটি পরিবেষ্টনের সমস্ত অনুমানের (সমস্ত ডিসিশনট্রি ক্লাসিফার ) feature_importances_বৈশিষ্ট্যগুলির তুলনায় গড় verages

ডিসিশনট্রি ক্লাসিফারের ডকুমেন্টেশনে উল্লেখ করা হয়েছে যে "একটি বৈশিষ্ট্যের গুরুত্বটিকে সেই বৈশিষ্ট্যটি নিয়ে আসা মানদণ্ডের (সাধারণীকৃত) মোট হ্রাস হিসাবে গণনা করা হয়। এটি গিনি গুরুত্ব [1] নামেও পরিচিত।"

নীচে বিজ্ঞান-শিখার রেফারেন্স দ্বারা প্রদত্ত ভেরিয়েবল এবং গিনি গুরুত্ব সম্পর্কে আরও তথ্যের জন্য এখানে একটি সরাসরি লিঙ্ক।

[1] এল Breiman, এবং এ কাটলার, "তাত্ক্ষণিক বন", http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

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