线性回归及逻辑回归算法相关推导与求导过程以及初步版本的练习代码

本文深入解析线性回归与逻辑回归算法,涵盖模型构建、参数求解、梯度下降法、似然函数及评估方法,适用于初学者与进阶者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性回归算法及逻辑回归算法相关推导

@(机器学习)[线性回归算法]

  • 使用的数据

如下图所示是我们使用的案例数据

在这里插入图片描述

  • 推论

如图是数据构成的平面
在这里插入图片描述

X 1 , X 2 X_1,X_2 X1,X2是我们的两个特征(年龄和工资),Y是银行最终会借给我们的多少钱。我们需要找到一个合适的线来拟合我们的数据,从而对我们未来的数据进行预测

假设 θ 1 是 年 龄 的 参 数 , θ 2 是 工 资 的 参 数 。 假 设 H θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 ( 其 中 θ 0 为 偏 置 项 ) \theta_1是年龄的参数,\theta_2是工资的参数。假设H_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2(其中\theta_0为偏置项) θ1θ2Hθ(x)=θ0+θ1x1+θ2x2θ0.我们的任务就是利用数据进行训练找到最适合的 θ 0 , θ 1 , θ 2 \theta_0,\theta_1,\theta_2 θ0,θ1,θ2

  • 利用矩阵进行表示 H θ ( x ) H_\theta(x) Hθ(x)

θ = [ θ 0 θ 1 θ 2 ] \theta=\left[ \begin{matrix} \theta_0 \\ \theta_1 \\ \theta_2 \end{matrix} \right] θ=θ0θ1θ2
X = [ x 0 x 1 x 2 ] X=\left[ \begin{matrix} x_0 \\ x_1 \\ x_2 \end{matrix} \right] X=x0x1x2
其中 x 0 = 1 x_0=1 x0=1
则 H θ ( x ) 可 以 变 成 则H_\theta(x)可以变成 Hθ(x)
H θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 = ∑ i = 0 2 θ i x i = θ T X H_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2=\sum_{i=0}^2\theta_ix_i=\theta^TX Hθ(x)=θ0x0+θ1x1+θ2x2=i=02θixi=θTX

  • 误差

真实值和预测值之间肯定是要存在差异的
(用 ϵ \epsilon ϵ来表示该误差)
则对于每一个样本来说 (1) y i = θ T X i + ϵ i y^i=\theta^TX^i+\epsilon^i \tag{1} yi=θTXi+ϵi(1)
由 于 误 差 ϵ 是 独 立 并 且 有 相 同 的 分 布 , 并 且 服 从 均 值 为 0 , 方 差 为 θ 2 的 高 斯 分 布 所 以 p ( ϵ i ) 为 由于误差\epsilon是独立并且有相同的分布,并且服从均值为0,方差为\theta^2的高斯分布 所以p(\epsilon^i)为 ϵ0θ2p(ϵi)
(2) p ( ϵ i ) = 1 2 π σ e − ( ϵ i − μ ) 2 2 σ 2 其 中 μ = 0 所 以 p ( ϵ i ) = 1 2 π σ e − ( ϵ i ) 2 2 σ 2 p(\epsilon^i) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon^i-\mu)^2}{2\sigma^2}} 其中\mu=0所以p(\epsilon^i) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(\epsilon^i)^2}{2\sigma^2}} \tag{2} p(ϵi)=2π σ1e2σ2(ϵiμ)2μ=0p(ϵi)=2π σ1e2σ2(ϵi)2(2)
(3) 由 ( 1 ) 式 可 知 ⇒ ϵ i = y i − θ T X i 由(1)式可知\Rightarrow \epsilon^i=y^i-\theta^TX^i \tag{3} (1)ϵi=yiθTXi(3)
(4) 把 ( 3 ) 试 带 入 ( 2 ) 得 ⇒ p ( y i ∣ X i ; θ ) = 1 2 π σ e − ( y i − θ T X i ) 2 2 σ 2 把(3)试带入(2)得\Rightarrow p(y^i|X^i;\theta) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y^i-\theta^TX^i)^2}{2\sigma^2}} \tag{4} (3)(2)p(yiXi;θ)=2π σ1e2σ2(yiθTXi)2(4)

