এলোমেলো অবস্থা (সিউডো-র্যান্ডম সংখ্যা) সাইকিট শিখুন


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. মত scikit বলছি হতে
elyase

53
এটি সম্ভবত 42 টি সংখ্যাটি প্রায়শই ব্যবহার করা হচ্ছে তা ব্যাখ্যা করে: en.wikedia.org/wiki/The_Hitchhiker%27s_Guide_to_t__ গ্যালাক্সি
ডেনসন


1
@ হারবার্ট এটি একটি কঠিন প্রশ্ন। মূল পিআরএনজি-স্টাফগুলি নমপির উপর ভিত্তি করে যা সামঞ্জস্যপূর্ণ (তারা অতীতে কিছু সমস্যা হওয়ার পরে এটির জন্য অনেকগুলি চেক প্রবর্তন করেছিল)। যদি স্কলারনের মধ্যে ব্যবহারে কোনও ত্রুটি না থাকে তবে এটি সামঞ্জস্যপূর্ণ আচরণ করবে। আমি এটি ধরে নিব (বিশেষত ট্রেন-পরীক্ষা-বিভক্তকরণ এবং কো-এর মতো কম জটিল ক্রিয়াকলাপের জন্য) সম্পাদনা : ওফস, কিছুটা দেরী :-)
সাসাচা

13

আপনি যদি নিজের কোডটিতে সুনির্দিষ্ট না করে random_stateথাকেন, তবে প্রতিবার আপনার কোডটি চালানোর (চালানো) প্রতিটি সময় একটি নতুন এলোমেলো মান উত্পন্ন হয় এবং ট্রেন এবং পরীক্ষার ডেটাসেটের প্রতিবার আলাদা মান থাকে।

যাইহোক, যদি একটি স্থির মানটির মতো নির্ধারিত হয় random_state = 42তবে আপনি আপনার কোডটি কতবার কার্যকর করেন তা বিবেচনা না করেই ফলাফল একই .ie, ট্রেন এবং পরীক্ষার ডেটাসেটের একই মান।


4

আপনি যদি কোডটিতে র্যান্ডম_স্টেটের উল্লেখ না করেন তবে আপনি যখনই আপনার কোডটি কার্যকর করেন তখনই একটি নতুন এলোমেলো মান উত্পন্ন হয় এবং ট্রেন এবং পরীক্ষার ডেটাসেটের প্রতিটি সময় আলাদা আলাদা মান থাকে।

