मैं एक मशीन लर्निंग एल्गोरिदम को स्किकिट लर्न में लागू करना चाहता हूं, लेकिन मुझे समझ नहीं आ रहा है कि यह पैरामीटर क्या random_state
करता है? मुझे क्यों इसका उपयोग करना चाहिए?
मुझे यह भी समझ नहीं आया कि एक छद्म यादृच्छिक संख्या क्या है।
मैं एक मशीन लर्निंग एल्गोरिदम को स्किकिट लर्न में लागू करना चाहता हूं, लेकिन मुझे समझ नहीं आ रहा है कि यह पैरामीटर क्या random_state
करता है? मुझे क्यों इसका उपयोग करना चाहिए?
मुझे यह भी समझ नहीं आया कि एक छद्म यादृच्छिक संख्या क्या है।
जवाबों:
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
सामान की जांच करते समय कुछ निश्चित संख्या निर्धारित , लेकिन फिर इसे उत्पादन में हटा दें यदि आपको वास्तव में यादृच्छिक (और निश्चित नहीं) विभाजन की आवश्यकता है।
आपके दूसरे प्रश्न के बारे में, एक छद्म यादृच्छिक संख्या जनरेटर एक संख्या जनरेटर है जो लगभग सही मायने में यादृच्छिक संख्या उत्पन्न करता है। वे वास्तव में यादृच्छिक क्यों नहीं हैं इस सवाल के दायरे से बाहर हैं और शायद आपके मामले में कोई फर्क नहीं पड़ेगा, आप देख सकते हैं यहां अधिक विवरण तैयार करें।
यदि आप random_state
अपने कोड में निर्दिष्ट नहीं करते हैं , तो हर बार जब आप दौड़ते हैं (निष्पादित करते हैं) तो आपका कोड एक नया यादृच्छिक मूल्य उत्पन्न होता है और ट्रेन और परीक्षण डेटासेट में हर बार अलग-अलग मान होंगे।
हालाँकि, यदि कोई निश्चित मान नियत है, random_state = 42
तो आप अपने कोड को कितनी बार निष्पादित करते हैं, तो परिणाम वही होगा। ट्रेन और परीक्षण डेटासेट में समान मान।
यदि आपने कोड में 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))
अब जब आप कोड निष्पादित करेंगे तो यहां आउटपुट अलग-अलग होगा।
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)`
यदि कोई रैंडमस्टेट नहीं है, तो सिस्टम आंतरिक रूप से उत्पन्न रैंडमस्टेट का उपयोग करेगा। इसलिए, जब आप प्रोग्राम को कई बार चलाते हैं तो आप अलग-अलग ट्रेन / टेस्ट डेटा पॉइंट देख सकते हैं और व्यवहार अप्रत्याशित होगा। मामले में, आपके पास अपने मॉडल के साथ एक समस्या है आप इसे फिर से बनाने में सक्षम नहीं होंगे क्योंकि आप उस यादृच्छिक संख्या को नहीं जानते हैं जो प्रोग्राम चलाने के दौरान उत्पन्न हुई थी।
यदि आप ट्री क्लासीफायर देखते हैं - या तो डीटी या आरएफ, तो वे एक इष्टतम योजना का उपयोग करके प्रयास करने का प्रयास करते हैं। हालांकि अधिकांश बार यह योजना समान हो सकती है लेकिन ऐसे उदाहरण हो सकते हैं जहां पेड़ अलग हो सकता है और इसलिए भविष्यवाणियां। जब आप अपने मॉडल को डीबग करने का प्रयास करते हैं तो आप उसी उदाहरण को फिर से बनाने में सक्षम नहीं हो सकते हैं जिसके लिए एक ट्री बनाया गया था। इसलिए, इस सभी परेशानी से बचने के लिए हम DecisionTreeClassifier या RandomForestClassifier का निर्माण करते हुए random_state का उपयोग करते हैं।
पुनश्च: आप इस बेहतर समझने के लिए DecisionTree में ट्री का निर्माण कैसे किया जाता है, इस पर आप थोड़ी गहराई से जा सकते हैं।
बेतरतीब ढंग से मूल रूप से आपकी समस्या को हर बार चलाने के दौरान उपयोग किया जाता है। यदि आप ट्रैन्स्टिस्टप्लिट में रैंडमस्टेट का उपयोग नहीं करते हैं, तो हर बार जब आप विभाजन करते हैं तो आपको ट्रेन और परीक्षण बिंदुओं का एक अलग सेट मिल सकता है और समस्या होने पर आपको डिबगिंग में मदद नहीं मिलेगी।
डॉक्टर से:
यदि int, randomstate यादृच्छिक संख्या जनरेटर द्वारा उपयोग किया जाने वाला बीज है; यदि randomState उदाहरण, randomstate यादृच्छिक संख्या जनरेटर है; यदि कोई नहीं है, यादृच्छिक संख्या जनरेटर रैंडमस्टेट उदाहरण है जिसका उपयोग np.random द्वारा किया जाता है।
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 -सुर मिलाना