目 前 我 们 有 了 数 据 和 模 型 需 要 去 求 使 得 更 符 合 真 实 数 据 的 参 数 θ , 便 可 以 使 用 极 大 似 然 对 参 数 θ 进 行 求 解 目前我们有了数据和模型需要去求使得更符合真实数据的参数\theta ,便可以使用极大似然对参数\theta进行求解 使θ,便使θ

  • 似然函数

L ( θ ) = ∏ i = 1 m p ( y i ∣ X i ; θ ) = ∏ i = 1 m 1 2 π σ e − ( y i − θ T X i ) 2 2 σ 2 L(\theta)=\prod_{i=1}^mp(y^i|X^i;\theta)=\prod_{i=1}^m\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y^i-\theta^TX^i)^2}{2\sigma^2}} L(θ)=i=1mp(yiXi;θ)=i=1m2π σ1e2σ2(yiθTXi)2
为使计算更加方便对似然函数取对数
ln ⁡ L ( θ ) = ln ⁡ ∏ i = 1 m 1 s q r t 2 π σ e − ( y 2 − θ T X i ) 2 2 σ 2 = ∑ i = 1 m ln ⁡ 1 2 π σ e − ( y i − θ T X i ) 2 2 σ 2 \ln L(\theta) = \ln \prod_{i=1}^m\frac{1}{sqrt{2\pi}\sigma}e^{-\frac{(y^2-\theta^TX^i)^2}{2\sigma^2}} = \sum_{i=1}^m \ln \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y^i-\theta^TX^i)^2}{2\sigma^2}} lnL(θ)=lni=1msqrt2πσ1e2σ2(y2θTXi)2=i=1mln2π σ1e2σ2(yiθTXi)2
展开以后得:
m ln ⁡ 1 s q r t 2 π σ − 1 σ 2 ∗ 1 2 ∑ i = 1 m ( y i − θ T X i ) 2 m\ln\frac{1}{sqrt{2\pi}\sigma}-\frac{1}{\sigma^2}*\frac{1}{2}\sum_{i=1}^m(y^i-\theta^TX^i)^2 mlnsqrt2πσ1σ2121i=1m(yiθTXi)2

