我在R中利用可用的Vanderbilt Titanic数据集HERE找到了一些研究机器学习的代码。它是没有现场讲师或其他资源来回答我自己的问题的课程的一部分。这项工作的最终目标是根据其他观察到的数据预测生存。我们已将数据拆分为训练集和测试集,并运行str(training)
返回:
> str(training)
'data.frame': 917 obs. of 14 variables:
$ pclass : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
$ survived : Factor w/ 2 levels "0","1": 2 2 1 1 2 2 1 2 2 2 ...
$ name : chr "Allen, Miss. Elisabeth Walton" "Allison, Master. Hudson Trevor" "Allison, Miss. Helen Loraine" "Allison, Mrs. Hudson J C (Bessie Waldo Daniels)" ...
$ sex : Factor w/ 2 levels "female","male": 1 2 1 1 2 1 2 1 1 1 ...
$ age : num 29 0.92 2 25 48 63 71 18 24 26 ...
$ sibsp : int 0 1 1 1 0 1 0 1 0 0 ...
$ parch : int 0 2 2 2 0 0 0 0 0 0 ...
$ ticket : chr "24160" "113781" "113781" "113781" ...
$ fare : num 211.3 151.6 151.6 151.6 26.6 ...
$ cabin : chr "B5" "C22 C26" "C22 C26" "C22 C26" ...
$ embarked : Factor w/ 4 levels "","C","Q","S": 4 4 4 4 4 4 2 2 2 4 ...
$ boat : chr "2" "11" "" "" ...
$ body : int NA NA NA NA NA NA 22 NA NA NA ...
$ home.dest: chr "St Louis, MO" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" ...
我的问题是双重的。这个过程的第一步是将函数标记并应用于“因子变量”,如下所示:
factor_vars <- c('pclass', 'sex', 'embarked', 'survived')
training[factor_vars] <- lapply(training[factor_vars], function(x) as.factor(x))
我理解此处的factor_vars
作业,因为这些变量在调用Factor
时会明确标记为str(training)
。我的问题是为什么我们运行lapply
函数?它似乎只是将因子变量分类为因子。 training[factor_vars] <- lapply(training[factor_vars], function(x) as.factor(x))
代码行中究竟发生了什么?
下一步是将缺失的变量age
归为一类。
impute_variables <- c('pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked')
mice_model <- mice(training[,impute_variables], method='rf')
impute_variables
?包含sex
但不包括boat
等内容的基础是什么?mice()
函数中的训练数据进行子集化,仅对impute_variables
列进行操作? mice_model
返回的输出为:
iter imp variable
1 1 age
1 2 age
1 3 age
1 4 age
1 5 age
2 1 age
2 2 age
2 3 age
2 4 age
2 5 age
3 1 age
3 2 age
3 3 age
3 4 age
3 5 age
4 1 age
4 2 age
4 3 age
4 4 age
4 5 age
5 1 age
5 2 age
5 3 age
5 4 age
5 5 age
在上述任何代码中,我们明确告诉mice()
函数估算年龄?
答案 0 :(得分:1)
简短回答:课程讲师通常会给出含糊不清和令人困惑的例子。
长答案:正如LAP所指出的那样,age
会确定任何输入它的变量。在这种特殊情况下,泰坦尼克数据集只有一列具有任何缺失值 - #define DISP(f,x) printf(#f"(%g) = %g\n", x, f(x))
。为什么教练选择在插补中任意包含其他变量是任何人的猜测。他没有在书中解释他为什么会这样做。