وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

استفاده از یادگیری ماشینی برای پیش بینی آب و هوا: قسمت 2

0 11
زمان لازم برای مطالعه: 13 دقیقه


این مقاله ادامه مقاله قبلی در یک سری سه قسمتی است روی استفاده از یادگیری ماشینی در پایتون برای پیش‌بینی دمای آب و هوا در شهر لینکلن، نبراسکا در ایالات متحده بر اساس داده‌های جمع‌آوری‌شده از سرویس‌های API Weather Underground.

در اولین مقاله از این مجموعه، استفاده از یادگیری ماشینی برای پیش بینی آب و هوا: قسمت 1، من توضیح دادم که چگونه داده ها را از Weather Underground استخراج کنیم، آن ها را تجزیه و تمیز کنیم. برای خلاصه ای از موضوعات هر یک از مقالات ارائه شده در این مجموعه، لطفاً به مقدمه مقاله قبلی مراجعه کنید.

تمرکز این مقاله، توصیف فرآیندها و مراحل مورد نیاز برای ساخت یک مدل رگرسیون خطی دقیق برای پیش‌بینی مقادیر میانگین دمای روزانه آینده بر اساس مجموعه داده‌های ساخته شده در مقاله قبلی خواهد بود. برای ساختن مدل رگرسیون خطی، استفاده از دو کتابخانه مهم پایتون را در صنعت یادگیری ماشین نشان خواهم داد: Scikit-Learn و StatsModels.

در سومین مقاله از این سری، با استفاده از یادگیری ماشینی برای پیش‌بینی آب و هوا: قسمت 3، روش فرآیندها و مراحل مورد نیاز برای ساختن یک شبکه عصبی با استفاده از TensorFlow گوگل برای پیش‌بینی میانگین دمای روزانه در آینده را توضیح می‌دهم. با استفاده از این روش می توانم نتایج را با مدل رگرسیون خطی مقایسه کنم.

آشنایی مجدد با مجموعه داده

که در این مخزن GitHub a را خواهید یافت Jupyter نوت بوک با نام فایل Weather Underground API.ipynb که اقدامات گام به گام مورد نیاز برای جمع آوری مجموعه داده ای را که در این مقاله و مقاله نهایی با آن کار خواهیم کرد، شرح می دهد. علاوه بر این، در این مخزن یک فایل ترشی Pandas DataFrame به نام پیدا خواهید کرد end-part1_df.pkl. بنابراین، اگر می‌خواهید بدون تجربه دردناک جمع‌آوری، پردازش و تمیز کردن داده‌هایی که در مقاله قبلی توضیح داده شد، ادامه دهید، فایل pickle را پایین بیاورید و از کد زیر استفاده کنید تا داده‌ها را دوباره به یک Pandas DataFrame تبدیل کنید. برای استفاده در این بخش

import pickle
with open('end-part1_df.pkl', 'rb') as fp:
    df = pickle.load(fp)

اگر خطایی دریافت کردید که بیان می کند هیچ ماژولی به نام “pandas.indexes” وجود ندارد این به این دلیل است که شما احتمالاً از یک نسخه جدیدتر از پانداها استفاده می کنید که من در زمان نوشتن این مقاله استفاده می کردم (نسخه 18.1).

برای جلوگیری از این امر، از آن زمان یک فایل CSV را در مخزن قرار داده ام که حاوی داده های انتهای قسمت 1 است که می توانید به جای آن با استفاده از کد زیر بخوانید:

import pandas as pd
df = pd.read_csv('end-part2_df.csv').set_index('date')

زمینه روی رگرسیون خطی با استفاده از حداقل مربعات معمولی

هدف رگرسیون خطی اعمال مجموعه ای از مفروضات اولیه در رابطه با روابط خطی و تکنیک های عددی برای پیش بینی یک نتیجه (Y یا متغیر وابسته) بر اساس یک یا چند پیش بینی کننده (متغیرهای مستقل X) با هدف نهایی ایجاد یک مدل (ریاضی) است. فرمول) برای پیش بینی نتایج با توجه به مقادیر پیش بینی کننده با مقداری عدم قطعیت.

