আমার কাছে 140000 উদাহরণ এবং 30 টি বৈশিষ্ট্য রয়েছে যার জন্য আমি বাইনারি শ্রেণিবদ্ধকরণের জন্য বেশ কয়েকটি শ্রেণিবদ্ধকে প্রশিক্ষণ দিচ্ছি (এসভিএম, লজিস্টিক রিগ্রেশন, র্যান্ডম ফরেস্ট ইত্যাদি)
অনেক ক্ষেত্রে গ্রিড বা র্যান্ডম অনুসন্ধান ব্যবহার করে পুরো ডেটাসেটে হাইপারপ্যারমিটার টিউন করা খুব ব্যয়বহুল time
আমি নিম্নলিখিত কৌশলটি ব্যবহার শুরু করেছি
- সাব ডেটাবেস আমার ডেটাসেট
- হাইপারপ্যারামিটার টিউন করতে প্রাপ্ত ভগ্নাংশটি ব্যবহার করুন
- পুরো ডেটাसेट ব্যবহার করে কোনও মডেলকে প্রশিক্ষণের জন্য প্রাপ্ত পরামিতিগুলি ব্যবহার করুন
দ্বিতীয় ধাপ আমি ব্যবহারের উপর পরামিতি প্রতিটি সেট নির্ণয় করা sklearn
's GridSearchCV
CV = 10 দিয়ে। চূড়ান্ত মডেল যে আমি তৃতীয় ধাপে আমি ব্যবহারের সৃষ্টি নির্ণয় করা sklearn
's cross_val_predict
। সেই অর্থে আমি আমার মডেলগুলিকে 10% শতাংশ ডেটা ছেড়ে রেখে মূল্যায়ন করি, আমি বাকী অংশগুলিকে প্রশিক্ষণ দিয়েছি এবং 10% এর উপর পূর্বাভাসমূলক নির্ভুলতা পরিমাপ করি, পুনরাবৃত্তভাবে 10 বার, তারপরে স্কোরগুলির গড় গ্রহণ করে।
আমার উদ্বেগের কারণটি হ'ল আমার সম্পূর্ণ ডেটাসেটের প্রশিক্ষণ থেকে প্রাপ্ত ভবিষ্যদ্বাণী যথার্থতা, পরামিতিগুলির সেরা সেটগুলির জন্য পরামিতিগুলি সুর করার সময় আমার যে মূল্যায়ন হয় তা খুব কাছেই থাকে (প্রতিটি পরীক্ষিত সেট প্যারামিটারের সেট 10- গড় থেকে প্রাপ্ত স্কোরকে আউটপুট করে দেয়) ভাঁজ ক্রস বৈধতা ফলাফল)।
cross_val_predict
সমস্ত প্রশিক্ষণের উদাহরণ (পুরো ডেটাসেট) ব্যবহার করে যথাযথতা পরিমাপ করা বেশিরভাগ সময় সর্বোত্তম প্যারামিটারগুলির মূল্যায়ন ফিরে আসে।
এটি চিত্রিত করার জন্য এখানে প্যারামিটারগুলির একটি সেটের মূল্যায়ন (আমি উপরে বর্ণিত তুলনায় একটি ছোট ডেটাসেটের উপর তবে প্রভাবটি একই)
Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...
এবং এখানে cross_val_predict
সেরা প্যারামিটারগুলি ব্যবহার করে আমার সম্পূর্ণ ডেটাসেটের প্রশিক্ষণ থেকে প্রাপ্ত গড় স্কোরগুলি (থেকে )
precision recall f1-score support
0 0.86 0.85 0.86 15417
1 0.86 0.87 0.87 16561
avg / total 0.86 0.86 0.86 31978
acc score: 0.863750078179
roc au score: 0.863370490059
[[13147 2270]
[ 2087 14474]]
আপনি দেখতে পাচ্ছেন পুরো ডেটাসেটের উপর প্রশিক্ষণ ফলাফলকে উন্নত করে। আমিও যাচাই যে খারাপভাবে টিউন মডেল (যেমন ডিফল্ট মান বা র্যান্ডম মানের জন্য ব্যবহার C
এবং gamma
অনেক খারাপ ভবিষ্যদ্বাণী সঠিকতা জন্য) বাড়ে।
সামগ্রিকভাবে আমি মনে করি একটি উপসেটে হাইপারপ্যারামিটারগুলি সুর করা আদর্শ নয় তবে খুব বেশি সময় অপেক্ষা না করে তুলনামূলকভাবে তুলনামূলক ভাল ফলাফল হতে পারে। আমি উদাহরণস্বরূপ optunity
পুরো ডেটাসেটে হাইপারপ্যারামিটার টিউন করার জন্য সেই পদ্ধতির ব্যবহৃত প্যাকেজটি ব্যবহার করার আগে । এই পদ্ধতিটি সম্পূর্ণ হতে 3-5 দিন সময় লাগবে এবং ফলাফলগুলি কার্যকর করবে যা সত্যই ভাল নির্ভুলতা পেয়েছিল বা সত্যিই ভাল প্রত্যাহার কিন্তু উভয়ই নয়, তবে প্রতিটি শ্রেণীর ক্ষেত্রে যথার্থতা বা পুনরুদ্ধারটি সত্যই বেশি ছিল (আমার অন্য যে কোনওটির চেয়ে বেশি) ক্লাসিফায়াররা অর্জন করেছিল) এফ 1 এর পরিমাপটি সত্যিই কম ছিল। বিপরীতে পরবর্তী পদ্ধতির ব্যবহার কয়েক ঘন্টা প্রশিক্ষণের এবং আরও ভাল এফ 1 ম্যাসেজের দিকে নিয়ে যায়।
আমার উদ্বেগগুলি হ'ল:
আমি কি আমার শ্রেণিবিন্যাসের নির্ভুলতা সীমাবদ্ধ করব? আমার ডেটাসেটটি কেবলমাত্র একটি উপসেটে টিউন করে প্রস্তাব করতে পারে এমন সমস্ত পূর্বাভাস শক্তি ব্যবহার করা কি আমি এড়াতে পারি? যদি পারফরম্যান্সের এমন ক্ষতি হয় তবে এটি কোনও কোনও কারণে সীমাবদ্ধ?