رگرسیون منطقی در R: یک تکنیک طبقه‌بندی برای پیش‌بینی پیش‌فرض کارت اعتباری

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

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

برای مثال:

  • برای پیش‌بینی این که آیا یک ایمیل اسپم (۱)است یا اسپم (۰)
  • تومور بدخیم باشد (۱)و نباشد (۰)

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

نام آن از یکی از توابع هسته در پشت اجرای آن به نام تابع لجستیک یا تابع سیگموئید گرفته شده‌است. این یک منحنی S شکل است که می‌تواند هر عدد با ارزش واقعی را بگیرد و آن را به مقدار بین ۰ و ۱ نگاشت کند، اما هرگز دقیقا در آن حدود قرار نمی‌گیرد.

تابع فرضیه رگرسیون لجستیک را می توان در زیر مشاهده کرد که در آن تابع (g(z نیز نشان‌داده شده‌است.

اکنون فرضیه رگرسیون لجستیک به صورت زیر است:

در اینجا (θ (theta یک بردار از پارامترهایی است که مدل ما برای برازش طبقه‌بندی کننده ما محاسبه خواهد کرد.

بعد از محاسبات از معادلات بالا، تابع هزینه در حال حاضر به صورت زیر است:

در اینجا m تعداد مثال‌های آموزشی است. مانند رگرسیون خطی، از نزول گرادیان برای به حداقل رساندن تابع هزینه و محاسبه بردار (θ (theta استفاده می‌کنیم.


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

  • استفاده از کتابخانه‌ها
  • تزریق دادگان
  • تحلیل داده‌های اکتشافی
  • مهندسی ویژگی
  • پیش پردازش
  • توسعه مدل
  • پیش‌بینی
  • ارزیابی

سناریو

در این برنامه آموزشی، ما با مجموعه داده مشتریان کارت اعتباری پیش‌فرض کار خواهیم کرد. این مجموعه داده ۳۰۰۰۰ ردیف و ۲۴ ستون دارد. مجموعه داده‌ها می‌تواند برای تخمین احتمال پرداخت پیش‌فرض توسط مشتری کارت اعتباری با استفاده از داده‌های ارائه‌شده استفاده شود. این ویژگی‌ها به جزییات مختلف در مورد یک مشتری، اطلاعات پرداخت گذشته او و اظهارات صورتحساب مربوط می‌شود. این دادگان در مخزن علوم داده دوجو میزبانی می‌شود.

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

مجموعه داده دارای یک مشکل است چون ترکیبی از متغیرهای قطعی و پیوسته دارد. علاوه بر این، شما همچنین فرصتی برای تمرین این مفاهیم از طریق تکالیف کوتاه‌مدت داده‌شده در پایان چند زیر ماژول خواهید داشت. زمانی که از تمام آموزش‌ها را طی کردید، آزادید که پارامترها را در روش‌های داده‌شده تغییر دهید.

دانلود فایل‌های تمرین

۱)استفاده از کتابخانه‌ها

ابتدا با وابستگی‌های مورد نیاز داریم شروع می‌کنیم. وابستگی‌های زیر به طور عمومی برای عملیات و تجسم داده‌ها مورد استفاده قرار می‌گیرند. ما شما را تشویق می‌کنیم که نگاهی به مستندات آن‌ها بیندازید.

library(knitr)
library(tidyverse)
library(ggplot2)
library(mice)
library(lattice)
library(reshape2)

#install.packages(&quotDataExplorer&quot) if the following package is not available
library(DataExplorer)

۲) تزریق دادگان

مجموعه داده‌ها در مخزن علوم داده دوجو در این لینک موجود است. برای نمایش چند ردیف اول از دستور Head استفاده می‌کنیم.

## Need to fetch the excel file

path <- &quothttps://code.datasciencedojo.com/datasciencedojo/datasets/raw/master/Default%20of%20Credit%20Card%20Clients/default%20of%20credit%20card%20clients.csv&quot
data <- read.csv(file = path, header = TRUE)
head(data)

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

colnames(data) <- as.character(unlist(data[1,]))
data = data[-1, ]
head(data)

برای جلوگیری از هر گونه مشکل پیش رو، ما نام متغیر هدف خود "پرداخت پیش‌فرض ماه آینده" را به نامی بدون فاصله با استفاده از کد زیر تغییر خواهیم داد.

colnames(data)[colnames(data)==&quotdefault payment next month&quot] <- &quotdefault_payment&quot
head(data)

۳. تحلیل داده‌های اکتشافی

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

ما با استفاده از تابع مبهم شروع خواهیم کرد تا ابعاد متغیر وابسته به داده خود را چاپ کنیم.

dim(data)

روش str به ما این امکان را می‌دهد که نوع داده هر متغیر را بدانیم. ما آن را به نوع داده‌های عددی تبدیل خواهیم کرد زیرا استفاده از آن برای توابع پیش رو بسیار مفید خواهد بود.

str(data)


'data.frame':	30000 obs. of  25 variables:
 $ ID             : Factor w/ 30001 levels &quot1&quot,&quot10&quot,&quot100&quot,..: 1 11112 22223 23335 24446 25557 26668 27779 28890 2 ...
 $ LIMIT_BAL      : Factor w/ 82 levels &quot10000&quot,&quot100000&quot,..: 14 5 81 48 48 48 49 2 7 14 ...
 $ SEX            : Factor w/ 3 levels &quot1&quot,&quot2&quot,&quotSEX&quot: 2 2 2 2 1 1 1 2 2 1 ...
 $ EDUCATION      : Factor w/ 8 levels &quot0&quot,&quot1&quot,&quot2&quot,&quot3&quot,..: 3 3 3 3 3 2 2 3 4 4 ...
 $ MARRIAGE       : Factor w/ 5 levels &quot0&quot,&quot1&quot,&quot2&quot,&quot3&quot,..: 2 3 3 2 2 3 3 3 2 3 ...
 $ AGE            : Factor w/ 57 levels &quot21&quot,&quot22&quot,&quot23&quot,..: 4 6 14 17 37 17 9 3 8 15 ...
 $ PAY_0          : Factor w/ 12 levels &quot-1&quot,&quot-2&quot,&quot0&quot,..: 5 1 3 3 1 3 3 3 3 2 ...
 $ PAY_2          : Factor w/ 12 levels &quot-1&quot,&quot-2&quot,&quot0&quot,..: 5 5 3 3 3 3 3 1 3 2 ...
 $ PAY_3          : Factor w/ 12 levels &quot-1&quot,&quot-2&quot,&quot0&quot,..: 1 3 3 3 1 3 3 1 5 2 ...
 $ PAY_4          : Factor w/ 12 levels &quot-1&quot,&quot-2&quot,&quot0&quot,..: 1 3 3 3 3 3 3 3 3 2 ...
 $ PAY_5          : Factor w/ 11 levels &quot-1&quot,&quot-2&quot,&quot0&quot,..: 2 3 3 3 3 3 3 3 3 1 ...
 $ PAY_6          : Factor w/ 11 levels &quot-1&quot,&quot-2&quot,&quot0&quot,..: 2 4 3 3 3 3 3 1 3 1 ...
 $ BILL_AMT1      : Factor w/ 22724 levels &quot-1&quot,&quot-10&quot,&quot-100&quot,..: 13345 10030 10924 15026 21268 18423 12835 1993 1518 307 ...
 $ BILL_AMT2      : Factor w/ 22347 levels &quot-1&quot,&quot-10&quot,&quot-100&quot,..: 11404 5552 3482 15171 16961 17010 13627 12949 3530 348 ...
 $ BILL_AMT3      : Factor w/ 22027 levels &quot-1&quot,&quot-10&quot,&quot-100&quot,..: 18440 9759 3105 15397 12421 16866 14184 17258 2072 365 ...
 $ BILL_AMT4      : Factor w/ 21549 levels &quot-1&quot,&quot-10&quot,&quot-100&quot,..: 378 11833 3620 10318 7717 6809 16081 8147 2129 378 ...
 $ BILL_AMT5      : Factor w/ 21011 levels &quot-1&quot,&quot-10&quot,&quot-100&quot,..: 385 11971 3950 10407 6477 6841 14580 76 1796 2638 ...
 $ BILL_AMT6      : Factor w/ 20605 levels &quot-1&quot,&quot-10&quot,&quot-100&quot,..: 415 11339 4234 10458 6345 7002 14057 15748 12215 3230 ...
 $ PAY_AMT1       : Factor w/ 7944 levels &quot0&quot,&quot1&quot,&quot10&quot,&quot100&quot,..: 1 1 1495 2416 2416 3160 5871 4578 4128 1 ...
 $ PAY_AMT2       : Factor w/ 7900 levels &quot0&quot,&quot1&quot,&quot10&quot,&quot100&quot,..: 6671 5 1477 2536 4508 2142 4778 6189 1 1 ...
 $ PAY_AMT3       : Factor w/ 7519 levels &quot0&quot,&quot1&quot,&quot10&quot,&quot100&quot,..: 1 5 5 646 6 6163 4292 1 4731 1 ...
 $ PAY_AMT4       : Factor w/ 6938 levels &quot0&quot,&quot1&quot,&quot10&quot,&quot100&quot,..: 1 5 5 337 6620 5 2077 5286 5 813 ...
 $ PAY_AMT5       : Factor w/ 6898 levels &quot0&quot,&quot1&quot,&quot10&quot,&quot100&quot,..: 1 1 5 263 5777 5 950 1502 5 408 ...
 $ PAY_AMT6       : Factor w/ 6940 levels &quot0&quot,&quot1&quot,&quot10&quot,&quot100&quot,..: 1 2003 4751 5 5796 6293 963 1267 5 1 ...
 $ default_payment: Factor w/ 3 levels &quot0&quot,&quot1&quot,&quotdefault payment next month&quot: 2 2 1 1 1 1 1 1 1 1 ...


data[, 1:25] <- sapply(data[, 1:25], as.character)

ما ابتدا با تبدیل داده‌های خود به کاراکتر، یک گام میانی را در نظر گرفته‌ایم. ما باید قبل از as.character از as.numeric استفاده کنیم. این به این دلیل است که عوامل به صورت داخلی به عنوان اعداد صحیح با یک جدول ذخیره می‌شوند تا برچسب‌های سطح عامل را ارایه دهند. فقط با استفاده از as.numeric، تنها کدهای صحیح داخلی ارایه خواهد شد.

data[, 1:25] <- sapply(data[, 1:25], as.numeric)
str(data)


'data.frame':	30000 obs. of  25 variables:
 $ ID             : num  1 2 3 4 5 6 7 8 9 10 ...
 $ LIMIT_BAL      : num  20000 120000 90000 50000 50000 50000 500000 100000 140000 20000 ...
 $ SEX            : num  2 2 2 2 1 1 1 2 2 1 ...
 $ EDUCATION      : num  2 2 2 2 2 1 1 2 3 3 ...
 $ MARRIAGE       : num  1 2 2 1 1 2 2 2 1 2 ...
 $ AGE            : num  24 26 34 37 57 37 29 23 28 35 ...
 $ PAY_0          : num  2 -1 0 0 -1 0 0 0 0 -2 ...
 $ PAY_2          : num  2 2 0 0 0 0 0 -1 0 -2 ...
 $ PAY_3          : num  -1 0 0 0 -1 0 0 -1 2 -2 ...
 $ PAY_4          : num  -1 0 0 0 0 0 0 0 0 -2 ...
 $ PAY_5          : num  -2 0 0 0 0 0 0 0 0 -1 ...
 $ PAY_6          : num  -2 2 0 0 0 0 0 -1 0 -1 ...
 $ BILL_AMT1      : num  3913 2682 29239 46990 8617 ...
 $ BILL_AMT2      : num  3102 1725 14027 48233 5670 ...
 $ BILL_AMT3      : num  689 2682 13559 49291 35835 ...
 $ BILL_AMT4      : num  0 3272 14331 28314 20940 ...
 $ BILL_AMT5      : num  0 3455 14948 28959 19146 ...
 $ BILL_AMT6      : num  0 3261 15549 29547 19131 ...
 $ PAY_AMT1       : num  0 0 1518 2000 2000 ...
 $ PAY_AMT2       : num  689 1000 1500 2019 36681 ...
 $ PAY_AMT3       : num  0 1000 1000 1200 10000 657 38000 0 432 0 ...
 $ PAY_AMT4       : num  0 1000 1000 1100 9000 ...
 $ PAY_AMT5       : num  0 0 1000 1069 689 ...
 $ PAY_AMT6       : num  0 2000 5000 1000 679 ...
 $ default_payment: num  1 1 0 0 0 0 0 0 0 0 ...

هنگامی که به یک چارچوب داده اعمال می‌شود، تابع ()summary اساسا برای هر ستون اعمال می‌شود، و نتایج برای تمام ستون‌ها با هم نشان داده می‌شوند. برای یک متغیر پیوسته (عددی) مانند "سن"، summary ۵ عددی را برمی گرداند که ۵ آمار توصیفی را نشان می‌دهد چون اینها مقادیر عددی هستند.

summary(data)


ID          LIMIT_BAL            SEX          EDUCATION    
 Min.   :    1   Min.   :  10000   Min.   :1.000   Min.   :0.000  
 1st Qu.: 7501   1st Qu.:  50000   1st Qu.:1.000   1st Qu.:1.000  
 Median :15000   Median : 140000   Median :2.000   Median :2.000  
 Mean   :15000   Mean   : 167484   Mean   :1.604   Mean   :1.853  
 3rd Qu.:22500   3rd Qu.: 240000   3rd Qu.:2.000   3rd Qu.:2.000  
 Max.   :30000   Max.   :1000000   Max.   :2.000   Max.   :6.000  
    MARRIAGE          AGE            PAY_0             PAY_2        
 Min.   :0.000   Min.   :21.00   Min.   :-2.0000   Min.   :-2.0000  
 1st Qu.:1.000   1st Qu.:28.00   1st Qu.:-1.0000   1st Qu.:-1.0000  
 Median :2.000   Median :34.00   Median : 0.0000   Median : 0.0000  
 Mean   :1.552   Mean   :35.49   Mean   :-0.0167   Mean   :-0.1338  
 3rd Qu.:2.000   3rd Qu.:41.00   3rd Qu.: 0.0000   3rd Qu.: 0.0000  
 Max.   :3.000   Max.   :79.00   Max.   : 8.0000   Max.   : 8.0000  
     PAY_3             PAY_4             PAY_5             PAY_6        
 Min.   :-2.0000   Min.   :-2.0000   Min.   :-2.0000   Min.   :-2.0000  
 1st Qu.:-1.0000   1st Qu.:-1.0000   1st Qu.:-1.0000   1st Qu.:-1.0000  
 Median : 0.0000   Median : 0.0000   Median : 0.0000   Median : 0.0000  
 Mean   :-0.1662   Mean   :-0.2207   Mean   :-0.2662   Mean   :-0.2911  
 3rd Qu.: 0.0000   3rd Qu.: 0.0000   3rd Qu.: 0.0000   3rd Qu.: 0.0000  
 Max.   : 8.0000   Max.   : 8.0000   Max.   : 8.0000   Max.   : 8.0000  
   BILL_AMT1         BILL_AMT2        BILL_AMT3         BILL_AMT4      
 Min.   :-165580   Min.   :-69777   Min.   :-157264   Min.   :-170000  
 1st Qu.:   3559   1st Qu.:  2985   1st Qu.:   2666   1st Qu.:   2327  
 Median :  22382   Median : 21200   Median :  20089   Median :  19052  
 Mean   :  51223   Mean   : 49179   Mean   :  47013   Mean   :  43263  
 3rd Qu.:  67091   3rd Qu.: 64006   3rd Qu.:  60165   3rd Qu.:  54506  
 Max.   : 964511   Max.   :983931   Max.   :1664089   Max.   : 891586  
   BILL_AMT5        BILL_AMT6          PAY_AMT1         PAY_AMT2      
 Min.   :-81334   Min.   :-339603   Min.   :     0   Min.   :      0  
 1st Qu.:  1763   1st Qu.:   1256   1st Qu.:  1000   1st Qu.:    833  
 Median : 18105   Median :  17071   Median :  2100   Median :   2009  
 Mean   : 40311   Mean   :  38872   Mean   :  5664   Mean   :   5921  
 3rd Qu.: 50191   3rd Qu.:  49198   3rd Qu.:  5006   3rd Qu.:   5000  
 Max.   :927171   Max.   : 961664   Max.   :873552   Max.   :1684259  
    PAY_AMT3         PAY_AMT4         PAY_AMT5           PAY_AMT6       
 Min.   :     0   Min.   :     0   Min.   :     0.0   Min.   :     0.0  
 1st Qu.:   390   1st Qu.:   296   1st Qu.:   252.5   1st Qu.:   117.8  
 Median :  1800   Median :  1500   Median :  1500.0   Median :  1500.0  
 Mean   :  5226   Mean   :  4826   Mean   :  4799.4   Mean   :  5215.5  
 3rd Qu.:  4505   3rd Qu.:  4013   3rd Qu.:  4031.5   3rd Qu.:  4000.0  
 Max.   :896040   Max.   :621000   Max.   :426529.0   Max.   :528666.0  
 default_payment 
 Min.   :0.0000  
 1st Qu.:0.0000  
 Median :0.0000  
 Mean   :0.2212  
 3rd Qu.:0.0000  
 Max.   :1.0000

با استفاده از روش معرفی‌شده، ما می‌توانیم اطلاعات پایه در مورد جدول داده شامل تعداد مقادیر از دست رفته در هر متغیر را بدانیم.

introduce(data)

همانطور که می‌توانیم مشاهده کنیم، هیچ مقدار از دست رفته‌ای در جدول داده وجود ندارد.

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

count(data, vars = EDUCATION)

فرهنگ لغت داده‌ها مقوله‌های زیر را برای EDUCATION تعریف می‌کند: "تحصیلات (۱ = تحصیلات تکمیلی؛ ۲ = دانشگاه؛ ۳ = دبیرستان؛ ۴ = دیگر)". با این حال، می‌توانیم ۰ را همراه با اعداد بزرگ‌تر از ۴ مشاهده کنیم، یعنی ۵ و ۶. از آنجا که ما جزئیات بیشتری در مورد آن نداریم، می‌توانیم فرض کنیم که ۰ کسی بدون تجربه تحصیلی است در نتیجه ۰ می تواند همراه ۵ و ۶ باشد و الباقی همراه ۴.

count(data, vars = MARRIAGE)

فرهنگ لغت داده‌ها مقوله‌های زیر را برای ازدواج تعریف می‌کند: "وضعیت تاهل (۱ = متاهل؛ ۲ = مجرد؛ ۳ = دیگر)". از آنجایی که گروه ۰ در هیچ جا در فرهنگ لغت داده‌ها تعریف نشده است، می‌توانیم آن را در گروه "دیگران" مشخص‌شده به عنوان ۳ قرار دهیم.

#replace 0's with NAN, replace others too
data$EDUCATION[data$EDUCATION == 0] <- 4
data$EDUCATION[data$EDUCATION == 5] <- 4
data$EDUCATION[data$EDUCATION == 6] <- 4
data$MARRIAGE[data$MARRIAGE == 0] <- 3


count(data, vars = MARRIAGE)
count(data, vars = EDUCATION)

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

این یک روش ساده برای فهمیدن این است که یک متغیر چقدر بر نتیجه نهایی ما تاثیر دارد. راه‌های دیگری نیز برای درک این موضوع وجود دارد.

plot_correlation(na.omit(data), maxcat = 5L)

ما می‌توانیم همبستگی هفته AGE, BILL_AMT1, BILL_AMT2, BILL_AMT3, BILL_AMT4, BILL_AMT5, BILL_AMT6با متغیر هدف خود را مشاهده کنیم.

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

plot_histogram(data)

ما می‌توانیم چند مشاهده از هیستوگرام بالا داشته باشیم. توزیع بالا نشان می‌دهد که تقریبا تمام ویژگی‌های PAY به درستی چوله شده‌اند.

۴)مهندسی ویژگی‌ها

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

با تجزیه و تحلیل داده‌های بالا، ما قادر به توجه به همبستگی بی‌نهایت هفته برخی متغیرها با متغیر هدف نهایی بوده‌ایم. در زیر ارزش‌های همبستگی پایین قابل‌توجهی وجود دارد: AGE, BILL_AMT2, BILL_AMT3, BILL_AMT4, BILL_AMT5, BILL_AMT6.

#deleting columns

data_new <- select(data, -one_of('ID','AGE', 'BILL_AMT2',
       'BILL_AMT3','BILL_AMT4','BILL_AMT5','BILL_AMT6'))

head(data_new)

۵)پیش - پردازش

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

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

data_new[, 1:17] <- scale(data_new[, 1:17])


head(data_new)

کار بعدی که ما انجام خواهیم داد تقسیم داده‌ها برای آموزش و تست است چون ما از داده‌های تست خود برای ارزیابی مدل خود استفاده خواهیم کرد. ما اکنون مجموعه داده‌های خود را به دو قسمت آموزش و آزمایش تقسیم خواهیم کرد. ما آن را به ۰.۳. تغییر خواهیم داد. بنابراین، ۳۰ % از مجموعه داده‌ها برای تست و بقیه برای آموزش ذخیره شده‌اند. به طور پیش‌فرض، مجموعه داده‌ها نیز قبل از تفکیک به هم زده خواهند شد.

#create a list of random number ranging from 1 to number of rows from actual data 
#and 70% of the data into training data  

data2 = sort(sample(nrow(data_new), nrow(data_new)*.7))

#creating training data set by selecting the output row values
train <- data_new[data2,]

#creating test data set by not selecting the output row values
test <- data_new[-data2,]

بیایید ابعاد همه این متغیرها را با استفاده از روش مبهم چاپ کنیم. شما می‌توانید متوجه شکاف ۷۰ تا ۳۰ درصدی شوید.

dim(train)
dim(test)

۶)توسعه مدل

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

پس از آن، ما مدل خود را با استفاده از تابع با X_train و Y_train که شامل ۷۰ % مجموعه داده ما است آموزش خواهیم داد. این یک مدل طبقه‌بندی دودویی خواهد بود.

## fit a logistic regression model with the training dataset
log.model <- glm(default_payment ~., data = train, family = binomial(link = &quotlogit&quot))


summary(log.model)


Call:
glm(formula = default_payment ~ ., family = binomial(link = &quotlogit&quot), 
    data = train)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.1171  -0.6998  -0.5473  -0.2946   3.4915  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -1.465097   0.019825 -73.900  < 2e-16 ***
LIMIT_BAL   -0.083475   0.023905  -3.492 0.000480 ***
SEX         -0.082986   0.017717  -4.684 2.81e-06 ***
EDUCATION   -0.059851   0.019178  -3.121 0.001803 ** 
MARRIAGE    -0.107322   0.018350  -5.849 4.95e-09 ***
PAY_0        0.661918   0.023605  28.041  < 2e-16 ***
PAY_2        0.069704   0.028842   2.417 0.015660 *  
PAY_3        0.090691   0.031982   2.836 0.004573 ** 
PAY_4        0.074336   0.034612   2.148 0.031738 *  
PAY_5        0.018469   0.036430   0.507 0.612178    
PAY_6        0.006314   0.030235   0.209 0.834584    
BILL_AMT1   -0.123582   0.023558  -5.246 1.56e-07 ***
PAY_AMT1    -0.136745   0.037549  -3.642 0.000271 ***
PAY_AMT2    -0.246634   0.056432  -4.370 1.24e-05 ***
PAY_AMT3    -0.014662   0.028012  -0.523 0.600677    
PAY_AMT4    -0.087782   0.031484  -2.788 0.005300 ** 
PAY_AMT5    -0.084533   0.030917  -2.734 0.006254 ** 
PAY_AMT6    -0.027355   0.025707  -1.064 0.287277    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 22176  on 20999  degrees of freedom
Residual deviance: 19535  on 20982  degrees of freedom
AIC: 19571

Number of Fisher Scoring iterations: 6

۷)پیش‌بینی