যাইহোক, আপনি যদি র্যান্ডম_স্টেটের জন্য কোনও নির্দিষ্ট মান (র্যান্ডম_স্টেট = 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

র্যান্ডম_স্টেটটি সরিয়ে কোড চালানোর চেষ্টা করুন।

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

এলোমেলো_স্টেট নম্বরটি এলোমেলো পদ্ধতিতে পরীক্ষা এবং প্রশিক্ষণের ডেটাসেটগুলি বিভক্ত করে। এখানে যা ব্যাখ্যা করা হয়েছে তা ছাড়াও এটি মনে রাখা জরুরী যে এলোমেলো_স্টেট মানটি আপনার মডেলটির গুণমানের উপর উল্লেখযোগ্য প্রভাব ফেলতে পারে (মানের দ্বারা আমি মূলত পূর্বাভাসের যথার্থতা বোঝায়)। উদাহরণস্বরূপ, আপনি যদি কোনও নির্দিষ্ট ডেটাसेट নিয়ে যান এবং এটিকে নিয়ে কোনও রেগ্রেশন মডেলকে র্যান্ডম_স্টেট মান নির্দিষ্ট করে না দিয়ে প্রশিক্ষণ দেন তবে প্রতিবারই পরীক্ষার ডেটাতে আপনার প্রশিক্ষিত মডেলের জন্য আলাদা নির্ভুলতার ফলাফল পাবেন। সুতরাং আপনাকে সর্বাধিক নির্ভুল মডেল সরবরাহ করতে সেরা র্যান্ডম_স্টেট মানটি খুঁজে পাওয়া গুরুত্বপূর্ণ। এবং তারপরে, সেই নম্বরটি অন্য কোনও গবেষণার মত পরীক্ষার মতো আপনার ইভেন্টের মডেলটিকে পুনরুত্পাদন করতে ব্যবহৃত হবে। তাই না,

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

যদি কোনও র্যান্ডমস্টেট সরবরাহ না করা থাকে তবে সিস্টেমটি অভ্যন্তরীণভাবে উত্পন্ন উত্পন্ন একটি র্যান্ডমস্টেট ব্যবহার করবে। সুতরাং, আপনি যখন একাধিকবার প্রোগ্রামটি চালাবেন তখন আপনি বিভিন্ন ট্রেন / পরীক্ষার ডেটা পয়েন্ট দেখতে পাবেন এবং আচরণটি অনাকাঙ্ক্ষিত হবে। সেক্ষেত্রে, আপনার মডেলটির সাথে আপনার একটি সমস্যা রয়েছে আপনি প্রোগ্রামটি চালানোর সময় যে এলোমেলো সংখ্যাটি তৈরি হয়েছিল তা আপনি জানেন না কারণ আপনি এটিকে পুনরায় তৈরি করতে পারবেন না।

আপনি যদি ট্রি ক্লাসিফায়ারগুলি দেখতে পান - হয় ডিটি বা আরএফ, তারা একটি অনুকূল পরিকল্পনা ব্যবহার করে চেষ্টা করার চেষ্টা করে। যদিও বেশিরভাগ সময় এই পরিকল্পনা একই রকম হতে পারে এমন উদাহরণ থাকতে পারে যেখানে গাছটি আলাদা হতে পারে এবং ভবিষ্যদ্বাণীগুলি। আপনি যখন নিজের মডেলটি ডিবাগ করার চেষ্টা করবেন আপনি সেই গাছটি একইভাবে পুনরায় তৈরি করতে পারবেন না যার জন্য একটি গাছ তৈরি হয়েছিল। সুতরাং, এই সমস্ত ঝামেলা এড়াতে আমরা ডিসিশনশ্রেণি ক্লাসিফায়ার বা র্যান্ডমফোরস্টক্লাসিফায়ার তৈরি করার সময় একটি এলোমেলো_স্টেট ব্যবহার করি।

পিএস: এটি আরও ভালভাবে বুঝতে আপনি কীভাবে ডিসিশনট্রিতে বৃক্ষ তৈরি করা হয়েছে তার বিষয়ে কিছুটা গভীরতায় যেতে পারেন।

র্যান্ডমস্টেটটি মূলত আপনার সমস্যাটি চালিত হওয়ার সাথে সাথে পুনরুত্পাদন করার জন্য ব্যবহৃত হয়। আপনি যদি ট্রেনস্টেস্টপ্লিটে এলোমেলো ব্যবহার না করেন, প্রতিবার বিভাজন তৈরি করার সময় আপনি ট্রেন এবং টেস্ট ডেটা পয়েন্টের একটি আলাদা সেট পেতে পারেন এবং কোনও সমস্যা পেলে আপনাকে ডিবাগিংয়ে সহায়তা করবে না।

ডক থেকে:

যদি ইনট, র্যান্ডমস্টেট এমন বীজ যা এলোমেলো সংখ্যা জেনারেটর দ্বারা ব্যবহৃত হয়; যদি র্যান্ডমস্টেট উদাহরণস্বরূপ, র্যান্ডমস্টেটটি এলোমেলো সংখ্যা জেনারেটর; যদি কিছুই না হয় তবে এলোমেলো নম্বর জেনারেটর হল এনপি.আরন্ডম দ্বারা ব্যবহৃত র্যান্ডমস্টেট উদাহরণ instance


ভাল ব্যাখ্যা। আমি কেবল যুক্ত করব, আমরা এলোমেলো অবস্থাটি পাস করার একটি কারণ হ'ল আমরা উদাহরণস্বরূপ হাইপারপ্যারামিটারগুলি অনুকূল করতে চেষ্টা করি তবে আমরা এলোমেলো সংখ্যার উপর ভিত্তি করে বিভিন্ন সূচনার কারণে স্কোরের ওঠানামা করতে চাই না, যা কভার করতে পারে বা প্রকৃত অপ্টিমাইজেশনের প্রভাবটি আড়াল করুন এবং এইভাবে আমরা পরামিতি পরিবর্তনের কারণে স্কোর পরিবর্তনের কোন অংশটি ছিল এবং আরএনজির বিভিন্ন প্রারম্ভিক অবস্থার কারণে কী ছিল তা আমরা সনাক্ত করতে পারিনি।
জোটবে

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

এন্টারে বা ম্যাট্রিকগুলিকে এলোমেলো ট্রেন এবং পরীক্ষার উপগ্রহে বিভক্ত করুন

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

যদি int হয়, এলোমেলো_স্টেট হ'ল বীজটি এলোমেলো সংখ্যা জেনারেটর দ্বারা ব্যবহৃত হয়; যদি র্যান্ডমস্টেট উদাহরণস্বরূপ, র্যান্ডম_স্টেটটি এলোমেলো সংখ্যা জেনারেটর; যদি কিছুই না হয় তবে এলোমেলো নম্বর জেনারেটর হল এনপি.আরন্ডম দ্বারা ব্যবহৃত র্যান্ডমস্টেট উদাহরণ। উত্স: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

'' 'এলোমেলো অবস্থা সম্পর্কিত, এটি সিলেডো-এলোমেলো সংখ্যা জেনারেটরে পাস করা এলোমেলো বীজ নির্ধারণ করতে স্ক্লার্নে অনেকগুলি এলোমেলোম অ্যালগরিদমে ব্যবহৃত হয়। সুতরাং, এটি অ্যালগরিদমের আচরণের কোনও দিক পরিচালনা করে না। ফলস্বরূপ, র্যান্ডম রাষ্ট্রীয় মানগুলি যাচাইকরণ সংস্থায় ভাল সম্পাদন করেছিল যা তাদের নতুন, অদেখা পরীক্ষার পরীক্ষায় ভাল পারফরম্যান্সের সাথে মিলছে না। । বস্তুত, অ্যালগরিদম উপর নির্ভর করে, আপনি সম্পূর্ণরূপে ভিন্ন ফলাফল শুধু প্রশিক্ষণ নমুনার ক্রম পরিবর্তন করে দেখতে হতে পারে '' 'উৎস: /stats/263999/is-random-state-a-parameter -টিউন

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