এসভিএম স্কাইকিট লার্ন ব্যবহার করে নিরবচ্ছিন্নভাবে রান চালায় এবং কখনই কার্যকর হয় না


76

আমি 595605 সারি এবং 5 কলাম (বৈশিষ্ট্য) এবং টেস্ট ডেটাসেটে 397070 সারি রয়েছে এমন একটি প্রশিক্ষণ ডেটাসেটে সাইকিট লার্ন (পাইথন) ব্যবহার করে এসভিআর চালানোর চেষ্টা করছি। ডেটা প্রাক-প্রক্রিয়াজাতকরণ এবং নিয়মিত করা হয়েছে।

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

আমি সাইকিট ব্যবহার করে সমস্ত এসএমএম বাস্তবায়নের সাথে একই ধরণের সমস্যার মুখোমুখি।

আমি এটির জন্য যথেষ্ট অপেক্ষা করছি না? এই ফাঁসি কার্যকর করতে কত সময় নিতে হবে?

আমার অভিজ্ঞতা থেকে এটি কয়েক মিনিটের বেশি প্রয়োজন হবে না।

এখানে আমার সিস্টেম কনফিগারেশনটি রয়েছে: উবুন্টু 14.04, 8 জিবি র‌্যাম, প্রচুর ফ্রি মেমরি, 4 র্থ জেনার আই 7 প্রসেসর


আপনি কোড সরবরাহ করতে পারেন? এছাড়াও, এটি প্রশিক্ষণ বা পরীক্ষায় এত বেশি সময় নেয়? কিভাবে ছোট প্রশিক্ষণ / টেস্টিং ডেটাসেট সম্পর্কে?

আমি কেবল একটি সিএসভি ফাইল থেকে একটি পান্ডাস ডেটা ফ্রেমে ডেটা পড়ছি এবং এটিকে সাইকিট লার্ন ফাংশনে দিচ্ছি। এখানেই শেষ! কোড সরবরাহ করা এখানে সত্যই সহায়তা করবে না
তেজশখোট

6
স্কলারনের এসভিএম বাস্তবায়ন কমপক্ষে 3 টি পদক্ষেপের বোঝায়: 1) এসভিআর অবজেক্ট তৈরি করা, 2) একটি মডেল ফিট করা, 3) পূর্বাভাসের মান। প্রথম পদক্ষেপটি কার্নেলের ব্যবহারের বর্ণনা দেয় যা অভ্যন্তরীণ প্রক্রিয়াগুলি আরও ভালভাবে বুঝতে সহায়তা করে। দ্বিতীয় এবং তৃতীয় পদক্ষেপগুলি বেশ আলাদা and এবং তাদের মধ্যে কমপক্ষে কোনটি দীর্ঘ সময় নেয় তা আমাদের জানতে হবে। যদি এটি প্রশিক্ষণ হয়, তবে এটি ঠিক হতে পারে, কারণ শেখা কখনও কখনও ধীর হয়। যদি এটি পরীক্ষা করা হয়, তবে সম্ভবত একটি বাগ রয়েছে, কারণ এসভিএমে পরীক্ষা করা সত্যিই দ্রুত। তদতিরিক্ত, এটি সিএসভি পঠন হতে পারে যা SVM মোটেও সময় নেয় না। সুতরাং এই সমস্ত বিবরণ গুরুত্বপূর্ণ হতে পারে।

আমি এসএমএম এর মাধ্যমেও একই সমস্যার মুখোমুখি আছি তবে কেউ কি আমাকে বলতে পারবেন যে এটি স্বাভাবিক হওয়ার পরে কত সময় নেবে?
কাশ্যপ কিচলু

উত্তর:


69

