百度提前批-面试凉凉之-梯度下降

说实话,我真的觉得自己脑子不好使,也是恒自己啊,之前我学过的,但是自己没记牢,难受,问道这个关羽梯度下降的问题,我就勉强答了一个随机梯度下降。
怎么说呢,我面试的这个岗位是:数据挖掘,也是我投简历后收到的第一个面试通知,百度提前提,自己确实是没啥时间准备,之前也是忘得差不多了,这次面试我是懂得了,确实把,这个基础真的是很重要的,一些简单的概念是要要牢牢记住的,至少面试前一定要牢牢记住的。
我这次面试感觉一点儿都不好,好多本来自己可以回的没结果也没答对,怪我自己,心里确实不是滋味的。加油吧。

梯度下降:

什么是梯度下降?

梯度;
梯度总结一句话: 对各个未知参数求偏导。
在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。对于在点(x0,y0)的具体梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),如果是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此类推。
    那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。
自己说的不够全面,所以找了一些资料来进行总结。

梯度下降:

为什么会用到梯度下降?梯度下降的意义?

梯度的方向就是函数值变化最快的方向,沿着梯度的方向可以得到函数值最快变化的方并且沿着该方向可以得到函数的最大值;反之,沿着梯度的反方向就可以得到使得函数最小的变化最快的方向。
我们在进行求解的过程总,一般都是使用损失函数,使得损失函数的数值达到最小也就是函数达到了最优,这样我们就需要梯度下降,沿着梯度下降的方向也就是函数变化最快的方向,也就是函数最优的方向。
反之,也可以求损失函数的相反数,就可以用到梯度上升。

梯度下降的原理:

首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。
    从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
    在这里插入图片描述

梯度下降的算法如何进行调优

1、步长 首先对于步长的选择要合适,步长太大,会导致迭代过快容易跳过最优值,步长太小迭代过慢,容易导致陷入局部最优。可以选择多种步长进行尝试,然后观察梯度值是否在降低。只有选择多次之后,才会得到一个最优的数值。
2、算法参数初始值的选择。初始值的选择不同,最优值也就不同,有可能会存在局部最优的风险,如果是凸函数肯定就会得到最优值。需要选择多个初始值来进行求解。
3、需要将特征进行归一化。对数据进行归一化,求出期望值和标准差,可以加快迭代速度。

梯度下降的方法有哪些?

随机梯度下降
随机取一个样本来进行更新。

批量梯度下降
取所有的样本来进行更新。

小批量梯度下降
折中,随机取一些样本进行更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,以下是一个简单的MySQL存储过程,可以用来量插入业务数据: ``` DELIMITER // CREATE PROCEDURE generate_business_data(IN num_records INT) BEGIN DECLARE i INT DEFAULT 1; WHILE i <= num_records DO INSERT INTO business_table (column1, column2, column3) VALUES (CONCAT('data_', i), RAND()*100, NOW()); SET i = i + 1; END WHILE; END // DELIMITER ; ``` 这个存储过程接受一个整数参数`num_records`,表示需要生成的数据行数。它会使用一个循环来逐行插入数据到`business_table`表中,其中`column1`列包含以"data_"开头的字符串,`column2`列包含一个随机的0到100之间的数值,`column3`列包含当前时间戳。 你可以根据实际需要修改列名和数据类型,并调整存储过程中的逻辑来生成符合要求的数据。 ### 回答2: 好的,以下是一个用于量造业务数据的 MySQL 存储过程的示例: ``` DELIMITER // CREATE PROCEDURE generate_business_data(IN num INT) BEGIN DECLARE i INT DEFAULT 1; DECLARE random_num INT; -- 创建临时表存储生成的数据 CREATE TEMPORARY TABLE temp_business_data ( id INT PRIMARY KEY AUTO_INCREMENT, data VARCHAR(255) ); -- 使用循环生成指定数量的数据 WHILE i <= num DO -- 随机生成业务数据 SET random_num = FLOOR(RAND() * 10000); -- 插入生成的数据到临时表中 INSERT INTO temp_business_data (data) VALUES (CONCAT('业务数据', random_num)); SET i = i + 1; END WHILE; -- 从临时表中查询生成的数据 SELECT * FROM temp_business_data; -- 删除临时表 DROP TABLE temp_business_data; END // DELIMITER ; ``` 上面的存储过程接受一个参数 `num`,表示需要生成的业务数据的数量。它会使用循环来生成指定数量的数据,并将生成的数据插入到一个临时表中。最后,它会返回生成的数据。 使用示例: ``` CALL generate_business_data(10); ``` 以上示例将生成 10 条业务数据,并将结果返回。你可以根据需要调整参数的数量来生成不同数量的数据。 ### 回答3: 您好,下面是一个示例存储过程,可以帮助您量生成一些业务数据。该存储过程将向指定的表中插入指定数量的记录,根据您的需要,您可以修改表名、字段名以及数量等参数。 ```sql DELIMITER $$ CREATE PROCEDURE generateBusinessData(IN tableName VARCHAR(255), IN recordCount INT) BEGIN DECLARE i INT DEFAULT 0; START TRANSACTION; WHILE i < recordCount DO INSERT INTO tableName (column1, column2) VALUES (CONCAT('Value', i), i); SET i = i + 1; END WHILE; COMMIT; END $$ DELIMITER ; ``` 使用方法: 1. 将存储过程复制到MySQL的查询界面。 2. 执行以下命令创建存储过程:`CALL generateBusinessData('yourTableName', 100);`,其中 'yourTableName' 是您要插入数据的表名,100 是要生成的记录数量。 请注意,这只是一个示例存储过程,您需要根据自己的实际情况来修改表结构和字段名称。同时,确保在运行存储过程之前已创建好相应的表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椒椒。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值