首页 > 其他分享 >机器学习(一):混淆矩阵与最优化方法习题(二元函数最小值 梯度下降法 手推+代码实现)

机器学习(一):混淆矩阵与最优化方法习题(二元函数最小值 梯度下降法 手推+代码实现)

时间:2023-03-01 14:25:18浏览次数:48  
标签:函数 梯度 手推 最小值 result dv input 习题 du

机器学习第一次作业

  1. 若样本的预测标签和真实标签如下:请给出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

准确率 img

查准率(精确率)img

召回率 img

  1. 梯度下降法求解f(u,v)的最小值

img

其中img给出计算过程和迭代次数.

解:

img

在二元函数梯度下降法中,学习率(learning rate)eta(η)对于u和v通常是一致的,即在每一步迭代中更新u和v的值时使用相同的学习率。这是因为学习率控制了每一步迭代中变量的变化量,如果对于u和v使用不同的学习率,可能会导致算法在收敛过程中产生不稳定或不可预测的行为。因此,通常建议在二元函数梯度下降法中对于u和v使用相同的学习率。

那么我们采用如下表达式移动自变量

img

其中

img

img

两次推导计算

①令img等于0.05

img

​ 此时img1.63

②令img等于0.05

img

​ 此时img0.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

相关文章

  • 按要求编写字符界面(算法初阶、最小值和最大值)、填充每个节点的下一个右侧节点指针(
    按要求编写字符界面(算法初阶、最小值和最大值)编写一个字符界面的JavaApplication程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。importjava.util.Sc......
  • Java基础巩固+习题1
    Java基础巩固+习题1上午编程入门:内存(RamdomAccessMemory)RAM是计算机CPU(CenterProcessingUnit)读取磁盘数据时的中间体,磁盘中的文件先读入内存(可缓存),后被CPU读取,本计......
  • 习题练习
    是网上早的题目,答案大部分是我自己写的,部分是别人的答案insertintoStudentvalues('01','赵雷','1990-01-01','男');insertintoStudentvalues('02','钱电'......
  • 寻找旋转排序数组中的最小值---二分查找
    寻找二分排序数组中的最小值已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转......
  • python(8.5)--列表习题
    目录​​一、求输出结果题 ​​​​二、计算列表元素个数 ​​​​三、查找是否存在某元素 ​​​​四、删除某元素 ​​​​五、如何在列表中插入元素​​​​六、如何......
  • Python笔记--练习题(都来瞧一瞧,看一看嘞)
    利用Python对文件进行操作重新写入的文件如下图所示:统计学生成绩文件的最高分最低分和平均分Python如何统计英文文章出现最多的单词Python统计目录下的文件大小......
  • web前端开发第202页习题3代码
    排序参考1<!DOCTYPEhtml>2<htmllang="en">34<head>5<metacharset="UTF-8">6<metahttp-equiv="X-UA-Compatible"content="IE=edge">7......
  • MySQL_demo_50道习题
    title:MySQL_demo_50道习题author:杨晓东permalink:MySQL_demodate:2021-10-0211:27:04categories:-投篮tags:-demo表名和字段–1.学生表Student(s_id,s......
  • Python练习--简单习题(也是一看就能够写出来的代码)
    Python计算列表数字的和数字范围内的所有偶数(append)移除列表中的多个元素(remove)如何实现对列表的去重如何对简单列表进行排序Python实现学生的排序11)......
  • 点分治练习题单(动态更新)
    传送门有点难,慢慢做。1.P2634[国家集训队]聪聪可可比板子要简单一点,分治时寻找路径时用桶记录模数为\(0,1,2\)的个数,再进行\(01\)背包即可。统计答案时由于两点可......