рдЪрд▓реЛ рдПрдирдПрдПрд╕ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ

рдЕрдХреНрд╕рд░, рдЕрдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЖрд░ рдореЗрдВ, рдРрд╕реЗ рдЪрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ "рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ," рдпрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ NA рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ, рдЕрдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ: рдХреНрдпрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдпрд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрдХ рд╣реИ?

рдЖрдЗрдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдПрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛ рд▓рдЧрднрдЧ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдмрди рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдЯреИрдирд┐рдХ: рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд╕реЗ рдбрд┐рдЬрд╛рд╕реНрдЯрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдХрд╛рдЧрд▓реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдпрд╛ рдЖрд░ рдЯреВрд▓реНрд╕ (рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
download.file("https://bitbucket.org/kailexx/fixnas/raw/ae65f7939974e709f10aa50c96c368120487a7f2/train.csv", destfile="train.csv", method= "wget") train <- read.csv("train.csv", na.strings = c(NA, "")) 


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдлрд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреНрдпрд╛ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 str(train) 'data.frame': 891 obs. of 12 variables: $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ... $ Survived : int 0 1 1 1 0 0 0 0 1 1 ... $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ... $ Name : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 416 581 ... $ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ... $ Age : num 22 38 26 35 35 NA 54 2 27 14 ... $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ... $ Parch : int 0 0 0 0 0 0 0 1 2 0 ... $ Ticket : Factor w/ 681 levels "110152","110413",..: 525 596 662 50 473 276 86 396 345 133 ... $ Fare : num 7.25 71.28 7.92 53.1 8.05 ... $ Cabin : Factor w/ 147 levels "A10","A14","A16",..: NA 82 NA 56 NA NA 130 NA NA NA ... $ Embarked : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 2 3 3 3 1 ... sum(is.na(train)) [1] 866 


рд╕реЗрдЯ рдореЗрдВ 891 рд▓рд╛рдЗрдиреЗрдВ рдФрд░ 866 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рд╣реИрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:


рджреЛ рд╕рд░рд▓ рдЙрдкрд╛рдп


рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдЖрд▓рд╕реА рдХреЗ рд▓рд┐рдП рд╣реИ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ R рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд╛рд╕ рддрд░реНрдХ рд╣реИ na.rm, рдЬреЛ TRUE рдХреЗ рдорд╛рди рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ R рдХреЛ рдХреЗрд╡рд▓ NA рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ na.action рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬреЛ рдРрд╕реЗ рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ:
рдпрджрд┐ рдбреЗрдЯрд╛ рдореЗрдВ NA рдореМрдЬреВрдж рд╣реИ рддреЛ na.fail - рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдБред
na.omit, na.exclude - рдорд╛рди NA рдХреЗ рд╕рд╛рде рд╕рднреА рдЪрд░ рд╣рдЯрд╛рдПрдВред
na.pass - рдбреЗрдЯрд╛ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рд╣рдореЗрдВ рдЯрд╛рдЗрдЯреИрдирд┐рдХ рдХреЗ рдпрд╛рддреНрд░рд┐рдпреЛрдВ рдХреА рдФрд╕рдд рдЖрдпреБ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 median(train$Age, na.rm=T) [1] 28 

рджреВрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ - рд╕рднреА рдЕрдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдм рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рди рд╕реЛрдЪреЗрдВ:
 train.nopain <- na.omit(train) nrow(train.nopain) [1] 183 sum(is.na(train.nopain)) [1] 0 median(train.nopain$Age) [1] 36 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, NA рдХреЗ рд╕рд╛рде, 708 рд▓рд╛рдЗрдиреЗрдВ рднреА рд╡рд╛рд╖реНрдкрд┐рдд рд╣реЛ рдЧрдИ рд╣реИрдВред рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рд╣рдо рдЙрдкрд▓рдмреНрдз рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рдПрдирдП рдХреЛ рдХреБрдЫ рдкреВрд░реНрд╡-рдЪрдпрдирд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рд╣реИ; рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдФрд╕рдд рдпрд╛ рдордВрдЭрд▓рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 simpleFix <- function(x, imputeFn=mean){ return(ifelse(is.na(x), imputeFn(x, na.rm=TRUE), x)) } train.median <- train nas.idx <- which(is.na(train.median$Age)) train.median$Age <- simpleFix(train.median$Age, median) 

 head(train.median$Age[nas.idx]) [1] 28 28 28 28 28 28 

рд╕рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрдпреБ рдорд╛рдиреЛрдВ рдХреЛ рдЕрдм рдорд╛рдзреНрдпрд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдФрд╕рдд рдпрд╛ рдФрд╕рддрди рдХреБрдЫ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдкрд╣рд▓реА рд╢реНрд░реЗрдгреА рдХреЗ рдХреЗрдмрд┐рди рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд░реБрд╖ рдпрд╛рддреНрд░реА рдХреЗ рд▓рд┐рдП рдЖрдпреБ рдХреЗ NA рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдФрд╕рдд рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:
 fixAge <- function(tdf, imputeFn=mean) { tdf$Age[is.na(tdf$Age)] <- sapply(which(is.na(tdf$Age)), function(i) imputeFn(tdf$Age[tdf$Pclass == tdf$Pclass[i] & tdf$Sex == tdf$Sex[i]], na.rm=T)) return(tdf) } nas.idx <- which(is.na(train$Age)) train.cond <- fixAge(train, median) 

 head(train.cond$Age[nas.idx]) [1] 25.0 30.0 21.5 25.0 21.5 25.0 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдорд╛рдзреНрдп рдпрд╛ рдорд╛рдзреНрдп рдХреЗ рд╕рд╛рде рдЕрдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рдЪрд░рдг рдореЗрдВ рдХрдореА рдЖрддреА рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо (рдФрд░ рдЬрдЯрд┐рд▓) рд╡рд┐рд▓рдХреНрд╖рдг рдЕрдкрдШрдЯрди (рдПрд╕рд╡реАрдбреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдирд┐рдореНрди рд░реИрдВрдХ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдиреНрдирд┐рдХрдЯрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдореВрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдирд┐рдореНрди рд╢реНрд░реЗрдгреА рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЕрдкрдШрдЯрди рд╕реЗ рд▓рд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рдиреНрдирд┐рдХрдЯрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рд░реИрдВрдХ рдФрд░ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 15 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде 10x10 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЧреЛрд▓рд╛рдХрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
 k <- 6 #    n.iters <- 10 nrows <- 10 set.seed(100500) train.mat <- runif(nrows * nrows) train.mat[sample(1:length(train.mat), 15)] <- NA train.mat <- matrix(train.mat, nrows) #     15 NA  nas.idx <- which(is.na(train.mat)) train.svd <- train.mat train.svd <- apply(train.svd, 2, simpleFix) #  NA     for (i in 1:n.iters){ s <- svd(train.svd, k, k) train.svd[nas.idx] <- (s$u %*% diag(s$d[1:k], nrow=k, ncol=k) %*% t(s$v))[nas.idx] } 

 head(train.svd[nas.idx]) [1] 0.3020229 0.4475467 0.3114711 0.7161445 0.4379184 0.6734933 


рдЧреИрд░-рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ


рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рд╕реЗ Embarked рдХреНрд╖реЗрддреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ 2 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рдорд┐рд▓реЗрдВрдЧреЗред рдПрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдХрд▓реНрдк рдирдореВрдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:
 fixSample <- function(x) { x[is.na(x)] <- sample(x, sum(is.na(x)), replace = T) return(x) } set.seed(111) nas.idx <- which(is.na(train.cond$Embarked)) train.cond$Embarked <- fixSample(train.cond$Embarked) 

 train.cond$Embarked[nas.idx] [1] SC Levels: CQS sum(is.na(train.cond$Embarked)) [1] 0 

рджрд░рдЕрд╕рд▓, рдирдореВрдирд╛ рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдЖрдзреБрдирд┐рдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрд╡рд┐рджреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред

рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг


рдЖрд░ рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВ - рд╕рд╛рдзрд╛рд░рдг рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдЧрдорди рд╕реЗ 3 рдмреА рддрдХрдиреАрдХ (рдмреИрдЧрд┐рдВрдЧ, рдмреВрд╕реНрдЯрд┐рдВрдЧ, рд╕рдореНрдорд┐рд╢реНрд░рдг) рдХреЗ рд▓рд┐рдПред рдЖрдЗрдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдВрдбрдо рдлрд╝реЙрд░реЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рд╣рдо рдХреБрдЫ рдкреИрд╕реЗрдВрдЬрд░рдЖрдИрдб, рдирд╛рдо, рдЯрд┐рдХрдЯ, рдХреЗрдмрд┐рди рдЪрд░ рднреА рд╣рдЯрд╛ рджреЗрдВрдЧреЗ (рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдХреЗрдмрд┐рди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдорд╛рди рд╣реИрдВ рдХрд┐ "рдЬреЛрдбрд╝рдиреЗ" рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ)ред рдпрджрд┐ randomForest рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ install.packages("randomForest") R рдЗрд╕реЗ CRAN рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
 fixNA <- function(y, x) { require(randomForest) fixer <- randomForest(x[!is.na(y), ], y[!is.na(y)]) y[is.na(y)] <- predict(fixer, x[is.na(y), ]) return(y) } set.seed(111) train.rf <- subset(train, select=-c(PassengerId, Name, Ticket, Cabin)) ageNA.idx <- which(is.na(train.rf$Age)) embNA.idx <- which(is.na(train.rf$Embarked)) sum(is.na(train.rf)) train.rf$Age <- fixNA(train.rf$Age, cbind(train.rf$Pclass, train.rf$Sex, train.rf$Parch)) train.rf$Embarked <- fixNA(train.rf$Embarked, cbind(train.rf$Pclass, train.rf$Sex, train.rf$Parch)) 

 head(train.rf$Age[ageNA.idx]) [1] 29.65873 31.67546 26.64918 29.65873 26.64918 29.65873 head(train.rf$Embarked[embNA.idx]) [1] SS sum(is.na(train.rf)) [1] 0 

рдЗрд╕ рд░реВрдк рдореЗрдВ, рдбреЗрдЯрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЕрдкреВрд░реНрдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ - рд╕рдорд╕реНрдпрд╛ рддреБрдЪреНрдЫ рд╕реЗ рджреВрд░ рд╣реИред рд╕реАрдЖрд░рдПрдПрди рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдирдП рдореВрд▓реНрдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Amelia , imputation ) рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдкреИрдХреЗрдЬ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдирдП рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ ( Hmisc рдкреИрдХреЗрдЬ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, rfImpute рд╕реЗ randomForest )ред рдПрдХреНрд╕рдкреЗрдХреНрдЯреЗрд╢рди рдореИрдХреНрд╕рд┐рдорд╛рдЗрдЬреЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдиреНрджрд░реНрдн рдФрд░ рд╕рд╛рд╣рд┐рддреНрдп


1. рд▓рд╛рдкрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
2. рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рд╖реНрдард╛
3. рдЧреБрдо рдбреЗрдЯрд╛ рдФрд░ рд▓рдШреБ-рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЕрдиреБрдорд╛рди: рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрд╡рд┐рджреН рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдЙрдкрдХрд░рдгред рдирд┐рдХреЛрд▓рд╕ рдЯреАред рд▓реЙрдиреНрдЧрдлреЛрд░реНрдбред

Source: https://habr.com/ru/post/In207750/


All Articles