第四课 牛顿方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四课 牛顿方法相关的知识,希望对你有一定的参考价值。

参考技术A

1.牛顿方法(Newton’s method)
2.指数族(Exponential family)
3.广义线性模型(Generalized linear models)

简单的来说就是 通过求当前点的导数得到下一个点. 用到的性质是导数值等于该点切线和横轴夹角的正切值.

其中,

伯努利分布 可以写成:

高斯分布 : 回忆我们对线性回归求导时,方差对我们最终结果并没有任何影响.为了使问题简化,令

</br>

为了导出GLM,作三个假设:

(这个假设对logistic回归和线性回归都成立)

3.1普通的最小二乘法 为了说明普通的最小二乘法是GLM的特例,设定目标变量y(在GLM术语中叫响应变量-response variable)是连续的,并且假设服从高斯分布

3.2 logistic回归 考虑logistic,我们感兴趣的是二元分类,也就是说

梯度下降法和高斯牛顿法都是最优化方法。
其区别之处在于,梯度下降法在寻找目标函数极小值时,是沿着反梯度方向进行寻找的。梯度的定义就是指向标量场增长最快的方向,在寻找极小值时,先随便定初始点(x0,y0)然后进行迭代不断寻找直到梯度的模达到预设的要求。
但是梯度下降法的缺点之处在于:在远离极小值的地方下降很快,而在靠近极小值的地方下降很慢。
而高斯牛顿法是一种非线性最小二乘最优化方法。其利用了目标函数的泰勒展开式把非线性函数的最小二乘化问题化为每次迭代的线性函数的最小二乘化问题。
高斯牛顿法的缺点在于:若初始点距离极小值点过远,迭代步长过大会导致迭代下一代的函数值不一定小于上一代的函数值。所以在高斯牛顿法中加入了因子μ,当μ大时相当于梯度下降法,μ小时相当于高斯牛顿法。在使用Levenberg-Marquart时,先设置一个比较小的μ值,当发现目标函数反而增大时,将μ增大使用梯度下降法快速寻找,然后再将μ减小使用牛顿法进行寻找。
牛顿法要比梯度下降法更具有全局判断能力。梯度法从初始点的领域开始判断,在局部进行下降,然后步步逼近极值,往往是走之字型的。
牛顿法在二阶导数的作用下,从函数的凸性出发,直接搜索怎样到达极值点,也就是说在选择方向时,不仅考虑当前坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。
从收敛速度来看,梯度下降是线性收敛,牛顿法是超线性的,至少二阶收敛。

暂缺

PHP走进 PHP 第四课 数组

【PHP】✔️走进 PHP✔️ 第四课 数组

概述

从今天开始, 小白我将带领大家一起来学习一下 PHP 的基础知识.

数组

数组 (Array) 是有序的元素的序列, 数组包含的每一个数据我们称之为元素 (Element).

格式:

方法一: $数组名称 = array(元素1, 元素2, ...);
方法二: $数组名称 = [元素1, 元素2, ...];

例子:

<?php

# 定义数组 (方法一)
$array1 = array("我是小白呀", "我是大白呀");

# 定义数组 (方法二)
$array2 = ["我是小白呀", "我是大白呀"];

# 调试输出
print_r($array1);
print_r($array2);

?>

输出结果:

Array
(
    [0] => 我是小白呀
    [1] => 我是大白呀
)
Array
(
    [0] => 我是小白呀
    [1] => 我是大白呀
)

print_r 方法

print_r方法相较于echo可以打印变量本身, 帮助我们显示数组中的键 (Key) 和元素 (Element).

举个例子:

<?php

# 定义数组
$array = ["我是小白呀", "我是大白呀"];

# echo
echo $array;
echo "\\n";

# 调试输出
print_r($array);

?>

输出结果:

Array
Array
(
    [0] => 我是小白呀
    [1] => 我是大白呀
)

我们今天看到, 使用echo方法调试输出数组时, 只会输出 “Array”, 而不会具体打印其中的键 (Key) 和元素 (Element).

键值对数组

键值对数组顾名思义就是由 “键” (Key) 和 “值” (Value) 组成的数组. PHP 中的键值对数组类似于 Python 中的字典.

格式:

$数组名 = [
    键1 => 值1,
    键2 => 值2,
    ...
];

例子:

<?php

# 创建键值对数组
$array = [
    "1号" => "我是小白呀",
    "2号" => "我是大白呀"
];

# 调试输出
print_r($array);

?>

输出结果:

Array
(
    [1号] => 我是小白呀
    [2号] => 我是大白呀
)

数组更新

PHP 中的数组会自动扩展和缩小, 我们可以使用索引进行值的添加和修改. 在 PHP 中, 我们可以使用unset函数来删除数组元素, count函数来获取数组对应的长度.


例子:

<?php

# 定义数组
$array = [1, 2, 3];
print_r($array);

# 通过索引修改数组元素
$array[0] = 0;
print_r($array);

# 添加元素
$array[] = 4;
print_r($array);

# 删除元素
unset($array[3]);
print_r($array);

# 数组长度
echo "数组长度:" . count($array);
?>

输出结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
Array
(
    [0] => 0
    [1] => 2
    [2] => 3
)
Array
(
    [0] => 0
    [1] => 2
    [2] => 3
    [3] => 4
)
Array
(
    [0] => 0
    [1] => 2
    [2] => 3
)
数组长度:3

二维数组

二维数组本质上是以数组作为数组元素的数组, 即 “数组的数组”.

格式:

$数组名 = [
    一维数组,
    一维数组,
    ...
];

例子:

<?php

# 定义二维数组
$array = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

# 调试输出
print_r($array);

?>

输出结果:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

    [2] => Array
        (
            [0] => 7
            [1] => 8
            [2] => 9
        )

)

以上是关于第四课 牛顿方法的主要内容,如果未能解决你的问题,请参考以下文章

(笔记)斯坦福机器学习第四讲--牛顿法

拟牛顿法的DFP方法

牛顿法和二分法精度上的区别

如何用牛顿迭代法求解方程

牛顿方法

斯坦福公开课4:牛顿方法