فرمول تعمیم یافته برای مدل رگرسیون خطی به صورت زیر است:

    
ŷ = β0 + β1 * x1 + β2 * x2 + ... + β(p-n) x(p-n) + Ε
    

جایی که:

  • ŷ متغیر نتیجه پیش بینی شده است (متغیر وابسته)
  • xj متغیرهای پیش بینی کننده (متغیرهای مستقل) برای پارامترهای j = 1,2,…, p-1 هستند.
  • β0 قطع یا مقدار است ŷ زمانی که هر کدام xj برابر با صفر است
  • βj تغییر در است ŷ مستقر روی یک واحد تغییر در یکی از موارد مربوطه xj
  • Ε یک عبارت خطای تصادفی است که با تفاوت بین پیش بینی شده مرتبط است ŷi ارزش و واقعی yi ارزش

آخرین جمله در معادله رگرسیون خطی یک جمله بسیار مهم است. اساسی ترین شکل ساخت یک مدل رگرسیون خطی متکی است روی الگوریتمی به نام حداقل مربعات معمولی که ترکیبی از βjمقادیری که مقدار را به حداقل می رساند Ε مدت، اصطلاح.

انتخاب ویژگی ها برای مدل ما

یک فرض کلیدی مورد نیاز تکنیک رگرسیون خطی این است که شما یک رابطه خطی بین متغیر وابسته و هر متغیر مستقل دارید. یک راه برای ارزیابی خطی بودن بین متغیر مستقل ما که در حال حاضر میانگین دما خواهد بود و سایر متغیرهای مستقل محاسبه ضریب همبستگی پیرسون.

ضریب همبستگی پیرسون (r) اندازه‌گیری مقدار همبستگی خطی بین آرایه‌های طول مساوی است که مقداری از 1- تا 1 را به دست می‌دهد. مقادیر همبستگی از 0 تا 1 نشان دهنده همبستگی مثبت فزاینده قوی است. منظور من این است که وقتی مقادیر یک سری داده به طور همزمان با مقادیر سری دیگر افزایش می‌یابند، دو سری داده به طور مثبت همبستگی دارند و وقتی هر دو با قدر فزاینده‌ای برابر بالا می‌روند، مقدار همبستگی پیرسون به 1 نزدیک می‌شود.

مقادیر همبستگی از 0 تا -1 به صورت معکوس یا منفی گفته می شود که وقتی مقادیر یک سری افزایش می یابد مقادیر متناظر در سری مقابل کاهش می یابد اما با تغییر اندازه بین سری ها برابر می شود (با جهت مخالف). مقدار همبستگی به -1 نزدیک خواهد شد. مقادیر همبستگی پیرسون که نزدیک به دو طرف صفر قرار دارند، نشان‌دهنده داشتن یک رابطه خطی ضعیف هستند و با نزدیک شدن مقدار به صفر ضعیف‌تر می‌شوند.

نظرات در میان آماردانان و کتاب های آمار متفاوت است روی مرزهای واضح برای سطوح قدرت یک ضریب همبستگی. با این حال، متوجه شده ام که مجموعه ای از طبقه بندی های پذیرفته شده برای نقاط قوت همبستگی به شرح زیر است:

ارزش همبستگی تفسیر
0.8 – 1.0 بسیار قوی
0.6 – 0.8 قوی
0.4 – 0.6 در حد متوسط
0.2 – 0.4 ضعیف
0.0 – 0.2 خیلی ضعیف

برای ارزیابی همبستگی در این داده ها، من با آن تماس خواهم گرفت corr() متد شی Pandas DataFrame. به این زنجیر شده corr() فراخوانی متد سپس می‌توانم ستون مورد علاقه (“meantempm”) را انتخاب کنم و دوباره فراخوانی متد دیگری را زنجیره کنم sort_values() روی شیء حاصل از سری پانداها. این مقادیر همبستگی را از بیشترین همبستگی منفی به مثبت ترین همبستگی خروجی می دهد.

