2016-01-17 4 views
14

मैं संकुल scikit से train_test_split का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे पैरामीटर stratify पैरामीटर के साथ समस्या हो रही है।पैरामीटर "ट्रेन_टेस्ट_स्प्लिट" (scikit जानें) से पैरामीटर "stratify"

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])} 

किसी एक विचार क्या हो रहा है है:

from sklearn import cross_validation, datasets 

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

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

हालांकि, मैं निम्नलिखित समस्या आ रही है: इसके बाद कोड है? नीचे फंक्शन प्रलेखन है।

[...]

विभक्त हो: सरणी की तरह या कोई नहीं (डिफ़ॉल्ट है कोई नहीं)

यदि नहीं कोई नहीं, डेटा एक स्तरीकृत फैशन में विभाजित है, लेबल के रूप में इस का उपयोग करते हुए सरणी।

संस्करण 0.17 में नई: विभक्त हो बंटवारे

[...]

उत्तर

6

विज्ञान-सीखना सिर्फ आपको बता रहा है कि यह "stratify" तर्क को नहीं पहचानता है, न कि आप इसे गलत तरीके से उपयोग कर रहे हैं। ऐसा इसलिए है क्योंकि पैरामीटर को आपके द्वारा उद्धृत दस्तावेज़ में दर्शाए गए संस्करण 0.17 में जोड़ा गया था।

तो आपको केवल Scikit-Learn को अपडेट करने की आवश्यकता है।

2

, यह "सिर्फ काम करता है" इस कोड को चलाने की कोशिश करें:

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]) 
+0

मैंने कोशिश की और यह अभी भी काम नहीं करता है। –

+0

@ user5767535 जैसा कि आप देख सकते हैं कि यह मेरी उबंटू मशीन पर '0.17' संस्करण के 'sklearn'' के साथ काम कर रहा है, पायथन 3,5 के लिए एनाकोंडा वितरण। यदि आप कोड सही तरीके से दर्ज करते हैं और अपने सॉफ़्टवेयर को अपडेट करते हैं तो मैं केवल एक और बार जांचने का सुझाव दे सकता हूं। –

+2

@ user5767535 बीटीडब्लू, "संस्करण 0.17 में नया: विभाजन को स्तरीकृत करना" मुझे लगभग निश्चित करता है कि आपको अपने 'sklearn' को अपडेट करना होगा ... –

39

यह stratify पैरामीटर बनाता है एक विभाजन ताकि नमूने में मूल्यों का अनुपात पैरामीटर stratify पर प्रदान किए गए मानों के अनुपात के समान होगा।

उदाहरण के लिए

, अगर चर y मूल्यों 0 और 1 साथ एक द्विआधारी स्पष्ट चर रहा है और शून्य का 25% और लोगों के 75% देखते हैं, stratify=y सुनिश्चित करें कि आपके यादृच्छिक विभाजन 0 की और 75 में से 25% है कर देगा 1 का%।

+0

यह वास्तव में प्रश्न का उत्तर नहीं देता है लेकिन यह समझने के लिए बहुत उपयोगी है कि यह कैसे काम करता है। अनेक अनेक धन्यवाद। –

2

मेरे भविष्य स्वयं जो गूगल के जरिये यहां आता है के लिए:

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 सेट करना पुनरुत्पादन के लिए वांछनीय है।

0

इस संदर्भ में, स्तरीकरण का अर्थ है कि train_test_split विधि प्रशिक्षण और परीक्षण सबसेट देता है जिसमें कक्षा डेटा के समान अनुपात इनपुट डेटासेट के रूप में होते हैं।