Scikit में रैंडम राज्य (छद्म यादृच्छिक संख्या) सीखते हैं


148

मैं एक मशीन लर्निंग एल्गोरिदम को स्किकिट लर्न में लागू करना चाहता हूं, लेकिन मुझे समझ नहीं आ रहा है कि यह पैरामीटर क्या random_stateकरता है? मुझे क्यों इसका उपयोग करना चाहिए?

मुझे यह भी समझ नहीं आया कि एक छद्म यादृच्छिक संख्या क्या है।

जवाबों:


220

train_test_splitयादृच्छिक ट्रेन और परीक्षण सबसेट में ऐरे या मेट्रिसेस को विभाजित करता है। इसका मतलब है कि हर बार जब आप इसे निर्दिष्ट किए बिना चलाते हैं random_state, तो आपको एक अलग परिणाम मिलेगा, यह अपेक्षित व्यवहार है। उदाहरण के लिए:

1 चलाएं:

>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
        [8, 9],
        [4, 5]]),
 array([[2, 3],
        [0, 1]]), [3, 4, 2], [1, 0]]

2 चलाएं

>>> train_test_split(a, b)
[array([[8, 9],
        [4, 5],
        [0, 1]]),
 array([[6, 7],
        [2, 3]]), [4, 2, 0], [3, 1]]

यह बदलता है। दूसरी ओर यदि आप उपयोग करते हैं random_state=some_number, तो आप गारंटी दे सकते हैं कि रन 1 का आउटपुट रन 2 के आउटपुट के बराबर होगा , यानी आपका विभाजन हमेशा समान रहेगा। इससे कोई फर्क नहीं पड़ता कि वास्तविक random_stateसंख्या 42, 0, 21, क्या है ... महत्वपूर्ण बात यह है कि हर बार जब आप 42 का उपयोग करते हैं, तो आप हमेशा समान आउटपुट प्राप्त करेंगे जब आप पहली बार विभाजन करते हैं। यह उपयोगी है यदि आप दस्तावेज़ में उदाहरण के लिए, प्रतिलिपि प्रस्तुत करने योग्य परिणाम चाहते हैं, ताकि उदाहरणों को चलाने पर हर कोई समान संख्याओं को लगातार देख सके। व्यवहार में, मैं कहूंगा, आपको निर्धारित करना चाहिएrandom_state सामान की जांच करते समय कुछ निश्चित संख्या निर्धारित , लेकिन फिर इसे उत्पादन में हटा दें यदि आपको वास्तव में यादृच्छिक (और निश्चित नहीं) विभाजन की आवश्यकता है।

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


7
इसलिए मुझे किस यादृच्छिक अवस्था में जाना चाहिए, मैं आमतौर पर यह संख्या 42 देखता हूं।
एलिजाबेथ सूसन जोसेफ

1
@ एलिज़बेथसुसन जोसेफ, यह ज्यादा मायने नहीं रखता है, मैं हमेशा 0 का उपयोग करता हूं अगर मुझे रिप्रोड्यूसबिलिटी चाहिए या कोई भी अन्यथा। हो सकता है कि 42 साल की उम्र में लोग ऐसे हो जाएं।
elyase

53
यह संभवतः 42 नंबर का इतनी बार उपयोग करने की व्याख्या करता है: en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy
denson

3
अच्छा है, यहां अधिक संभावनाएं हैं
elyase

1
@ हर्बर्ट यह एक कठिन सवाल है। कोर PRNG- सामान सुन्न पर आधारित है जो सुसंगत है (उन्होंने अतीत में कुछ समस्या के बाद इसके लिए कई जांच शुरू की थीं)। यदि स्केलेर के भीतर उपयोग में कोई त्रुटि नहीं है तो यह सुसंगत व्यवहार करेगा। मैं इस ग्रहण करेंगे (ट्रेन परीक्षण विभाजित और सह की तरह कम जटिल कार्य के लिए विशेष रूप से) संपादित करें उफ़, थोड़ी देर हो चुकी :-):
Sascha

13

यदि आप random_stateअपने कोड में निर्दिष्ट नहीं करते हैं , तो हर बार जब आप दौड़ते हैं (निष्पादित करते हैं) तो आपका कोड एक नया यादृच्छिक मूल्य उत्पन्न होता है और ट्रेन और परीक्षण डेटासेट में हर बार अलग-अलग मान होंगे।

