<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های mahila</title>
        <link>https://virgool.io/feed/@mahilamoghadami</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-04-14 18:04:58</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>mahila</title>
            <link>https://virgool.io/@mahilamoghadami</link>
        </image>

                    <item>
                <title>bias variance trade_off:</title>
                <link>https://virgool.io/@mahilamoghadami/bias-variance-tradeoff-xg8ryi3ywizj</link>
                <description>واریانس به حساسیت الگوریتم شما نسبت به مجموعه خاصی از داده‌های آموزشی اشاره دارد. مدل با واریانس زیاد، حساسیت زیادی نسبت به داده ها داشته بنابراین ارزیابی مدل برروی دیتای آموزش، نتیجه ی عالی اما بر روی دیتایی که تا بحال ندیده(test) احتمالا بد خواهد بود و این همان overfitting خواهد بود.به عنوان مثالی در این زمینه، فرض کنید در حال مدل کردن آب و هوای فصل بهار هستیم. از آنجایی که در فصل بهار، آب و هوا شرایط پایداری نداردبنابراین واریانس دیتای ما بسیار زیاد خواهد بود. حال اگر در این مساله از مدلی با پیچیدگی زیاد برای پیش بینی استفاده کنیم، مدل داده ها را با این پراکندگی حفظ خواهد کرد و مسلما در پیش بینی ها برای تخمین دما و آب هوا در سالهای آینده عملکرد خوبی نخواهد داشت.بایاسبایاس اختلاف بین میانگین پیش بینی مدل ما و مقدار واقعی ای که ما در حال تلاش برای پیش بینی آن هستیم، می باشد. چنانچه بایاس مدل زیاد باشد، توجه مدل به داده های آموزشی کمتر شده و آموزش خوبی صورت نخواهد پذیرفت که همان underfitting خواهد بود.به عنوان مثالی در این زمینه، استفاده از مدل خطی برای دیتاهایی با پیچیدگی زیاد و حساسیت بالا همچون بورس. از آنجا که در بازار سرمایه و بورس کوچکترین تغییراتی اثرات زیادی خواهند گذاشت، مدل های پیش بینی باید دقیقتر و با پیچیدگی و دقت بالاتری باشند بنابراین استفاده از مدل های خطی احتمالا underfiiting را به همراه خواهد داشت.بنابراین، با هدف رسیدن به یک مدل مناسب، یعنی هم سادگی و هم پیچیدگی متعادل، می بایست یک trade_off یا تعادلی بین بایاس و واریانس برقرار کرد تا خطای کل را به حداقل برساند.refrences: http://seopath.ir/artificial_intelligence/under-fitting-%D9%88-over-fitting-%D8%AF%D8%B1-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86/</description>
                <category>mahila</category>
                <author>mahila</author>
                <pubDate>Fri, 14 Jan 2022 20:55:27 +0330</pubDate>
            </item>
                    <item>
                <title>روش های cross validation در یادگیری ماشین</title>
                <link>https://virgool.io/@mahilamoghadami/%D8%B1%D9%88%D8%B4-%D9%87%D8%A7%DB%8C-cross-validation-%D8%AF%D8%B1-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-jqdocunrw8wd</link>
                <description>اعتبار سنجی متقاطع (cross validation) در یادگیری ماشین در یادگیری ماشین (‏ML)‏، تعمیم (generalization)، معمولا به توانایی یک الگوریتم در پاسخ دادن به ورودی های مختلف و البته جدید اطلاق میشود و این بدان معناست که عملکرد در یک الگوریتم یادگیری ماشین، عملکرد الگوریتم بر اساس دیتایی که با آن آموزش دیده(train set) قابل ارزیابی درست نیست.اصل تعمیم برای انسان‌هااز طبیعی ترین و ساده ترین کارهای ممکن است به عنوان نمونه، انسان حتی اگر یک سگی با نژادی متفاوت را که تا به حال ندیدیه برای اولین بار ببیند، باز هم میشناسد که این همان تعمیم است. اما این کار برای الگوریتم چالش هایی به دنبال دارد و به همین دلیل بررسی الگوریتم در توانایی تعمیم نیازمند توجه زیادی در زمان ساخت مدل است که برای انجام این کار، ما از روش اعتبار سنجی عرضی (‏CV)‏استفاده می‌کنیم.​​​​​​​​در این مقاله موارد زیر را پوشش خواهیم داد:​​​​​​​​اعتبار سنجی متقابل: تعریف، هدف از استفاده و تکنیک‌هاتکنیک‌های مختلف CV: hold-out, k-folds, Leave-one-out, Leave-p-out, Stratified k-folds, Repeated k-folds, Nested k-folds, Complete CVنحوه ی استفاده از این تکنیک ها : با استفاده از پکیج Sklearnاعتبار سنجی متقابل در یادگیری ماشینیاعتبار سنجی در یادگیری عمیق,…keras, pytorch:بهترین روش‌ها و نکات از: سری‌های زمانی، داده‌های پزشکی و مالی، تصاویراعتبار ستجی متقابل چیست؟اعتبارسنجی متقابل تکنیکی برای ارزیابی یک مدل یادگیری ماشین و تست عملکرد آن است. این کار به مقایسه و انتخاب یک مدل مناسب برای مساله مدل‌سازی کمک می‌کند. ​CV را می توان به راحتی درک کرد، پیاده‌سازی آن آسان است، و بایاس کمتری برای محاسبه ی ارزیابی مدل، نسبت به روش‌های دیگر دارد. تمام این موارد اعتبارسنجی متقابل را به ابزاری قدرتمند برای انتخاب بهترین مدل برای این کار خاص یعنی ارزیابی مدل، تبدیل می‌کند. ​تکنیک‌های مختلفی وجود دارند که ممکن است برای اعتبارسنجی متقابل یک مدل مورد استفاده قرار گیرند. با این حال، همه آن‌ها الگوریتم مشابهی دارند:۱. مجموعه داده را به دو بخش تقسیم کنید: یکی برای آموزش و دیگری برای تست۲. ​مدل را با استفاده از داده های trainآموزش دهید.۳. اعتبارسنجی مدل در مجموعه تست .۴. مرحله ی ۱ تا ۳ را چندین بار تکرار کنید. تعداد این تکرار به روش CVکه استفاده می‌کنید بستگی دارد. ​همانطور که می‌دانید تکنیک‌های زیادی برای CV وجود دارد. برخی از آن‌ها به طور معمول مورد استفاده قرار می‌گیرند و برخی دیگر تنها بصورت تئوری قابل استفاده هستند.روش های ​ارزیابی متقابلی که در این مقاله \وشش دادیم، شامل موارد زیر است:Hold-outK-foldsLeave-one-outLeave-p-outStratified K-foldsRepeated K-foldsNested K-foldsCompleteHoldout​​​​​​این تکنیک CV، ازساده‌ترین و رایج‌ترین روشهای CV به شمار میرود .الگوریتم تکنیک holdout:​​​​​۱. مجموعه داده را به دو بخش تقسیم کنید: مجموعه آموزشی و مجموعه تست. معمولا،۸۰ % مجموعه داده به مجموعه آموزشی و ۲۰ % به مجموعه تست داده میشود، اما شما می‌توانید هر گونه تقسیم که برای شما مناسب‌تر است را انتخاب کنید. ​۲. آموزش مدل در مجموعه آموزشی۳. ​ارزیابی داده ی تست۴. ذخیره ی نتیجه ی ارزیابی​​​​​​​ما معمولا از روش hold out در مجموعه داده‌های بزرگ  که تنها یک‌بار به آموزش مدل نیاز دارد استفاده می‌کنیم. ​\یاده سازی این الگوریتم آسان بوده و به سادگی میتواند با استفاده از sklearn.model_selection.train_test_split این کار را انجام دهید:import numpy as npfrom sklearn.model_selection import train_test_splitX, y = np.arange(10).reshape((5, 2)), range(5)X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2, random_state=111)با این حال، روش holdoutیک عیب بزرگ دارد.​​​​​​​​به عنوان مثال، ممکن است در یک مجموعه داده ای که توزیع آن یکنواخت نیست، دچار مشکل شویم. به عنوان مثال، مجموعه آموزشی هیچ نشانی از مجموعه ی تست ندارد و ممکن یکی از آنها بسیار سخت و دیگری بسیار راحت باشد که درک این مساله برای الگوریتم مشکل خواهد بود. و یا این واقعیت که مدل خود را فقط یکبار آزمایش کنیم میتواند یک نقطه ی ضعف یا buttle neck  برای الگوریتم باشد.بنابراین با توجه به موارد ذکر شده، شاید نتایج بدست آمده با استفاده از تکنیک holdout چندان قابل اطمینان نباشد.K_Foldk-Fold CV تکنیکی است که معایب holdout را کمتر میکند. Kfold روشی جدید برای تقسیم بندی داده در راستای غلبه بر مشکل &quot;یکبار تست کردن و buttleneckای که ممکن است بوجود آید&quot; معرفی شده است.الگوریتم تکنیک kfold:1. انتخاب تعداد تعداد دسته یا همان مقدار k که بصورت معمول بین 5 تا 10 میباشد. البته شما مجاز به انتخاب هر عددی (کمتر از طول دیتاست) خواهید بود.2. بخش بندی کردن داده به kدسته ی یکسان (با اندازه ی برابر)3. انتخاب k-1دسته به عنوان دیتای آموزشی و دسته ی باقیمانده به عنوان دیتای تست.4. آموزش مدل بر روی داده ی آموزشی. در هر گام cv، شما میبایست مدلی جدید، مستقل از مدل مرحله ی قبل آموزش دهید.5. ارزیابی برروی داده ی تست.6. ذخیره ی نتیجه ی ارزیابی7. مراحل 3 تا 6 را kبار تکرار کنید و در هربار، بقیه ی دسته را به عنوان تست در نظر بگیرید و در پایان شما می بایست الگوریتم را روی هر دسته ارزیابی کرده باشید.8. Scoreنهایی میانگین نتایجی است که در 6 مرحله ی بالا دریافت کردید.برای \یاده سازی میتوانید از sklearn.model_selection.Kfold استفاده کنید:?بصورت کلی، در اکتر مواقع، استفاده از kfold نتیجه ی بهتری نسبت به holdout به شما خواهد داد. در شرایط برابر، نتایج ارائه شده توسط kfoldبسیار قابل اطمینان تر و پایدار تر میباشد چرا که آموزش و آزمایش برروی چندین بخش مختلف مجموعه ی داده انجام میشود. همچنین اگر مقدار k را افزایش دهیم، تا مدل برروی مجموعه های مختلف تست کنیم، نتایج و امتیاز کلی قوی تری نیز دریافت خواهیم کرد.اما با این حال، روش kfold یک نقطه ضعف دارد و آن هم این است مه اگر مقدارk بزرگ باشد، فرآیند آموزش بسیار پرهزینه و زمان بر خواهد شد.Leave-one-out сross-validationLoocv (leave ome out cv) یک مدل خاص از kfoldمی باشد که در آن k دقیقا برابر تعداد داده ی آموزشی است.الگوریتم تکنینک loocv:1. انتخاب یک نمونه از داده به عنوان داده ی تست2. بقیه ی نمونه ها(n-1نمونه ی باقیمانده) به عنوان دیتای آموزشی3. آموزش مدل با استفاده از دیتای آموزشی. در هرگام باید مدل جدیدی آموزش داده شود.4. ارطیابی برروی داده ی تست5. ذخیره ی نتیجه ی ارزیابی6. اجرای مراحل 1 تا 6 به تعداد nبار ( به تعداد نمونه های آموزشی و دسته ها)7. Scoreنهایی میانگین نتایجی است مه از مرحله ی 5 دریافت شده.Sklearn برای loocv نیز متودی ساخته است که در کتابخانه ی model_selectionو \س از آن sklearn.model_selection.LeaveOneOut.قابل مشاهده و استفاده است.?بزرگترین مزیت loocvاین است مه دیتای زیادی هدر نمیدهد. در واقع ما فقط از یک نمونه به عنوان دیتای تست استفاده میکنیم و از بقیه ی نمونه ها در فرآیند آموزش استفاده میکنیم.در مقایسه kfold با loocvاز آنجایی که loocv از nدسته برای اجرای الگوریتم خود استفاده می‌کند و احتمالا مقدار nاز k خیلی بیشتر خواهد بود، لذا این روش هزینه ی زیادی را نیز به دنبال خواهد داشت.بنابراین بر اساس شواهد تجربی و تحقیقات مختلفی که صورت پذیرفته است، جامعه ی علوم داده به این نتیجه رسیده اند که kfoldبا k برابر 5 یا 10 برloocvترجیح داده میشود.Leave-p-out cross-validationاعتبار سنجی leave p out (LPOC)، مشابه LOOCV است زیرا تمام مجموعه های آموزشی و آزمایشی ممکن را با استفاده از نمونه های p به عنوان مجموعه آزمایشی ایجاد می کند. تمام موارد ذکر شده در مورد  LOOCV  برای LpOC نیز صادق است.با این حال، شایان ذکر است که بر خلاف LOOCV و مجموعه‌های تستk-Fold برای LpOC اگر p بالاتر از 1 باشد، همپوشانی دارند.الگوریتم تکنیکLpOC1.به تعداد p  نمونه داده از مجموعه ی داده به عنوان داده ی تست جدا کنید.n - p 2. نمونه باقیمانده مجموعه آموزشی خواهد بودمدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شودمجموعه آزمایشی اعتبار سنجی کنیدنتیجه اعتبارسنجی را ذخیره کنیدمراحل 2 تا 5Cpn را تکرار کنید برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردیدمی‌توانیدLeave-p-out CV را با استفاده ازsklearn – sklearn.model_selection.LeavePOut انجام دهید.?LpOC تمام معایب LOOCV را دارد، اما، با این وجود، به اندازه LOOCV قوی است.Stratified k-Foldگاهی اوقات ممکن استدر دیتاست  با عدم تعادل تعداد نمونه های کلاس ها مواجه شویم. به عنوان مثال، در مجموعه داده‌های مربوط به قیمت ساعت‌های مچی، ممکن است تعداد زیادی از ساعت‌های مچی قیمت بالایی داشته باشند. در مورد طبقه‌بندی، در مجموعه داده‌های گربه‌ها و سگ‌ها ممکن است تغییر زیادی جز طبقه سگ دسته بندی شوند.K-Fold طبقه بندی شده (stratified kfold) نوعی از تکنیک استاندارد K-Fold CV است که به گونه ای طراحی شده است که در چنین مواردی،موثر عمل کندK-Fold طبقه بندی شده مجموعه داده را بر روی k تا دسته تقسیم می کند به طوری که هر فولد تقریباً دارای درصد مشابهی از نمونه های هر کلاس باشددر مورد رگرسیون، Stratified k-Fold اطمینان حاصل می کند که میانگین مقدار هدف تقریباً در همه ی دسته ها برابر است.  ​الگوریتم تکنیک :stratified kfold1.تعداد دسته ها را انتخاب کنید - k2.مجموعه داده را به k دسته تقسیم کنید. هر فولد باید تقریباً دارای درصد مشابهی از نمونه‌های هر کلاس در مجموعه کامل باشد3.k – 1 folds دیگر مجموعه آموزشی خواهد بود ,  باقیمانده مجموعه آزمایشی خواهد بود4. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود 5.مجموعه آزمایشی اعتبار سنجی کنید6.نتیجه اعتبارسنجی را ذخیره کنید7. مراحل 3 تا 6 را چندین بار تکرار کنید . هر بار از دسته ی باقی مانده به عنوان مجموعه تست استفاده کنید.8. در پایان، شما باید مدل را روی هر فولد که دارید اعتبارسنجی کرده باشید. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید.همانطور که ممکن است متوجه شده باشید، الگوریتم تکنیک Stratified k-Fold مشابه K-Folds استاندارد است. شما نیازی به کدنویسی اضافی ندارید زیرا این روش هم همه کارهای لازم را برای شما انجام می دهد( با استفاده از کتابخانه ی sklearn)?تمام موارد ذکر شده در بالا در مورد K-Fold CV برای تکنیکStratified k-Fold نیز صادق است. هنگام انتخاب بین روش های مختلف CV، مطمئن شوید که از روش مناسب استفاده می کنید. به عنوان مثال، ممکن است فکر کنید که مدل شما عملکرد بدی دارد، فقط به این دلیل که ازK-Fold CV برای اعتبارسنجی مدلی استفاده می‌کنید که روی مجموعه داده با عدم تعادل کلاس آموزش داده شده است. برای جلوگیری از آن، همیشه باید یک تجزیه و تحلیل داده ای مناسب روی داده های خود انجام دهید.Repeated k-Fold cross-validationاعتبار سنجی repeated kfold  احتمالا قوی ترین تکنیک از بین تکنیک های ذکر شده در این مقاله می باشد. Repeated k fold نوعی از kfold cv می باشد با این تفاوت که در آن k  تعداد دسته ها نیست بلکه تعداد دفعاتیست که مدل را آموزش می دهیم.ایده کلی این است که در هر تکرار، نمونه‌هایی را به‌طور تصادفی از سرتاسر مجموعه داده به عنوان مجموعه آزمایشی انتخاب می‌کنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده ها مجموعه آزمایشی ما باشد، 20٪ نمونه به طور تصادفی انتخاب می شوند و 80٪ بقیه به مجموعه آموزشی تبدیل می شوند.الگوریتم تکنیک Repeated k-Fold:k را که تعداد دفعات آموزش مدل است را انتخاب کنیدتعداد نمونه های مجموعه ی تست را انتخاب کنید و مجموعه داده را تقسیم کنیدآموزش را برروی دیتای trainانجام دهید فقط توجه داشته باشید که . در هر تکرار CV، یک مدل جدید باید آموزش داده شودمجموعه آزمایشی را اعتبار ارزیابی کنیدنتیجه اعتبارسنجی را ذخیره کنیدمراحل را 3-6 هزار بار تکرار کنید برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید، خواهد بود.Repeated k foldRepeated kfold، مزایای واضحی نسبت به استانداردهای k-Fold CV دارد. اولا، نسبت تقسیم دیتای آموزش و تست به تعداد تکرارها وابسته نیست. ثانیا، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم.ثانیا، ما میتوانیم یک تقسیم بندی منحصر به فرد برای هر تکرار داشته باشیم. سوما، انتخاب رندوم نمونه هااز بین دیتاست، repeated k fold را به انتخاب قوی تری تولید میکند.با این حال معایبی نیز وجود دارد از جمله اینکه در kfold cv مدل بر روی همه ی نمونه ها آزمایش میشود در حالیکه در repeated kfold از آنجایی که بصورت تصادفی نمدنه هارا انتخاب میکند، ممکن است برخی نمونه ها هرگز دیده نشوند و انتخاب نشوند و این در حالیست که برخی نمونه ها ممکن است اصلا انتخاب نشوند.Sklearn به شما در پیاده سازی Repeated k-Fold CV کمک می کند. فقط ازsklearn.model_selection.RepeatedKFold استفاده کنید.در اجرایsklearn این تکنیک باید تعداد فولدهایی که می خواهید داشته باشید (n_splits) و تعداد دفعاتی که تقسیم انجام می شود (n_repeats) را تنظیم کنید.?Nested k foldبرخلاف سایر تکنیک‌های CV، که برای ارزیابی کیفیت یک الگوریتم طراحی شده‌اند، Nested k-Fold CV محبوب‌ترین راه برای تنظیم پارامترهای یک الگوریتم است. تصور کنید که ما یک پارامتر p داریم که معمولاً به الگوریتم پایه ای که ما در حال تایید متقابل آن هستیم بستگی دارد. به عنوان مثال، برای رگرسیون لجستیک، ممکن است پارامتر جریمه باشد که برای تعیین هنجار مورد استفاده در جریمه استفاده می شود. الگوریتم تکنیک Nested k-Fold1. K را که تعدادfoldیا دسته است انتخاب کنید. به عنوان مثال، 10. فرض کنید ما این تعداد را انتخاب کردیم.2. پارامتر pرا انتخاب کنید. فرض کنید الگوریتم ما logistic regressionباشد بنابراین p همان جریمه خواهد بود.3. دیتاست راه به 10 تقسیم کرده و یک دسته را به عنوان دیتای تست کنار بگذارید.4. یک فولد از دیتای آموزشی را به عنوان دیتای validation کنار بگذارید.5. برای هر مقدار p، 8 دسته ی باقیمامده از دیتای آموزسی را آموزش دهید و از روی دیتای validationارزیابی کنید.6. گام های 4 و 5 را 9 بار تکرار کنید. دیتاهارا جابجا کنید به گونه ای که جای valو train عوض شود.7. مقدار pرا انتخاب کنید که میانگین ارور ها در 9 دسته را minimize کند. همین مقدارp را برای ارزیابی بر روی دیتای تست استفاده کنید.8. از مرحله ی 2 تا این قسمت را 10 بار تکرار کنید و هر fold را به نوبت به عنوان دسته ی تست استفاده کنید.9. میانگین و انحراف معیار ارزیابی خود در 10 تست انجام شده را ذخیره کنید.10. الگوریتمی که بهترین میانگین در بین 10 تست را دریافت کند، بهترین خواهد بود.این تکنیک از نظر محاسباتی پر هزینه است زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، Nested k-Fold CV معمولا استفاده می شود و ممکن است در چندین کار ML واقعاً مؤثر باشد. متأسفانه، هیچ روش داخلی در sklearn وجود ندارد که بتواند CV Nested k-Fold را برای شما پیاده سازی نماید.Complete CVروش Complete Cross-Validation کم استفاده ترین تکنیک CV است. ایده کلی این روش این است که ما یک عدد k (طول مجموعه آموزشی) را انتخاب می کنیم و روی هر تقسیم ممکن حاوی k نمونه در مجموعه آموزشی اعتبار سنجی می کنیم.مقدار این تقسیم بندی ها با استفاده از Cn, k که nطول دیتاست می باشد، قابل محاسبه است. اگر kبزرگتر از 2 باشد، ما باید مدل خود را چندین بار گزارش دهیم که همانطور که قبلا ذمر شد و متوجه شدیم، بسیار از نظر محاسباتی و زمان هزینه بر است.به همین دلیل است که از CV کامل یا در تحقیقات نظری و یا در صورت وجود فرمول مؤثری که به حداقل رساندن محاسبات کمک می کند. ، استفاده میشود.الگوریتم اعتبار سنجی متقاطع کامل:1. عددk را که طول دیتاست است، انتخاب کنید.2.دیتاست را تقسیم بندی کنید.3. آموزش را بر روی دیتای trainانجام دهید.4. دیتای تست را ارزیابی کنید .5. نتیجه ی اعتبار سنجی را ذخیره کنید.6. مرحله ی 2 تا 5 را Cn, k بار تکرار کنید.7. برای بدست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله ی 5 بدست آوردید، را محاسبه کنید.استفاده از Cross-validation در یادگیری ماشینبیشتر تکنیک های اعتبار سنجی متقابل ذکر شده در بالا به طور گسترده در ML استفاده می شود. این مهم است که به خاطر داشته باشید که استفاده از تکنیک CV مناسب ممکن است در زمان شما صرفه جویی کند و به انتخاب بهترین مدل برای کار کمک کندو این بدان معناست که اولاً، بهتر است همیشه مدل را با استفاده از cross validation ارزیابی کنید و پس از آن باید یک روش CV مربوطه را انتخاب کنید. بنابراین، دانستن مزایا و معایب تکنیک‌های اعتبارسنجی متقابل حیاتی است. شایان ذکر است که اگر می‌خواهید مدل را اعتبارسنجی متقاطع کنید، همیشه باید دفترچه راهنمای مدل را بررسی کنید زیرا برخی از الگوریتم‌های ML، برای مثال CatBoost روش‌های CV داخلی خود را دارند. ممکن است آنها را مربوط به وظیفه ML خود بیابید و به جای روش های داخلی sklearn از آنها استفاده کنید. به طور کلی، همانطور که ممکن است متوجه شده باشید، بسیاری از تکنیک‌های CV دارای روش‌های داخلی sklearn هستند. به شدت توصیه میشود که از این روش ها استفاده کنید چرا که این روش ها در زمان برای کارهای پیچیده تر صرفه جویی می کنند.استفاده از Cross-validationدر يادگيري عميق:اعتبار سنجی متقابل در یادگیری عمیق (DL) ممکن است کمی مشکل باشد زیرا اکثر تکنیک های CVحداقل چند بار نیاز به آموزش مدل دارند.در یادگیری عمیق، معمولاً به دلیل هزینه‌های مرتبط با آموزش مدل‌های مختلف، از CV اجتناب کنید. به جای انجام k-Fold یا سایر تکنیک های CV، ممکن است از یک زیرمجموعه تصادفی از داده های آموزشی خود به عنوان نگهدارنده برای اهداف اعتبار سنجی استفاده کنید.به عنوان مثال، کتابخانه یادگیری عمیق Kerasبه شما امکان می دهد یکی از دو پارامتر را برای تابع fitکه آموزش را انجام می دهد، ارسال کنید.1. validation_split: درصدی از داده هایی که باید برای اعتبار سنجی نگهداری شوند2. validation_data: تاپلی از (X, y) که باید برای اعتبارسنجی استفاده شود. این پارامتر validation_splitرا override میکند، به این معنی که شما می توانید تنها یکی از این پارامترها را در یک زمان استفاده کنید.همین رویکرد در آموزش های رسمی سایر فریمورک های DLمانند PyTorch و MxNetاستفاده می شود. همچنین در این آموزش ها پیشنهاد می شود که مجموعه داده را به سه بخش تقسیم کنید: آموزش، اعتبار سنجی و آزمایش.(train-validation-test)1. آموزش – بخشی از مجموعه داده برای آموزش2. اعتبار سنجی - بخشی از مجموعه داده برای اعتبارسنجی در حین آموزش3. تست - بخشی از مجموعه داده برای اعتبار سنجی نهایی مدلبا این حال، اگر مجموعه داده کوچک است (شامل صدها نمونه) می توانید از اعتبارسنجی متقابل در وظایف DLاستفاده کنید. در این مورد، یادگیری یک مدل پیچیده ممکن است یک کار بی ربط باشد، بنابراین مطمئن شوید که کار را بیشتر پیچیده نکنید.بهترین روش ها و نکات:شایان ذکر است که گاهی اوقات انجام اعتبارسنجی متقابل ممکن است کمی مشکل باشد. به عنوان مثال، اشتباه منطقی هنگام تقسیم مجموعه داده بسیار آسان است که ممکن است منجر به یک CVغیرقابل اعتماد شود.نکاتی که ممکن است برای انجام cross-validationمفید باشد در ادامه آورده شده است:1. هنگام تقسیم داده ها منطقی باشید (آیا روش تقسیم منطقی است)2. از روش CVمناسب استفاده کنید (آیا این روش برای مورد استفاده من قابل اجرا است)3. هنگام کار با سری های زمانی، گذشته را تأیید نکنید (به اولین نکته مراجعه کنید)4. هنگام کار با داده های پزشکی یا مالی، به یاد داشته باشید که به صورت شخصی تقسیم کنید. از داشتن داده برای یک نفر هم در آموزش و هم در مجموعه تست خودداری کنید زیرا ممکن است به عنوان نشت داده در نظر گرفته شود5. به یاد داشته باشید هنگام برش تصاویر بزرگ‌تر به تکه های کوچک تر، شناسه ی تکه های کوچکتر همان شناسه تصویر بزرگ تر استالبته نکات از کابرد به کاربرد متفاوت است و پوشش همه آنها تقریبا غیرممکن است. به همین دلیل بهترین روش انجام یک تجزیه و تحلیل کامل بر روی داده ها قبل از شروع اعتبارسنجی است.جمع بندی:اعتبار سنجی متقابل ابزار قدرتمندی است. هر دانشمند داده باید با آن آشنا باشد. در زندگی واقعی، شما نمی توانید پروژه ای را بدون cross-validationبر روی یک مدل به پایان برسانید.به نظر من بهترین تکنیک های CV، Nested k-Fold و k-Foldاستاندارد هستند. من شخصاً از آنها در پروژه تشخیص تقلب استفاده کردم. K-Foldتودرتو و همچنین GridSeachCV به من کمک کرد تا پارامترهای مدل خود را تنظیم کنم. از طرف دیگر، k-Foldبرای ارزیابی عملکرد مدل من استفاده شد.در این مقاله، ما متوجه شدیم که اعتبارسنجی متقابل چیست، چه تکنیک‌های CV در طبیعت وجود دارد و چگونه آنها را پیاده‌سازی کنیم. در آینده قطعاً الگوریتم های MLحتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.در یادگیری ماشین (‏ML)‏، تعمیم (generalization)، معمولا به توانایی یک الگوریتم در پاسخ دادن به ورودی های مختلف و البته جدید اطلاق میشود و این بدان معناست که عملکرد در یک الگوریتم یادگیری ماشین، عملکرد الگوریتم بر اساس دیتایی که با آن آموزش دیده(train set) قابل ارزیابی درست نیست.اصل تعمیم برای انسان‌هااز طبیعی ترین و ساده ترین کارهای ممکن است به عنوان نمونه، انسان حتی اگر یک سگی با نژادی متفاوت را که تا به حال ندیدیه برای اولین بار ببیند، باز هم میشناسد که این همان تعمیم است. اما این کار برای الگوریتم چالش هایی به دنبال دارد و به همین دلیل بررسی الگوریتم در توانایی تعمیم نیازمند توجه زیادی در زمان ساخت مدل است که برای انجام این کار، ما از روش اعتبار سنجی عرضی (‏CV)‏استفاده می‌کنیم.​​​​​​​​در این مقاله موارد زیر را پوشش خواهیم داد:​​​​​​​​اعتبار سنجی متقابل: تعریف، هدف از استفاده و تکنیک‌هاتکنیک‌های مختلف CV: hold-out, k-folds, Leave-one-out, Leave-p-out, Stratified k-folds, Repeated k-folds, Nested k-folds, Complete CVنحوه ی استفاده از این تکنیک ها : با استفاده از پکیج Sklearnاعتبار سنجی متقابل در یادگیری ماشینیاعتبار سنجی در یادگیری عمیق,…keras, pytorch:بهترین روش‌ها و نکات از: سری‌های زمانی، داده‌های پزشکی و مالی، تصاویراعتبار ستجی متقابل چیست؟اعتبارسنجی متقابل تکنیکی برای ارزیابی یک مدل یادگیری ماشین و تست عملکرد آن است. این کار به مقایسه و انتخاب یک مدل مناسب برای مساله مدل‌سازی کمک می‌کند. ​CV را می توان به راحتی درک کرد، پیاده‌سازی آن آسان است، و بایاس کمتری برای محاسبه ی ارزیابی مدل، نسبت به روش‌های دیگر دارد. تمام این موارد اعتبارسنجی متقابل را به ابزاری قدرتمند برای انتخاب بهترین مدل برای این کار خاص یعنی ارزیابی مدل، تبدیل می‌کند. ​تکنیک‌های مختلفی وجود دارند که ممکن است برای اعتبارسنجی متقابل یک مدل مورد استفاده قرار گیرند. با این حال، همه آن‌ها الگوریتم مشابهی دارند:۱. مجموعه داده را به دو بخش تقسیم کنید: یکی برای آموزش و دیگری برای تست۲. ​مدل را با استفاده از داده های trainآموزش دهید.۳. اعتبارسنجی مدل در مجموعه تست .۴. مرحله ی ۱ تا ۳ را چندین بار تکرار کنید. تعداد این تکرار به روش CVکه استفاده می‌کنید بستگی دارد. ​همانطور که می‌دانید تکنیک‌های زیادی برای CV وجود دارد. برخی از آن‌ها به طور معمول مورد استفاده قرار می‌گیرند و برخی دیگر تنها بصورت تئوری قابل استفاده هستند.روش های ​ارزیابی متقابلی که در این مقاله \وشش دادیم، شامل موارد زیر است:Hold-outK-foldsLeave-one-outLeave-p-outStratified K-foldsRepeated K-foldsNested K-foldsCompleteHoldout​​​​​​این تکنیک CV، ازساده‌ترین و رایج‌ترین روشهای CV به شمار میرود .الگوریتم تکنیک holdout:​​​​​۱. مجموعه داده را به دو بخش تقسیم کنید: مجموعه آموزشی و مجموعه تست. معمولا،۸۰ % مجموعه داده به مجموعه آموزشی و ۲۰ % به مجموعه تست داده میشود، اما شما می‌توانید هر گونه تقسیم که برای شما مناسب‌تر است را انتخاب کنید. ​۲. آموزش مدل در مجموعه آموزشی۳. ​ارزیابی داده ی تست۴. ذخیره ی نتیجه ی ارزیابی​​​​​​​ما معمولا از روش hold out در مجموعه داده‌های بزرگ  که تنها یک‌بار به آموزش مدل نیاز دارد استفاده می‌کنیم. ​\یاده سازی این الگوریتم آسان بوده و به سادگی میتواند با استفاده از sklearn.model_selection.train_test_split این کار را انجام دهید:import numpy as npfrom sklearn.model_selection import train_test_splitX, y = np.arange(10).reshape((5, 2)), range(5)X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2, random_state=111)با این حال، روش holdoutیک عیب بزرگ دارد.​​​​​​​​به عنوان مثال، ممکن است در یک مجموعه داده ای که توزیع آن یکنواخت نیست، دچار مشکل شویم. به عنوان مثال، مجموعه آموزشی هیچ نشانی از مجموعه ی تست ندارد و ممکن یکی از آنها بسیار سخت و دیگری بسیار راحت باشد که درک این مساله برای الگوریتم مشکل خواهد بود. و یا این واقعیت که مدل خود را فقط یکبار آزمایش کنیم میتواند یک نقطه ی ضعف یا buttle neck  برای الگوریتم باشد.بنابراین با توجه به موارد ذکر شده، شاید نتایج بدست آمده با استفاده از تکنیک holdout چندان قابل اطمینان نباشد.K_Foldk-Fold CV تکنیکی است که معایب holdout را کمتر میکند. Kfold روشی جدید برای تقسیم بندی داده در راستای غلبه بر مشکل &quot;یکبار تست کردن و buttleneckای که ممکن است بوجود آید&quot; معرفی شده است.الگوریتم تکنیک kfold:1. انتخاب تعداد تعداد دسته یا همان مقدار k که بصورت معمول بین 5 تا 10 میباشد. البته شما مجاز به انتخاب هر عددی (کمتر از طول دیتاست) خواهید بود.2. بخش بندی کردن داده به kدسته ی یکسان (با اندازه ی برابر)3. انتخاب k-1دسته به عنوان دیتای آموزشی و دسته ی باقیمانده به عنوان دیتای تست.4. آموزش مدل بر روی داده ی آموزشی. در هر گام cv، شما میبایست مدلی جدید، مستقل از مدل مرحله ی قبل آموزش دهید.5. ارزیابی برروی داده ی تست.6. ذخیره ی نتیجه ی ارزیابی7. مراحل 3 تا 6 را kبار تکرار کنید و در هربار، بقیه ی دسته را به عنوان تست در نظر بگیرید و در پایان شما می بایست الگوریتم را روی هر دسته ارزیابی کرده باشید.8. Scoreنهایی میانگین نتایجی است که در 6 مرحله ی بالا دریافت کردید.برای \یاده سازی میتوانید از sklearn.model_selection.Kfold استفاده کنید:?بصورت کلی، در اکتر مواقع، استفاده از kfold نتیجه ی بهتری نسبت به holdout به شما خواهد داد. در شرایط برابر، نتایج ارائه شده توسط kfoldبسیار قابل اطمینان تر و پایدار تر میباشد چرا که آموزش و آزمایش برروی چندین بخش مختلف مجموعه ی داده انجام میشود. همچنین اگر مقدار k را افزایش دهیم، تا مدل برروی مجموعه های مختلف تست کنیم، نتایج و امتیاز کلی قوی تری نیز دریافت خواهیم کرد.اما با این حال، روش kfold یک نقطه ضعف دارد و آن هم این است مه اگر مقدارk بزرگ باشد، فرآیند آموزش بسیار پرهزینه و زمان بر خواهد شد.Leave-one-out сross-validationLoocv (leave ome out cv) یک مدل خاص از kfoldمی باشد که در آن k دقیقا برابر تعداد داده ی آموزشی است.الگوریتم تکنینک loocv:1. انتخاب یک نمونه از داده به عنوان داده ی تست2. بقیه ی نمونه ها(n-1نمونه ی باقیمانده) به عنوان دیتای آموزشی3. آموزش مدل با استفاده از دیتای آموزشی. در هرگام باید مدل جدیدی آموزش داده شود.4. ارطیابی برروی داده ی تست5. ذخیره ی نتیجه ی ارزیابی6. اجرای مراحل 1 تا 6 به تعداد nبار ( به تعداد نمونه های آموزشی و دسته ها)7. Scoreنهایی میانگین نتایجی است مه از مرحله ی 5 دریافت شده.Sklearn برای loocv نیز متودی ساخته است که در کتابخانه ی model_selectionو \س از آن sklearn.model_selection.LeaveOneOut.قابل مشاهده و استفاده است.?بزرگترین مزیت loocvاین است مه دیتای زیادی هدر نمیدهد. در واقع ما فقط از یک نمونه به عنوان دیتای تست استفاده میکنیم و از بقیه ی نمونه ها در فرآیند آموزش استفاده میکنیم.در مقایسه kfold با loocvاز آنجایی که loocv از nدسته برای اجرای الگوریتم خود استفاده می‌کند و احتمالا مقدار nاز k خیلی بیشتر خواهد بود، لذا این روش هزینه ی زیادی را نیز به دنبال خواهد داشت.بنابراین بر اساس شواهد تجربی و تحقیقات مختلفی که صورت پذیرفته است، جامعه ی علوم داده به این نتیجه رسیده اند که kfoldبا k برابر 5 یا 10 برloocvترجیح داده میشود.Leave-p-out cross-validationاعتبار سنجی leave p out (LPOC)، مشابه LOOCV است زیرا تمام مجموعه های آموزشی و آزمایشی ممکن را با استفاده از نمونه های p به عنوان مجموعه آزمایشی ایجاد می کند. تمام موارد ذکر شده در مورد  LOOCV  برای LpOC نیز صادق است.با این حال، شایان ذکر است که بر خلاف LOOCV و مجموعه‌های تستk-Fold برای LpOC اگر p بالاتر از 1 باشد، همپوشانی دارند.الگوریتم تکنیکLpOC1.به تعداد p  نمونه داده از مجموعه ی داده به عنوان داده ی تست جدا کنید.n - p 2. نمونه باقیمانده مجموعه آموزشی خواهد بودمدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شودمجموعه آزمایشی اعتبار سنجی کنیدنتیجه اعتبارسنجی را ذخیره کنیدمراحل 2 تا 5Cpn را تکرار کنید برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردیدمی‌توانیدLeave-p-out CV را با استفاده ازsklearn – sklearn.model_selection.LeavePOut انجام دهید.?LpOC تمام معایب LOOCV را دارد، اما، با این وجود، به اندازه LOOCV قوی است.Stratified k-Foldگاهی اوقات ممکن استدر دیتاست  با عدم تعادل تعداد نمونه های کلاس ها مواجه شویم. به عنوان مثال، در مجموعه داده‌های مربوط به قیمت ساعت‌های مچی، ممکن است تعداد زیادی از ساعت‌های مچی قیمت بالایی داشته باشند. در مورد طبقه‌بندی، در مجموعه داده‌های گربه‌ها و سگ‌ها ممکن است تغییر زیادی جز طبقه سگ دسته بندی شوند.K-Fold طبقه بندی شده (stratified kfold) نوعی از تکنیک استاندارد K-Fold CV است که به گونه ای طراحی شده است که در چنین مواردی،موثر عمل کندK-Fold طبقه بندی شده مجموعه داده را بر روی k تا دسته تقسیم می کند به طوری که هر فولد تقریباً دارای درصد مشابهی از نمونه های هر کلاس باشددر مورد رگرسیون، Stratified k-Fold اطمینان حاصل می کند که میانگین مقدار هدف تقریباً در همه ی دسته ها برابر است.  ​الگوریتم تکنیک :stratified kfold1.تعداد دسته ها را انتخاب کنید - k2.مجموعه داده را به k دسته تقسیم کنید. هر فولد باید تقریباً دارای درصد مشابهی از نمونه‌های هر کلاس در مجموعه کامل باشد3.k – 1 folds دیگر مجموعه آموزشی خواهد بود ,  باقیمانده مجموعه آزمایشی خواهد بود4. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود 5.مجموعه آزمایشی اعتبار سنجی کنید6.نتیجه اعتبارسنجی را ذخیره کنید7. مراحل 3 تا 6 را چندین بار تکرار کنید . هر بار از دسته ی باقی مانده به عنوان مجموعه تست استفاده کنید.8. در پایان، شما باید مدل را روی هر فولد که دارید اعتبارسنجی کرده باشید. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید.همانطور که ممکن است متوجه شده باشید، الگوریتم تکنیک Stratified k-Fold مشابه K-Folds استاندارد است. شما نیازی به کدنویسی اضافی ندارید زیرا این روش هم همه کارهای لازم را برای شما انجام می دهد( با استفاده از کتابخانه ی sklearn)?تمام موارد ذکر شده در بالا در مورد K-Fold CV برای تکنیکStratified k-Fold نیز صادق است. هنگام انتخاب بین روش های مختلف CV، مطمئن شوید که از روش مناسب استفاده می کنید. به عنوان مثال، ممکن است فکر کنید که مدل شما عملکرد بدی دارد، فقط به این دلیل که ازK-Fold CV برای اعتبارسنجی مدلی استفاده می‌کنید که روی مجموعه داده با عدم تعادل کلاس آموزش داده شده است. برای جلوگیری از آن، همیشه باید یک تجزیه و تحلیل داده ای مناسب روی داده های خود انجام دهید.Repeated k-Fold cross-validationاعتبار سنجی repeated kfold  احتمالا قوی ترین تکنیک از بین تکنیک های ذکر شده در این مقاله می باشد. Repeated k fold نوعی از kfold cv می باشد با این تفاوت که در آن k  تعداد دسته ها نیست بلکه تعداد دفعاتیست که مدل را آموزش می دهیم.ایده کلی این است که در هر تکرار، نمونه‌هایی را به‌طور تصادفی از سرتاسر مجموعه داده به عنوان مجموعه آزمایشی انتخاب می‌کنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده ها مجموعه آزمایشی ما باشد، 20٪ نمونه به طور تصادفی انتخاب می شوند و 80٪ بقیه به مجموعه آموزشی تبدیل می شوند.الگوریتم تکنیک Repeated k-Fold:k را که تعداد دفعات آموزش مدل است را انتخاب کنیدتعداد نمونه های مجموعه ی تست را انتخاب کنید و مجموعه داده را تقسیم کنیدآموزش را برروی دیتای trainانجام دهید فقط توجه داشته باشید که . در هر تکرار CV، یک مدل جدید باید آموزش داده شودمجموعه آزمایشی را اعتبار ارزیابی کنیدنتیجه اعتبارسنجی را ذخیره کنیدمراحل را 3-6 هزار بار تکرار کنید برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید، خواهد بود.Repeated k foldRepeated kfold، مزایای واضحی نسبت به استانداردهای k-Fold CV دارد. اولا، نسبت تقسیم دیتای آموزش و تست به تعداد تکرارها وابسته نیست. ثانیا، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم.ثانیا، ما میتوانیم یک تقسیم بندی منحصر به فرد برای هر تکرار داشته باشیم. سوما، انتخاب رندوم نمونه هااز بین دیتاست، repeated k fold را به انتخاب قوی تری تولید میکند.با این حال معایبی نیز وجود دارد از جمله اینکه در kfold cv مدل بر روی همه ی نمونه ها آزمایش میشود در حالیکه در repeated kfold از آنجایی که بصورت تصادفی نمدنه هارا انتخاب میکند، ممکن است برخی نمونه ها هرگز دیده نشوند و انتخاب نشوند و این در حالیست که برخی نمونه ها ممکن است اصلا انتخاب نشوند.Sklearn به شما در پیاده سازی Repeated k-Fold CV کمک می کند. فقط ازsklearn.model_selection.RepeatedKFold استفاده کنید.در اجرایsklearn این تکنیک باید تعداد فولدهایی که می خواهید داشته باشید (n_splits) و تعداد دفعاتی که تقسیم انجام می شود (n_repeats) را تنظیم کنید.?Nested k foldبرخلاف سایر تکنیک‌های CV، که برای ارزیابی کیفیت یک الگوریتم طراحی شده‌اند، Nested k-Fold CV محبوب‌ترین راه برای تنظیم پارامترهای یک الگوریتم است. تصور کنید که ما یک پارامتر p داریم که معمولاً به الگوریتم پایه ای که ما در حال تایید متقابل آن هستیم بستگی دارد. به عنوان مثال، برای رگرسیون لجستیک، ممکن است پارامتر جریمه باشد که برای تعیین هنجار مورد استفاده در جریمه استفاده می شود. الگوریتم تکنیک Nested k-Fold1. K را که تعدادfoldیا دسته است انتخاب کنید. به عنوان مثال، 10. فرض کنید ما این تعداد را انتخاب کردیم.2. پارامتر pرا انتخاب کنید. فرض کنید الگوریتم ما logistic regressionباشد بنابراین p همان جریمه خواهد بود.3. دیتاست راه به 10 تقسیم کرده و یک دسته را به عنوان دیتای تست کنار بگذارید.4. یک فولد از دیتای آموزشی را به عنوان دیتای validation کنار بگذارید.5. برای هر مقدار p، 8 دسته ی باقیمامده از دیتای آموزسی را آموزش دهید و از روی دیتای validationارزیابی کنید.6. گام های 4 و 5 را 9 بار تکرار کنید. دیتاهارا جابجا کنید به گونه ای که جای valو train عوض شود.7. مقدار pرا انتخاب کنید که میانگین ارور ها در 9 دسته را minimize کند. همین مقدارp را برای ارزیابی بر روی دیتای تست استفاده کنید.8. از مرحله ی 2 تا این قسمت را 10 بار تکرار کنید و هر fold را به نوبت به عنوان دسته ی تست استفاده کنید.9. میانگین و انحراف معیار ارزیابی خود در 10 تست انجام شده را ذخیره کنید.10. الگوریتمی که بهترین میانگین در بین 10 تست را دریافت کند، بهترین خواهد بود.این تکنیک از نظر محاسباتی پر هزینه است زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، Nested k-Fold CV معمولا استفاده می شود و ممکن است در چندین کار ML واقعاً مؤثر باشد. متأسفانه، هیچ روش داخلی در sklearn وجود ندارد که بتواند CV Nested k-Fold را برای شما پیاده سازی نماید.Complete CVروش Complete Cross-Validation کم استفاده ترین تکنیک CV است. ایده کلی این روش این است که ما یک عدد k (طول مجموعه آموزشی) را انتخاب می کنیم و روی هر تقسیم ممکن حاوی k نمونه در مجموعه آموزشی اعتبار سنجی می کنیم.مقدار این تقسیم بندی ها با استفاده از Cn, k که nطول دیتاست می باشد، قابل محاسبه است. اگر kبزرگتر از 2 باشد، ما باید مدل خود را چندین بار گزارش دهیم که همانطور که قبلا ذمر شد و متوجه شدیم، بسیار از نظر محاسباتی و زمان هزینه بر است.به همین دلیل است که از CV کامل یا در تحقیقات نظری و یا در صورت وجود فرمول مؤثری که به حداقل رساندن محاسبات کمک می کند. ، استفاده میشود.الگوریتم اعتبار سنجی متقاطع کامل:1. عددk را که طول دیتاست است، انتخاب کنید.2.دیتاست را تقسیم بندی کنید.3. آموزش را بر روی دیتای trainانجام دهید.4. دیتای تست را ارزیابی کنید .5. نتیجه ی اعتبار سنجی را ذخیره کنید.6. مرحله ی 2 تا 5 را Cn, k بار تکرار کنید.7. برای بدست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله ی 5 بدست آوردید، را محاسبه کنید.استفاده از Cross-validation در یادگیری ماشینبیشتر تکنیک های اعتبار سنجی متقابل ذکر شده در بالا به طور گسترده در ML استفاده می شود. این مهم است که به خاطر داشته باشید که استفاده از تکنیک CV مناسب ممکن است در زمان شما صرفه جویی کند و به انتخاب بهترین مدل برای کار کمک کندو این بدان معناست که اولاً، بهتر است همیشه مدل را با استفاده از cross validation ارزیابی کنید و پس از آن باید یک روش CV مربوطه را انتخاب کنید. بنابراین، دانستن مزایا و معایب تکنیک‌های اعتبارسنجی متقابل حیاتی است. شایان ذکر است که اگر می‌خواهید مدل را اعتبارسنجی متقاطع کنید، همیشه باید دفترچه راهنمای مدل را بررسی کنید زیرا برخی از الگوریتم‌های ML، برای مثال CatBoost روش‌های CV داخلی خود را دارند. ممکن است آنها را مربوط به وظیفه ML خود بیابید و به جای روش های داخلی sklearn از آنها استفاده کنید. به طور کلی، همانطور که ممکن است متوجه شده باشید، بسیاری از تکنیک‌های CV دارای روش‌های داخلی sklearn هستند. به شدت توصیه میشود که از این روش ها استفاده کنید چرا که این روش ها در زمان برای کارهای پیچیده تر صرفه جویی می کنند.استفاده از Cross-validationدر يادگيري عميق:اعتبار سنجی متقابل در یادگیری عمیق (DL) ممکن است کمی مشکل باشد زیرا اکثر تکنیک های CVحداقل چند بار نیاز به آموزش مدل دارند.در یادگیری عمیق، معمولاً به دلیل هزینه‌های مرتبط با آموزش مدل‌های مختلف، از CV اجتناب کنید. به جای انجام k-Fold یا سایر تکنیک های CV، ممکن است از یک زیرمجموعه تصادفی از داده های آموزشی خود به عنوان نگهدارنده برای اهداف اعتبار سنجی استفاده کنید.به عنوان مثال، کتابخانه یادگیری عمیق Kerasبه شما امکان می دهد یکی از دو پارامتر را برای تابع fitکه آموزش را انجام می دهد، ارسال کنید.1. validation_split: درصدی از داده هایی که باید برای اعتبار سنجی نگهداری شوند2. validation_data: تاپلی از (X, y) که باید برای اعتبارسنجی استفاده شود. این پارامتر validation_splitرا override میکند، به این معنی که شما می توانید تنها یکی از این پارامترها را در یک زمان استفاده کنید.همین رویکرد در آموزش های رسمی سایر فریمورک های DLمانند PyTorch و MxNetاستفاده می شود. همچنین در این آموزش ها پیشنهاد می شود که مجموعه داده را به سه بخش تقسیم کنید: آموزش، اعتبار سنجی و آزمایش.(train-validation-test)1. آموزش – بخشی از مجموعه داده برای آموزش2. اعتبار سنجی - بخشی از مجموعه داده برای اعتبارسنجی در حین آموزش3. تست - بخشی از مجموعه داده برای اعتبار سنجی نهایی مدلبا این حال، اگر مجموعه داده کوچک است (شامل صدها نمونه) می توانید از اعتبارسنجی متقابل در وظایف DLاستفاده کنید. در این مورد، یادگیری یک مدل پیچیده ممکن است یک کار بی ربط باشد، بنابراین مطمئن شوید که کار را بیشتر پیچیده نکنید.بهترین روش ها و نکات:شایان ذکر است که گاهی اوقات انجام اعتبارسنجی متقابل ممکن است کمی مشکل باشد. به عنوان مثال، اشتباه منطقی هنگام تقسیم مجموعه داده بسیار آسان است که ممکن است منجر به یک CVغیرقابل اعتماد شود.نکاتی که ممکن است برای انجام cross-validationمفید باشد در ادامه آورده شده است:1. هنگام تقسیم داده ها منطقی باشید (آیا روش تقسیم منطقی است)2. از روش CVمناسب استفاده کنید (آیا این روش برای مورد استفاده من قابل اجرا است)3. هنگام کار با سری های زمانی، گذشته را تأیید نکنید (به اولین نکته مراجعه کنید)4. هنگام کار با داده های پزشکی یا مالی، به یاد داشته باشید که به صورت شخصی تقسیم کنید. از داشتن داده برای یک نفر هم در آموزش و هم در مجموعه تست خودداری کنید زیرا ممکن است به عنوان نشت داده در نظر گرفته شود5. به یاد داشته باشید هنگام برش تصاویر بزرگ‌تر به تکه های کوچک تر، شناسه ی تکه های کوچکتر همان شناسه تصویر بزرگ تر استالبته نکات از کابرد به کاربرد متفاوت است و پوشش همه آنها تقریبا غیرممکن است. به همین دلیل بهترین روش انجام یک تجزیه و تحلیل کامل بر روی داده ها قبل از شروع اعتبارسنجی است.جمع بندی:اعتبار سنجی متقابل ابزار قدرتمندی است. هر دانشمند داده باید با آن آشنا باشد. در زندگی واقعی، شما نمی توانید پروژه ای را بدون cross-validationبر روی یک مدل به پایان برسانید.به نظر من بهترین تکنیک های CV، Nested k-Fold و k-Foldاستاندارد هستند. من شخصاً از آنها در پروژه تشخیص تقلب استفاده کردم. K-Foldتودرتو و همچنین GridSeachCV به من کمک کرد تا پارامترهای مدل خود را تنظیم کنم. از طرف دیگر، k-Foldبرای ارزیابی عملکرد مدل من استفاده شد.در این مقاله، ما متوجه شدیم که اعتبارسنجی متقابل چیست، چه تکنیک‌های CV در طبیعت وجود دارد و چگونه آنها را پیاده‌سازی کنیم. در آینده قطعاً الگوریتم های MLحتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.refrence: &quot;https://neptune.ai/blog/cross-validation-in-machine-learning-how-to-do-it-right&quot; </description>
                <category>mahila</category>
                <author>mahila</author>
                <pubDate>Wed, 15 Dec 2021 10:47:10 +0330</pubDate>
            </item>
                    <item>
                <title>ورود به دنیای هوش مصنوعی</title>
                <link>https://virgool.io/@mahilamoghadami/%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-kgwk5whdfq4p</link>
                <description>تولد هوش مصنوعی را می‌توان به زمان آلن تورینگ و مقاله ای که در سال 1960 منتشر کرد نسبت داد. از اولین پروژه‌های عملی هوش مصنوعی، ایده گرفتن از مفهوم شبکه‌ی عصبی و نورون‌ها بود. دو نفر از دانشجویان دانشگاه هاروارد در سال ۱۹۵۰ اولین شبکه ی عصبی مصنوعی را که شامل ۴۰ نورون بود ساختند. در واقع نورون‌ها واحد‌هایی یک‌شکل در مغز هستند که پیام‌های عصبی را منتقل می‌کنند. البته شبکه های عصبی جدید که از آن‌ها برای طبقه‌بندی تصاویر استفاده می‌شود دارای هزاران نورون هستند! باخت کاسپاروف، قهرمان شطرنج جهان، از سیستم deep blue  باعث شد تا هوش‌ مصنوعی در کانون توجه قرار گیرد.هوشمندی را از دو منظر می‌توان مورد بررسی قرار داد؛ از منظر اول هوشمندی یا در رفتار است یا در تفکر و از منظر دوم هوشمندی در انسان‌گونه بودن یا در منطقی بودن (rationality) است. اگر همهی حالات را در نظر بگیریم به چهار تعریف زیر می‌رسیم. هوش مصنوعی چیزی است که:منطقی فکر کند.منطقی رفتار کند.مانند انسان فکر کند.مانند انسان رفتار کند.پس از انتخاب تعریف خود از هوشمندی، قدم بعدی ساخت عامل هوشمند (intelligent agent) است. عامل می‌تواند سخت‌افزاری یا نرم‌افزاری باشد و بر حسب محیطی که عامل قرار است در آن مورد استفاده قرار گیرد، می‌تواند دارای اجزای مختلفی باشد.اما تفاوت هوش مصنوعی و یادگیری ماشین: امروزه هر برنامه‌ای که هوشمندی داشته باشد یا به نوعی رفتار انسان را تقلید کند، به عنوان هوش مصنوعی پذیرفته می‌شود. اما یادگیری ماشین بعد از هوش مصنوعی موضوعیت پیدا کرد و آن را می‌توان زیر مجموعه‌ی هوش مصنوعی در نظر گرفت. از مهم‌ترین ویژگی‌های یادگیری ماشین، یادگیری با استفاده از داده و بدون استفاده از دستورات مستقیم استطبق فرمایشات دکتر فروغی، مساله‌ی مساله بینی (پیدا کردن مسائل عمیق) یعنی سعی بر پیدا کردن مسایل عمیق و پیدا کردن راه حل و ارتباط ایجاد کردن با دانشگاه و حل با دید پژوهشی امروزه از ارزش بالایی برخودار بوده که حاصل زیبایی نیز خواهد داشت.از کاربرد های یادگیری ماشین در عصر حاضر می‌توان به تشخیص ایمیل های spam، ماشین‌های بدون راننده، صاحبان‌محصولی که از سیستم‌های پیشنهاد‌ دهنده برای پیشنهاد محصول استفاده می‌کنند، اقتصاددانانی که برای پیش‌بینی روند بازار از آن استفاده می‌کنند و... نام برد.با افزایش اهمیت داده و نیاز جامعه به بررسی آمار و داده‌ها سبب به وجود آمدن تخصص‌هایی در این زمینه شد که در زیرهرکدام و کاربرد آنها را به اختصار بیان می‌کنیم.تحلیلگر داده: معماری مناسب برای جمع‌آوری اطلاعات یک سازمان را طراحی می‌کند و پایگاه داده مناسب برای این کار را انتخاب می‌کند؛ داده‌های خام را از منابع داخلی و خارجی جمع‌آوری می‌کند و پس‌ از آماده‌سازی و انتخاب قالب مناسب، آنها را در پایگاه‌ داده‌ای که طراحی کرده ذخیره می‌کند.  نتیجه‌ی فعالیت‌های تحلیل‌گر داده می‌تواند گزارش‌های کلی یا روابط بین داده‌ها باشد و معمولا در جهت اهداف سازمان است.دانشمند داده: دانشمند داده سطح بالاتری از تحلیلگر داده دارد و نیازمند دانش آماری و ریاضیاتی و برنامه‌نویسی قوی‌تری نسبت به تحلیلگر داده است. دانشمند داده امور داده‌کاوی را معمولا با زبان‌های برنامه‌نویسی و کتابخانه‌های آن انجام می‌دهد ولی تحلیل‌گر از پلتفرم‌ها و نرم‌افزار‌ها استفاده می‌کند.مهندس داده:  انتخاب می‌کند که چه داده‌ای از میان سیل دادهی تولیدی در اختیار شرکت قرار بگیرد. پس از انتخاب منابع داده، داده‌های منابع مختلف را یکپارچه می‌کند و برای نگهداری بهینهی آن‌ها برنامه‌ریزی می‌کند.مهندس یادگیری ماشین: وظایف مهندس یادگیری ماشین جنبهی نظری و عملیاتی دارند.  به این صورت که او باید دانش کاملی از الگوریتم‌ها و روش‌های یادگیری ماشین داشته باشد. هم قبل از استقرار مدل، آن را مورد بررسی و تحلیل قرار دهد و هم بر فرآیند عملیاتی ساختن آن و محاسبهی پیچیدگی‌ها نظارت داشته باشد. سپس بعد از از استقرار، مسئول نظارت و رسیدگی به آن خواهد بود.به عنوان مثالی از ارتباط هوش مصنوعی با صنعت، به ارتباطش با صنعت معدن میپردازیم: با توجه به عدم قطعیت بالا و حجم بسیار زیاد اطلاعات ، زمینه‌ی فعالیت هوش مصنوعی در این صنعت بسیار فراهم است.شناسایی و ترسیم نقشه‌های زمین‌شناسی و عارضه‌های مربوطه (واحدهای سنگی مختلف)، با استفاده از تصاویر ماهواره ای، پیش بینی متغیرهای ژئومتالوژیکی با داده های کمتر و با دقت بالاتر، با توجه به هزینه بر بودن نمونه برداری های در معادن ، از جمله فعالیت ها در ارتباط بین صنعت معدن و هوش مصنوعی می‌باشند.طبق فرمایشات مهندس ستوده، داشتن دانش کافی نسبت به موضوع مورد مطالعه و بررسی از اهمیت بالایی برخوردار است. به عنوان مثال، داشتن دانش کافی در زمینه‌ی پزشکی در پروژه های هوش مصنوعی که از داده های پزشکی درحال استفاده هستیم.اولین تعارف از یادگیری ماشین در دهه‌ی پنجاه آقای آرتور ساموئل یکی از پیشگامان هوش مصنوعی و بازیها : یادگیری ماشین زمینه‌ای از تحقیقات است که به کامپیوترها توانایی یادگیری بدون برنامه‌نویسی صریح را می‌دهد. در واقع طبق این تعریف، ویژگی اصلی یادگیری ماشین خود آموزشی یا (Self-learning) می‌باشد که به معنی استفاده از مدلسازی آماری و عدم استفاده از دستورات مستقیم (یا صریح) می‌باشد. از اصلی ترین عناصر محوری یادگیری ماشین داده ها هستند که آنچه آن را ارزشمند می‌کند نمایندگی آن از واقعیت است و اطلاعاتی که درباره آن در اختیارمان می‌گذارد.معرفی انواع داده:· کلمات( زبان طبیعی): داده‌ای که پردازش زبان طبیعی با آن کار می‌کند، جملات و کلمات تولید شده توسط انسان‌ها هستند، که ممکن است به صورت نوشتاری یا صوت در اختیار الگورتیم‌های کامپیوتری قرار بگیرد. که برخی کاربرد های آن عبارتند از تشخیص گفتار، دسته بندی نوشتار، پاسخ به سوالات و...· تصاویر: با کاربرد هایی نطیر خودروهای خودران، تشخیص اثر انگشت، در تصاویر پزشکی و...· جداول· سری های زمانی: در مورد بعضی از انواع داده، تغییرات آن و در نتیجه مقدار آن در طول زمان اهمیت ویژه‌ای دارد. ماشین می‌تواند با دیدن تغییرات ویژگی مشخصی از یک داده در طول زمان، الگوی تغییرات آن را یاد بگیرد و به مسائلی که برحسب زمان‌اند، مثل پیش‌بینی مقدار آن ویژگی در یک زمان مشخص پاسخ دهد.عناصر چارچوب ارایه شده توسط آرتورسامئل برای مدل کردن یک مساله و حل آن: 1. مدل تصمیم گیری 2. معیار امتیاز دهی 3.رویه‌ی خودکار برای محاسبه‌ی معیار ارزیابی 4. رویه‌ی خودکار برای بهبود مدل.تعریف آقای تام میشل از یادگیری ماشین: اگر کارایی برنامه در انجام تکلیف T که با سنجه P ارزیابی می‌شود، با تجربه E افزایش یابد، می‌گوییم که برنامه‌یاد گرفته است از تجربه E با توجه به تکلیف T و سنجه P استفاده کند.به طور کلی یادگیری ماشین به سه دسته کلی تقسیم‌بندی می‌شود.یادگیری بانظارت: در فرآیند یادگیری داده به همراه برچسب      به عنوان ورودی داده خواهد شد که به دو دسته‌ی classification  و regression تقسیم می‌شود که در classification یا طبقه بندی،هدف ما پیدا کردن برچسب یا دسته مناسب برای نمونه‌های بدون برچسب می‌باشد. در حالیکه در رگرسیون،      هدف ما تخمین مقدار یک ویژگی (این بار مقداری پیوسته) برای یک نمونه می‌باشد. همچنین در الگوریتم‌های      طبقه‌بندی برچسبی که می‌خواهیم پیش‌بینی کنیم به صورت متغیری گسسته می‌باشد. در حالیکه در رگرسیون      پیوسته است.یادگیری بی‌نظارت: تفاوت      این نوع از یادگیری با یادگیری نظارت‌شده، تنها در نبودن      برچسب‌ها است. در این روش      یادگیری، مدل به تنهایی و بدون کمک برچسب‌هایی که در روش نظارت‌شده دیدیم،      باید الگوهای پنهان را پیدا کند. به طور کلی یادگیری بدون نظارت به سه دسته خوشه‌بندی (clustering)، کاهش ابعاد (dimensionality      reduction) و استخراج قانون وابستگی (association rule mining) تقسیم‌بندی می‌شود. خوشه‌بندی به معنی دسته‌بندی اتوماتیک داده‌ها به      خوشه‌های همگن است، به این صورت که داده‌های هر خوشه، ویژگی‌های یکسانی داشته      باشند. روش کاهش      ابعاد یعنی کاهش دادن تعداد ویژگی‌هایی که از آن‌ها برای آموزش مدل یادگیری      ماشین خود استفاده می‌کنیم. به طور مثال، کاهش دادن تعداد ستون‌های یک دیتاست      جدولی، حالتی از کاهش ابعاد است که با هدف جلوگیری از cursr      of dimensionary انجام می‌شود.یادگیری تقویتی: با ذهنیت      آزمون و خطا کار می‌کندیعنی درواقع، عامل هوشمند (agent) طبق حالت جاری (state) ، حرکتی (action) انجام می‌دهد و بر اساس آن حرکت بازخورد (reward) دریافت می‌کند؛ این بازخورد ممکن است مثبت یا منفی (پاداش یا تنبیه)      باشد و عامل با این بازخورد خط‌مشی (policy) خود را تغییر می‌دهد.و در نهایت برای بررسی دقیق مدل باید داده از برروی داده های جدید که تابحال سیستم آن را ندیده( تحت عنوان داده‌ی تست) آزمود.حال مختصری از ابزار های یادگیری ماشین را اراپه خواهیم کرد.زبان برنامه نویسی پایتون بنابر دلایلی که به آن اشاره خواهیم کرد، از محبوبیت بالایی برخوردار است :· دارا بودن کتابخانه ها و ابزار های قوی متعدد· قابل فهم تر بودن کدها· جامعه ای بزرگ از برنامه نویسان با هدف حل مشکلات· مناسب بودن برای پروژه های صنعتیمعرفی کتابخانه های محبوب و قدرتمند پایتون:Numpy با هدفذخیره‌سازی و پردازش بهینهٔ آرایه‌های عددی، pandas که در پآن ساختار اصلی داده به شکل دیتافریم (data frame) است که در واقع یک آرایه دو‌بعدی است که در آن سطر‌ها و ستون‌ها عنوان دارند، matplotlib با هدف ساخت نمودارهایی که بتوانند اطلاعات را به خوبی انتقال دهند، scikit_learn با هدف تمرکز بر مدل‌سازی داده به جای دستکاری و مرتب‌سازی و خلاصه کردن داده و...فصل ۵: امروزه با توجه به افزایش بی حد و حصر داده‌ها، ذخیره سازی مقرون به صرفه داده‌ها وافزایش قدرت پردازنده‌ها و کاهش هزینه‌های آن‌ها یادگیری ماشین بسیار آسان تر و فراگیر تر شده است اما این بدان معنا نیست که چالش ها نیزبصورت کامل از بین رفته اند. درزیر به چالش هایی که در این زمینه وجود دارند اشاره میکنیم.نخست چالش های مروط به داده· تعداد ناکافی داده: مدل‌های یادگیری‌ماشین مانند انسان‌ها هوشمند نیستند و فقط برای حتی تشخیص یک نوع میوه باید تعداد بسیار زیادی عکس مشاهده کنند.· داده‌ی بی کیفیت: وجود مقادیر اشتباه و گم‌شده و یا یک سری داده‌ی بسار نامناسب با عموم داده ها که جز استثنایات به شمار می‌روند مانند وجود افرادی مثل ‌Bill Gates ، Elon Musk و Mark Zuckerberg در بین داده‌هایی در خصوص حقوق افراد فعال در حوزه فناوری‌اطلاعات.· ویژگی مناسب: ویژگی هایی را برای یادگیری مشخص نماییم که خاصیت تمییز دهی بین کلاس هاراداشته و در خروجی بصورت مستقیم اثرگذار باشند.چالش های الگوریتمی· Overfitting: ارزیابی روی داده‌ی آموزش دیده بسیار عالی اما در داده های جدید که مدل تا بحال آن را ندیده ضعیف· Underfitting: بنابر دلایلی از جمله‌ی داده‌ی نامناسب، مدل یادگیری خوبی نداشته باشد.· زمان: هم مدت زمانی که طول می‌کشد تا آموزش مدل تمام شود، هم زمانی که مدل برای پیش‌بینی نمونه‌ها مصرف می‌کند که هردو از اهمیت بالایی برخودار هستند.فصل ۶: خلاصه‌ گام‌هایی است که برای یک پروژه‌یادگیری ماشین طی می‌شود را بررسی می‌کنیم.دریافت و بررسی دادهآماده‌سازی دادهانتخاب و آموزش مدل مناسبتست و ارزیابیحال به عنوان جمع بندی نکاتی تکمیلی در خصوص هوش مصنوعی ذکر میکنیم. چرخهٔ تب تکنولوژی (Technology Hype Cycle)  که نمودار رشد تکنولوژی‌­های مختلف را در طی زمان نشان می‌دهد، به شما در انتخاب حوزه ی فعالیتی کمک کرده و دید عمیق تری را از آینده‌ی فعالیتی شما ارائه خواهد داد. به عنوان مثال از THC هوش مصنوعی در سال 2020 میتوان موارد زیر را استنباط کرد.ابتدا تصویر این چرخه را ملاحظه بفرمایید:از جمله نکاتی که میتوان به آن اشاره کرد را در زیر آورده ایم:. استفاده از واحد پردازندهٔ گرافیکی (GPU) در هوش مصنوعی تقریبا به محدوده‌ٔپایانی رشد خود رسیده و اغلب تکنولوژی‌های دیگر این حوزه به صورت مناسبی از آن استفاده می‌کنند.· باتوجه  به موقعیت قرارگیری پردازش تصویر(computer vision) در این نمودار، با آن‌که به نظر می‌رسد این تکنولوژی شهرت خود را از دست داده است اما زمان به اوج رسیدن آن چیزی حدود ۲ تا ۵ سال تخمین‌ زده‌ شده است که نشانگر زمان مناسبی برای سرمایه‌گذاری و یا شروع به یادگیری این موضوع است.هوش مصنوعی محدود یا ضعیف به هوشمندی عامل هایی گفته می‌شود که در یک مساله‌ی خاص به هوشمندی رسیده اند.هوش مصنوعی عمومی‌(artificial general intelligence) و یا قوی عبارت است از ساختن عامل هوشمندی که مانند انسان از هوشی عمومی‌برخوردار باشد که توانایی آموختن در مواجهه با هر مسئلهٔجدیدی را داشته باشد و محدود به یک زمینه یا مسئلهٔ خاص نباشد. که لذاب بشر بسیار حائز اهمیت است.refrences:https://quera.ir/college/land/college/8522/</description>
                <category>mahila</category>
                <author>mahila</author>
                <pubDate>Sun, 21 Nov 2021 23:10:41 +0330</pubDate>
            </item>
            </channel>
</rss>