آموزش پایتون: Pickling and Scaling
در آموزش های پیشین یادگیری ماشین با Python، ما پیش بینی را با استفاده از رگرسیون انجام دادیم و سپس با ماژول Matplotlib این پیش بینی را صورت دادیم. اکنون در اینجا درباره بعضی مراحل بعدی صحبت خواهیم کرد.
به یاد می آورم، اولین بار که من در تلاش بودم تا در مورد یادگیری ماشین بیاموزم، بسیاری از نمونه های تشریحی تنها تا آموزش و آزمون را پوشش می دادند، و سپس کاملا و بیکباره به قسمت پیش بینی پرش می کردند. از منابعی که آموزش، آزمون و پیش بینی بخشی را انجام می دادند، من حتی یک مورد را پیدا نکردم که الگوریتم را به وضوح شرح دهد. با مثال ها، و داده های کلی که اساسا بسیار کوچک هستند، بنابراین روند آموزش، آزمون و پیش بینی نسبتا سریع است. با این حال، در دنیای واقعی، داده ها احتمالا بزرگتر هستند و پردازش بسیار طولانی تر است. از آنجا که هیچ کس واقعا درباره این مرحله مهم صحبت نکرده بود، در اینجا قصد من این است که مطالب اطلاعاتی در مورد پردازش زمان و صرفه جویی در الگوریتم شما را شامل شود.
در حالی که طبقه بندی یادگیری ماشین ما چند ثانیه طول می کشد تا آموزش دهد، مواردی وجود دارد که ساعت ها یا حتی روزها برای آموزش یک طبقه بندی وقت صرف می کند. تصور کنید که هر روز شما می خواهید پیش بینی داده ها یا هر چیز دیگری را انجام دهید. تکرار یکسره این روند لازم نیست، زیرا ما می توانیم با استفاده از ماژول زیر، طبقه بندی را ذخیره کنیم. ابتدا اطمینان حاصل کنید که وارد آن شده اید:
import pickle
با این ماژول، شما می توانید هر شی پایتون، مانند طبقه بندی ها را ذخیره کنید. پس از تعریف، آموزش، و آزمون طبقه بندی خود، آن را اضافه کنید:
with open('linearregression.pickle','wb') as f: pickle.dump(clf, f)
اکنون، اسکریپت را دوباره اجرا کنید و آن را بررسی نمایید. باید خطایابی را انجام دهید که اطلاعات سریال برای طبقه بندی است. حالا همه چیزهایی که باید برای استفاده از طبقه بندی انجام دهید، بارگیری در این ماژول است، ذخیره آن به صورت CLF، و استفاده از آن به صورت طبیعی. مثلا:
pickle_in = open('linearregression.pickle','rb') clf = pickle.load(pickle_in)
در کد:
import Quandl, math import numpy as np import pandas as pd from sklearn import preprocessing, cross_validation, svm from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt from matplotlib import style import datetime import pickle style.use('ggplot') df = Quandl.get("WIKI/GOOGL") df = df[['Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume']] df['HL_PCT'] = (df['Adj. High'] - df['Adj. Low']) / df['Adj. Close'] * 100.0 df['PCT_change'] = (df['Adj. Close'] - df['Adj. Open']) / df['Adj. Open'] * 100.0 df = df[['Adj. Close', 'HL_PCT', 'PCT_change', 'Adj. Volume']] forecast_col = 'Adj. Close' df.fillna(value=-99999, inplace=True) forecast_out = int(math.ceil(0.1 * len(df))) df['label'] = df[forecast_col].shift(-forecast_out) X = np.array(df.drop(['label'], 1)) X = preprocessing.scale(X) X_lately = X[-forecast_out:] X = X[:-forecast_out] df.dropna(inplace=True) y = np.array(df['label']) X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2) #COMMENTED OUT: ##clf = svm.SVR(kernel='linear') ##clf.fit(X_train, y_train) ##confidence = clf.score(X_test, y_test) ##print(confidence) pickle_in = open('linearregression.pickle','rb') clf = pickle.load(pickle_in) forecast_set = clf.predict(X_lately) df['Forecast'] = np.nan last_date = df.iloc[-1].name last_unix = last_date.timestamp() one_day = 86400 next_unix = last_unix + one_day for i in forecast_set: next_date = datetime.datetime.fromtimestamp(next_unix) next_unix += 86400 df.loc[next_date] = [np.nan for _ in range(len(df.columns)-1)]+[i] df['Adj. Close'].plot() df['Forecast'].plot() plt.legend(loc=4) plt.xlabel('Date') plt.ylabel('Price') plt.show()
توجه داشته باشید که ما از تعریف اصلی طبقه بندی شده استفاده کردیم و در عوض مقدار در آن ذخیره شد، و بنابراین روش کار به این صورت است که بارگیری می کنیم. به همین سادگی!
سرانجام، در حالی که ما به دنبال شرایط کارآمد بودن و صرفه جویی در وقت هستیم، می خواهم پارادایم نسبتا جدیدی را در چند سال اخیر گسترش یافته است، به دست بیاورم؛ و این کامپیوترهای موقت فوق العاده است. با افزایش خدمات میزبانی تحت مجوز، مانند Amazon Webservices) AWS)، دیجیتال اقیانوس، و Linode، شما می توانید زمان را بخرید. سرورهای مجازی را می توان در حدود 60 ثانیه تنظیم کرد، ماژول های مورد نیاز در این آموزش می توانند در حدود 15 دقیقه یا بیشتر در یک سرعت نسبتا آرام اجرا شوند. شما می توانید یک اسکریپت پوسته یا چیزی برای سرعت بخشیدن آن نیز بنویسید. در نظر بگیرید که شما نیاز به پردازش زیادی دارید و از ابتدا کامپیوتر پیشرفته با سرعت بالایی ندارید یا در حال کار بر روی یک لپ تاپ هستید. هیچ مشکلی نیست، فقط یک سرور را امتحان کنید.
تهیه از: بهزاد سرهادی
کلیه سرفصل های برنامه نویسی: اینجا کلیک کنید.
شناسه تلگرام مدیر سایت: SubBasin@
نشانی ایمیل: behzadsarhadi@gmail.com
(سوالات تخصصی را در گروه تلگرام ارسال کنید)
_______________________________________________________
نظرات (۰)