মাল্টিআউটপুট ক্লাসিফায়ার থেকে ভবিষ্যদ্বাণী_প্রবাহ বোঝা


28

র্যান্ডম ফরেস্ট মডেলটির সাথে একটি মাল্টিআউটপুট শ্রেণিবিন্যাস সম্পাদন করতে আমি বিজ্ঞানী-শিখার ওয়েবসাইটে এই উদাহরণটি অনুসরণ করছি ।

from sklearn.datasets import make_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.utils import shuffle
import numpy as np

X, y1 = make_classification(n_samples=5, n_features=5, n_informative=2, n_classes=2, random_state=1)
y2 = shuffle(y1, random_state=1)
Y = np.vstack((y1, y2)).T

forest = RandomForestClassifier(n_estimators=10, random_state=1)
multi_target_forest = MultiOutputClassifier(forest, n_jobs=-1)
multi_target_forest.fit(X, Y).predict(X)

print(multi_target_forest.predict_proba(X))

এটি থেকে predict_probaআমি একটি 2 5x2 অ্যারে পাই:

[array([[ 0.8,  0.2],
       [ 0.4,  0.6],
       [ 0.8,  0.2],
       [ 0.9,  0.1],
       [ 0.4,  0.6]]), array([[ 0.6,  0.4],
       [ 0.1,  0.9],
       [ 0.2,  0.8],
       [ 0.9,  0.1],
       [ 0.9,  0.1]])]

আমি সত্যিই ম্যাট্রিক্স n_sampleদ্বারা একটি আশা ছিল n_classes। এটি উপস্থিত ক্লাসগুলির সম্ভাবনার সাথে কীভাবে সম্পর্কিত তা বোঝার জন্য আমি সংগ্রাম করছি।

ডক্স জন্য predict_probaপদ বলে:

আকৃতির অ্যারে = [এন_সাম্পল, এন_চ্ল্যামস], বা এন_আউটপুটস> যদি 1_ এ জাতীয় অ্যারেগুলির একটি তালিকা।

ইনপুট নমুনার শ্রেণীর সম্ভাবনা। ক্লাসগুলির ক্রমটি শ্রেণি_বিধিতে সম্পর্কিত s

আমি অনুমান করছি যে বিবরণে আমার উত্তরোত্তর রয়েছে তবে আমি কীভাবে এটি আমার শ্রেণীর সম্ভাবনার সাথে সম্পর্কিত তা বুঝতে লড়াই করছি ling

তদুপরি, আমি যখন মডেলটির classes_জন্য অ্যাট্রিবিউটটি অ্যাক্সেস করার চেষ্টা করি তখন আমি forestএকটি পাই AttributeErrorএবং এই বৈশিষ্ট্যটি অস্তিত্বের মধ্যে নেই MultiOutputClassifier। আমি কীভাবে ক্লাসগুলি আউটপুটের সাথে সম্পর্কিত করতে পারি?

print(forest.classes_)

AttributeError: 'RandomForestClassifier' object has no attribute 'classes_'

উত্তর:


31

আপনার লক্ষ্যমাত্রা (0,1) ধরে নিলে শ্রেণিবদ্ধকারী একটি সম্ভাবনার ম্যাট্রিক্সকে মাত্রা (এন, 2) আউটপুট করবে। প্রথম সূচকটি সম্ভাব্যতাটিকে বোঝায় যে ডেটা 0 শ্রেণির অন্তর্গত, এবং দ্বিতীয়টি সম্ভাব্যতাটিকে বোঝায় যে ডেটা ক্লাস 1 এর সাথে সম্পর্কিত।

এই দুটি যোগফল 1 হবে।

তারপরে আপনি ফলাফলটি আউটপুট করতে পারেন:

probability = model.predict_proba(X)[:,1]

যদি আপনার কে ক্লাস থাকে তবে আউটপুটটি হবে (এন, কে), আপনি কোন শ্রেণীর চান তার সম্ভাব্যতা নির্দিষ্ট করতে হবে।


2
যদি এটি হয় তবে প্রতিটি শ্রেণীর জন্য কেন দুটি কলাম রয়েছে তা নিয়ে আমি এখনও বিভ্রান্ত। যদি প্রতিটি শ্রেণীর নিজস্ব প্রবেশিকা থাকে তবে প্রতিটি শ্রেণির (এন, 1) ম্যাট্রিক্স হওয়া উচিত না that শ্রেণীর সম্ভাব্যতা বর্ণনা করার জন্য?
হরপাল