কার্নেলাইজড এসভিএমগুলির জন্য ডেটাসেটের প্রতিটি পয়েন্টের মধ্যে একটি দূরত্বের ফাংশনের গণনা প্রয়োজন যা মূল প্রভাব । দূরত্বের সঞ্চয়স্থান মেমোরির বোঝা, তাই সেগুলি ফ্লাইতে পুনরায় সংশোধন করা হয়। ধন্যবাদ, সিদ্ধান্তের সীমার নিকটে থাকা পয়েন্টগুলির বেশিরভাগ সময় প্রয়োজন। প্রায়শই গণনা করা দূরত্বগুলি একটি ক্যাশে সংরক্ষণ করা হয়। যদি ক্যাশেটি ছিন্ন করা হয় তবে চলমান সময়টি ( n বৈশিষ্ট্যগুলিতে × n 3 টি পর্যবেক্ষণ ) পর্যন্ত ফুরিয়ে যায়O(nfeatures×nobservations2)O(nfeatures×nobservations3)

আপনি এসভিআরকে অনুরোধ করে এই ক্যাশে বাড়াতে পারেন

model = SVR(cache_size=7000)

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

কার্নেল এসভিএমকে কার্নেল ম্যাট্রিক্সের সমান করে এবং একটি লিনিয়ার এসভিএমকে খাওয়ানোর মাধ্যমে প্রায় অনুমান করা যায়। এটি আপনাকে রৈখিক সময়ে যথার্থতা এবং পারফরম্যান্সের মধ্যে বাণিজ্য করতে দেয়।

এটি অর্জনের একটি জনপ্রিয় উপায় হ'ল আপনার কার্নেল ফাংশনের ভিত্তি হিসাবে kmeans / kmeans ++ দ্বারা পাওয়া 100 বা তাই ক্লাস্টার কেন্দ্রগুলি ব্যবহার করা। নতুন উত্পন্ন বৈশিষ্ট্যগুলি পরে রৈখিক মডেল হিসাবে খাওয়ানো হয়। এটি অনুশীলনে খুব ভাল কাজ করে। সোফিয়া- এমিল এবং স্বর ওয়াব্বিটের মতো সরঞ্জামগুগল, ইয়াহু এবং মাইক্রোসফ্ট কীভাবে এটি করে তা । ইনপুট / আউটপুট সরল রৈখিক শিখার জন্য প্রধান খরচ হয়ে যায়।

তথ্য প্রচুর পরিমাণে, ননপ্যারমেট্রিক মডেল বেশিরভাগ সমস্যার জন্য প্রায় একই কাজ করে। পাঠ্য, চিত্রগুলি, সময় সিরিজ, অডিওর মতো কাঠামোগত ইনপুটগুলি ব্যতিক্রম।

আরও পড়া


16

এসভিএম চতুর্ভুজ ক্রমের একটি অনুকূলিতকরণ সমস্যা সমাধান করে problem

আমার এখানে যোগ করার মতো কিছু নেই যা এখানে বলা হয়নি। আমি কেবল এসভিসি সম্পর্কে একটি লিঙ্ক পোস্ট করতে চাই যে কী চলছে তা স্পষ্ট করে:

বাস্তবায়ন libsvm উপর ভিত্তি করে। ফিট সময়ের জটিলতা স্যাম্পলগুলির সংখ্যার সাথে চতুর্ভুজিকের চেয়ে বেশি যা ১০০০০০ স্যাম্পলের কয়েকজনের বেশি দিয়ে ডেটাসেটে স্কেল করা কঠিন করে তোলে।

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

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


আমার অনেক লাইনের সাথে একটি ডেটাসেট ছিল। এসভিসি আমার প্রায় 150K সারি ডেটার তথ্য আমার জন্য অনেক দীর্ঘ পথ শুরু করে। আমি আপনার পরামর্শটি লিনিয়ারএসভিআরের সাথে ব্যবহার করেছি এবং এক মিলিয়ন সারিগুলিতে কয়েক মিনিট সময় লাগে। পিএস এছাড়াও লজিস্টিক রিগ্রেশন ক্লাসিফায়ার লিনিয়ারএসভিআর (আমার ক্ষেত্রে) হিসাবে অনুরূপ ফলাফল উত্পাদন করে এবং আরও দ্রুত।
জেফারি_ও_উন্ড