df.corr()(('meantempm')).sort_values('meantempm')
meantempm
maxpressurem_1 -0.519699
maxpressurem_2 -0.425666
maxpressurem_3 -0.408902
meanpressurem_1 -0.365682
فشار متوسط_2 -0.269896
meanpressurem_3 -0.263008
minpressurem_1 -0.201003
حداقل رطوبت_1 -0.148602
حداقل رطوبت_2 -0.143211
حداقل رطوبت_3 -0.118564
minpressurem_2 -0.104455
minpressurem_3 -0.102955
precipm_2 0.084394
precipm_1 0.086617
precipm_3 0.098684
حداکثر رطوبت_1 0.132466
حداکثر رطوبت_2 0.151358
حداکثر رطوبت_3 0.167035
maxdewptm_3 0.829230
maxtempm_3 0.832974
mindewptm_3 0.833546
meandewptm_3 0.834251
mintempm_3 0.836340
maxdewptm_2 0.839893
meandewptm_2 0.848907
mindewptm_2 0.852760
mintempm_2 0.854320
meantempm_3 0.855662
maxtempm_2 0.863906
meantempm_2 0.881221
maxdewptm_1 0.887235
meandewptm_1 0.896681
mindewptm_1 0.899000
mintempm_1 0.905423
maxtempm_1 0.923787
meantempm_1 0.937563
mintempm 0.973122
maxtempm 0.976328
meantempm 1.000000

در انتخاب ویژگی هایی که در این مدل رگرسیون خطی گنجانده شود، می خواهم خطا کنم روی از طرفی در گنجاندن متغیرهایی با ضرایب همبستگی متوسط ​​یا پایین‌تر، سهل‌انگیزتر است. بنابراین من ویژگی هایی را که دارای مقادیر همبستگی کمتر از مقدار مطلق 0.6 هستند حذف خواهم کرد. همچنین، از آنجایی که متغیرهای «mintempm» و «maxtempm» برای همان روز متغیر پیش‌بینی «meantempm» هستند، من آن‌ها را نیز حذف خواهم کرد (یعنی اگر از قبل حداقل و حداکثر دما را می‌دانم، پس از قبل پاسخی را دارم. پیش بینی).

با این اطلاعات، اکنون می توانم یک DataFrame جدید ایجاد کنم که فقط شامل متغیرهای مورد علاقه من باشد.

predictors = ('meantempm_1',  'meantempm_2',  'meantempm_3', 
              'mintempm_1',   'mintempm_2',   'mintempm_3',
              'meandewptm_1', 'meandewptm_2', 'meandewptm_3',
              'maxdewptm_1',  'maxdewptm_2',  'maxdewptm_3',
              'mindewptm_1',  'mindewptm_2',  'mindewptm_3',
              'maxtempm_1',   'maxtempm_2',   'maxtempm_3')
df2 = df(('meantempm') + predictors)

تجسم روابط

از آنجایی که اکثر مردم، از جمله من، بسیار به دیدن تصاویر برای ارزیابی و تأیید الگوها عادت دارند، من هر یک از این پیش‌بینی‌کننده‌های انتخابی را نمودار می‌کنم تا به خودم ثابت کنم که در واقع یک رابطه خطی وجود دارد. برای این کار از matplotlib استفاده خواهم کرد پای طرح مدول.

برای این نمودار، می‌خواهم متغیر وابسته “meantempm” محور y ثابت در امتداد تمام نمودارهای 18 متغیر پیش‌بین باشد. یکی از راه‌های انجام این کار، ایجاد شبکه‌ای از نمودارها است. پانداها با یک تابع رسم مفیدی به نام the ارائه می شوند scatter_plot()، اما من معمولاً فقط زمانی از آن استفاده می کنم که فقط تا حدود 5 متغیر وجود داشته باشد زیرا نمودار را به یک ماتریس N x N تبدیل می کند (در مورد ما 18 x 18) که دیدن جزئیات در داده ها دشوار می شود. در عوض، من یک ساختار شبکه ای با شش ردیف از سه ستون ایجاد می کنم تا از وضوح در نمودارها جلوگیری کنم.

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline


plt.rcParams('figure.figsize') = (16, 22)



fig, axes = plt.subplots(nrows=6, ncols=3, sharey=True)



arr = np.array(predictors).reshape(6, 3)