目标是让似然函数越大越好所以可以使 J ( θ ) = 1 2 ∑ i = 1 m ( y i − θ T X i ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^m(y^i-\theta^TX^i)^2 J(θ)=21i=1m(yiθTXi)2越小越好.

  • 目标函数

J ( θ ) = 1 2 ∑ i = 1 m ( H θ ( X i ) − y i ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2} \sum_{i=1}^m(H_\theta(X^i)-y^i)^2 = \frac{1}{2}(X\theta-y)^T(X\theta-y) J(θ)=21i=1m(Hθ(Xi)yi)2=21(Xθy)T(Xθy)
因为在矩阵中 a 2 = a T ∗ a a^2 = a^T*a a2=aTa
对目标函数进行求导
∇ θ J ( θ ) = ∇ θ ( 1 2 ( X θ − y ) T ( X θ − y ) ) = ∇ θ ( 1 2 ( θ T X T − y T ) ( X θ − y ) ) = ∇ θ ( 1 2 ( θ 2 X T X θ − θ T X T y − y T X θ + y T y ) ) = 1 2 ( 2 X T X θ − X T y − ( y T X ) T ) = X T X θ − X T y \nabla_\theta J(\theta)=\nabla_\theta (\frac{1}{2}(X\theta-y)^T(X\theta-y))=\nabla_\theta(\frac{1}{2}(\theta^TX^T-y^T)(X\theta-y))=\nabla_\theta(\frac{1}{2}(\theta^2X^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty))=\frac{1}{2}(2X^TX\theta-X^Ty-(y^TX)^T)=X^TX\theta-X^Ty θJ(θ)=θ(21(Xθy)T(Xθy))=θ(21(θTXTyT)(Xθy))=θ(21(θ2XTXθθTXTyyTXθ+yTy))=21(2XTXθXTy(yTX)T)=XTXθXTy

使 偏 导 等 于 0 可 以 得 ⇒ θ = ( X T X ) − 1 X T y 注 意 只 有 在 ( X T X ) 可 逆 得 时 候 此 方 法 才 可 以 使 用 使偏导等于0可以得\Rightarrow \theta=(X^TX)^{-1}X^Ty 注意只有在(X^TX)可逆得时候此方法才可以使用 使0θ=(XTX)1XTyXTX使

  • 机器学习各种评估方法

1、标准化
对于多元线性回归需要对各个自变量进行标准化,排除单位的影响。
标准化方法:即将原始数据减去相应变量的均数后再除以该变量的标准差,而标准化得到的回归方程称为标准化回归方程,相应得回归系数为标准化回归系数。
2、T检验
T检验是对各个回归系数的检验,绝对值越大,sig就越小,sig代表t检验的显著性,在统计学上,sig<0.05一般被认为是系数检验显著,显著的意思就是你的回归系数的绝对值显著大于0,表明自变量可以有效预测因变量的变异,做出这个结论你有5%的可能会犯错误,即有95%的把握结论正确。
3、F检验
F检验是对所有回归系数的检验,代表你进行回归的所有自变量的回归系数的一个总体检验,如果sig<0.05,说明至少有一个自变量能够有效预测因变量,这个在写数据分析结果时一般可以写出。
F检验和R平方同向变化,当R方=0时F=0;
当R方越大,F值也就越大
当R方=1时,F为无穷大。
F检验是所有回归系数的总显著性的度量也是R方的显著性检验,即检验回归系数为0 等价于R方为0,也就是在计算R方后,就不必做F检验。
另外对于一元线性回归,F检验等价于T检验,因为回归系数只有一个。
4、R方
对于每组数据,我们可以用最小二乘法来求得一个线性模型,但对于这个模型的效果如何,如何来比较模型之间的好坏呢。R方就是来处理这个问题,它可以来计算预测值和真实y值的匹配程度,当R方(0~1)越接近1,这线性关系越明显。
而在使用的时候要用调整后的R方,这个值是针对自变量的增多会不断增强预测力的一个矫正(因为即使没什么用的自变量,只要多增几个,R方也会变大,调整后的R方是对较多自变量的惩罚),R可以不用管,标准化的情况下R也是自变量和因变量的相关
R 2 = 1 − ∑ i = 1 m ( y i ^ − y i ) 2 ( 残 差 平 方 和 ) ∑ i = 1 m ( y i − y ~ ) 2 ( 类 似 方 差 项 ) R^2=1-\frac{\sum_{i=1}^m(\hat{y_i}-y_i)^2(残差平方和)}{\sum_{i=1}^m(y_i-\tilde{y})^2(类似方差项)} R2=1i=1m(yiy~)2()i=1m(yi^yi)2()
R 2 越 接 近 1 就 认 为 模 型 拟 合 的 越 好 R^2越接近1就认为模型拟合的越好 R21

  • 梯度下降

1.引入原因:当我们得到了目标函数以后只有当 ( X T X ) (X^TX) XTX可逆的时候才可以直接求得当 ( X T X ) (X^TX) XTX不可逆的时候就要使用梯度下降算法一点点的求出合适的 θ \theta θ
2.背后思想:开始时会随机选择一组参数组合 ( θ 0 , θ 1 , . . . , θ n ) (\theta_0,\theta_1,...,\theta_n) (θ0,θ1,...,θn),计算出d代价函数,然后找下一个能让代价函数值下降最多的参数组合。持续这么做直到找到一个局部最小值.
3.什么是梯度下降如下图所示
在这里插入图片描述
在进行使用梯度进行求解参数时是对每一个 θ i \theta_i θi进行单独进行求偏导,必须保证同步更新。
4.目标函数:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2
我们得目标就是使得目标函数 J ( θ ) J(\theta) J(θ)得值最小,也就是使得平均误差平方值最小。所以我们要使得目标函数得倒数为0.
5.对 J ( θ ) J(\theta) J(θ)求导
σ σ θ j J ( θ ) = σ σ θ j ( 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 ) \frac{\sigma}{\sigma\theta_j}J(\theta)=\frac{\sigma}{\sigma\theta_j}(\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2) σθjσJ(θ)=σθjσ(2m1i=1m(hθ(x(i))y(i))2)
= 1 2 m ∑ i = 1 m 2 ( h θ ( x ( i ) ) − y ( i ) ) σ σ θ j ( h θ ( x ( i ) ) − y ( i ) ) =\frac{1}{2m}\sum_{i=1}^m2(h_\theta(x^{(i)})-y^{(i)})\frac{\sigma}{\sigma\theta_j}(h_\theta(x^{(i)})-y^{(i)}) =2m1i=1m2(hθ(x(i))y(i))σθjσ(hθ(x(i))y(i))
= 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) σ σ θ j h θ ( x ( i ) ) =\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\frac{\sigma}{\sigma\theta_j}h_\theta(x^{(i)}) =m1i=1m(hθ(x(i))y(i))σθjσhθ(x(i))
= 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) σ σ θ j ( θ 0 x 0 ( i ) + θ 1 x 1 ( i ) + . . . + θ m x m ( i ) ) =\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\frac{\sigma}{\sigma\theta_j}(\theta_0x_0^{(i)}+\theta_1x_1^{(i)}+...+\theta_mx_m^{(i)}) =m1i=1m(hθ(x(i))y(i))σθjσ(θ0x0(i)+θ1x1(i)+...+θmxm(i))
= 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) =\frac{1}{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} =m1(hθ(x(i))y(i))xj(i)
所在在更新是的时候进行一下步骤
Repat{
θ j \theta_j θj := θ j \theta_j θj- α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x j ( i ) \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})*x_j^{(i)} αm1i=1m(hθ(x(i))y(i))xj(i)
} 要保证同步更新
6.梯度下降步骤