در زیر ما از روش پیش‌بینی برای کشف پیش‌بینی‌هایی که توسط روش رگرسیون منطقی انجام می‌شود، استفاده خواهیم کرد. ما ابتدا نتایج پیش‌بینی‌شده را در متغیر y _ pred ذخیره خواهیم کرد و ۱۰ ردیف اول مجموعه داده‌های تست مان را چاپ خواهیم کرد. در ادامه مقادیر پیش‌بینی‌شده ردیف‌های مربوطه و برچسب‌های اصلی که برای مقایسه در y _ test ذخیره شده‌بودند را چاپ خواهیم کرد.

test[1:10,]
## to predict using logistic regression model, probablilities obtained
log.predictions <- predict(log.model, test, type=&quotresponse&quot)

## Look at probability output
head(log.predictions, 10)

در زیر ما قصد داریم برچسب‌های خود را با قاعده تصمیم‌گیری اختصاص دهیم که اگر پیش‌بینی بزرگ‌تر از ۰.۵ است، آن را ۱ دیگر ۰ اختصاص دهیم.

log.prediction.rd <- ifelse(log.predictions > 0.5, 1, 0)
head(log.prediction.rd, 10)

ارزیابی

در این مقاله چند معیار ارزیابی برای اندازه‌گیری عملکرد مدل یادگیری ماشین مورد بحث قرار می‌گیرد. این بخش ارتباط قابل‌توجهی دارد زیرا به ما اجازه می‌دهد تا مهم‌ترین ویژگی‌هایی که منجر به توسعه مدل ما می‌شوند را درک کنیم.

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

