آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

آموزش رگرسیون خطی

آموزش رگرسیون خطی (Linear regression)



مقدمه ای بر رگرسیون خطی


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


عبارت ریاضی زیر رابطه مذکور را در قالب ریاضی ارائه می کند.


                        Y=mX+b
                    

در اینجا، Y متغیر وابسته ای است که سعی در پیش بینی آن داریم.


X متغیر مستقلی است که با استفاده از آن پیش بینی را انجام می دهیم.


m شیب خط رگرسیون است که تاثیر X روی Y را نشان می دهد.


b یک ثابت است که به عنوان 𝑌Y-intercept شناخته می شود. اگر X=0 ، Y با 𝑏b برابر خواهد بود.


علاوه بر این، همانطور که در ادامه توضیح داده می شود، این رابطه خطی می تواند ذاتا مثبت یا منفی باشد.


رابطه خطی مثبت:‌


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


رابط خطی مثبت در رگرسیون خطی :  ‌  ‌

رابطه خطی منفی:‌


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


 رابط خطی منفی در رگرسیون خطی :   ‌

انواع رگرسیون خطی:


رگرسیون خطی دارای دو نوع رگرسیون خطی ساده (Simple Linear Regression) و رگرسیون خطی چندتایی(Multiple Linear Regression) است.


رگرسیون خطی ساده (SLR):


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


پیاده سازی در پایتون:


به دو روش می توان SLR را در پایتون پیاده سازی کرد. یک روش این است که مجموعه داده خود را فراهم کنید، و دیگری اینکه از مجموعه داده کتابخانه scikit-learn پایتون استفاده کنید.


مثال 1 : ‌


در مثال زیر از پیاده سازی پایتون، از مجموعه داده خود استفاده می کنیم. ابتدا، به صورت زیر با وارد کردن بسته های ضروری شروع می کنیم.


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

سپس، یک تابع که مقادیر مهم را برای SLR محاسبه می کند، تعریف کنید.


                        def coef_estimation(x, y):
                    

اسکریپت زیر تعداد مشاهدات n را ارائه می کند.


                        n = np.size(x)
                    

میانگین بردار های x و y به صورت زیر محاسبه می شود.


                        m_x, m_y = np.mean(x), np.mean(y)
                    

انحراف و انحراف متقابل(cross-deviation) در باره x را به صورت زیر می توان به دست آورد.


                        SS_xy = np.sum(y*x) - n*m_y*m_x
                        SS_xx = np.sum(x*x) - n*m_x*m_x

                    

سپس، ضرایب رگرسیون مانند b را به صورت زیر می توان محاسبه کرد.


                        b_1 = SS_xy / SS_xx
                        b_0 = m_y - b_1*m_x
                        return(b_0, b_1)

                    

سپس، باید یک تابع تعریف کنیم که به همراه پیش بینی بردار پاسخ، خط رگرسیون را نیز رسم کند.


                        def plot_regression_line(x, y, b):

                    

اسکریپت زیر نقاط واقعی را به صورت طرح پراکنده رسم می کند.


                        plt.scatter(x, y, color = "m", marker = "o", s = 30)

                    

اسکریپت زیر بردار پاسخ را پیش بینی می کند.


                        y_pred = b[0] + b[1]*x

                    

کد زیر خط رگرسیون را رسم خواهد کرد و برچسب ها را روی آنها قرار خواهد داد.


                        plt.plot(x, y_pred, color = "g")
                        plt.xlabel('x')
                        plt.ylabel('y')
                        plt.show()


                    

در انتها، برای ارائه مجموعه داده و فراخوانی توابع تعریف شده در بالا، باید تابع main() را تعریف کنیم.


                        def main():
                        x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
                        y = np.array([100, 300, 350, 500, 750, 800, 850, 900, 1050, 1250])
                        b = coef_estimation(x, y)
                        print("Estimated coefficients:\nb_0 = {} \nb_1 = {}".format(b[0], b[1]))
                        plot_regression_line(x, y, b)
   
                        if __name__ == "__main__":
                        main()


                    

خروجی: ‌


                        Estimated coefficients:
                        b_0 = 154.5454545454545
                        b_1 = 117.87878787878788
                        

                    


 رگرسیون خطی ساده (SLR)  ‌

مثال 2 : ‌


در مثال زیر از پیاده سازی پایتون، از مجموعه داده diabetes از scikit-learn استفاده می کنیم. ابتدا، به صورت زیر با وارد کردن بسته های ضروری شروع می کنیم.


                        %matplotlib inline
                        import matplotlib.pyplot as plt
                        import numpy as np
                        from sklearn import datasets, linear_model
                        from sklearn.metrics import mean_squared_error, r2_score
                        

                    


سپس، مجموعه داده diabetes را بارگیری می کنیم و شی آن را می سازیم.


                        diabetes = datasets.load_diabetes()

                    


از آنجایی که SLR را پیاده سازی می کنیم، فقط از یک ویژگی استفاده خواهیم کرد که در ادامه قرار دارد.


                        X = diabetes.data[:, np.newaxis, 2]
                    


سپس، باید به صورت زیر داده را به مجموعه های آموزشی و تست تقسیم کنیم.


                        X_train = X[:-30]
                        X_test = X[-30:]

                    


سپس، باید به صورت زیر هدف را به مجموعه های آموزشی و تست تقسیم کنیم.


                        y_train = diabetes.target[:-30]
                        y_test = diabetes.target[-30:]


                    


حال، برای آموزش مدل، باید به صورت زیر شی رگ