পদ্ধতি "ট্রেনস্টেস্ট_স্প্লিট" (সাইকিট শিখুন) থেকে প্যারামিটার "স্ট্রেটিফাই" করুন


94

আমি train_test_splitপ্যাকেজ সাইকিট লার্ন থেকে ব্যবহার করার চেষ্টা করছি তবে পরামিতি নিয়ে আমার সমস্যা হচ্ছে stratify। আখেরাত কোড:

from sklearn import cross_validation, datasets 

X = iris.data[:,:2]
y = iris.target

cross_validation.train_test_split(X,y,stratify=y)

তবে, আমি নিম্নলিখিত সমস্যাটি পেতে থাকি:

raise TypeError("Invalid parameters passed: %s" % str(options))
TypeError: Invalid parameters passed: {'stratify': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])}

কারও কি ধারণা আছে যে কি চলছে? নীচে ফাংশন ডকুমেন্টেশন রয়েছে।

[...]

স্তরবদ্ধ : অ্যারের মত বা কিছুই নয় (ডিফল্ট কোনও হয় না)

যদি না হয় তবে, লেবেল অ্যারে হিসাবে এটি ব্যবহার করে ডেটা একটি স্তরিত ফ্যাশনে বিভক্ত হয়।

0.17 সংস্করণে নতুন: বিভাজক stratify

[...]


নাহ, সব সমাধান হয়েছে।
ড্যানিয়েল অলিভা 17

উত্তর:


58

সাইকিট-শিখুন আপনাকে কেবল এটি বলছে এটি "স্ট্রেটিফাই" যুক্তিটি স্বীকৃতি দেয় না, আপনি এটি ভুলভাবে ব্যবহার করছেন না। আপনার উদ্ধৃত ডকুমেন্টেশনে ইঙ্গিত হিসাবে প্যারামিটারটি 0.17 সংস্করণে যুক্ত করা হয়েছিল কারণ এটি।

সুতরাং আপনাকে কেবল সাইকিত-শিখুন আপডেট করতে হবে।


আমি একই ত্রুটিটি পাচ্ছি, যদিও আমার বিজ্ঞান-শিখার সংস্করণ 0.21.2 রয়েছে। scikit-learn 0.21.2 py37h2a6a0b8_0 conda-forge
করিম জিরোদি

325

এই stratifyপরামিতিটি একটি বিভক্ত করে তোলে যাতে উত্পাদিত নমুনার মানগুলির অনুপাত প্যারামিটারে সরবরাহিত মানের অনুপাতের সমান হয় stratify

উদাহরণস্বরূপ, যদি ভেরিয়েবল yমানগুলির সাথে বাইনারি শ্রেণিবদ্ধ পরিবর্তনশীল হয় 0এবং 125% শূন্য এবং 75% থাকে stratify=yতবে তা নিশ্চিত করবে যে আপনার এলোমেলো বিভাজন 25% 0এর এবং 75% 1এর রয়েছে।


117
এটি সত্যই প্রশ্নের উত্তর দেয় না তবে এটি কীভাবে কাজ করে তা বোঝার জন্য এটি দরকারী is অসংখ্য ধন্যবাদ.
রিড জেসেন

6
আমি এখনও বুঝতে চেষ্টা করি, কেন এই স্তরেরকরণ প্রয়োজনীয়: ডেটাগুলিতে শ্রেণিভিত্তিক ভারসাম্য থাকলে, ডেটার একটি এলোমেলো বিভাজন করার সময় কি এটি গড়ে গড়ে সংরক্ষণ করা হত না?
হলগার ব্র্যান্ডেল

14
@ হোলারব্রেন্ডল এটি গড়ে গড়ে তোলা হবে; stratify সহ, এটি নিশ্চিতভাবে সংরক্ষণ করা হবে।
যোনাতন