این جدول پیش‌بینی‌های محور x و نتایج دقت محور y را نشان می‌دهد. سلول‌های جدول تعداد پیش‌بینی‌های انجام‌شده توسط الگوریتم یادگیری ماشین هستند.

با توجه به یک مقاله، مدخل‌های ماتریس سردرگمی معنای زیر را در متن مطالعه ما دارند:

[[a b]
[c d]]

  • a تعداد پیش‌بینی‌های صحیح است که یک نمونه منفی است،
  • b تعداد پیش‌بینی‌های نادرستی است که یک نمونه مثبت است،
  • c تعداد نادرست پیش‌بینی‌ها است که یک نمونه منفی است، و
  • d تعداد پیش‌بینی‌های درست است که یک نمونه مثبت است
table(log.prediction.rd, test[,18])


log.prediction.rd    0    1
                0 6832 1517
                1  170  481

ما یک تابع ساده برای چاپ دقت در زیر می‌نویسیم

accuracy <- table(log.prediction.rd, test[,18])
sum(diag(accuracy))/sum(accuracy)

نتیجه‌گیری

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


منتشرشده در: سایت datasciencedojo به تاریخ ۴ نوامبر ۲۰۱۹
لینک مقاله اصلی: https://blog.datasciencedojo.com/logistic-regression-in-r-tutorial

این مقاله توسط مترجم هوشمند مقالات علمی تخصصی و به صورت خودکار و با حداقل بازبینی انسانی ترجمه شده و می‌تواند به صورت محدود دارای اشکالات ترجمه باشد.