8

আপনি কি আপনার প্রাক-প্রসেসিং পদক্ষেপে স্কেলিং অন্তর্ভুক্ত করেছিলেন? আমার এসভিএম চালানোর সময় আমার এই সমস্যাটি ছিল। আমার ডেটাসেটটি 20 টি বৈশিষ্ট্য (কর্নেল) সহ 80 780,000 স্যাম্পল (সারি)। আমার প্রশিক্ষণের সেটটি ~ 235k নমুনা। দেখা যাচ্ছে যে আমি আমার ডেটা স্কেল করতে ভুলে গেছি! যদি এটি হয় তবে আপনার কোডটিতে এই বিটটি যুক্ত করার চেষ্টা করুন:

স্কেল ডেটা [-1,1] এ; এসভিএম গতি বাড়ান:

আমদানি MinMaxScaler sklearn.preprocessing থেকে
স্কেলিং = MinMaxScaler (feature_range = (- 1,1))। মাপসই (X_train)
X_train = scaling.transform (X_train)
X_test = scaling.transform (X_test)


2
কেউ এসভিএম ফিট করে কেন এটি ব্যাখ্যা করতে পারে?
lppier

1
আপনি অন্য কোনওটির পরিবর্তে MinMaxScaler বাছাই করার কোনও কারণ আছে? উদাহরণস্বরূপ স্ট্যান্ডার্ডস্কেলার?
রাস্পি

@ ইপ্পিয়ার: মূলত আপনি প্রতিটি বিকল্পের জন্য সম্ভাব্য সীমানা স্থানটি এমনভাবে হ্রাস করছেন যা আপনার মেশিনের জন্য প্রচেষ্টার স্তরকে অনেক কম করে দেয়।
ike

7

এ জাতীয় বিশাল ডেটাসেটের সাথে আমি মনে করি যে আপনি একটি নিউরাল নেটওয়ার্ক, গভীর শিক্ষা, এলোমেলো বন (তারা আশ্চর্যজনকভাবে ভাল) ইত্যাদি ব্যবহার করা থেকে ভাল হবে etc.

পূর্ববর্তী উত্তরে উল্লিখিত হিসাবে, নেওয়া সময়টি প্রশিক্ষণের নমুনার সংখ্যার তৃতীয় শক্তির সমানুপাতিক। এমনকি পূর্বাভাসের সময়টি পরীক্ষামূলক ভেক্টরের সংখ্যার দিক থেকে বহুপদী।

আপনার যদি সত্যিই এসভিএম ব্যবহার করা আবশ্যক তবে আমি জিপিইউ গতি বা প্রশিক্ষণের ডেটাসেটের আকার হ্রাস করার পরামর্শ দেব। ডেটা ফর্ম্যাট বা বিতরণে এটি কোনও সমস্যা নয় কিনা তা দেখতে প্রথমে ডেটার একটি নমুনা (10,000 সারি হতে পারে) দিয়ে চেষ্টা করুন।

অন্যান্য উত্তরে উল্লিখিত হিসাবে, লিনিয়ার কার্নেলগুলি দ্রুত হয় are


3

আমি সম্প্রতি অনুরূপ সমস্যার মুখোমুখি হয়েছি কারণ আমার ডেটাসেটে বৈশিষ্ট্যগুলি স্কেল করতে ভুলে গিয়েছিলাম যা আগে নকশাকৃত মডেল জাতীয় প্রশিক্ষণের জন্য ব্যবহৃত হয়েছিল। ডেটা স্কেল করতে ব্যর্থতা শেলবি ম্যাটলক দ্বারা নির্দেশিত হিসাবে সম্ভবত অপরাধী হতে পারে। আপনি স্ক্যালারনে উপলভ্য বিভিন্ন স্কেলার চেষ্টা করতে পারেন যেমন রবস্টস্কেলার :

