1. 假设有一个二分类的数据集,共含有100个样本,其中正例和负例的比例是1:1,使用某分类模型采用五折交叉验证实验三次,子集与原数据集独立同分布,结果如下。
表 1. 五折交叉验证正例分类结果统计
D1为测试集 D2为测试集 D3为测试集 D4为测试集 D5为测试集
第一次 9/2 8/3 9/2 7/1 7/0
第二次 9/1 8/2 11/1 12/2 10/0
第三次 10/1 11/3 15/6 10/0 12/2
*其中m/n表示一共识别出正例m个,识别错误正例n个。
(1)根据上述实验结果,计算该分类模型的正确率。
(2)根据上述实验结果完成分类结果混淆矩阵。
表 2. 分类结果混淆矩阵
真实情况 预测结果
正例 负例
正例
负例
(3)计算该模型的查准率(准确率)、查全率(召回率)和F1。
(可手写拍照上传,在纸上明显位置写清楚学号姓名)
- 我的答案:
-
(1)计算正确率: 首先,我们需要计算每次五折交叉验证中的正确分类的样本数,然后求平均。 对于每一次五折交叉验证: 第一次:(9+2+8+3+9+2+7+1+7+0)/(2×5×10)=0.9 (因为正例负例各半,所以总数是 2×5×5=50) 第二次:(9+1+8+2+11+1+12+2+10+0)/50=0.96 第三次:(10+1+11+3+15+6+10+0+12+2)/50=0.94 然后,我们计算三次五折交叉验证的平均正确率: (0.9+0.96+0.94)/3=0.9333 所以,该分类模型的正确率为 93.33%。
表 2. 分类结果混淆矩阵
真实情况\预测结果 正例 负例正例 110(TP) 19(FN)
负例 29(FP) 21*(TN,基于近似计算)
(3)计算查准率(准确率)、查全率(召回率)和F1: 查准率(Precision):TP/(TP+FP)=110/(110+29)≈0.7870 查全率(Recall,又称召回率):TP/(TP+FN)=110/(110+19)≈0.8530 F1值:2×(Precision×Recall)/(Precision+Recall)=2×(0.7870×0.8530)/(0.7870+0.8530)≈0.8186
2. (简答题)
请写出一般线性回归(最小二乘法线性回归)的伪代码
- 我的答案:
-
伪代码:
函数 最小二乘法线性回归(X, y):
# 初始化
β = 零向量(n) # n是X的行数(特征数量+1,如果包含截距)
X_T = X的转置()
XX_T = X * X_T # 矩阵乘法
# 计算β
XX_T_inv = XX_T的逆() # 注意:这里需要确保XX_T是可逆的
Xy = X * y # 矩阵与向量的乘法
β = XX_T_inv * Xy # 矩阵与向量的乘法
# 返回结果
返回 β
3. (简答题)
请写出对数几率线性回归算法的伪代码。
(可手写拍照提交,纸上写明学号姓名)
- 我的答案:
-
伪代码:
函数 对数几率线性回归(X, y, α, ε, num_iterations):
# 初始化
m, n = X.shape # m为样本数,n为特征数
β = 零向量(n+1) # 初始化β,包含偏置项
X = 添加截距项(X) # 在X前添加一列全为1的列向量
# 梯度下降优化
对于 i 从 1 到 num_iterations:
p = sigmoid(X * β) # 计算预测概率
g = (1/m) * X' * (p - y) # 计算梯度
β = β - α * g # 更新β
# 检查收敛条件
if 梯度的模(g) < ε:
break # 如果梯度足够小,则提前停止迭代
# 返回结果
返回 β
# 辅助函数:sigmoid
函数 sigmoid(z):
返回 1 / (1 + exp(-z))