下山分以下步走(更新参数)
(1):找到当前最合适的方向
(2):走那么一小步,走快了该” 跌倒 ” 了
(3):按照方向与步伐去更新我们的参数

7.梯度下降方式

1.批量梯度下降: σ J ( θ ) σ θ j = − 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\sigma J(\theta)}{\sigma\theta_j}=-\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)}) σθjσJ(θ)=m1i=1m(hθ(x(i))y(i))
θ j = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j = \theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj=θjαm1i=1m(hθ(x(i))y(i))xj(i)
(容易得到最优解,但是由于每次考虑所有样本,速度很慢)

2.随机梯度下降: θ j = θ j − ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j = \theta_j-(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj=θj(hθ(x(i))y(i))xj(i)
(每次找一个样本,迭代速度快,但不一定每次都朝着收敛的方向)
3.小批量梯度下降法: θ j = θ j − α 1 10 ∑ k = i i + 9 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta_j = \theta_j-\alpha\frac{1}{10}\sum_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)} θj=θjα101k=ii+9(hθ(x(k))y(k))xj(k)
(每次更新选择一小部分数据来算,上面公式是每次选择10条数据进行更新)

8.学习速率 α \alpha α得选择:

如果 α \alpha α过小会导致更新速度特别慢,如果过大就有可能导致无法找到最小值点。如下图所示
在这里插入图片描述
9.批处理得数量:32,64,128,一般要考虑内存和效率

  • 逻辑回归

1.注意

:逻辑回来是一种分类得算法,经典得二分类算法,也可以用于多分类
机器学习算法选择:先逻辑回归再用复杂的,能简单还是用简单的

2.机器学习算法选择

先逻辑回归再用复杂的,能简单还是用简单的

3.逻辑回归的决策边界

可以是非线性得,及多维得

4.Sigmoid函数

1.公式为:
g ( z ) = 1 1 + e − z 其 中 z 就 是 线 性 回 归 中 得 输 入 值 θ T X g(z)=\frac{1}{1+e^{-z}} 其中z就是线性回归中得输入值\theta^TX g(z)=1+ez1z线θTX
也可以把一些线性回归得问题用逻辑回归进行求解
2.函数图
在这里插入图片描述
自变量取值为任意实数,值域[0,1]
解释:将任意的输入映射到了[0,1]区间我们在线性回归中可以得到一个预测值,再将该值映射到Sigmoid 函数中这样就完成了由值到概率的转换,也就是分类任务

5.预测函数:

h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x ( 其 中 θ T x = ∑ i = 1 n = θ 0 x 0 + θ 1 x 1 + . . . + θ n x n ) h_\theta(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} (其中\theta^Tx=\sum_{i=1}^n=\theta_0x_0+\theta_1x_1+...+\theta_nx_n) hθ(x)=g(θTx)=1+eθTx1(θTx=i=1n=θ0x0+θ1x1+...+θnxn)

6.分类任务:

(1) P ( y = 1 ∣ x ; θ ) = h θ ( x ) P(y=1|x;\theta)=h_\theta(x) \tag{1} P(y=1x;θ)=hθ(x)(1)
(2) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(y=0|x;\theta)=1-h_\theta(x) \tag{2} P(y=0x;θ)=1hθ(x)(2)
由 ( 1 ) ( 2 ) 可 以 整 合 为 ⇒ P ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y 由(1)(2)可以整合为\Rightarrow P(y|x;\theta)=(h_\theta(x))^y(1-h_\theta(x))^{1-y} (1)(2)P(yx;θ)=(hθ(x))y(1hθ(x))1y
对于二分类任务(0,1),整合后y取0只保留 ( 1 − h θ ( x ) ) 1 − y (1-h_\theta(x))^{1-y} (1hθ(x))1yy取1只保留 ( h θ ( x ) ) y (h_\theta(x))^y (hθ(x))y

7.似然函数

与线性回归里面引入似然函数一样,都是为了求取最合适得参数
似然函数: L ( θ ) = ∏ i = 1 m P ( y i ∣ x i ; θ ) = ∏ i = 1 m ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i L(\theta)=\prod_{i=1}^mP(y_i|x_i;\theta)=\prod_{i=1}^m(h_\theta(x_i))^{y_i}(1-h_\theta(x_i))^{1-y_i} L(θ)=i=1mP(yixi;θ)=i=1m(hθ(xi))yi(1hθ(xi))1yi
对数似然: l ( θ ) = log ⁡ L ( θ ) = log ⁡ ∏ i = 1 m ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i l(\theta)=\log L(\theta) = \log \prod_{i=1}^m(h_\theta(x_i))^{y_i}(1-h_\theta(x_i))^{1-y_i} l(θ)=logL(θ)=logi=1m(hθ(xi))yi(1hθ(xi))1yi
= ∑ i = 1 m ( y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ) =\sum_{i=1}^m(y_i \log h_\theta(x_i)+(1-y_i)\log(1-h_\theta(x_i))) =i=1m(yiloghθ(xi)+(1yi)log(1hθ(xi)))
此时的梯度函数是上升求最大值,引入 J ( θ ) = − 1 m l ( θ ) J(\theta)=-\frac{1}{m}l(\theta) J(θ)=m1l(θ)

8.对 J ( θ ) J(\theta) J(θ)求导