2
দুটি শ্রেণীর জন্য দুটি কলাম, মনে রাখবেন যে আপনি যখন লক্ষ্যটি নির্ধারণ করছেন (0,1), তখন দুটি শ্রেণি থাকে। প্রতিটি সারি / ডাটাপয়েন্টে 0 এবং 1 উভয় ক্ষেত্রেই পূর্বাভাসের প্রয়োজন হবে উদাহরণস্বরূপ ডেটাপয়েন্ট 1 এর 0 টি হওয়ার 80% সম্ভাবনা রয়েছে, এবং 20% 1 টির সাথে সম্পর্কিত আউটপুট হবে (0.8,0.2)। আপনি অ্যাক্সেস prediciton প্রয়োজন [: 1] দ্বিতীয় কলামে পেতে তোমার দর্শন লগ করা 1. জন্য ভবিষ্যদ্বাণী সাধারণ এক্সেস ভবিষ্যদ্বাণী চান [: ট] আপনি তম বর্গ ট সম্ভাবনা চান
chrisckwong821

1
এটি উপেক্ষা করে মনে হচ্ছে যে প্রশ্নটি একটি বহু-আউটপুট মডেল সম্পর্কে।
বেন রেিনিগার

2

এর মধ্যে MultiOutputClassifier, আপনি দুটি আউটপুটকে পৃথক শ্রেণিবদ্ধকরণ কার্য হিসাবে গণ্য করছেন; আপনি যে ডক্স সংযুক্ত করেছেন সেগুলি থেকে:

এই কৌশলটিতে লক্ষ্য অনুসারে এক শ্রেণিবদ্ধ ফিটিং থাকে।

সুতরাং ফলাফলের তালিকার দুটি অ্যারে দুটি শ্রেণিবদ্ধ / নির্ভরশীল ভেরিয়েবলগুলির প্রত্যেককে উপস্থাপন করে। তারপরে অ্যারেগুলি হ'ল বাইনারি শ্রেণিবদ্ধকরণ আউটপুট (কলামগুলি যা ক্লাস 0 এর সম্ভাব্যতা, ক্লাস 1 এর সম্ভাবনা) যা @ chrisckwong821 উল্লেখ করেছেন, তবে প্রতিটি সমস্যার জন্য একটি।

অন্য কথায়, এর রিটার্ন মান predict_probaহ'ল একটি তালিকা হবে যার দৈর্ঘ্য আপনার প্রস্থের সমান y, অর্থাৎ n_outputsআপনার ক্ষেত্রে ২। predict_probaডকুমেন্টেশন রেফারেন্স থেকে আপনার উদ্ধৃতি n_outputs, যা ডকুমেন্টেশনে প্রবর্তিত হয়েছে fit:

fit(self, X, y[, sample_weight])

y : (স্পার্স) অ্যারের মতো, আকৃতি (n_samples, n_outputs)


আমি আপনার মন্তব্যের সাথে একমত, সর্বাধিক উত্সাহিত উত্তর প্রশ্নের উত্তর দেয় না, কেন (এন, 2) আকারের অ্যারে রয়েছে তা ব্যাখ্যা করে না । আপনার উত্তর প্রশ্নের উত্তর দেয় :n_outputs
রেড মটর। ই

1
ধন্যবাদ, আমি উত্তরটি এত বেশি ভোট দিয়ে পেয়ে অবাক হয়েছি। এবং সম্পাদনার জন্য ধন্যবাদ!
বেন রেইনিজার

0

প্রথম প্রশ্নের জন্য:

প্রথম 5x2 অ্যারে আপনাকে প্রথম শ্রেণিতে শ্রেণিবদ্ধ 5 টি পরীক্ষার নমুনার সম্ভাব্যতা দেয়। এছাড়াও, এই 5x2 অ্যারের প্রথম কলাম আপনাকে "পরীক্ষার নমুনাটিকে প্রথম শ্রেণি হিসাবে শ্রেণিবদ্ধ করা হয়নি" এবং এই 5x2 অ্যারের দ্বিতীয় কলাম আপনাকে বলেছে "পরীক্ষার নমুনা প্রথম শ্রেণি হিসাবে শ্রেণিবদ্ধ করা হয়েছে এমন সম্ভাবনা "।

একইভাবে, দ্বিতীয় 5x2 অ্যারে আপনাকে দ্বিতীয় শ্রেণিতে নমুনাগুলির পরীক্ষার শ্রেণিবিন্যাসের সম্ভাবনা দেয়।

আপনি যদি এটি যাচাই করতে চান তবে ফলাফলগুলি দিয়ে আপনি সেই অ্যারেগুলিতে মানটি বিপরীত করতে পারেন predict

কখনও কখনও, ফেরত predict_probaআপনাকে Nx1 অ্যারে এবং Nx2 অ্যারে ধারণ করে এমন একটি তালিকা দেয়। যদি তা হয় তবে কোনও পরীক্ষার ডেটা সেই Nx1 অ্যারে প্রতিনিধিত্বমূলক ক্লাসে শ্রেণিবদ্ধ করা হয়নি।

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