机器学习第一次作业
- 若样本的预测标签和真实标签如下:请给出Acc,Precision 和Recall
[预测标签,真实标签]
[ 1, 1],
[ 1, 0],
[ 1, 1],
[ 0, 1],
[ 1, 0],
[ 1, 1],
[ 0, 0],
[ 1, 1],
[ 1, 0],
[ 0, 0]
解:
[1,1]为TP、[1,0]为FP、[0,1]为FN、[0,0]为TN
统计得到
混淆矩阵 | 真实值 | ||
---|---|---|---|
1 | 0 | ||
预测值 | 1 | TP=4 | FP=3 |
0 | FN=1 | TN=2 |
准确率
查准率(精确率)
召回率
- 梯度下降法求解f(u,v)的最小值
其中给出计算过程和迭代次数.
解:
在二元函数梯度下降法中,学习率(learning rate)eta(η)对于u和v通常是一致的,即在每一步迭代中更新u和v的值时使用相同的学习率。这是因为学习率控制了每一步迭代中变量的变化量,如果对于u和v使用不同的学习率,可能会导致算法在收敛过程中产生不稳定或不可预测的行为。因此,通常建议在二元函数梯度下降法中对于u和v使用相同的学习率。
那么我们采用如下表达式移动自变量
其中
两次推导计算
①令等于0.05
此时1.63
②令等于0.05
此时0.33
Python代码实现:
# 使用梯度下降法求二元函数的最小值
# f = 2u^2+4uv+5v^2 初始点为(1,1)
# 设计函数
def function_one(u_input, v_input): # 函数的输入 u,v
f = 2*u_input**2+4*u_input*v_input+5*v_input**2 # 算出f 的值
du = 4*u_input+4*v_input # 算出 一阶u导数的值
dv = 5*u_input+10*v_input # 算出 一阶v导数的值
return f, du, dv # 返回三个值
def main():
u = 1 # 初始点
v = 1 # 初始点
eta = 0.05 # 设置步长
error = 0.000001 # 设置误差函数
f_old, du, dv = function_one(u, v) # 算出初始的值
for i in range(100): # 开始循环 梯度下降 设置循环的次数
u -= eta * du
v -= eta * dv
f_result, du, dv = function_one(u, v) # 获得第一次计算的初始值
if abs(f_result - f_old) < error: # 下降的结果绝对值与误差进行比较 如果在允许范围内则终止
f_final = f_result
print("最小值为: %.5f, 循环次数: %d, 误差:%8f" % (f_final, i, abs(f_result - f_old)))
break
print("第 %d 次迭代, 函数值为 %f,u为 %f,v为 %f" % (i, f_result,u,v))
f_old = f_result
if __name__ == '__main__':
main()
标签:函数,梯度,手推,最小值,result,dv,input,习题,du
From: https://www.cnblogs.com/ranxi169/p/17168010.html