from sklearn.preprocessing import RobustScaler scaler = RobustScaler() X = scaler.fit_transfrom(X)

এক্স এখন রূপান্তরিত / স্কেলড এবং আপনার পছন্দসই মডেলকে খাওয়ানোর জন্য প্রস্তুত।


2

এইবার বুঝতে পারছি. আইআইইউসি, সমর্থন ভেক্টর অপারেশনগুলির সম্পাদনের গতিটি মাত্রা নয়, নমুনার সংখ্যার দ্বারা আবদ্ধ। অন্য কথায়, এটি সিপিইউ সময় দ্বারা রক্ষা করা হয়, র‌্যাম নয়। এটি ঠিক কতটা সময় নিতে হবে তা আমি নিশ্চিত নই, তবে আমি এটির জন্য কয়েকটি মানদণ্ড চালাচ্ছি।


1

রাতারাতি চলতে দিন বা 24 ঘন্টা ভাল রাখুন। আপনার সিপিইউ ব্যবহার কি? যদি কোরগুলির কোনওটিই 100% এ চলমান না থাকে তবে আপনার সমস্যা আছে। সম্ভবত স্মৃতি নিয়ে। আপনার ডেটাসেটটি মোটামুটি 8 জিবিতে ফিট করে কিনা তা আপনি পরীক্ষা করে দেখেছেন? আপনি কি এসজিডিসি ক্লাসিফায়ার চেষ্টা করেছেন? এটি সেখানে দ্রুততম একটি। এটি এক ঘন্টা বা আরও কিছুক্ষণের মধ্যে শেষ হয় আশা করে প্রথমে চেষ্টা করে দেখার পক্ষে মূল্যবান।


SGDClassifierকার্নেলগুলি সমর্থন করে না। যদি ওপি লিনিয়ার এসভিএম চায় তবে আমি প্রথমে চেষ্টা করার পরামর্শ দেব LinearSVR। এটি SVRলিনিয়ার রিগ্রেশন লাইব্রেরি ব্যবহার করে সমস্যার সমাধান করার চেয়ে এটি আরও দ্রুততর এবং বিশ্বব্যাপী সর্বনিম্ন গ্যারান্টিযুক্ত (গ্রেডিয়েন্ট ডেসেন্টের বিপরীতে)।
রিকার্ডো ক্রুজ

আপনার মন্তব্য প্রশংসা করুন। কার্নেল সমর্থন কেন একটি সমস্যা তা আপনি বিশদভাবে বলতে পারেন?
দিয়েগো

ডকুমেন্টেশন থেকে , The loss function to be used. Defaults to ‘hinge’, which gives a linear SVM.একই জিনিস SGDRegressorSGDRegressorব্যবহার সমতুল্য SVR(kernel='linear')। ওপি যদি সেটাই চায় তবে তা দুর্দান্ত। আমি ছাপে ছিলাম তিনি একটি কার্নেল দিয়ে এসভিএম ব্যবহার করতে চেয়েছিলেন। যদি এটি না হয় তবে আমি প্রথমে চেষ্টা করার পরামর্শ দেব LinearSVR
রিকার্ডো ক্রুজ

1

[-1,1] এ ডেটাটিকে সাধারণ করার চেষ্টা করুন। আমি একটি অনুরূপ সমস্যার মুখোমুখি হয়েছি এবং সাধারণীকরণের উপর সবকিছু ঠিকঠাক কাজ করেছে। আপনি সহজেই ব্যবহার করে ডেটা স্বাভাবিক করতে পারেন:

from sklearn import preprocessing X_train = preprocessing.scale(X_train) X_test = preprocessing.scale(X_test)


@ আর্চি এটি একটি প্রশ্নের উত্তর, কোনও প্রশ্নের নয়।
টিমলিথার্ট

1