हालाँकि, यदि कोई निश्चित मान नियत है, random_state = 42तो आप अपने कोड को कितनी बार निष्पादित करते हैं, तो परिणाम वही होगा। ट्रेन और परीक्षण डेटासेट में समान मान।


4

यदि आपने कोड में random_state का उल्लेख नहीं किया है, तो जब भी आप अपने कोड को निष्पादित करते हैं एक नया यादृच्छिक मान उत्पन्न होता है और ट्रेन और परीक्षण डेटासेट में हर बार अलग-अलग मान होंगे।

हालाँकि, यदि आप random_state (random_state = 1 या किसी अन्य मान) के लिए एक विशेष मान का उपयोग करते हैं, तो हर बार परिणाम समान होगा, अर्थात ट्रेन और परीक्षण डेटासेट में समान मान। कोड के नीचे देखें:

import pandas as pd 
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,random_state = 1,test_size = .3)
size25split = train_test_split(test_series,random_state = 1,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))

इससे कोई फर्क नहीं पड़ता कि आप कितनी बार कोड चलाते हैं, आउटपुट 70 होगा।

70

Random_state को हटाने और कोड को चलाने का प्रयास करें।

import pandas as pd 
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,test_size = .3)
size25split = train_test_split(test_series,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))

अब जब आप कोड निष्पादित करेंगे तो यहां आउटपुट अलग-अलग होगा।


3

random_state नंबर एक यादृच्छिक तरीके से परीक्षण और प्रशिक्षण डेटासेट को विभाजित करता है। यहां जो कुछ भी समझाया गया है, इसके अलावा, यह याद रखना महत्वपूर्ण है कि random_state मान आपके मॉडल की गुणवत्ता पर महत्वपूर्ण प्रभाव डाल सकता है (गुणवत्ता से मैं अनिवार्य रूप से अनुमान लगाने के लिए सटीकता का मतलब है)। उदाहरण के लिए, यदि आप एक निश्चित डेटासेट लेते हैं और इसके साथ एक प्रतिगमन मॉडल को प्रशिक्षित करते हैं, तो random_state मान को निर्दिष्ट किए बिना, यह संभावना है कि हर बार, आपको परीक्षण डेटा पर अपने प्रशिक्षित मॉडल के लिए एक अलग सटीकता का परिणाम मिलेगा। इसलिए आपको सबसे सटीक मॉडल प्रदान करने के लिए सबसे अच्छा random_state मान खोजना महत्वपूर्ण है। और फिर, उस संख्या का उपयोग आपके मॉडल को किसी अन्य अवसर जैसे किसी अन्य शोध प्रयोग में पुन: पेश करने के लिए किया जाएगा। ऐसा करने के लिए,

