Машинно обучение: Наблюдавано обучение

Машинно обучение 101: Прогнозиране на употребата на наркотици с помощта на логистична регресия в R

Основи, функции за връзка и графики

Резюме

  • Обобщени линейни модели (GLM)
  • Три вида функция за връзка: Logit, Probit и допълнителен log-log (cloglog)
  • Изграждане на логистична регресия за прогнозиране на употребата на наркотици и сравняване на тези три типа GLM

В курсовете по Machine Learning 101 професорите по статистика въвеждат GLM веднага след линейната регресия като следващото стъпало към това да станете специалисти по данни. GLM идва с няколко форми, като най-известните са logit, probit и cloglog.

Тези GLM са много подходящи за класификационни въпроси: да бъдеш или да не бъдеш, да гласуваш или да не гласуваш и да кликнеш или да не кликнеш.

За пълното описание на проекта и пълния R код, моля, проверете моя Github.

Основни положения

Обикновено GLM за двоични данни може да се изрази в следната форма:

където g представлява линейна връзка на предикторите (вдясно) на вероятността p, а g е функция, която преобразува p ∈[0,1] в ℝ.

Има три начина за свързване на компонентите отляво и отдясно.

Логит:

С думи лог формата на p.

Пробит:

С думи, обратната на кумулативната функция на плътност на нормалното разпределение.

Cloglog:

С думи, лог формата на отрицателната стойност на лог формата на вероятността да не се случи. объркани? Поне аз съм. Функцията за връзка за този е проста.

Добре, нека продължим напред и да изградим GLM модели, за да предвидим кой е по-уязвим към употребата на наркотици и да се научим да четем сюжети.

  1. Зареждане, почистване и разделяне на набора от данни
library(readr)
drug_use <- read_csv(‘drug.csv’,col_names=c(‘ID’,’Age’,’Gender’,’Education’,’Country’,’Ethnicity’,’Nscore’,’Escore’,’Oscore’,’Ascore’,’Cscore’,’Impulsive’,’SS’,’Alcohol’,’Amphet’,’Amyl’,’Benzos’,’Caff’,’Cannabis’,’Choc’,’Coke’,’Crack’,’Ecstasy’,’Heroin’,’Ketamine’,’Legalh’,’LSD’,’Meth’,’Mushrooms’,’Nicotine’,’Semer’,’VSA’))
library(dplyr)
drug_use <- drug_use %>% mutate_at(as.ordered, .vars=vars(Alcohol:VSA)) 
drug_use <- drug_use %>%
 mutate(Gender = factor(Gender, labels=c(“Male”, “Female”))) %>%
 mutate(Ethnicity = factor(Ethnicity, labels=c(“Black”, “Asian”, “White”,
 “Mixed:White/Black”, “Other”,
 “Mixed:White/Asian”,
 “Mixed:Black/Asian”))) %>%
 mutate(Country = factor(Country, labels=c(“Australia”, “Canada”, “New Zealand”, 
 “Other”, “Ireland”, “UK”,”USA”)))