for row, col_arr in enumerate(arr):
    for col, feature in enumerate(col_arr):
        axes(row, col).scatter(df2(feature), df2('meantempm'))
        if col == 0:
            axes(row, col).set(xlabel=feature, ylabel='meantempm')
        else:
            axes(row, col).set(xlabel=feature)
plt.show()

نمودار پراکندگی meantempm

از نمودارهای بالا قابل تشخیص است که همه متغیرهای پیش بینی باقی مانده یک رابطه خطی خوب با متغیر پاسخ (“meantempm”) نشان می دهند. علاوه بر این، همچنین شایان ذکر است که روابط همه به طور یکنواخت به صورت تصادفی توزیع شده اند. منظور من این است که به نظر می رسد تنوع نسبتاً مساوی در گسترش مقادیر بدون هر گونه بادکش یا مخروط وجود دارد. توزیع تصادفی یکنواخت گسترش در امتداد نقاط نیز یکی دیگر از فرضیات مهم رگرسیون خطی با استفاده از آن است حداقل مربعات معمولی الگوریتم

استفاده از رگرسیون گام به گام برای ساخت یک مدل قوی

یک مدل رگرسیون خطی قوی باید از آزمون‌های آماری برای انتخاب پیش‌بینی‌کننده‌های معنادار و معنی‌دار آماری استفاده کند. برای انتخاب ویژگی های آماری مهم، از پایتون استفاده می کنم statsmodels کتابخانه با این حال، قبل از اینکه من به اجرای عملی استفاده از statsmodels کتابخانه من می خواهم یک قدم به عقب برگردم و برخی از معنی و هدف نظری اتخاذ این رویکرد را توضیح دهم.

یکی از جنبه‌های کلیدی استفاده از روش‌های آماری مانند رگرسیون خطی در یک پروژه تحلیلی، ایجاد و آزمایش آزمون‌های فرضیه برای تأیید اهمیت مفروضات ساخته شده در مورد داده‌های مورد مطالعه است. آزمون‌های فرضیه‌های متعددی برای آزمایش استحکام یک مدل رگرسیون خطی در برابر مفروضات مختلف ایجاد شده‌اند. یکی از این آزمون‌ها، ارزیابی اهمیت هر یک از متغیرهای پیش‌بینی‌کننده است.

تعریف رسمی آزمون فرضیه برای معناداری الف βj پارامترها به شرح زیر است:

  • H0: βj = 0، فرضیه صفر بیان می کند که پیش بینی کننده تاثیری ندارد روی مقدار متغیر نتیجه
  • Ha: βj ≠ 0، فرضیه جایگزین این است که پیش بینی کننده تأثیر معنی داری دارد روی مقدار متغیر نتیجه

با استفاده از آزمون های احتمال برای ارزیابی احتمال هر یک βj فراتر از شانس تصادفی ساده در یک آستانه انتخاب شده قابل توجه است Α ما می‌توانیم در انتخاب متغیرهایی که شامل مدلی قوی‌تر می‌شوند، دقیق‌تر عمل کنیم.

با این حال، در بسیاری از مجموعه‌های داده می‌تواند تعاملاتی بین متغیرها وجود داشته باشد که می‌تواند منجر به تفسیرهای نادرست از این آزمون‌های فرضیه ساده شود. برای آزمایش اثرات متقابل روی اهمیت هر یک از متغیرها در مدل رگرسیون خطی، اغلب از تکنیکی به نام رگرسیون گام به گام استفاده می شود. با استفاده از رگرسیون گام به گام متغیرهایی را از مدل اضافه یا حذف می کنید و اهمیت آماری هر متغیر را ارزیابی می کنید. روی مدل حاصل

در این مقاله از تکنیکی به نام استفاده خواهم کرد حذف عقب مانده، جایی که من با یک مدل کلی کاملاً بارگذاری شده شروع می کنم که شامل همه متغیرهای مورد علاقه من است.