আমি এই সমস্যার মুখোমুখি হয়েছি এবং cache_sizeঅন্যরা যেমন পরামর্শ দিচ্ছে তেমন কোনও সাহায্য করে না। আপনি এই পোস্টটি দেখতে পাচ্ছেন এবং এটিকে প্রধান অবদানকারী হিসাবে পরামর্শ দেওয়া হয়েছিল যে আপনাকে কোডটি ম্যানুয়ালি পরিবর্তন করা উচিত।

যেমনটি আপনি জানেন, SVCএবং SVRঅপ্টিমাইজেশান সমস্যাগুলি রয়েছে এবং ত্রুটি মার্জিনের পরিমাণ এত কম হয় যেখানে আরও অনুকূলিতকরণটি বৃথা যায় they সুতরাং এগুলিতে আরও একটি প্যারামিটার রয়েছে max_iter, যেখানে এটি নির্ধারণ করতে পারে যে এটির কতগুলি পুনরাবৃত্তি করা উচিত।

আমি sklearnঅজগর এবং e1071আর এবং আর-তে ব্যবহার করেছি ফলাফলটি সেট না করেই ফলাফলটি পেতে খুব দ্রুত max_iterএবং sklearn2-4 বার বেশি সময় নেয়। পাইথনের জন্য আমি গণনার সময়টি কেবল নামিয়ে আনতে পারি max_iter। এটা আপনার মডেল, বৈশিষ্ট্য, কার্নেলের এবং hyperparameters সংখ্যা জটিলতা আপেক্ষিক, কিন্তু ছোট ডেটা সেটটি আমি প্রায় 4000 datapoint জন্য ব্যবহার করা হয় এবং max_iterছিল 10000ফলাফলের সব বিভিন্ন ছিল না এবং এটি পছন্দনীয় ছিলেন।


0

আমার কেবলমাত্র একটি ডেটাসেটের সাথে একই রকম সমস্যা রয়েছে যার মধ্যে কেবল 115 টি উপাদান এবং কেবলমাত্র একটি একক বৈশিষ্ট্য (আন্তর্জাতিক বিমান সংস্থা ডেটা) রয়েছে। সমাধানটি ছিল ডেটা স্কেল করা। আমি এখন পর্যন্ত উত্তরে যা হারিয়েছি তা হ'ল পাইপলাইনের ব্যবহার:

from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler, MinMaxScaler

model = Pipeline([('scaler', StandardScaler()),
                  ('svr', SVR(kernel='linear'))])

আপনি modelসাধারণ শ্রেণিবদ্ধকরণ / রিগ্রেশন মডেলের মতো প্রশিক্ষণ দিতে পারেন এবং এটি একইভাবে মূল্যায়ন করতে পারেন। কিছুই পরিবর্তন হয় না, কেবলমাত্র মডেলের সংজ্ঞা।


কী Pipeline? আপনি এটি আমদানি করছেন না।
ব্রাম ভানরোয়

0

আপনার আপনার ডেটা স্কেল করা দরকার। স্কেলিং আপনার ডেটা পয়েন্টকে -1 থেকে 1 রেঞ্জের দিকে স্বাভাবিক করবে, যা দ্রুত রূপান্তর করতে সহায়তা করবে।

নিম্নলিখিত কোড ব্যবহার করার চেষ্টা করুন:

# X is your numpy data array.

from sklearn import preprocessing

X = preprocessing.scale(X)

ডেটা সায়েন্স এসই তে স্বাগতম! আপনার পরামর্শ কীভাবে ওপিকে সহায়তা করবে তা আপনি ব্যাখ্যা করতে পারেন? আপনি যা পরামর্শ দিচ্ছেন তা হ'ল একটি অ্যারের স্কেলিং। এটি কীভাবে সাইকিট শিখতে এসভিআর অ্যালগরিদমকে প্রভাবিত করতে পারে বা না পারে তা স্পষ্ট নয়।
স্টিরিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.