#create a new factor variable called recent_cannabis_use
drug_use = drug_use %>% 
mutate(recent_cannabis_use=as.factor(ifelse(Cannabis>=”CL3",”Yes”,”No”)))
#create a new tibble that includes a subset of the original variable 
#data split into training and test sets
drug_use_subset <- drug_use %>% select(Age:SS, recent_cannabis_use)
set.seed(1)
traint.indices = sample(1:nrow(drug_use_subset),1500)
drug_use_train = drug_use_subset[traint.indices,]
drug_use_test = drug_use_subset[-traint.indices,]
dim(drug_use_train)
dim(drug_use_test)
[1] 1500   13
[1] 385  13

И така, комплектът от влакове има размери 1500*13, а тестовият комплект има размери 385*13.

2. Поставете логистична регресия

#use logit as the link function
glm_fit = glm(recent_cannabis_use ~ .,data=drug_use_train,family=binomial(link= “logit”))
summary(glm_fit)
Call:
glm(formula = recent_cannabis_use ~ ., family = binomial(link = "logit"), 
    data = drug_use_train)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.0024  -0.5996   0.1512   0.5410   2.7525  

Coefficients:
                           Estimate Std. Error z value Pr(>|z|)    
(Intercept)                1.33629    0.64895   2.059 0.039480 *  
Age                       -0.77441    0.09123  -8.489  < 2e-16 ***
GenderFemale              -0.65308    0.15756  -4.145 3.40e-05 ***
Education                 -0.41192    0.08006  -5.145 2.67e-07 ***
CountryCanada             -0.67373    1.23497  -0.546 0.585377    
CountryNew Zealand        -1.24256    0.31946  -3.890 0.000100 ***
CountryOther               0.11062    0.49754   0.222 0.824056    
CountryIreland            -0.50841    0.69084  -0.736 0.461773    
CountryUK                 -0.88941    0.39042  -2.278 0.022720 *  
CountryUSA                -1.97561    0.20101  -9.828  < 2e-16 ***
EthnicityAsian            -1.19642    0.96794  -1.236 0.216443    
EthnicityWhite             0.65189    0.63569   1.025 0.305130    
EthnicityMixed:White/Black 0.10814    1.07403   0.101 0.919799    
EthnicityOther             0.66571    0.79791   0.834 0.404105    
EthnicityMixed:White/Asian 0.48986    0.96724   0.506 0.612535    
EthnicityMixed:Black/Asian13.07740  466.45641   0.028 0.977634    
Nscore                    -0.08318    0.09163  -0.908 0.363956    
Escore                    -0.11130    0.09621  -1.157 0.247349    
Oscore                     0.64932    0.09259   7.013 2.33e-12 ***
Ascore                     0.09697    0.08235   1.178 0.238990    
Cscore                    -0.30243    0.09179  -3.295 0.000984 ***
Impulsive                 -0.14213    0.10381  -1.369 0.170958    
SS                         0.70960    0.11793   6.017 1.78e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Интерпретациите на са ясни и значими променливи

включват: възраст, жена, образование, променлива за страната (ZJ, UK, USA), oscore, резултат и SS.

3. Пробит и запушване

#probit link function
glm_fit_probit = glm(recent_cannabis_use ~ .,data=drug_use_train,family = binomial(link = “probit”))
prob_training_probit = predict(glm_fit_probit, type=”response”)
#c-log-log” link
glm_fit_clog = glm(recent_cannabis_use ~ .,data=drug_use_train,family = binomial(link = “cloglog”))
prob_training_clog = predict(glm_fit_clog, type=”response”)

4. Сравнете тези три сюжета

# compare logit and probit
plot(prob_training_logit,prob_training_probit,xlab = “Fitted Values of Logit Model”,ylab= “Fitted Values of Probit Model”, main= “Plot 1: Fitted Values for Logit and Probit Regressions”, pch=19, cex=0.2,abline(a=0,b=1,col=”red”))

Както е добре известно, probit и logit прогнозират почти същите стойности, тъй като са разположени близо до линията от 45 градуса. Вероятно единствената разлика е в средния диапазон между 0,5 до 0,8, където пробит моделът прогнозира стойност малко под abline.

# compare logit and cloglog
plot(prob_training_logit,prob_training_clog,xlab = “Fitted Values of Logit Model”,ylab= “Fitted Values of Cloglog Model”, main= “Plot 2: Fitted Values for Logit and Cloglog Regressions”, pch=19, cex=0.2,abline(a=0,b=1,col=”red”))

Това е интересен сюжет. C-loglog генерира прогнози с по-висока стойност в ранния етап, последвани от по-ниско разпръснати прогнози от logit в средния диапазон.

В машинното обучение логистичната регресия служи като 101 техника, която специалистите по данни могат да прилагат.

Приятно ви е да четете това?

Моля, намерете ме в LinkedIn и Twitter.

Също така проверете другите ми публикации за изкуствен интелект и машинно обучение.