在开始求导之前先交代一些东西如下为方便去掉i小标:
(1) h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} \tag{1} hθ(x)=g(θTx)=1+eθTx1(1)
σ σ θ h θ ( x ) = σ σ θ g ( θ T x ) = σ σ θ 1 1 + e − θ T x \frac{\sigma}{\sigma \theta}h_\theta(x)=\frac{\sigma}{\sigma \theta}g(\theta^Tx)=\frac{\sigma}{\sigma \theta}\frac{1}{1+e^{-\theta^Tx}} σθσhθ(x)=σθσg(θTx)=σθσ1+eθTx1
= − ( 1 + e − θ T x ) ‘ ( 1 + e − θ T x ) 2 = ( e − θ T x ) ( 1 + e − θ T x ) 2 σ σ θ ( θ T x ) =-\frac{(1+e^{-\theta^Tx})^‘}{(1+e^{-\theta^Tx})^2}=\frac{(e^{-\theta^Tx})}{(1+e^{-\theta^Tx})^2}\frac{\sigma}{\sigma\theta}(\theta^Tx) =(1+eθTx)2(1+eθTx)=(1+eθTx)2(eθTx)σθσ(θTx)
= 1 1 + e − θ T x e − θ T x 1 + e − θ T x σ σ θ ( θ T x ) =\frac{1}{1+e^{-\theta^Tx}}\frac{e^{-\theta^Tx}}{1+e^{-\theta^Tx}}\frac{\sigma}{\sigma\theta}(\theta^Tx) =1+eθTx11+eθTxeθTxσθσ(θTx)
= 1 1 + e − θ T x ( 1 − 1 1 + e − θ T x ) σ σ θ ( θ T x ) =\frac{1}{1+e^{-\theta^Tx}}(1-\frac{1}{1+e^{-\theta^Tx}})\frac{\sigma}{\sigma\theta}(\theta^Tx) =1+eθTx1(11+eθTx1)σθσ(θTx)
(2) = h θ ( x ) ( 1 − h θ ( x ) ) σ σ θ ( θ T x ) =h_\theta(x)(1-h_\theta(x))\frac{\sigma}{\sigma\theta}(\theta^Tx ) \tag{2} =hθ(x)(1hθ(x))σθσ(θTx)(2)
J ( θ ) J(\theta) J(θ)进行求导
σ σ θ j J ( θ ) = σ σ θ j ( − 1 m ∑ i = 1 m ( y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ) ) \frac{\sigma}{\sigma \theta_j}J(\theta)=\frac{\sigma}{\sigma \theta_j}(-\frac{1}{m}\sum_{i=1}^m(y^i \log h_\theta(x^i)+(1-y^i)\log(1-h_\theta(x^i)))) σθjσJ(θ)=σθjσ(m1i=1m(yiloghθ(xi)+(1yi)log(1hθ(xi))))
= − 1 m σ σ θ j ( ∑ i = 1 m ( y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ) ) =-\frac{1}{m}\frac{\sigma}{\sigma \theta_j}(\sum_{i=1}^m(y^i \log h_\theta(x^i)+(1-y^i)\log(1-h_\theta(x^i)))) =m1σθjσ(i=1m(yiloghθ(xi)+(1yi)log(1hθ(xi))))
= − 1 m ∑ i = 1 m ( y i 1 h θ ( x i ) σ σ θ j h θ ( x i ) + ( 1 − y i ) 1 1 − h θ ( x i ) σ σ θ j ( 1 − h θ ( x i ) ) ) =-\frac{1}{m}\sum_{i=1}^m(y^i\frac{1}{h_\theta(x^i)}\frac{\sigma}{\sigma \theta_j}h_\theta(x^i)+(1-y^i)\frac{1}{1-h_\theta(x^i)}\frac{\sigma}{\sigma \theta_j}(1-h_\theta(x^i))) =m1i=1m(yihθ(xi)1σθjσhθ(xi)+(1yi)1hθ(xi)1σθjσ(1hθ(xi)))
= − 1 m ∑ i = 1 m ( y i 1 h θ ( x i ) σ σ θ j h θ ( x i ) − ( 1 − y i ) 1 1 − h θ ( x i ) σ σ θ j h θ ( x i ) ) =-\frac{1}{m}\sum_{i=1}^m(y^i\frac{1}{h_\theta(x^i)}\frac{\sigma}{\sigma \theta_j}h_\theta(x^i)-(1-y^i)\frac{1}{1-h_\theta(x^i)}\frac{\sigma}{\sigma \theta_j}h_\theta(x^i)) =m1i=1m(yihθ(xi)1σθjσhθ(xi)(1yi)1hθ(xi)1σθjσhθ(xi))
= − 1 m ∑ i = 1 m ( ( y i 1 h θ ( x i ) − ( 1 − y i ) 1 1 − h θ ( x i ) ) σ σ θ j h θ ( x i ) ) =-\frac{1}{m}\sum_{i=1}^m((y^i\frac{1}{h_\theta(x^i)}-(1-y^i)\frac{1}{1-h_\theta(x^i)})\frac{\sigma}{\sigma \theta_j}h_\theta(x^i)) =m1i=1m((yihθ(xi)1(1yi)1hθ(xi)1)σθjσhθ(xi))
把(2)式代入得
= − 1 m ∑ i = 1 m ( ( y i 1 h θ ( x i ) + ( 1 − y i ) 1 1 − h θ ( x i ) ) h θ ( x i ) ( 1 − h θ ( x i ) ) σ σ θ j ( θ T x i ) ) =-\frac{1}{m}\sum_{i=1}^m((y^i\frac{1}{h_\theta(x^i)}+(1-y^i)\frac{1}{1-h_\theta(x^i)})h_\theta(x^i)(1-h_\theta(x^i))\frac{\sigma}{\sigma\theta_j}(\theta^Tx^i )) =m1i=1m((yihθ(xi)1+(1yi)1hθ(xi)1)hθ(xi)(1hθ(xi))σθjσ(θTxi))
= − 1 m ∑ i = 1 m ( ( y i 1 h θ ( x i ) + ( 1 − y i ) 1 1 − h θ ( x i ) ) h θ ( x i ) ( 1 − h θ ( x i ) ) σ σ θ j ( θ T x i ) ) =-\frac{1}{m}\sum_{i=1}^m((y^i\frac{1}{h_\theta(x^i)}+(1-y^i)\frac{1}{1-h_\theta(x^i)})h_\theta(x^i)(1-h_\theta(x^i))\frac{\sigma}{\sigma\theta_j}(\theta^Tx^i )) =m1i=1m((yihθ(xi)1+(1yi)1hθ(xi)1)hθ(xi)(1hθ(xi))σθjσ(θTxi))
= − 1 m ∑ i = 1 m ( y i − y i h θ ( x i ) − h θ ( x i ) + y i h θ ( x i ) ) σ σ θ j ( θ T x i ) ) =-\frac{1}{m}\sum_{i=1}^m(y^i-y^ih_\theta(x^i)-h_\theta(x^i)+y^ih_\theta(x^i))\frac{\sigma}{\sigma \theta_j}(\theta^Tx^i)) =m1i=1m(yiyihθ(xi)hθ(xi)+yihθ(xi))σθjσ(θTxi))
= 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) σ σ θ j ( θ 0 x 0 + θ 1 x 1 + . . . + θ m x m ) ) =\frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)\frac{\sigma}{\sigma \theta_j}(\theta_0x_0+\theta_1x_1+...+\theta_mx_m)) =m1i=1m(hθ(xi)yi)σθjσ(θ0x0+θ1x1+...+θmxm))
= 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x j i ) =\frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)x_j^i) =m1i=1m(hθ(xi)yi)xji)

