机器学习,回归算法笔记(草履虫都能看懂),简单的一批

机器学习笔记系列

可以从上至下按顺序看喔

有监督学习

含义

  • 给算法一个数据集,其中包含了正确的答案,告诉算法啥是对的啥是错的

  • 我们想要在监督学习中,对于数据集中的每个样本,我们想要算法预测,并得出正确答案

回归

  • 目的是预测一个连续值输出
  • 如一件衣服卖多少钱,可以是100,可以是200或300等等

单元线性回归

含义
  • 给定的数据集为一一对应的数据集,一个x对应一个y,例:一元一次方程

  • 一个算法h(x)给定一个输入值x,能给出一个确定的输出值y,称之为单函数(元)线性回归。

代价函数
  • 代价函数被称为平方误差函数
  • 将预测值与真实值之间的误差取到最小的函数,且用另一个函数来封装他,这个里面的另一个函数就是代价函数
  • 过程如下:
    1. 假设函数: h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
    2. 参数: θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
    3. 代价参数: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2
    4. 目标: m i n i m i z e θ 0 , θ 1   J ( θ 0 , θ 1 ) \mathop{minimize}\limits_{\theta_0,\theta_1}\ J(\theta_0,\theta_1) θ0,θ1minimize J(θ0,θ1)
  • 如上步骤所示,先创建一个假设函数来构成一个线性函数,目的是通过调整参数来尽可能的减少假设函数所求的值和真实数据之间的差距,从而构成的一个代价函数
  • 此处的函数 J J J就是代价函数
  • 代价函数的作用就是其最小值点的参数就是假设函数与数据集所拟合的最好的一条线
梯度下降法
  • 公式: θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) θj:=θjαθjJ(θ0,θ1),此处j等于0和1(其中的阿尔法为学习速率,阿尔法越大,步子迈的就越大,反之亦然)
  • 同步更新 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1的值
  • 更新步骤如下:
    1. t e m p 0 : = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp0:=\theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) temp0:=θ0αθ0J(θ0,θ1)
    2. t e m p 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) temp1:=\theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1) temp1:=θ1αθ1J(θ0,θ1)
    3. θ 0 : = t e m p 0 \theta_0:=temp0 θ0:=temp0
    4. θ 1 : = t e m p 1 \theta_1:=temp1 θ1:=temp1
将梯度下降法与代数函数结合在一起
  • 先要知道导数项的值,如上述公式所示,利用求偏导求出 ∂ ∂ θ 0 J ( θ 0 , θ 1 ) \frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) θ0J(θ0,θ1) ∂ ∂ θ 1 J ( θ 0 , θ 1 ) \frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)
草履虫优化算法(Bacterial Foraging Optimization Algorithm, BFOA)是一种基于模拟自然环境中细菌觅食行为的优化算法。以下是简单的MATLAB实现框架: ```matlan function [x_best, f_best] = bfoa_optimizer(objfun, lowerBound, upperBound, n_bacteria, n_iterations) % 初始化参数 bacteria_pos = lowerBound + (upperBound - lowerBound) * rand(n_bacteria, 1); bacteria_vel = zeros(n_bacteria, 1); pheromone_matrix = ones(size(lowerBound)) / prod(size(lowerBound)); food_source = zeros(1, length(lowerBound)); % 初始食物分布均匀 % 主循环 for iter = 1:n_iterations % 寻找最佳食物源 f_values = objfun(bacteria_pos); food_source = f_values / sum(f_values); % 更新菌落位置 for i = 1:n_bacteria % 遗传移动 bacteria_new_pos = bacteria_pos(i) + bacteria_vel(i); bacteria_new_pos = max([lowerBound, min([bacteria_new_pos, upperBound])]); % 更新速度和位置 bacteria_vel(i) = bacteria_vel(i) + bacteria_new_pos - bacteria_pos(i); bacteria_pos(i) = bacteria_new_pos; % 吃掉部分食物 bacteria_pos(i) = bacteria_pos(i) + pheromone_matrix .* food_source; bacteria_pos(i) = max([lowerBound, min([bacteria_pos(i), upperBound])]); end % 更新信息素矩阵 pheromone_matrix = pheromone_matrix * (1 - decay_rate) + (sum(bacteria_pos, 2) ./ n_bacteria) * release_rate; % 记录并显示最佳解 x_best = bacteria_pos(min(f_values)); f_best = f_values(min(f_values)); fprintf('\nIteration %d: Best Fitness = %.4f at position %s\n', iter, f_best, mat2str(x_best)); end end ``` 这里`objfun`是你要优化的目标函数,`lowerBound`和`upperBound`是搜索空间的边界,`n_bacteria`是细菌的数量(种群规模),`n_iterations`是迭代次数。`decay_rate`和`release_rate`是信息素更新的衰减率和释放率,需根据实际应用调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值