for j in range(1000):

            X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =j,     test_size=0.35)
            lr = LarsCV().fit(X_train, y_train)

            tr_score.append(lr.score(X_train, y_train))
            ts_score.append(lr.score(X_test, y_test))

        J = ts_score.index(np.max(ts_score))

        X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =J, test_size=0.35)
        M = LarsCV().fit(X_train, y_train)
        y_pred = M.predict(X_test)`

1

यदि कोई रैंडमस्टेट नहीं है, तो सिस्टम आंतरिक रूप से उत्पन्न रैंडमस्टेट का उपयोग करेगा। इसलिए, जब आप प्रोग्राम को कई बार चलाते हैं तो आप अलग-अलग ट्रेन / टेस्ट डेटा पॉइंट देख सकते हैं और व्यवहार अप्रत्याशित होगा। मामले में, आपके पास अपने मॉडल के साथ एक समस्या है आप इसे फिर से बनाने में सक्षम नहीं होंगे क्योंकि आप उस यादृच्छिक संख्या को नहीं जानते हैं जो प्रोग्राम चलाने के दौरान उत्पन्न हुई थी।

यदि आप ट्री क्लासीफायर देखते हैं - या तो डीटी या आरएफ, तो वे एक इष्टतम योजना का उपयोग करके प्रयास करने का प्रयास करते हैं। हालांकि अधिकांश बार यह योजना समान हो सकती है लेकिन ऐसे उदाहरण हो सकते हैं जहां पेड़ अलग हो सकता है और इसलिए भविष्यवाणियां। जब आप अपने मॉडल को डीबग करने का प्रयास करते हैं तो आप उसी उदाहरण को फिर से बनाने में सक्षम नहीं हो सकते हैं जिसके लिए एक ट्री बनाया गया था। इसलिए, इस सभी परेशानी से बचने के लिए हम DecisionTreeClassifier या RandomForestClassifier का निर्माण करते हुए random_state का उपयोग करते हैं।

पुनश्च: आप इस बेहतर समझने के लिए DecisionTree में ट्री का निर्माण कैसे किया जाता है, इस पर आप थोड़ी गहराई से जा सकते हैं।

बेतरतीब ढंग से मूल रूप से आपकी समस्या को हर बार चलाने के दौरान उपयोग किया जाता है। यदि आप ट्रैन्स्टिस्टप्लिट में रैंडमस्टेट का उपयोग नहीं करते हैं, तो हर बार जब आप विभाजन करते हैं तो आपको ट्रेन और परीक्षण बिंदुओं का एक अलग सेट मिल सकता है और समस्या होने पर आपको डिबगिंग में मदद नहीं मिलेगी।

डॉक्टर से:

यदि int, randomstate यादृच्छिक संख्या जनरेटर द्वारा उपयोग किया जाने वाला बीज है; यदि randomState उदाहरण, randomstate यादृच्छिक संख्या जनरेटर है; यदि कोई नहीं है, यादृच्छिक संख्या जनरेटर रैंडमस्टेट उदाहरण है जिसका उपयोग np.random द्वारा किया जाता है।


अच्छे खर्च। मैं केवल यह जोड़ना चाहूंगा, कि हम यादृच्छिक राज्य को क्यों पारित करेंगे, इसका एक कारण यह है कि यदि हम उदाहरण के लिए हाइपरपरमेटर्स को अनुकूलित करने का प्रयास करते हैं, तो हम यादृच्छिक संख्याओं के आधार पर अलग-अलग इनिशियलाइज़ेशन के कारण स्कोर में उतार-चढ़ाव नहीं चाहते हैं, जो कवर कर सकते हैं या वास्तविक अनुकूलन के प्रभाव को छिपाने के लिए और इस प्रकार हम यह नहीं पहचान सके कि स्कोर में बदलाव के कारण कौन सा भाग पैरामीटर परिवर्तन के कारण था और RNG के अलग-अलग प्रारंभ स्थिति के कारण क्या था।
jottbe

-1
sklearn.model_selection.train_test_split(*arrays, **options)[source]

स्प्लिट एरेज़ या मैट्रिसेस को रैंडम ट्रेन और टेस्ट सबसेट में विभाजित करें

Parameters: ... 
    random_state : int, RandomState instance or None, optional (default=None)

यदि int, random_state यादृच्छिक संख्या जनरेटर द्वारा उपयोग किया जाने वाला बीज है; यदि randomState उदाहरण, random_state यादृच्छिक संख्या जनरेटर है; यदि कोई नहीं है, यादृच्छिक संख्या जनरेटर रैंडमस्टेट उदाहरण है जिसका उपयोग np.random द्वारा किया जाता है। स्रोत: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

'' 'यादृच्छिक अवस्था के संबंध में, यह छद्म यादृच्छिक संख्या जनरेटर को दिए गए यादृच्छिक बीज को निर्धारित करने के लिए स्केलेर में कई यादृच्छिक एल्गोरिदम में उपयोग किया जाता है। इसलिए, यह एल्गोरिथम के व्यवहार के किसी भी पहलू को नियंत्रित नहीं करता है। परिणामस्वरूप, यादृच्छिक राज्य मान जो सत्यापन सेट में अच्छा प्रदर्शन करते हैं, वे उन लोगों के अनुरूप नहीं हैं जो एक नए, अनदेखे परीक्षण सेट में अच्छा प्रदर्शन करेंगे। दरअसल, एल्गोरिथ्म के आधार पर, आप प्रशिक्षण नमूने के क्रम को बदलकर पूरी तरह से अलग परिणाम देख सकते हैं। '' 'स्रोत: /stats/263999/is-random-state-a-parameter -सुर मिलाना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.