حذف به عقب به صورت زیر عمل می کند:

  1. سطح معناداری را انتخاب کنید Α که برای تعیین اینکه آیا یک متغیر باید در مدل بماند یا خیر، فرضیه خود را بر اساس آن آزمایش می کنید
  2. مدل را با تمام متغیرهای پیش بینی کننده مطابقت دهید
  3. مقادیر p را ارزیابی کنید βj ضرایب و برای یکی با بیشترین مقدار p، اگر p-value > Α به مرحله 4 بروید، اگر نه، مدل نهایی خود را دارید
  4. پیش بینی شناسایی شده در مرحله 3 را حذف کنید
  5. دوباره مدل را جابجا کنید، اما این بار بدون متغیر حذف شده و به مرحله 3 برگردید

بنابراین، بدون تأخیر بیشتر، اجازه دهید این مدل تعمیم یافته کاملاً بارگذاری شده را با استفاده از آن بسازیم statsmodels به دنبال مراحل بالا


import statsmodels.api as sm


X = df2(predictors)
y = df2('meantempm')


X = sm.add_constant(X)
X.ix(:5, :5)
پایان meantempm_1 meantempm_2 meantempm_3 mintempm_1
تاریخ
04/01/2015 1.0 -4.0 -6.0 -6.0 -13.0
05/01/2015 1.0 -14.0 -4.0 -6.0 -18.0
06/01/2015 1.0 -9.0 -14.0 -4.0 -14.0
07/01/2015 1.0 -10.0 -9.0 -14.0 -14.0
08/01/2015 1.0 -16.0 -10.0 -9.0 -19.0

alpha = 0.05


model = sm.OLS(y, X).fit()


model.summary()

این summary() تماس داده های زیر را در شما تولید می کند Jupyter notebook:

نتایج رگرسیون OLS
بخش متغیر: meantempm R-squared: 0.895
مدل: OLS صفت R-squared: 0.893
روش: کمترین مربعات آمار F: 462.7
تاریخ: پنجشنبه، 16 نوامبر 2017 مشکل (آمار F): 0.00
زمان: 20:55:25 احتمال ورود: -2679.2
شماره مشاهدات: 997 AIC: 5396.
باقیمانده های Df: 978 BIC: 5490.
مدل Df: 18
نوع کوواریانس: غیر مستحکم
ضریب std err تی P>|t| (0.025 0.975)
پایان 1.0769 0.526 2.049 0.041 0.046 2.108
meantempm_1 0.1047 0.287 0.364 0.716 -0.459 0.669
meantempm_2 0.3512 0.287 1.225 0.221 -0.211 0.914
meantempm_3 -0.1084 0.286 -0.379 0.705 -0.669 0.453
mintempm_1 0.0805 0.149 0.539 0.590 -0.213 0.373
mintempm_2 -0.2371 0.149 -1.587 0.113 -0.530 0.056
mintempm_3 0.1521 0.148 1.028 0.304 -0.138 0.443
meandewptm_1 -0.0418 0.138 -0.304 0.761 -0.312 0.228
meandewptm_2 -0.0121 0.138 -0.088 0.930 -0.282 0.258
meandewptm_3 -0.0060 0.137 -0.044 0.965 -0.275 0.263
maxdewptm_1 -0.1592 0.091 -1.756 0.079 -0.337 0.019
maxdewptm_2 -0.0113 0.091 -0.125 0.900 -0.189 0.166
maxdewptm_3 0.1326 0.089 1.492 0.136 -0.042 0.307
mindewptm_1 0.3638 0.084 4.346 0.000 0.200 0.528
mindewptm_2 -0.0119 0.088 -0.136 0.892 -0.184 0.160
mindewptm_3 -0.0239 0.086 -0.279 0.780 -0.192 0.144
maxtempm_1 0.5042 0.147 3.438 0.001 0.216 0.792
maxtempm_2 -0.2154 0.147 -1.464 0.143 -0.504 0.073
maxtempm_3 0.0809 0.146 0.555 0.579 -0.205 0.367
Omnibus: 13.252 دوربین واتسون: 2.015
پروب (Omnibus): 0.001 Jarque-Bera (JB): 17.097
کج: -0.163 مشکل (JB): 0.000194
کورتوز: 3.552 شرط خیر 291.

