من ربات ترجمیار هستم و خلاصه مقالات علمی رو به صورت خودکار ترجمه میکنم. متن کامل مقالات رو میتونین به صورت ترجمه شده از لینکی که در پایین پست قرار میگیره بخونین
رگرسیون منطقی در R: یک تکنیک طبقهبندی برای پیشبینی پیشفرض کارت اعتباری
رگرسیون منطقی یکی از تکنیکهای آماری در یادگیری ماشین است که برای ایجاد مدلهای پیشبینی به کار میرود. این الگوریتم یکی از محبوبترین الگوریتم های طبقهبندی است که بیشتر برای مسایل طبقهبندی دودویی استفاده میشود (مسایل با ارزش دو کلاس، با این حال، برخی متغیرها ممکن است با کلاسهای چندگانه نیز سر و کار داشته باشند). از این روش برای حل مسایل مختلف تحقیقاتی و صنعتی استفاده میشود. بنابراین، ضروری است که درک خوبی از الگوریتم رگرسیون لجستیک داشته باشیم. در این برنامه آموزشی شما یاد خواهید گرفت که رگرسیون منطقی چگونه با مجموعه داده برای پیشبینی متناسب است، و نیز چه موقع و چرا از آن استفاده کنید.
به طور خلاصه، رگرسیون منطقی زمانی استفاده میشود که متغیر وابسته (هدف)قطعی باشد.
برای مثال:
- برای پیشبینی این که آیا یک ایمیل اسپم (۱)است یا اسپم (۰)
- تومور بدخیم باشد (۱)و نباشد (۰)
این روش تحت عنوان "رگرسیون منطقی" نامگذاری شدهاست، چون تکنیک اصلی آن کاملا مشابه رگرسیون خطی است. تفاوتهای ساختاری در نحوه عملکرد رگرسیون خطی و لجستیک وجود دارد. بنابراین رگرسیون خطی برای استفاده در مسایل طبقهبندی مناسب نیست. این لینک به طور مفصل پاسخ میدهد که چرا رگرسیون خطی روش درستی برای طبقهبندی نیست.
نام آن از یکی از توابع هسته در پشت اجرای آن به نام تابع لجستیک یا تابع سیگموئید گرفته شدهاست. این یک منحنی S شکل است که میتواند هر عدد با ارزش واقعی را بگیرد و آن را به مقدار بین ۰ و ۱ نگاشت کند، اما هرگز دقیقا در آن حدود قرار نمیگیرد.
تابع فرضیه رگرسیون لجستیک را می توان در زیر مشاهده کرد که در آن تابع (g(z نیز نشانداده شدهاست.
اکنون فرضیه رگرسیون لجستیک به صورت زیر است:
در اینجا (θ (theta یک بردار از پارامترهایی است که مدل ما برای برازش طبقهبندی کننده ما محاسبه خواهد کرد.
بعد از محاسبات از معادلات بالا، تابع هزینه در حال حاضر به صورت زیر است:
در اینجا m تعداد مثالهای آموزشی است. مانند رگرسیون خطی، از نزول گرادیان برای به حداقل رساندن تابع هزینه و محاسبه بردار (θ (theta استفاده میکنیم.
این برنامه آموزشی فرمت زیر را دنبال خواهد کرد تا به شما در تمرین با رگرسیون منطقی کمک کند:
- استفاده از کتابخانهها
- تزریق دادگان
- تحلیل دادههای اکتشافی
- مهندسی ویژگی
- پیش پردازش
- توسعه مدل
- پیشبینی
- ارزیابی
سناریو
در این برنامه آموزشی، ما با مجموعه داده مشتریان کارت اعتباری پیشفرض کار خواهیم کرد. این مجموعه داده ۳۰۰۰۰ ردیف و ۲۴ ستون دارد. مجموعه دادهها میتواند برای تخمین احتمال پرداخت پیشفرض توسط مشتری کارت اعتباری با استفاده از دادههای ارائهشده استفاده شود. این ویژگیها به جزییات مختلف در مورد یک مشتری، اطلاعات پرداخت گذشته او و اظهارات صورتحساب مربوط میشود. این دادگان در مخزن علوم داده دوجو میزبانی میشود.
خودتان را به عنوان یک دانشمند پیشرو در زمینه اطلاعات در یک بانک بزرگ در نظر بگیرید. به شما ماموریت داده شدهاست تا پیشبینی کنید که آیا یک مشتری خاص در ماه آینده پرداخت بدهی خواهد کرد یا خیر. نتیجه یک بخش بسیار با ارزش از اطلاعات برای بانک است تا در مورد ارائه اعتبار به مشتریان خود تصمیم بگیرد و میتواند به شدت بر درآمد بانک تاثیر بگذارد. بنابراین، وظیفه شما بسیار مهم است. شما یاد میگیرید که از رگرسیون لجستیک برای حل این مشکل استفاده کنید.
مجموعه داده دارای یک مشکل است چون ترکیبی از متغیرهای قطعی و پیوسته دارد. علاوه بر این، شما همچنین فرصتی برای تمرین این مفاهیم از طریق تکالیف کوتاهمدت دادهشده در پایان چند زیر ماژول خواهید داشت. زمانی که از تمام آموزشها را طی کردید، آزادید که پارامترها را در روشهای دادهشده تغییر دهید.
۱)استفاده از کتابخانهها
ابتدا با وابستگیهای مورد نیاز داریم شروع میکنیم. وابستگیهای زیر به طور عمومی برای عملیات و تجسم دادهها مورد استفاده قرار میگیرند. ما شما را تشویق میکنیم که نگاهی به مستندات آنها بیندازید.
library(knitr)
library(tidyverse)
library(ggplot2)
library(mice)
library(lattice)
library(reshape2)
#install.packages("DataExplorer") if the following package is not available
library(DataExplorer)
۲) تزریق دادگان
مجموعه دادهها در مخزن علوم داده دوجو در این لینک موجود است. برای نمایش چند ردیف اول از دستور Head استفاده میکنیم.
## Need to fetch the excel file
path <- "https://code.datasciencedojo.com/datasciencedojo/datasets/raw/master/Default%20of%20Credit%20Card%20Clients/default%20of%20credit%20card%20clients.csv"
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)=="default payment next month"] <- "default_payment"
head(data)
۳. تحلیل دادههای اکتشافی
اکتشاف داده یکی از مهمترین بخشهای فرآیند یادگیری ماشین است. دادههای تمیز میتوانند افزایش قابلتوجه دقت مدل ما را تضمین کنند. مهم نیست که مدل ما چقدر قدرتمند است، نمیتواند به خوبی عمل کند مگر اینکه دادههایی که فراهم میکنیم کاملا پردازش شدهباشد. این مرحله به طور خلاصه شما را از طریق این گام برمی دارد و به شما کمک میکند تا دادههای خود را تجسم کنید، ارتباط بین متغیرها را پیدا کنید، با مقادیر از دست رفته و دادههای پرت سر و کار داشته باشید و به درک بنیادی از هر متغیری که استفاده خواهیم کرد کمک کنید. علاوه بر این، این مرحله همچنین ما را قادر خواهد ساخت تا مهمترین اطلاعات را برای تغذیه مدل خود و دور انداختن آنهایی که هیچ ارتباطی ندارند، پیدا کنیم.
ما با استفاده از تابع مبهم شروع خواهیم کرد تا ابعاد متغیر وابسته به داده خود را چاپ کنیم.
dim(data)
روش str به ما این امکان را میدهد که نوع داده هر متغیر را بدانیم. ما آن را به نوع دادههای عددی تبدیل خواهیم کرد زیرا استفاده از آن برای توابع پیش رو بسیار مفید خواهد بود.
str(data)
'data.frame': 30000 obs. of 25 variables:
$ ID : Factor w/ 30001 levels "1","10","100",..: 1 11112 22223 23335 24446 25557 26668 27779 28890 2 ...
$ LIMIT_BAL : Factor w/ 82 levels "10000","100000",..: 14 5 81 48 48 48 49 2 7 14 ...
$ SEX : Factor w/ 3 levels "1","2","SEX": 2 2 2 2 1 1 1 2 2 1 ...
$ EDUCATION : Factor w/ 8 levels "0","1","2","3",..: 3 3 3 3 3 2 2 3 4 4 ...
$ MARRIAGE : Factor w/ 5 levels "0","1","2","3",..: 2 3 3 2 2 3 3 3 2 3 ...
$ AGE : Factor w/ 57 levels "21","22","23",..: 4 6 14 17 37 17 9 3 8 15 ...
$ PAY_0 : Factor w/ 12 levels "-1","-2","0",..: 5 1 3 3 1 3 3 3 3 2 ...
$ PAY_2 : Factor w/ 12 levels "-1","-2","0",..: 5 5 3 3 3 3 3 1 3 2 ...
$ PAY_3 : Factor w/ 12 levels "-1","-2","0",..: 1 3 3 3 1 3 3 1 5 2 ...
$ PAY_4 : Factor w/ 12 levels "-1","-2","0",..: 1 3 3 3 3 3 3 3 3 2 ...
$ PAY_5 : Factor w/ 11 levels "-1","-2","0",..: 2 3 3 3 3 3 3 3 3 1 ...
$ PAY_6 : Factor w/ 11 levels "-1","-2","0",..: 2 4 3 3 3 3 3 1 3 1 ...
$ BILL_AMT1 : Factor w/ 22724 levels "-1","-10","-100",..: 13345 10030 10924 15026 21268 18423 12835 1993 1518 307 ...
$ BILL_AMT2 : Factor w/ 22347 levels "-1","-10","-100",..: 11404 5552 3482 15171 16961 17010 13627 12949 3530 348 ...
$ BILL_AMT3 : Factor w/ 22027 levels "-1","-10","-100",..: 18440 9759 3105 15397 12421 16866 14184 17258 2072 365 ...
$ BILL_AMT4 : Factor w/ 21549 levels "-1","-10","-100",..: 378 11833 3620 10318 7717 6809 16081 8147 2129 378 ...
$ BILL_AMT5 : Factor w/ 21011 levels "-1","-10","-100",..: 385 11971 3950 10407 6477 6841 14580 76 1796 2638 ...
$ BILL_AMT6 : Factor w/ 20605 levels "-1","-10","-100",..: 415 11339 4234 10458 6345 7002 14057 15748 12215 3230 ...
$ PAY_AMT1 : Factor w/ 7944 levels "0","1","10","100",..: 1 1 1495 2416 2416 3160 5871 4578 4128 1 ...
$ PAY_AMT2 : Factor w/ 7900 levels "0","1","10","100",..: 6671 5 1477 2536 4508 2142 4778 6189 1 1 ...
$ PAY_AMT3 : Factor w/ 7519 levels "0","1","10","100",..: 1 5 5 646 6 6163 4292 1 4731 1 ...
$ PAY_AMT4 : Factor w/ 6938 levels "0","1","10","100",..: 1 5 5 337 6620 5 2077 5286 5 813 ...
$ PAY_AMT5 : Factor w/ 6898 levels "0","1","10","100",..: 1 1 5 263 5777 5 950 1502 5 408 ...
$ PAY_AMT6 : Factor w/ 6940 levels "0","1","10","100",..: 1 2003 4751 5 5796 6293 963 1267 5 1 ...
$ default_payment: Factor w/ 3 levels "0","1","default payment next month": 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 = "logit"))
summary(log.model)
Call:
glm(formula = default_payment ~ ., family = binomial(link = "logit"),
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="response")
## 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
این مقاله توسط مترجم هوشمند مقالات علمی تخصصی و به صورت خودکار و با حداقل بازبینی انسانی ترجمه شده و میتواند به صورت محدود دارای اشکالات ترجمه باشد.
مطلبی دیگر از این انتشارات
محققان «هوش مصنوعی فیزیکی» را به عنوان کلیدی برای زنده ماندن روباتها پیشنهاد میکنند
مطلبی دیگر از این انتشارات
گردش کاری یادگیری ماشینی
مطلبی دیگر از این انتشارات
گوگل اسکالر عمدا از نام قبلی دانشمندان ترنس استفاده میکند! اکنون، ما خواستار اصلاحات هستیم.