9.参数更新

θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x j i \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)x_j^i θj:=θjαm1i=1m(hθ(xi)yi)xji
10.多分类得softmax: h θ ( x i ) = [ p ( y ( i ) = 1 ∣ x ( i ) ; θ ) p ( y ( i ) = 2 ∣ x ( i ) ; θ ) . p ( y ( i ) = k ∣ x ( i ) ; θ ) ] = 1 ∑ j = 1 k e θ j T x ( i ) [ e θ 1 T x ( i ) e θ 2 T x ( i ) . e θ k T x ( i ) ] h_\theta(x^i)=\left[ \begin{matrix} p(y^{(i)}=1|x^{(i)};\theta)\\ p(y^{(i)}=2|x^{(i)};\theta) \\ .\\ p(y^{(i)}=k|x^{(i)};\theta) \end{matrix} \right]=\frac{1}{\sum_{j=1}^ke^{\theta_j^Tx^{(i)}}}\left[ \begin{matrix} e^{\theta_1^Tx^{(i)}}\\ e^{\theta_2^Tx^{(i)}}\\ .\\ e^{\theta_k^Tx^{(i)}} \end{matrix} \right] hθ(xi)=p(y(i)=1x(i);θ)p(y(i)=2x(i);θ).p(y(i)=kx(i);θ)=j=1keθjTx(i)1eθ1Tx(i)eθ2Tx(i).eθkTx(i)

  • 代码实现逻辑回归的基本流程

1.读数据
path = “M:/python练习/data/Python/LogiReg_data.txt”
paData = pd.read_csv(path, header=None)
2.处理数据
# 为x加上一列 全为1
paData.insert(0, ‘Ones’, 1)
变成矩阵
orig_data = paData.as_matrix()
cols = orig_data.shape[1]
提取X与Y
X = orig_data[:, 0:cols - 1]
y = orig_data[:, cols - 1:cols]
构造theta
theta = np.zeros([1, 3])

3.完成以下模块

1.sigmoid:映射到概率得函数
2.model :返回预测结果值
3.cost :根据参数计算损失
4.gradient :计算每一个参数得梯度方向
5.descent: 进行参数更新
6.accuracy:计算精度

4.sigmoid:映射到概率得函数

对应的公式 h θ ( x ) = g ( z ) = 1 1 + e − z ( 其 中 z = θ T x ) h_\theta(x)=g(z)=\frac{1}{1+e^{-z}} (其中z=\theta^Tx) hθ(x)=g(z)=1+ez1z=θTx
对应代码为
def sigmoid(z): return 1/(1+np.exp(-z))

5.model :返回预测结果值 类似与h(x)
对应代码

def model(X,theta): return sigmoid(np.dot(X,theta.T)) np.dot(A,B)是求A与B的成绩

6.cost :根据参数计算损失

对应公式
J ( θ ) = − 1 m ∑ i = 1 m ( y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ) J(\theta)=-\frac{1}{m}\sum_{i=1}^m(y_i \log h_\theta(x_i)+(1-y_i)\log(1-h_\theta(x_i))) J(θ)=m1i=1m(yiloghθ(xi)+(1yi)log(1hθ(xi)))
对应代码
def cost(X,y,theta): left = np.multiply(-y,np.log(model(X,theta))) right = np.multiply(1-y,np.log(1-model(X,theta))) return np.sum(left-right)/(len(X))

7.gradient :计算每一个参数得梯度方向

对应公式
1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x j i \frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)x_j^i m1i=1m(hθ(xi)yi)xji
对应代码
def gradient(X,y,theta): grad = np.zeros(theta.shape) error = (model(X,theta)-y).ravel() for j in range(len(theta.ravel())): term = np.multiply(error,X[:,j]) grad[0,j] = np.sum(term)/len(X) return grad

8.descent: 进行参数更新

对应公式 θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x j i \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)x_j^i θj:=θjαm1i=1m(hθ(xi)yi)xji
对应代码
import time def descent(data,theta,batchSize ,stopType,thresh,alpha): #batchSize 一次取数据得大小 thresh 策略对应得阈值 init_time = time.time() grad = np.zeros(theta.shape) i=0 #迭代次数 k=0 #batch X,y = shuffleData(data) n=X.shape[0] costs = [cost(X,y,theta)] while True: grad = gradient(X[k:k+batchSize],y[k:k+batchSize],theta) k+=batchSize #取batch数量得数据 if k >=n: #k超过得总得数据大小 k=0 X,y = shuffleData(data) theta = theta-alpha*grad costs.append(cost(X,y,theta)) #计算新得损失 i+=1 if stopType==STOP_ITER: value=i elif stopType==STOP_COST:value=costs elif stopType==STOP_GRAD: value=grad if stopCriterion(stopType,value,thresh):break return theta,i-1,costs,grad,time.time()-init_time

9.预测与精度

#进行预测 def predict(X,theta): return [1 if x>0.5 else 0 for x in model(X,theta)] #进行精度 def accuracy(pre,y): correct=[1 if ((a==1 and b==1)or (a==0 and b ==0))else 0 for (a,b) in zip(pre,y)] accuracy = (sum(map(int,correct))% len(correct)) print('accuracy = {0}%'.format(accuracy))

10.其他依赖函数

STOP_ITER = 0 #迭代次数 STOP_COST = 1 #根据损失函数得值 STOP_GRAD = 2 # def stopCriterion(stype,value,threshold): if stype==STOP_ITER: return value>threshold elif stype==STOP_COST: print(abs((value[-1]-value[-2]))) return abs((value[-1]-value[-2]))<threshold elif stype==STOP_GRAD: return np.linalg.norm(value)<threshold #数据洗牌,打乱数据 def shuffleData(data): np.random.shuffle(data) clos = data.shape[1] X= data[:,0:clos-1] y= data[:,clos-1:clos] return X,y


本人初步学习,记录只是为了方便自己查阅,记录过程也是方便自己理解。若有错误还望广大网友指点。谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值