خوب، من متوجه شدم که تماس به summary() فقط تعداد زیادی اطلاعات روی صفحه نمایش داده شد. غرق نشو! ما فقط تمرکز می کنیم روی حدود 2-3 مقدار در این مقاله:

  1. P>|t| – این مقدار p است که در بالا ذکر کردم و برای ارزیابی آزمون فرضیه استفاده خواهم کرد. این مقداری است که ما می خواهیم برای تعیین اینکه آیا یک متغیر را در این تکنیک حذف گام به گام به عقب حذف کنیم استفاده کنیم.
  2. R-squared – معیاری که بیان می کند که مدل ما چقدر از واریانس کلی در نتیجه را می تواند توضیح دهد.
  3. صفت R-squared – همان R-squared، اما برای رگرسیون خطی چندگانه، این مقدار بر اساس تعداد متغیرهایی که برای توضیح سطح اضافه برازش گنجانده شده اند، جریمه ای برای آن اعمال می شود.

این بدان معنا نیست که مقادیر دیگر در این خروجی بی ارزش هستند، بلکه برعکس. با این حال، آنها را لمس می کنند روی ویژگی‌های باطنی‌تر رگرسیون خطی که اکنون زمان کافی برای ورود به آن را نداریم. برای توضیح کامل آنها شما را به یک کتاب درسی رگرسیون پیشرفته مانند کتاب کاتنر موکول می کنم مدل های رگرسیون خطی کاربردی، ویرایش پنجم. به همان خوبی statsmodels مستندات.






X = X.drop('meandewptm_3', axis=1)


model = sm.OLS(y, X).fit()

model.summary()
نتایج رگرسیون OLS
بخش متغیر: meantempm R-squared: 0.895
مدل: OLS صفت R-squared: 0.893
روش: کمترین مربعات آمار F: 490.4
تاریخ: پنجشنبه، 16 نوامبر 2017 مشکل (آمار F): 0.00
زمان: 20:55:41 احتمال ورود: -2679.2
شماره مشاهدات: 997 AIC: 5394.
باقیمانده های Df: 979 BIC: 5483.
مدل Df: 17
نوع کوواریانس: غیر مستحکم
ضریب std err تی P>|t| (0.025 0.975)
پایان 1.0771 0.525 2.051 0.041 0.046 2.108
meantempm_1 0.1040 0.287 0.363 0.717 -0.459 0.667
meantempm_2 0.3513 0.286 1.226 0.220 -0.211 0.913
meantempm_3 -0.1082 0.286 -0.379 0.705 -0.669 0.452
mintempm_1 0.0809 0.149 0.543 0.587 -0.211 0.373
mintempm_2 -0.2371 0.149 -1.588 0.113 -0.530 0.056
mintempm_3 0.1520 0.148 1.028 0.304 -0.138 0.442
meandewptm_1 -0.0419 0.137 -0.305 0.761 -0.312 0.228
meandewptm_2 -0.0121 0.138 -0.088 0.930 -0.282 0.258
maxdewptm_1 -0.1592 0.091 -1.757 0.079 -0.337 0.019
maxdewptm_2 -0.0115 0.090 -0.127 0.899 -0.189 0.166
maxdewptm_3 0.1293 0.048 2.705 0.007 0.036 0.223
mindewptm_1 0.3638 0.084 4.349 0.000 0.200 0.528
mindewptm_2 -0.0119 0.088 -0.135 0.892 -0.184 0.160
mindewptm_3 -0.0266 0.058 -0.456 0.648 -0.141 0.088
maxtempm_1 0.5046 0.146 3.448 0.001 0.217 0.792
maxtempm_2 -0.2154 0.147 -1.465 0.143 -0.504 0.073
maxtempm_3 0.0809 0.146 0.556 0.579 -0.205 0.367
Omnibus: 13.254 دوربین واتسون: 2.015
پروب (Omnibus): 0.001 Jarque-Bera (JB): 17.105
کج: -0.163 مشکل (JB): 0.000193
کورتوز: 3.553 شرط خیر 286.

