آزمایش فرضیات رگرسیون خطی در پایتون
بررسی فرضیه های مدل مانند نظر دادن به کد است. همه باید اغلب این کار را انجام دهند، اما گاهی اوقات در واقعیت نادیده گرفته می شوند. عدم انجام هر یک از این دو می تواند منجر به سردرگمی طولانی مدت، افتادن در دردسری بزرگ شود و می تواند پیامد های بسیار جدی ناشی از عدم تفسیر صحیح مدل داشته باشد.
رگرسیون خطی یک ابزار اساسی است که مزایای مشخصی نسبت به سایر الگوریتم های رگرسیون دارد. به دلیل سادگی اش، این یک الگوریتم فوق العاده سریع برای آموزش است، بنابراین معمولا آن را به یک الگوریتم پایه خوب برای سناریو های رگرسیون رایج تبدیل می کند. مهم تر از آن، مدل هایی که با رگرسیون خطی آموزش داده شده اند، قابل تفسیر ترین نوع مدل های رگرسیون موجود هستند – به این معنی که انجام اقدام هایی از نتایج یک مدل رگرسیون خطی آسان تر است. با این حال، اگر فرضیه ها برآورده نشوند، تفسیر نتایج همیشه معتبر نخواهد بود. این، بسته به برنامه می تواند بسیار خطرناک باشد. این پست حاوی کد هایی برای آزمایش های فرضیه های رگرسیون خطی و مثال هایی با مجموعه داده های واقعی و مجموعه داده های اسباب بازی است.
داده
برای مجموعه داده های دنیای واقعی خود، از مجموعه داده های قیمت خانه در بوستون از اواخر دهه 1970 استفاده خواهیم کرد. مجموعه داده اسباب بازی با استفاده از تابع scikit-learn “make_regression” ایجاد می شود که مجموعه داده ای را ایجاد می کند که باید تمام فرضیات ما را کاملا برآورده کند.
نکته ای که باید به آن توجه کرد این است که من فرض می کنم داده های پرت در این پست وبلاگ حذف شده اند. این بخش مهمی از هر تجزیه و تحلیل داده های اکتشافی است (که در این پست به منظور کوتاه نگه داشتن آن انجام نمی شود) که باید در سناریو های دنیای واقعی اتفاق بیفتد، و به ویژه داده های پرت باعث ایجاد مشکلات مهمی با رگرسیون خطی می شود. برای نمونه هایی از داده های پرت که در برازش مدل های رگرسیون خطی مشکلاتی ایجاد می کنند، «اَنسکوم کوارتِت» Anscombe’s Quartet را ببینید.
در این لینک توضیحات متغیر برای مجموعه داده مسکن بوستون از اسناد مربوطه آمده است:
CRIM: نرخ سرانه جنایت بر اساس شهر
ZN: نسبت زمین های مسکونی پهنه بندی شده برای زمین های بیش از 25000 فوت مربع.
INDUS: نسبت هکتار های تجاری غیر خرده فروشی در هر شهر.
CHAS: متغیر ساختگی رودخانه چارلز (1 اگر مسیر به رودخانه محدود می شود؛ 0 در غیر این صورت)
NOX: غلظت اکسید های نیتریک (یک قسمت در هر 10 میلیون)
RM: میانگین تعداد اتاق در هر مسکن
AGE: نسبت مسکن های مالک نشین پیش از سال 1940
DIS: فواصل وزنی تا پنج مرکز استخدامی بوستون
RAD: شاخص دسترسی به بزرگراه های شعاعی
TAX: نرخ مالیات بر دارایی با ارزش کامل به ازای هر 10000 دلار
PTRATIO: نسبت دانش آموز به معلم بر اساس شهر
1000 (Bk – 0.63)^ 2 :B که در آن Bk نسبت سیاه پوست ها بر اساس شهر است توجه: من واقعا از این متغیر خوشم نمی آید، زیرا فکر می کنم تعیین قیمت خانه بر اساس رنگ پوست افراد در یک منطقه معین در سناریوی مدل سازی پیش بینی کننده، هم بسیار غیر اخلاقی است و هم اینکه یک قومیت را به جای این که دیگران را در بر بگیرد، من را ناراحت می کند. من این متغییر را در این پست می گذارم تا کد را ساده نگه دارم، اما در یک موقعیت واقعی آن را حذف می کنم.
LSTAT: درصد موقعیت اجتماعی پایین تر از جمعیت
MEDV: میانگین ارزش مسکن های مالک نشین در 1000 دلار
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets
%matplotlib inline
“””
Real-world data of Boston housing prices
Additional Documentation: https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html
Attributes:
data: Features/predictors
label: Target/label/response variable
feature_names: Abbreviations of names of features
“””
boston = datasets.load_boston()
“””
Artificial linear data using the same number of features and observations as the
Boston housing prices dataset for assumption test comparison
“””
linear_X, linear_y = datasets.make_regression(n_samples=boston.data.shape[0],
n_features=boston.data.shape[1],
noise=75, random_state=46)
# Setting feature names to x1, x2, x3, etc. if they are not defined
linear_feature_names = ['X'+str(feature+1) for feature in range(linear_X.shape[1])]
دیدگاهتان را بنویسید