7
@ হোলজারব্রান্ডল খুব ছোট বা খুব ভারসাম্যহীন ডেটা সেট সহ, এটি বেশ সম্ভব যে এলোমেলো বিভাজনটি একটি বিভাজন থেকে সম্পূর্ণরূপে কোনও শ্রেণিকে নির্মূল করতে পারে।
সিডিডিটি

4
@ হোলারব্রান্ডল চমৎকার প্রশ্ন! হতে পারে আমরা প্রথমে এটি যুক্ত করতে পারি, আপনাকে প্রশিক্ষণ এবং পরীক্ষার সেটটি ব্যবহার করে বিভক্ত করতে হবে stratify। তারপরে দ্বিতীয়ত, ভারসাম্যহীনতা সংশোধন করার জন্য আপনাকে শেষ পর্যন্ত ট্রেনিং সেটে ওভারস্যাম্পলিং বা আন্ডার স্যাম্পলিং চালাতে হবে। অনেক স্ক্লার্ন শ্রেণিবদ্ধের ক্লাস-ওজন নামে একটি প্যারামিটার থাকে যা আপনি ভারসাম্যপূর্ণ করতে পারেন। অবশেষে আপনি ভারসাম্যহীন ডেটাসেটের নির্ভুলতার চেয়ে আরও উপযুক্ত মেট্রিক নিতে পারেন। চেষ্টা করুন, এফ 1 বা আরওসি এর অধীনে অঞ্চল।
ক্লোড

62

আমার ভবিষ্যতের স্ব জন্য যিনি গুগলের মাধ্যমে এখানে আসেন:

train_test_splitএখন ভিতরে model_selection, তাই:

from sklearn.model_selection import train_test_split

# given:
# features: xs
# ground truth: ys

x_train, x_test, y_train, y_test = train_test_split(xs, ys,
                                                    test_size=0.33,
                                                    random_state=0,
                                                    stratify=ys)

এটি ব্যবহার করার উপায়। random_stateপুনরুত্পাদনযোগ্যতার জন্য সেটটি সেট করা পছন্দসই।


এই উত্তরটি হওয়া উচিত :) ধন্যবাদ
সুইমবাইকআরুন

15

এই প্রসঙ্গে স্ট্রেটিফিকেশন মানে ট্রেন_স্টেস্ট_স্প্লিট পদ্ধতি প্রশিক্ষণ এবং পরীক্ষার উপগ্রহগুলিকে ফিরিয়ে দেয় যা ক্লাস লেবেলের সমান অনুপাতযুক্ত ইনপুট ডেটাসেট হিসাবে।


3

এই কোডটি চালানোর চেষ্টা করুন, এটি "কেবলমাত্র কাজ করে":

from sklearn import cross_validation, datasets 

iris = datasets.load_iris()

X = iris.data[:,:2]
y = iris.target

x_train, x_test, y_train, y_test = cross_validation.train_test_split(X,y,train_size=.8, stratify=y)

y_test

array([0, 0, 0, 0, 2, 2, 1, 0, 1, 2, 2, 0, 0, 1, 0, 1, 1, 2, 1, 2, 0, 2, 2,
       1, 2, 1, 1, 0, 2, 1])

@ user5767535 আপনি দেখতে পাবেন যে এটি আমার উবুন্টু মেশিনে sklearn'0.17' সংস্করণ সহ কাজ করছে, পাইথন 3,5 এর জন্য অ্যানাকোন্ডা বিতরণ। আপনি যদি কোডটি সঠিকভাবে প্রবেশ করে এবং আপনার সফ্টওয়্যারটি আপডেট করে থাকেন তবে আমি কেবলমাত্র আরও একবার যাচাই করার পরামর্শ দিতে পারি।
সের্গে বুশমানভ 21

4
@ user5767535 বিটিডাব্লু, "0.17 সংস্করণে নতুন: স্ট্র্যাটিফাই বিভাজন" আমাকে প্রায় নিশ্চিত করেছে যে আপনার আপডেট করতে হবে sklearn...
সের্গে বুশমানভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.