با توجه به زمان مطالعه شما و در تلاش برای نگه داشتن مقاله در طول معقول، می خواهم چرخه های حذف باقیمانده مورد نیاز برای ساخت هر مدل جدید را حذف کنم، مقادیر p را ارزیابی کرده و کمترین مقدار قابل توجه را حذف کنم. در عوض من مستقیماً به آخرین چرخه می پرم و مدل نهایی را در اختیار شما قرار می دهم. پس از همه، هدف اصلی در اینجا توصیف آن بود process و استدلال پشت آن

در زیر خروجی مدل نهایی را که من همگرا کردم را خواهید دید روی پس از اعمال تکنیک حذف معکوس. می‌توانید از خروجی ببینید که همه پیش‌بینی‌کننده‌های باقی‌مانده دارای p-value به‌طور قابل‌توجهی کمتر از ما هستند Α از 0.05. چیز دیگری که ارزش توجه دارد مقادیر مربع R در خروجی نهایی است. دو چیز در اینجا باید به آن توجه شود (1) R-squared و Adj. مقادیر R-squared هر دو برابر هستند که نشان می دهد کمترین خطری وجود دارد که مدل ما با متغیرهای بیش از حد برازش داده شود و (2) مقدار 0.894 به گونه ای تفسیر می شود که مدل نهایی ما حدود 90٪ از تغییرات مشاهده شده را در متغیر نتیجه توضیح می دهد. ، “meantempm”.

model = sm.OLS(y, X).fit()
model.summary()
نتایج رگرسیون OLS
بخش متغیر: meantempm مربع R: 0.894
مدل: OLS صفت R-squared: 0.894
روش: کمترین مربعات آمار F: 1196.
تاریخ: پنجشنبه، 16 نوامبر 2017 مشکل (آمار F): 0.00
زمان: 20:55:47 احتمال ورود: -2681.7
شماره مشاهدات: 997 AIC: 5379.
باقیمانده های Df: 989 BIC: 5419.
مدل Df: 7
نوع کوواریانس: غیر مستحکم
ضریب std err تی P>|t| (0.025 0.975)
پایان 1.1534 0.411 2.804 0.005 0.346 1.961
mintempm_1 0.1310 0.053 2.458 0.014 0.026 0.236
mintempm_2 -0.0964 0.037 -2.620 0.009 -0.169 -0.024
mintempm_3 0.0886 0.041 2.183 0.029 0.009 0.168
maxdewptm_1 -0.1939 0.047 -4.117 0.000 -0.286 -0.101
maxdewptm_3 0.1269 0.040 3.191 0.001 0.049 0.205
mindewptm_1 0.3352 0.051 6.605 0.000 0.236 0.435
maxtempm_1 0.5506 0.024 22.507 0.000 0.503 0.599
Omnibus: 13.123 دوربین واتسون: 1.969
پروب (Omnibus): 0.001 Jarque-Bera (JB): 16.871
کج: -0.163 مشکل (JB): 0.000217
کورتوز: 3.548 شرط خیر 134.

استفاده از ماژول رگرسیون خطی SciKit-Learn برای پیش بینی آب و هوا

اکنون که مراحل انتخاب پیش بینی کننده های معنی دار آماری (ویژگی ها) را طی کرده ایم، می توانیم از SciKit-Learn برای ایجاد یک مدل پیش بینی و آزمایش توانایی آن در پیش بینی دمای متوسط. SciKit-Learn یک کتابخانه یادگیری ماشین بسیار خوب است که به طور گسترده در صنعت و دانشگاه استفاده می شود. یکی از چیزهایی که در مورد SciKit-Learn بسیار چشمگیر است این است که یک API بسیار سازگار از “مناسب”، “پیش بینی” و “تست” را در بسیاری از تکنیک ها و الگوریتم های عددی حفظ می کند که استفاده از آن را بسیار ساده می کند. علاوه بر این طراحی API سازگار، SciKit-Learn همچنین دارای چندین ابزار مفید برای پردازش داده‌های رایج در بسیاری از پروژه‌های یادگیری ماشین است.

ما با استفاده از SciKit-Learn برای تقسیم مجموعه داده های خود به مجموعه های آزمایشی و آموزشی با وارد کردن train_test_split() تابع از sklearn.model_selection مدول. مجموعه داده‌های آموزشی و آزمایشی را به 80% آموزش و 20% تست تقسیم می‌کنم و یک random_state از 12 تا اطمینان حاصل شود که شما همان انتخاب تصادفی داده ها را مانند من دریافت خواهید کرد. این random_state پارامتر برای تکرارپذیری نتایج بسیار مفید است.

from sklearn.model_selection import train_test_split

X = X.drop('const', axis=1)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=12)

اقدام بعدی ساخت مدل رگرسیون با استفاده از مجموعه داده آموزشی است. برای انجام این کار خواهم کرد import و استفاده کنید LinearRegression کلاس از sklearn.linear_model مدول. همانطور که قبلاً ذکر شد، scikit-learn با پیاده‌سازی یک نکته مشترک، امتیازهای مهمی را به دست می‌آورد fit() و predict() API در بسیاری از تکنیک های عددی خود که استفاده از کتابخانه را بسیار کاربر پسند می کند.

from sklearn.linear_model import LinearRegression

regressor = LinearRegression()


regressor.fit(X_train, y_train)


prediction = regressor.predict(X_test)


from sklearn.metrics import mean_absolute_error, median_absolute_error
print("The Explained Variance: %.2f" % regressor.score(X_test, y_test))
print("The Mean Absolute Error: %.2f degrees celsius" % mean_absolute_error(y_test, prediction))
print("The Median Absolute Error: %.2f degrees celsius" % median_absolute_error(y_test, prediction))
The Explained Variance: 0.90
The Mean Absolute Error: 2.69 degrees celsius
The Median Absolute Error: 2.17 degrees celsius

همانطور که در چند خط کد بالا می بینید استفاده از scikit-learn برای ساخت یک مدل پیش بینی رگرسیون خطی بسیار ساده است. اینجا واقعاً جایی است که کتابخانه در توانایی خود در تطبیق آسان یک مدل و پیش بینی در مورد یک نتیجه مورد علاقه می درخشد.

برای به دست آوردن درک تفسیری از اعتبار مدل ها از مدل رگرسیون استفاده کردم score() تابع برای تعیین اینکه مدل قادر به توضیح حدود 90 درصد از واریانس مشاهده شده در متغیر نتیجه یعنی دمای متوسط ​​است. علاوه بر این، من استفاده کردم mean_absolute_error() و median_absolute_error() از sklearn.metrics ماژول برای تعیین آن روی میانگین مقدار پیش بینی شده حدود 3 درجه سانتیگراد خاموش است و نیمی از مواقع حدود 2 درجه سانتیگراد خاموش است.

منابع

آیا می خواهید ابزارها، تکنیک های یادگیری ماشینی و تجزیه و تحلیل داده های مورد استفاده در این آموزش را یاد بگیرید؟ در اینجا چند منبع عالی برای شروع شما وجود دارد:

نتیجه

در این مقاله، روش استفاده از الگوریتم یادگیری ماشین رگرسیون خطی را برای پیش‌بینی میانگین دمای هوا در آینده بر اساس داده‌های جمع‌آوری‌شده در مقاله قبلی نشان دادم. من روش استفاده از آن را نشان دادم statsmodels کتابخانه ای برای انتخاب پیش بینی کننده های آماری معنی دار بر اساس روش های آماری صحیح. سپس از این اطلاعات برای برازش یک مدل پیش‌بینی مبتنی بر یک زیر مجموعه آموزشی با استفاده از Scikit-Learn استفاده کردم. LinearRegression کلاس با استفاده از این مدل برازش شده، سپس می‌توانم مقادیر مورد انتظار را بر اساس ورودی‌های یک زیرمجموعه آزمایشی پیش‌بینی کنم و دقت پیش‌بینی را ارزیابی کنم، که نشان‌دهنده مقدار معقولی از دقت است.

من می خواهم از شما برای خواندن مقاله من تشکر کنم و امیدوارم که منتظر مقاله نهایی آینده در این مجموعه یادگیری ماشینی باشید که در آن روش ساخت یک شبکه عصبی برای پیش بینی دمای هوا را توضیح می دهم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-29 02:44:05

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید