机器学习与统计建模实践问题解析

机器学习与统计建模实战解析

1、提醒读者交叉验证的结果是随机的,这是由于随机划分为训练集和测试集所致。尝试多次运行线性和k - 近邻代码,并比较结果。

需要多次运行线性和 k-近邻代码,然后比较每次运行所得到的结果,以观察因随机划分训练集和测试集带来的结果随机性。

2、请描述总体人群平均身高与按性别划分的平均身高之间的关系,并用英文表述。同时,请描述身高超过70英寸的人群总体比例与按性别划分的比例之间的关系,并用英文表述。

(a) The average height of the overall population is a weighted average of the average heights divided by gender, and the weight of each gender is the proportion of that gender in the overall population.

(b) The overall proportion of the population with a height over 70 inches is a weighted average of the proportions divided by gender, and the weight of each gender is the proportion of that gender in the overall population.

3、对于随机变量(X, Y),证明预测值µ(X)与预测误差Y - µ(X)不相关。

在随机 $ X $ 的情境下,令 (2.123) 式中的 $ x $ 为 $ Y $,则 $ z = \mu(X) $,可得
$$ E[\mu(X)(Y - \mu(X))] = 0 $$
这表明预测值 $ \mu(X) $ 与预测误差 $ Y - \mu(X) $ 不相关。

对于线性模型在样本层面也有类似结论,在固定 $ X $ 模型中,定义
$$ \hat{\epsilon}_i = Y_i - \tilde{X}_i \hat{\beta} $$
可证明 $ \hat{\epsilon}_i $ 和 $ \hat{\beta}_j $ 的相关性为 0,即每个 $ \hat{\epsilon}_i $ 与 $ \hat{\beta} $ 的任何分量都不相关。

4、在研究参数模型可能的拟合不佳区域时,我们发现参数模型在两端都可能存在问题,但其中一端的问题可能部分归因于偏差问题。已知线性模型在日元极低或极高时高估回归函数,在中等范围可能低估,而k - NN在数据集边缘存在偏差,值低时倾向于高估μ(t),值高时倾向于低估。指出是哪一端,并解释原因。

线性模型在日元极低或极高时高估回归函数,在中等范围可能低估。而 k -NN 在数据集边缘存在偏差,即值低时倾向于高估 μ(t),值高时倾向于低估。所以参数模型在日元极低时出现的高估问题,可能部分是由于 k -NN 在数据低端的高估偏差造成的。

5、有一个数据集可在regtools包中获取。尝试使用LASSO(例如来自glmnet包)和NMF进行替代分析。

可按以下步骤操作:

  1. 加载所需包,如 library(regtools) library(glmnet) library(NMF)
  2. regtools 包中加载数据集;
  3. 使用 glmnet 包进行LASSO分析;
  4. 使用 NMF 包进行非负矩阵分解分析。

6、编写一个R函数,调用形式为cullwords (td, howmany = 0.80) 。这里td是词 - 文档矩阵,参数howmany指定要选择的单词数量。如果它是一个小于1.0的值,意味着按频率提取前howmany比例的单词。如果它是一个整数,则意味着提取该整数个最常出现的单词。让该函数返回td中提取单词的列号。

以下是实现该功能的R函数代码:

cullwords <- function(td, howmany = 0.80) {
  # 计算每列(每个单词)的总频率
  word_freq <- colSums(td)

  # 按频率降序排序
  sorted_freq <- sort(word_freq, decreasing = TRUE)

  if (howmany < 1.0) {
    # 如果howmany小于1.0,提取前howmany比例的单词
    num_words <- ceiling(howmany * length(sorted_freq))
  } else {
    # 如果howmany是整数,提取指定数量的单词
    num_words <- howmany
  }

  # 获取提取单词的列名
  selected_words <- names(sorted_freq)[1:num_words]

  # 获取这些单词在td中的列号
  col_numbers <- which(colnames(td) %in% selected_words)

  return(col_numbers)
}

7、请展示如何使用R函数setdiff()来进行训练/测试集划分。

可使用以下代码示例实现:

假设已有数据集 data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值