آموزش پایتون: Pickling and Scaling :: بیسین - سایت تخصصی مهندسی آب

آموزش پایتون: 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 دقیقه یا بیشتر در یک سرعت نسبتا آرام اجرا شوند. شما می توانید یک اسکریپت پوسته یا چیزی برای سرعت بخشیدن آن نیز بنویسید. در نظر بگیرید که شما نیاز به پردازش زیادی دارید و از ابتدا کامپیوتر پیشرفته با سرعت بالایی ندارید یا در حال کار بر روی یک لپ تاپ هستید. هیچ مشکلی نیست، فقط یک سرور را امتحان کنید.


تهیه از: بهزاد سرهادی

 کلیه سرفصل های برنامه نویسی: اینجا کلیک کنید.





نظرات (۰)

فرم ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی


درباره بهترين هاي بيسيـــن بدانيد...

Bird

يکي از مهمترين اهداف اين سايت تهيه آموزش هاي روان از ابزارهاي کاربردي علوم آب است.

اهميت مطالعات محيطي با ابزارهاي نوين در چيست؟

امروز با فارغ التحصيلي جمع کثير دانشجويان سالهاي گذشته و حال، با گذر از کمي گرايي ديگر صرف وجود مدارک دانشگاهي حرف اول را در بازار کار نمي زند؛ بلکه سنجش ديگري ملاک؛ و شايسته سالاري به ناچار! باب خواهد شد. يکي از مهم ترين لوازم توسعه علمي در هر کشور و ارائه موضوعات ابتکاري، بهره گيري از ابزار نوين است، بيسين با همکاري مخاطبان مي تواند در حيطه علوم آب به معرفي اين مهم بپردازد.

جستجو در بيسين


بیسین - سایت تخصصی مهندسی آب

سایت مهندسی آب بیسین با معرفی مهم ترین و کاربردی ترین نرم افزارها و مدل های شبیه سازی در حیطه مهندسی آب، تلاش به تهیه خدمات یکپارچه و محلی از محاسبات هیدرولوژیکی و هیدرولیکی می کند

W3Schools


اطلاعات سايت

  • behzadsarhadi@gmail.com
  • بهزاد سرهادي
  • شناسه تلگرام: SubBasin
  • شماره واتساپ: 09190622992-098
  • شماره تماس: 09190622992-098

W3Schools