راهنمای مفصلی در مورد استفاده از Scikit Learn ، Pandas و Plotly برای پیش بینی قیمت های رمزنگاری.
محبوبیت پیرامون بیت کوین ، اتریوم و سایر ارزهای محبوب محبوب در سالهای اخیر به صورت تصاعدی رشد کرده است. همچنین ، کاملاً مشخص است که تلاش برای پیش بینی آینده رمزنگاری ها ناکام بوده است ، زیرا این کار شامل بسیاری از عوامل است و به نظر می رسد مدل های سنتی وظیفه را شکست می دهند.
در این مقاله ، ما یک استراتژی برای تلاش برای پیش بینی ارزش آینده یکی از ارزهای رمزنگاری شده که ما در استفاده از Scikit-Learn ، یک کتابخانه پایتون برای انجام یادگیری ماشین کار خواهیم کرد ، نشان خواهیم داد. ما همچنین پاندا را به عنوان منبع اصلی فریم داده ما برای پیش پردازش و تمیز کردن مجموعه داده های خود درج خواهیم کرد.
راهنمای گام به گام که از طریق پروژه دنبال خواهیم کرد ، موارد زیر است:
- ما مجموعه داده های حاوی اطلاعات از 14 ارز را وارد خواهیم کرد ، سپس ما به دنبال ویژگی هایی خواهیم بود که مجموعه داده های موجود در آن وجود دارد.
- در مرحله بعد ، ما برخی از داده های اکتشافی از برخی از سکه های موجود را با استفاده از API Plotly انجام خواهیم داد.
- سپس ، ما باید برخی از اصلاحات را در مجموعه داده های هر سکه با استفاده از پاندا به عنوان راهنمای اصلی خود انجام دهیم.
- قبل از تهیه هر مدل ، ما سعی خواهیم کرد که بین برخی ارزهای رمزنگاری ارتباط برقرار کنیم.
- با همه چیز تنظیم شده همانطور که به آن نیاز داریم ، ما یک مدل XGBoost را با استفاده از جنگل های تصادفی و رگرسیون خطی پیشنهاد می کنیم. برای انجام این کار ، ما از Sckikit-Learn به عنوان کتابخانه اصلی خود استفاده خواهیم کرد. همچنین ، ما یک روش جایگزین برای انجام عملیات GridSearch برای تنظیم HyperParameters ارائه می دهیم.
- سرانجام ، پس از آموزش ، پیش بینی هایی را انجام می دهیم و مدل های خود را با کتابخانه JoBlib ذخیره می کنیم.
داده های رمزنگاری را وارد کنید
در این بخش ، داده های خود را از یک رقابت Kaggle با استفاده از برخی از کتابخانه های پایتون در دسترس برای این منظور بارگیری خواهیم کرد. سپس برخی از اطلاعات مربوط به مجموعه داده ها ، مانند استفاده از حافظه و برخی از اطلاعات دیگر را استخراج خواهیم کرد.
بیا شروع کنیم. اول ، از آنجا که مجموعه داده ما برای این پروژه از یک رقابت Kaggle استفاده خواهیم کرد ، باید یک حساب داشته باشیم و قوانین رقابت را بپذیریم. سپس ، پس از اجرای سلول بعدی ، از شما خواسته می شود نام کاربری و رمز عبور خود را انجام دهید. برای انجام این مرحله ، باید یک نشانه بدست آورید. برای انجام این مراحل در اینجا می توانید مستندات کاملی پیدا کنید.
opendatasets یک کتابخانه واقعا مفید است که به ما امکان می دهد مجموعه داده های باز را از هر صفحه ای که می خواهیم بارگیری کنیم. ما فقط به جهت URL به مجموعه داده نیاز داریم. در این مورد خاص، همانطور که قبلا توضیح داده شد، برای دانلود پایگاه داده از Kaggle باید اعتبارنامه هایی اضافه کنیم.
دفعه بعد که این نوت بوک را اجرا می کنید، باید یک خروجی درست مانند نمونه بالا داشته باشید. در هر دو مورد، مهم نیست که اولین بار است یا نه، داده ها در پوشه g-research-crypto-forecasting ذخیره می شوند.
کار با ترمینال
قبل از اینکه به خواندن فایل ها ادامه دهیم، می توانیم برخی از عملیات ترمینال را انجام دهیم تا بدون ترک دفترچه، برخی از اطلاعات مربوط به مجموعه داده را بدانیم.
ابتدا به دنبال میزان استفاده از حافظه فایل ها هستیم.
چندین فایل در پوشه وجود دارد که حدود 3G حافظه می گیرد. بیایید بررسی کنیم که آموزش تقریباً تمام اطلاعات موجود در پوشه را دارد. ما دستورات ترمینال را با متغیرهای پایتون ترکیب خواهیم کرد:
همچنین، میتوانیم نحوه ظاهر این فایل را با ترمینال بررسی کنیم.
ستون Asset_ID به جای نام ارزهای دیجیتال اعداد صحیح را نشان می دهد. ما باید فایل CSV دارایی ها را بخوانیم تا بفهمیم کدام اعداد مربوط به هر کریپتو است. ما این کار را با استفاده از کتابخانه Pandas انجام خواهیم داد
در این پروژه از ستون وزن استفاده نخواهیم کرد. ما فقط بر رابطه دارایی ها در مجموعه داده اصلی خود تمرکز خواهیم کرد.
در حال بارگذاری مجموعه آموزشی
ما اکنون آماده خواندن مجموعه آموزشی هستیم و مانند همیشه از پانداها استفاده می کنیم.
توجه داشته باشید که ما به تازگی از روش پایتون برای به هم پیوستن رشته ها استفاده کرده ایم، بنابراین دریافت داده ها آسان تر است.
ما 24 میلیون ردیف در مجموعه داده خود داریم. بیایید انواع هر ستون را بررسی کنیم.
بهطور پیشفرض، Pandas دادهها را مانند روشی که در سلول بالا مشاهده میکنیم، بارگیری میکند. اگر عملیات پیچیده ای را که شامل اطلاعات بسیار دقیقی است، مانند این مورد، متوجه نمی شویم، دیگر نیازی به استفاده از int64 یا float64 نیست. ما می توانیم آنها را به این ترتیب تغییر دهیم:
ما یک دیکشنری به نام dtypes تعریف کرده ایم که در آن برای هر ستون مجموعه داده، نوع مورد نظر را اعلام کرده ایم. سپس فرهنگ لغت خود را به ویژگی dtype در تابع read_csv میدهیم.
همچنین، از آنجایی که ما به عنوان شاخص، مهر زمانی را دریافت کردیم، که نشان دهنده تاریخ نیست، بلکه ثانیه ها را نشان می دهد، باید ایندکس را به DateTime تبدیل کنیم.
در این بخش ، ما مجموعه داده های خود را با استفاده از فریم های داده Pandas خوانده ایم. ما همچنین نوع اطلاعات موجود در هر ستون را اصلاح کرده ایم ، بنابراین استفاده از حافظه را بهینه می کنیم. این مرحله بسیار مهم است زیرا کار با مجموعه داده های اصلی رایانه های ما را خرد می کند زیرا ما حافظه رم را تمام می کنیم (حتی اگر با Google Colab کار می کنید ، می بینید که چگونه RAM آنقدر سریع اشغال می شود ، که هسته از کار خودداری می کند.)
تجسم داده های اکتشافی
اکنون ما نشان می دهیم که چگونه مقادیر رمزنگاری تحول می یابد. ما به دنبال شروع داده های خود خواهیم بود و سعی خواهیم کرد که روند مختلف را با استفاده از Cryptos که با استفاده از Plotly به عنوان کتابخانه اصلی گرافیکی ما مقایسه می کنیم ، مقایسه کنیم.
ما ابتدا یک قاب داده را شامل می شویم که شامل تمام ردیف های بیت کوین است. ما از پاندا برای این منظور به شرح زیر استفاده می کنیم:
ما ابتدا تمام ردیف هایی را که شرط آن است که شماره دارایی برابر با یک باشد ، برآورده می کنیم. سپس ، ما اعلام می کنیم که این قاب داده جدید به عنوان متغیر Timestamp ما را فهرست خواهد کرد و در آخر ، ما فقط به دنبال یک دوره خاص برای گرافیک خواهیم بود.
همانطور که در امور مالی معمول است ، ما از نمودارهای شمعدانی با طرح استفاده خواهیم کرد.
برای اعلام این نمودار خاص ، ما باید به ویژگی داده های Go. CandLestick نمودار شاخص و سپس مقادیر باز ، بالا ، پایین و نزدیک برای هر دوره در شاخص منتقل کنیم. به همین دلیل تصمیم گرفتیم ثانیه ها را تا به امروز تغییر دهیم ، بنابراین می توانیم دوره ای را که در آن نمودارها می سازیم ببینیم. داده های ما 8 ساعت اطلاعات را در مورد قیمت بیت کوین درک می کند.
برای تجسم سکه های بیشتر ، ما قصد داریم یک فرهنگ لغت از همه نمودارها ایجاد کنیم ، به همان شیوه ، ما این کار را برای بیت کوین انجام دادیم.
بیایید با دقت توضیح دهیم که قبلاً چه کاری انجام داده ایم:
- ما ابتدا لیستی از رنگهای فانتزی ایجاد کردیم که بعداً به عنوان رنگ پس زمینه نمودارهای ما شکایت می شود. نیازی به استفاده از این مجموعه خاص از رنگ ها نیست. شما می توانید موارد مختلف را انتخاب کنید. در اینجا صفحه ای است که ما موارد قبلی را در لیست انتخاب کردیم.
- سپس تمام اطلاعات را در فرهنگ لغت DIC_CANDLES ذخیره خواهیم کرد
- در مرحله بعد ، ما یک حلقه را برای ذخیره تمام 14 سکه موجود در مجموعه داده خود اعلام می کنیم. در این حلقه ، کدی را که برای نمودار بیت کوین استفاده کردیم کپی کردیم. ما مجموعه داده های مربوط به هر دارایی را با استفاده از فهرست I به عنوان راهنمای خود استخراج کردیم. سپس شکل را اعلام می کنیم. ویژگی های خاصی که می خواهیم به نمودار اضافه کنیم با استفاده از روش FIG. UPDATE_LAYOUT مدیریت می شوند. ما با عنوان شروع می کنیم ، که با استفاده از قاب داده Asset_df که در بخش قبلی اعلام می کنیم ، به هر سکه به روز می شود. هنگامی که ردیف مربوط به رمزنگاری خاص خاص را دریافت کردیم ، ستون Asset_Name را می خواهیم. تا این لحظه ، آنچه ما از این پرس و جو در پاندا می گیریم ، شیء به نام سری است. به همین دلیل ما باید مورد را در این شیء استخراج کنیم ، که اکنون رشته ای است که ما به عنوان بخشی از عنوان نمودار خود از آن استفاده خواهیم کرد.
- سپس ، ما رنگ پس زمینه را اعلام می کنیم و یکی را در لیست BG_COLOR انتخاب می کنیم.
- پیکربندی قلم همان کاری است که قبلاً برای بیت کوین انجام دادیم. هنوز نیازی به انتخاب این پیکربندی خاص نیست.
- سرانجام ، کلیدهای فرهنگ لغت ما نام هر رمزنگاری خواهد بود و مقادیر ارقام خواهند بود.
در اینجا برخی از نمودارهایی که با این کد کوچک ایجاد کردیم آورده شده است:
پر کردن داده های گمشده
به دنبال همان استراتژی انتخاب فریم های داده های فردی برای هر سکه ، ما به داده های Ethereum نگاهی خواهیم انداخت.
توجه کنید که در ستون های ورودی مقادیر تهی وجود ندارد ، اما هدف این کار را انجام می دهد. ما باید در روشی که این ارزش ها را اصلاح خواهیم کرد ، مراقب باشیم زیرا با سری های زمانی سر و کار داریم. ما رویکرد زیر را دنبال خواهیم کرد:
ابتدا ، محدوده زمانی برای داده های اتریوم ما را ببینیم.
برای پر کردن صحیح مقادیر گمشده ، باید به سبک Timestamp برگردیم. ما برای این تغییر باید Numpy را وارد کنیم
برای بازگشت به قالب ثانیه ، ما dtype از شاخص را به یک عدد صحیح با numpy تنظیم کرده ایم. سپس عدد صحیح را از این ارزش جدید با 10،000،000،000 تقسیم می کنیم. می توانید تأیید کنید که Timestamp با اصلی که می گیریم مطابقت دارد.
داده های دارایی از دست رفته ، برای یک دقیقه معین ، توسط NAN نمایش داده نمی شود ، بلکه در عوض به دلیل عدم وجود آن ردیف ها. ما می توانیم تفاوت Timestamp بین ردیف های متوالی را بررسی کنیم تا ببینیم آیا داده های از دست رفته وجود دارد یا خیر.
به یاد داشته باشید که هر زمان که یک عملیات یا پرس و جو با پاندا را انجام می دهیم ، به عنوان یک سریال خروجی دریافت می کنیم. مزیت این قالب این است که ما می توانیم عملیات کاربردی دیگری مانند Value_counts را انجام دهیم ، که به ما کمک می کند تا چند بار مقادیر خاصی را به همراه شی سری تکرار کنیم (و نتیجه یک بار دیگر ، یک شیء سری است).
از آنجا که این مشکل یک سری زمانی است ، ما نباید با شکاف در جدول زمانی کار کنیم. برای پر کردن شکاف ها ، می توانیم از روش . reindex () برای پر کردن شکاف ها با مقدار معتبر قبلی استفاده کنیم.
کاری که ما در اینجا انجام داده ایم این است که با استفاده از این واقعیت که داده ها توسط دقایقی سازماندهی شده است ، مجدداً این فهرست را به مقادیر جدید تنظیم کنیم. بنابراین ما در مراحل 60 ثانیه به عنوان برچسب عملکرد محدوده استفاده می کنیم. سپس ما به عنوان روش روش PAD را نشان می دهیم ، که همانطور که مستندات می گوید ، آخرین مشاهده معتبر را به سمت معتبر بعدی پخش می کند. ما می توانیم بررسی کنیم که همه چیز اصلاح شده است.
اگر مجبور شویم این وضعیت را به یک سکه اصلاح کنیم ، می تواند داده های گمشده بیشتری در موارد دیگر وجود داشته باشد. بنابراین ما همین خط لوله را به بقیه سکه ها انجام خواهیم داد.
طبق معمول ، ما از یک فرهنگ لغت برای پیگیری فریم های داده خود استفاده کردیم. با تأیید اینکه همه چیز همانطور که انتظار می رفت ، سلولهای زیر را اجرا می کنیم:
آخرین موردی که باید قبل از انتقال به بخش بعدی توجه کنید این است که ما برای همه سکه ها اندازه یکسانی نداریم. بیایید شروع و پایان همه سکه ها را پیگیری کنیم.
همه رمزنگاری ها در تاریخ 21 سپتامبر 2021 به پایان می رسند. با این حال ، Cardano ، Dogecoin ، IOTA ، Maker ، Stellar و Tron سوابق اولیه مختلفی دارند.
در این بخش ، ما با استفاده از فرمت مجموعه داده های ما ، برخی از نمودارهای شمعدانی را با طرح ریزی اعلام کرده ایم. سپس برای هر رمزنگاری موجود در مجموعه ، برخی از شکاف ها را در مجموعه داده خود پر کردیم. ما بیشتر از پاندا برای انجام برخی عملیات سری برای دستیابی به این هدف استفاده می کنیم. همچنین ، ما زمان بندی همه سکه ها را تعریف می کنیم.
تجسم داده ها
در این بخش ، ما با استفاده از کتابخانه های Matplotlib و Seaborn برخی از نمودارها را تهیه خواهیم کرد. ما سعی خواهیم کرد با استفاده از یک ماتریس همبستگی برای همه دارایی ها ، برخی از همبستگی ها بین سکه های خاص پیدا کنیم.
برای اهداف عملی ، ابتدا فرهنگ لغت خود را همانطور که قبلاً نامگذاری کردیم تعریف می کنیم:
سپس ما یک تابع جدید grid_coins_tl ایجاد خواهیم کرد ، که به عنوان ورودی ستون مورد نظر برای مقایسه بین سکه هایی که دارای یک زمان هستند ، مقایسه می شود.
ابتدا فهرستی حاوی رمزارزهایی که میخواهیم مطالعه کنیم، اعلام میکنیم. سپس لیست دیگری از رنگ ها وجود دارد که شبیه به روش مشابهی است که در بخش قبل انجام دادیم. در مرحله بعد، ما یک گزینه سبک دریایی را در تاریک grid فعال می کنیم. همانطور که در سلول های بعدی نشان خواهیم داد، پس زمینه با رنگ های خاکستری رنگ می شود.
اکنون یک زیرشبکه از 2 ردیف با 3 ستون را اعلام می کنیم. وقتی حلقه خود را با شاخص i شروع می کنیم، باید مراقب باشیم که در کدام قسمت از شبکه حرکت می کنیم. به همین دلیل است که چند شرط را اضافه می کنیم، بنابراین شاخص می تواند به درستی در شبکه حرکت کند و می توانیم متغیرهای col و row را برای موقعیت شبکه تعریف کنیم. با اعلام plot_we برای محور x شاخص می گیریم، سپس مقادیری را که در ورودی نمودار تابع خود مشخص کرده ایم، و در نهایت رنگ نمودار را با یکی از لیست رنگ ها مشخص می کنیم. خطوط بعدی کدها فقط تنظیماتی برای تجسم بهتر نمودار هستند.
در اینجا برخی از نتایج این تابع آورده شده است:
گزارش برمی گردد
برای تجزیه و تحلیل تغییرات قیمت برای یک دارایی، میتوانیم با تفاوت قیمت برخورد کنیم. با این حال، دارایی های مختلف مقیاس های قیمت متفاوتی را نشان می دهند، به طوری که بازده آنها به راحتی قابل مقایسه نیست. ما میتوانیم این مشکل را با محاسبه درصد تغییر قیمت که بازده نامیده میشود، حل کنیم. این بازده همزمان با درصد تغییر در سرمایه سرمایه گذاری شده ما است.
بازده به طور گسترده در امور مالی استفاده می شود، با این حال، بازده ورود به سیستم برای مدل سازی ریاضی سری های زمانی ترجیح داده می شود، زیرا آنها در طول زمان افزودنی هستند. همچنین، در حالی که بازده های معمولی نمی توانند به زیر 100- بروند، بازده های ورود محدود نمی شوند.
برای محاسبه بازده لاگ، به سادگی می توانیم لگاریتم نسبت بین دو قیمت متوالی را در نظر بگیریم.
اکنون میتوانیم نمودارهای بین بیتکوین و اتریوم را مقایسه کنیم
توجه داشته باشید که بازده ها برای دوره های نزدیک به انتهای محور ما که مربوط به سال 2021 است، همبستگی بیشتری دارند. بنابراین هر بار که بیت کوین ارزش خود را افزایش یا کاهش می دهد، اتریوم همان روند را دنبال می کند.
همبستگی بین دارایی ها
اکنون زمان آن فرا رسیده است که محاسباتی را انجام دهیم تا بتوانیم ارتباط واقعی بین بیت کوین و اتریوم را در طول زمان مشخص کنیم.
ابتدا یک چارچوب داده جدید به نام two_assets ایجاد می کنیم که فریم های داده اتریوم و بیت کوین را به هم متصل می کند. با این فریم میتوانیم متد . corr را با انجام ابتدا متد groupby مربوطه در قاب داده جدید فراخوانی کنیم.
ما اکنون همان ایده را تکرار می کنیم، اما برای همه رمزارزهای موجود. ما رفتار آنها را در طول تمام داده های موجود در سال 2021 تجزیه و تحلیل خواهیم کرد. ما به ارزش نزدیک هر دقیقه نگاه خواهیم کرد.
تابع totimestamp به ما کمک میکند تا نمایه یک تاریخ خاص را به قالب ثانیهای که در فریمهای داده دریافت کردهایم وارد کنیم. اینجاست که ما محدوده را از اول ژانویه تا 21 سپتامبر 2021 انتخاب میکنیم. پس از این، یک قاب خالی Pandas Data را اعلام میکنیم که در آن تمام فریمهای داده داراییهای فردی خود را در فاصله زمانی که قبلاً تعیین کردهایم ذخیره میکنیم. الحاق با استفاده از روش join انجام می شود. اگر با SQL آشنا باشید، متوجه خواهید شد که چرا ما به اتصال خارجی نیاز داشتیم. ما به تابع می گوییم که به همه داده های موجود بپیوندد. شما می توانید این صفحه وب را ببینید که در آن آنها با مثال های SQL و برخی از تصاویر این پیوستن را توضیح می دهند.
ما به ترسیم تمام همبستگی ها با matplotlib. pyplot ادامه می دهیم. ما به طرح خود پیکربندی بصری می دهیم تا بتوانیم دارایی ها و همبستگی ها را بهتر درک کنیم. از نمودار می بینیم که بیشترین همبستگی بین بیت کوین و اتریوم یافت می شود. همچنین، این سکه، IOTA وجود دارد که تقریباً هیچ ارتباطی با هیچ یک از رمزارزهای موجود ندارد. اما به طور متوسط، همه کریپتوها به نوعی با بقیه مرتبط هستند.
ما قبلاً برخی از همبستگیهای مهم بین برخی از کریپتوها با استفاده از Plotly به عنوان بخش گرافیکی و قاب Pandas Data برای یافتن مقادیر عددی همبستگیها پیدا کردهایم. ما از روشهای جالبی از فریمهای داده پانداها مانند loc استفاده کردیم که شامل هر دو فهرست شروع و پایان است، همانطور که میتوانید در مستندات تأیید کنید.
پیش پردازش خط لوله و تعریف مجموعه برای مرحله آموزش
ما تقریباً آماده هستیم تا وارد بخش یادگیری ماشینی پروژه شویم. اما یک مرحله واقعاً مهم وجود دارد که نمی توانیم فراموش کنیم: پیش پردازش داده ها. ما مقادیر خود را مقیاس می کنیم و هر مقدار NaN را با 0 پر می کنیم. دلیل آن این است که بیشتر این مقادیر تهی به ستون هدف تعلق دارند که در مقادیر log همانطور که قبلاً تعریف کردیم است. بنابراین قرار دادن مقادیر روی 0 به این معنی نیست که قیمت دارایی صفر است، بلکه هیچ تغییری در مورد مقدار قبلی ایجاد نشده است.
ابتدا اعلام می کنیم که دوره های مجموعه داده ما آموزش، اعتبار سنجی و مجموعه آزمایشی خواهد بود. ما نمی توانیم داده ها را به هم بزنیم، زیرا مهم است که به ترتیب داده ها احترام بگذاریم. ما یک بار دیگر از تابع totimestamp استفاده می کنیم تا بتوانیم تاریخ های خاصی را برای آموزش مدل های خود انتخاب کنیم.
از آنجا که ما می خواهیم به تمام سکه های موجود در مجموعه داده های خود تعمیم دهیم ، از تجزیه و تحلیل قبلی ، می دانستیم که آخرین رکورد شروع یک سکه از 12 آوریل 2019 آغاز شده است. ما کل ماه سپتامبر 2021 را برای مجموعه آزمون رزرو کردیم. ما این شاخص ها را در یک لیست ، برای هر مجموعه نگه می داریم.
اکنون مجموعه های آموزش و اعتبارسنجی خود را به فرهنگ لغت فرهنگ لغت تقسیم خواهیم کرد. ما داده های خود را با کتابخانه sklearn. preprocessing استاندارد می کنیم. ما کد را برای این مراحل نشان می دهیم:
ما فرهنگ لغت اصلی خود را به عنوان x_training_dics و y_training_dics نامگذاری می کنیم. ما همچنین ستون های ورودی و هدف را تعریف می کنیم. سپس شروع به حلقه حلقه می کنیم که از طریق هر رمزنگاری حرکت می کند. ما داده ها را از شاخص های خاص استخراج می کنیم ، که مواردی هستند که قبلاً تعریف کردیم. ما همچنین در همان مرحله مقادیر تهی را با صفر پر می کنیم ، همانطور که قبلاً به دلیل این فرآیند تمیز کردن داده اشاره کردیم. مرحله بعدی اولیه سازی مقیاس پذیر و اعمال آن در مجموعه ها است. کلاس Scaler یک روش FIT_TRANSFORM مفید دارد که مجموعه آموزش را به عنوان مدل برای تطبیق مقیاس دهنده می گیرد و همچنین داده ها را مطابق با نتیجه مناسب تبدیل می کند. همیشه استاندارد سازی باید با میانگین و انحراف استاندارد از مجموعه آموزش انجام شود. برای اعتبار سنجی و مجموعه های آزمایش ، ما فقط تحول را اعمال می کنیم ، اما نیازی به انجام روش مناسب دیگری نداریم. اگر می خواهید از استاندارد سازی یا عادی سازی استفاده کنید ، می توانید این لینک را بررسی کنید.
هنگامی که فرهنگ لغت حاوی سه مجموعه داده را در اختیار داشتیم ، هرکدام از آنها را به عنوان مقادیر فرهنگ لغت اصلی ذخیره کردیم ، با کلید به عنوان نام cryptocurrency.
در این مرحله از پروژه ، ما مجموعه های آموزش ، اعتبار سنجی و آزمایش را برای همه ارزهای رمزپایه موجود در مجموعه داده های خود تنظیم کرده ایم. ما برخی از مراحل پیش پردازش را برای داده های خود انجام داده ایم و اطلاعات را به عنوان یک فرهنگ لغت ذخیره می کنیم ، که به عنوان کلیدها نام رمزنگاری شده است ، و ارزش مربوطه آنها یک فرهنگ لغت دیگر است که حاوی مجموعه هایی است که قبلاً به آنها اشاره کردیم.
XGBOOST با جنگل تصادفی و رگرسیون منفرد
ما در نهایت آماده هستیم تا ML را شروع کنیم. ما برای اهداف خود دستگاه های تقویت درجه بندی را با XGBoost ایجاد خواهیم کرد و ما راهی آسان برای تغییر تمام هایپرپارامترهای مورد نظر ما با یک اجرای کارآمد ایجاد خواهیم کرد و ما برای مقایسه نتایج و انتخاب بهترین گزینه ها برای پیش بینی مقادیر رمزنگاری ، نتایج خود را ذخیره خواهیم کرد. واد
بیایید ابتدا یک کلاس استاتیک ایجاد کنیم ، که به ما این امکان را می دهد تا محصول دکارتی همه Hyperparameters خود را از آموزش خود بسازیم
بیایید توضیح دهیم و روشن کنیم که این کلاس در کد چه کاری انجام می دهد:
- در داخل کلاس ، ما یک روش استاتیک را تعریف کردیم. این بدان معناست که ما برای اجرای آنها مجبور نیستیم عملکرد را در داخل کلاس ارائه دهیم. پارامترها بعداً در توسعه ما اعلام می شوند.
- NamedTuple به ما کمک می کند تا با زمینه های نامگذاری شده تاپل ایجاد کنیم ، همانطور که در این صفحه مشاهده می کنید برای مثال های بیشتر در مورد نحوه کار با Tuples نامگذاری شده. ما ابتدا باید نامی را اعلام کنیم که هر بار که متغیر را صدا می کنیم و نام قسمتهای موجود در Tuple را نشان می دهیم (شاید متوجه شده باشید که ما یک فرهنگ لغت را به عنوان متغیر پارامترهای خود ایجاد خواهیم کرد).
- سپس ، ما یک لیست خالی به نام Runs اعلام می کنیم. پس از آن ، ما مقادیر فرهنگ لغت پارامترها را می گیریم و محصول دکارتی را بین همه آنها می سازیم. هر ترکیب در یک تاپل نامگذاری شده ذخیره می شود. و سرانجام ، آن Tuple نهایی در لیست Runs ذخیره می شود. بعداً در مرحله آموزش خود این کلاس را بیشتر خواهیم دید
اکنون زمان آن رسیده است که کلاس دیگری را برای کنترل فرایندهای آموزش خود تعریف کنیم. ما هر قسمت از روشهای فراخوانی را در این کلاس TrainingModule توضیح خواهیم داد
- __init __ (خود ، سکه): این روش تنظیم اولیه برای شروع کلاس ما است. ما برای هر سکه معیارهای آنها پیگیری خواهیم کرد. ما برخی از پارامترهایی را که کنترل داده های ما در طول آموزش را کنترل می کنیم ، تعداد اجرای اجرا مورد نظر خود را آغاز خواهیم کرد (یعنی هر بار که مجموعه متفاوتی از هایپرپارامترها را آزمایش می کنیم) و زمان آن را مدل می کند) و زمان آن را مدل می کند. برای آموزش با ترکیبی خاص از هایپرپارامترها.
- start_run (خود ، اجرا): در این مرحله ، ما زمان بندی روند آموزش را شروع می کنیم. علاوه بر این ، ویژگی Run_Params به یک اجرا تبدیل می شود که یکی از عناصر لیستی است که توسط کلاس RunBuilder ایجاد شده است. ما همچنین ضرر و ضرر اعتبار سنجی را آغاز می کنیم.
- end_run (خود): در این مرحله ، ما به روند آموزش پایان داده ایم و باید داده های به دست آمده را ذخیره کنیم. ما ابتدا زمان کل آموزش ، ضرر و ضرر اعتبار سنجی را می گیریم. در مرحله بعد ، ما یک سفارش دهنده به نام نتایج را اعلام می کنیم. ما تعداد اجرای ، ضرر ، از دست دادن اعتبار سنجی و مدت زمان اولین مقادیر این فرهنگ لغت را منتقل خواهیم کرد. علاوه بر این ، ما HyperParameters ذخیره شده در Tuple نامگذاری شده را ذخیره خواهیم کرد ، بنابراین ابتدا باید Tuple را به یک فرهنگ لغت تبدیل کنیم و سپس باید کلیدها و مقادیر را بدست آوریم. هنگامی که همه آنچه را که می خواهیم برای فرهنگ لغت نتایج بدست آوریم ، آن را به یک قاب داده Pandas تبدیل می کنیم ، که هر بار که یک ردیف جدید در طول آموزش هر ترکیبی از هایپرپارامترهای مورد نیاز ما اضافه می شود ، نمایش داده می شود.
- روش های آهنگ فقط متغیر مربوطه را به معیارها اضافه می کنند.
- برای نتیجه گیری کل توضیحات ، ما یک روش ذخیره را پیاده سازی کردیم ، بنابراین تا پایان تمام آزمایش های آموزشی می توانیم نتایج را به عنوان یک فایل CSV مشاهده کنیم ، که در بعضی از پوشه هایی که بعداً ایجاد خواهیم کرد ذخیره می شود.
اگر ما با برنامه نویسی شی گرا آشنا نباشیم ، این توضیح ممکن است کاملاً عجیب و غیرقابل تشخیص به نظر برسد. ما همچنین یک جایگزین آسان دیگر برای همان روشی که در این کد توسعه می دهیم ارائه می دهیم: GridSearchCV. می توانید مستندات کامل را در اینجا پیدا کنید. در یک پست دیگر ، ما از این روش برای تجزیه و تحلیل سایر الگوریتم های ML استفاده خواهیم کرد.
ما اکنون آماده تعریف حلقه آموزش خود هستیم. در اینجا کد است:
(اگر برخی از مشکلات برای تجسم سلول کامل وجود دارد ، همیشه می توانید کد منبع را بررسی کنید)
اکنون برخی از معیارها و عملکرد XGBregressor را وارد می کنیم. می توانید توضیح کاملی در مورد نحوه عملکرد ماشین های شیب شیب در این آموزش ، که بخشی از این Bootcamp Data Science است ، پیدا کنید.
ثانیا ، ما عملکرد FIT_COIN را ایجاد می کنیم ، که سه پارامتر دریافت می کند: متغیر پارامترهایی که برای کلاس RunBuilder ، رمزنگاری که می خواهیم تجزیه و تحلیل کنیم ، و نام پرونده پرونده CSV را که ما تا پایان کل فرآیند تولید خواهیم کرد ، استفاده خواهیم کرد.
ما اکنون کلاس TrainingModule را با سکه ای که می خواهیم مطالعه کنیم ، آغاز می کنیم. ما با یک حلقه برای تمام ترکیبات احتمالی که می توانیم از فرهنگ لغت پارامس دریافت کنیم (که هنوز هنوز اعلام نکرده ایم) ادامه می دهیم. بلوک بعدی کد HyperParameters را که می خواهیم با دستگاه Boost سازگار شویم مشخص می کند. ما این متغیرها را به متغیر مدل منتقل می کنیم. سرانجام ، ما تمام مراحل متداول را که باید برای آموزش مدل با این مجموعه خاص از هایپرپارامترها دنبال کنیم ، انجام می دهیم. ما ضرر و ضرر و زیان را می گیریم ، آنها را ردیابی می کنیم و در نهایت ، نتایج را پس از اتمام تمام اجراها ذخیره می کنیم.
اکنون زمان آن رسیده است که به اصطلاح فرهنگ لغت پارامترها را که در این بخش ذکر کرده ایم اعلام کنیم:
فقط یک مرحله آخر قبل از شروع روند آموزش: ما برخی از پوشه ها را در رایانه خود ایجاد خواهیم کرد ، بنابراین می توانیم تمام تست های خود را به روشی مرتب تر ذخیره کنیم.
ما آموزش خود را برای همه رمزنگاری ها در سلول زیر انجام خواهیم داد:
بهترین مدل ها ، پیش بینی ها و صرفه جویی در مدل ها
اکنون که همه ترکیبات احتمالی خود را داریم ، می توانیم بررسی کنیم که کدام ترکیب برای هر سکه ای که می خواهیم از نزدیک مطالعه کنیم بهترین بود. بیایید با Ethereum به عنوان نمونه شروع کنیم.
اکنون ، برای هر تقویت کننده ، ما به دنبال ترکیبی خواهیم بود که کمترین ضرر را کسب کند.
پس از دریافت این اطلاعات ، می توانیم یک مدل نهایی را برای هر تقویت کننده انتخاب کنیم
اکنون پیش بینی و ضرر می کنیم
ما همین روش را برای تقویت کننده دیگر انجام می دهیم.
صرفه جویی در مدل ها با JoBlib
وقتی به سطح دلخواه از دست دادن و پیش بینی های دقیق رسیدیم ، می توانیم مدل های خود را به شرح زیر ذخیره کنیم:
نتیجه گیری نهایی
- توجه کنید که حتی اگر ما بخش کاملی از همبستگی بین دارایی ها را اختصاص داده ایم ، ما آن بخش را در روند آموزش در نظر نگرفتیم. به همین دلیل ما در پیش بینی های اتریوم و شاید برای هر سکه ، نتایج ناکارآمد کسب کردیم. نکته مهم این تمرین موارد زیر است: اگر می خواهیم با ارزش های رمزنگاری بهتر پیش بینی کنیم ، باید کل مجموعه ارزهای رمزپایه موجود در مجموعه داده را در نظر بگیریم.
- هنوز برخی از ویژگی هایی وجود دارد که ما برای معیارها استفاده نمی کنیم ، مانند وزنهای اختصاص یافته در قاب داده Asset_df. این بیشتر مربوط به رقابت فعال Kaggle است که ما این مجموعه داده ها را بدست آوردیم. می توانید جزئیات بیشتری را در آنجا بررسی کنید.
خلاصه
در اینجا خلاصه ای از گام به گام از هر موضوعی که در این مقاله آورده ایم آورده شده است: