公式推导

含义 公式 维度
输入(矩阵形式) X=[−x(1)T−−x(2)T−⋯−x(i)T−⋯−x(m)T−]\mathbf X= \begin{bmatrix}-\mathbf {x^{(1)}}^T - \\-\mathbf {x^{(2)}}^T- \\\cdots\\-\mathbf {x^{(i)}}^T-\\\cdots\\-\mathbf {x^{(m)}}^T-\end{bmatrix}X=⎣⎡​−x(1)T−−x(2)T−⋯−x(i)T−⋯−x(m)T−​⎦⎤​ m×nm\times nm×n
输入 x(i)=[x1(i)x2(i)⋯xj(i)⋯xn(i)]T\mathbf x^{(i)}=\begin{bmatrix} x_{1}^{(i)} & x_{2}^{(i)} & \cdots & x_{j}^{(i)} & \cdots & x_{n}^{(i)}\end{bmatrix}^Tx(i)=[x1(i)​​x2(i)​​⋯​xj(i)​​⋯​xn(i)​​]T n×1n\times 1n×1
标签 y=[y(1)y(2)⋯y(i)⋯y(m)]T\mathbf y={\begin{bmatrix} y^{(1)} & y^{(2)} & \cdots & y^{(i)} &\cdots &y^{(m)}\end{bmatrix}}^Ty=[y(1)​y(2)​⋯​y(i)​⋯​y(m)​]T m×1m\times 1m×1
参数 w=[w1w2⋯wj⋯wn]T\mathbf w={\begin{bmatrix}w_{1} & w_{2} & \cdots & w_{j} & \cdots & w_{n}\end{bmatrix}}^Tw=[w1​​w2​​⋯​wj​​⋯​wn​​]T n×1n\times 1n×1
输出 fw,b(x(i))=g(wTx(i)+b)g(z)=11+e−z\begin{aligned}f_{\mathbf w,b}(\mathbf x^{(i)}) &=g({\mathbf w}^T{\mathbf x}^{(i)} + b) \\ g(z) &= \frac{1}{1+e^{-z}} \end{aligned}fw,b​(x(i))g(z)​=g(wTx(i)+b)=1+e−z1​​ 标量
输出(矩阵形式) fw,b(X)=g(Xw+b)f_{\mathbf w,b}(\mathbf X) = g(\mathbf X \mathbf w+ b)fw,b​(X)=g(Xw+b) m×1m\times 1m×1
预测 y^(i)={1if fw,b(x(i))≥0.50if fw,b(x(i))<0.5\hat{y}^{(i)}= \begin{cases} 1 & \text{if }f_{\mathbf w,b}(\mathbf x^{(i)})\ge 0.5\\ 0 & \text{if }f_{\mathbf w,b}(\mathbf x^{(i)}) <0.5\end{cases}y^​(i)={10​if fw,b​(x(i))≥0.5if fw,b​(x(i))<0.5​ 标量
损失函数 cost(i)={−log⁡(fw,b(x(i)))if y(i)=1−log⁡(1−fw,b(x(i)))if y(i)=0=−y(i)log⁡(fw,b(x(i)))−(1−y(i))log⁡(1−fw,b(x(i)))\begin{aligned}cost^{(i)} &= \begin{cases} -\log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) & \text{if }y^{(i)}=1\\ -\log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right)&\text{if }y^{(i)}=0\end{cases} \\ &=-y^{(i)} \log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) - \left( 1 - y^{(i)}\right) \log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right)\end{aligned}cost(i)​={−log(fw,b​(x(i)))−log(1−fw,b​(x(i)))​if y(i)=1if y(i)=0​=−y(i)log(fw,b​(x(i)))−(1−y(i))log(1−fw,b​(x(i)))​ 标量
代价函数 J(w,b)=1m∑i=1mcost(i)+λ2m∑j=1nwj2=1m(−yTlog(fw,b(X))−(I−y)Tlog(I−fw,b(X)))+λ2mwTw\begin{aligned}J(\mathbf w,b) &= \frac{1}{m} \sum\limits_{i = 1}^{m} cost^{(i)}+\frac{\lambda}{2m}\sum\limits_{j = 1}^{n} w_{j}^2\\&=\frac{1}{m}\left(-\mathbf y^Tlog(f_{\mathbf w,b}(\mathbf X))-(\Iota-\mathbf y)^Tlog(\Iota-f_{\mathbf w,b}(\mathbf X))\right)+\frac{\lambda}{2m}\mathbf w^T\mathbf w\end{aligned}J(w,b)​=m1​i=1∑m​cost(i)+2mλ​j=1∑n​wj2​=m1​(−yTlog(fw,b​(X))−(I−y)Tlog(I−fw,b​(X)))+2mλ​wTw​ 标量
梯度下降 wj:=wj−α∂J(w,b)∂wjb:=b−α∂J(w,b)∂b∂J(w,b)∂wj=1m∑i=1m(fw,b(x(i))−y(i))xj(i)+λmwj∂J(w,b)∂b=1m∑i=1m(fw,b(x(i))−y(i))\begin{aligned}w_j :&= w_j - \alpha \frac{\partial J(\mathbf{w},b)}{\partial w_j}\\ b :&= b - \alpha \frac{\partial J(\mathbf{w},b)}{\partial b}\\\frac{\partial J(\mathbf{w},b)}{\partial w_j} &= \frac{1}{m} \sum\limits_{i = 1}^{m} (f_{\mathbf{w},b}(\mathbf{x}^{(i)}) - y^{(i)})x_{j}^{(i)} + \frac{\lambda}{m} w_j \\ \frac{\partial J(\mathbf{w},b)}{\partial b} &= \frac{1}{m} \sum\limits_{i = 1}^{m} (f_{\mathbf{w},b}(\mathbf{x}^{(i)}) - y^{(i)}) \end{aligned}wj​:b:∂wj​∂J(w,b)​∂b∂J(w,b)​​=wj​−α∂wj​∂J(w,b)​=b−α∂b∂J(w,b)​=m1​i=1∑m​(fw,b​(x(i))−y(i))xj(i)​+mλ​wj​=m1​i=1∑m​(fw,b​(x(i))−y(i))​ 标量
梯度下降(矩阵形式) w:=w−α∂J(w,b)∂w∂J(w,b)∂w=1mXT(fw,b(X)−y)+λmw\begin{aligned}\mathbf w:&=\mathbf w-\alpha\frac{\partial J(\mathbf{w},b)}{\partial \mathbf{w}}\\ \frac{\partial J(\mathbf{w},b)}{\partial \mathbf{w}}&=\frac{1}{m}\mathbf X^T(f_{\mathbf w,b}(\mathbf X) -\mathbf y)+\frac{\lambda}{m} \mathbf w\end{aligned}w:∂w∂J(w,b)​​=w−α∂w∂J(w,b)​=m1​XT(fw,b​(X)−y)+mλ​w​ n×1n\times 1n×1

numpy实现

def zscore_normalize_features(X):mu=np.mean(X,axis=0)                 sigma=np.std(X,axis=0)           X_norm=(X-mu)/sigma      return X_norm,mu,sigma
# SIGMOID
def sig(z):return 1/(1+np.exp(-z))
# f_wb
def compute_f_wb(X,w,b):f_wb=sig(np.dot(X,w)+b)# (m,1)return f_wb
# j_wb
def compute_cost(X,y,w,b,lambda_,f_wb_function):m,n=X.shapef_wb=f_wb_function(X,w,b) # m*1j_wb=1/m*(-np.dot(y.T, np.log(f_wb))-np.dot((1-y).T,np.log(1-f_wb)))+(lambda_/2*m)*np.dot(w.T,w)# (1,1)j_wb=j_wb[0,0] # scalar  return j_wb
# dj_dw,dj_db
def compute_gradient(X, y, w, b, lambda_,f_wb_function): m,n=X.shapef_wb=f_wb_function(X,w,b) # m*1dj_dw=(1/m)*np.dot(X.T,(f_wb-y))+(lambda_/n)*w # n*1dj_db=(1/m)*np.sum(f_wb-y) # scalarreturn dj_dw,dj_db
# w,b,j_history,w_history
def gradient_descent(X, y, w, b, cost_function, gradient_function, f_wb_function,alpha, num_iters,lambda_): J_history = []w_history = []w_temp = copy.deepcopy(w)  b_temp = bfor i in range(num_iters):dj_dw, dj_db = gradient_function(X, y, w_temp,b_temp,lambda_,f_wb_function)    w_temp = w_temp  - alpha * dj_dw               b_temp  = b_temp  - alpha * dj_db      cost =  cost_function(X, y, w_temp, b_temp,lambda_,f_wb_function)J_history.append(cost)  return w_temp, b_temp, J_history, w_history

样本点

x_train, y_train = load_data("data/ex2data2.txt")
y_train=y_train.reshape(-1,1)
x_train.shape,y_train.shape
fig=go.Figure()
fig.add_trace(go.Scatter(x=x_train[np.where(y_train==0)[0],0],y=x_train[np.where(y_train==0)[0],1],mode="markers",name="第一类")
)
fig.add_trace(go.Scatter(x=x_train[np.where(y_train==1)[0],0],y=x_train[np.where(y_train==1)[0],1],mode="markers",name="第一类")
)
fig.update_layout(width=1000,height=618)
fig.show()

特征

def map_feature(X1, X2,degree):"""Feature mapping function to polynomial features    """X1 = np.atleast_1d(X1)X2 = np.atleast_1d(X2)out = []for i in range(1, degree+1):for j in range(i + 1):out.append((X1**(i-j) * (X2**j)))return np.stack(out, axis=1)feature_power=3
features=map_feature(x_train[:, 0], x_train[:, 1],feature_power)
features.shape
x_,mu,sigma=zscore_normalize_features(features)
y_=y_train
x_.shape,y_.shape

梯度下降

m,n=x_.shape
initial_w = np.zeros((n,1))
initial_b = 0
iterations = 1500
alpha = 0.3
lambda_=0
w,b,J_history,w_history = gradient_descent(x_ ,y_, initial_w, initial_b, compute_cost, compute_gradient, compute_f_wb,alpha, iterations,lambda_)fig=go.Figure()
fig.update_layout(width=1000,height=618)
fig.add_trace(go.Scatter(x=np.arange(1,iterations+1),y=J_history,name="学习曲线",mode="markers+lines")
)
fig.update_layout(xaxis_title="迭代次数",yaxis_title="J_wb"
)
fig.show()

决策边界

u=np.linspace(-1.5,1.5,100)
v=np.linspace(-1.5,1.5,100)
z = np.zeros((len(u), len(v)))for i in range(len(u)):for j in range(len(v)):temp=(map_feature(u[i], v[j],feature_power).T-mu.reshape(-1,1))/sigma.reshape(-1,1)z[i,j] = sig(np.dot(w.T,temp) + b)[0,0]fig=go.Figure()
fig.update_layout(width=1000,height=618)
fig.add_trace(go.Contour(z=z,contours_coloring='lines',x=u,y=v,)
)
fig.add_trace(go.Scatter(x=x_train[np.where(y_train==0)[0],0],y=x_train[np.where(y_train==0)[0],1],mode="markers",name="第一类")
)
fig.add_trace(go.Scatter(x=x_train[np.where(y_train==1)[0],0],y=x_train[np.where(y_train==1)[0],1],mode="markers",name="第一类")
)
fig.show()

逻辑回归(公式推导+numpy实现)相关推荐

  1. 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现

    逻辑回归(Logistic Regression)是一个二分分类算法.逻辑回归的目标是最小化其预测与训练数据之间的误差.为了训练逻辑回归模型中的参数w和b,需要定义一个成本函数(cost functi ...

  2. logistic逻辑回归公式推导及R语言实现

    Logistic逻辑回归 Logistic逻辑回归模型 线性回归模型简单,对于一些线性可分的场景还是简单易用的.Logistic逻辑回归也可以看成线性回归的变种,虽然名字带回归二字但实际上他主要用来二 ...

  3. 逻辑回归公式推导过程

    1 逻辑回归模型 回归是一种极易理解的模型,就相当于y=f(x),表明自变量x与因变量y的关系.最常见问题有如医生治病时的望.闻.问.切,之后判定病人是否生病或生了什么病,其中的望闻问切就是获取自变量 ...

  4. 联邦学习纵向逻辑回归公式推导

    原文链接 [技术博客]纵向联邦学习简介及实现--MomodelAI 在研究纵向联邦学习时,为了对细节有更深入的理解,查询了一些资料并对图中的公式(出自上文引用)进行了推导. 推导过程如下. 其中, 1 ...

  5. 入门篇(二)模型:逻辑回归(一步步从原理到实现)

    <老饼讲解机器学习>专注于机器学习的学习网站http://ml.bbbdata.com/teach#187 目录 一.问题 二.逻辑回归的思想 三.模型表达式 四.损失函数 (一) 单个 ...

  6. 逻辑回归原理简述及代码实现

    Logistic回归 1 逻辑回归原理 1.1 线性回归 1.2 逻辑回归 2 具体过程 2.1 构造预测函数 2.2 构造损失函数J(θ) 2.3 采用梯度下降算法minJ(θ) 2.4 采用向量化 ...

  7. 机器学习基础-逻辑回归-09

    逻辑回归 正确率/召回率/F1指标 梯度下降法-逻辑回归 import matplotlib.pyplot as plt import numpy as np from sklearn.metrics ...

  8. Python机器学习:逻辑回归005决策边界

    #实现逻辑回归 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets iris = datas ...

  9. python机器学习库keras——线性回归、逻辑回归、一般逻辑回归

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性回归 import numpy as npfrom keras.models import Sequential from ker ...

  10. Python遇见机器学习 ---- 逻辑回归 Logistic Regression

    综述 "子非鱼,焉知鱼之乐" 本文采用编译器:jupyter 逻辑回归方法是从线性回归方法发展过来的,通常解决的是分类问题,读者或许有这样一个疑问:既然是回归算法又么解决分类问题的 ...

最新文章

  1. c++ vector简单使用
  2. Android类动态加载技术
  3. linux谁动了我的服务器,linux系统监控之谁动了我的服务器?
  4. idea中新增package总是嵌套的解决方法
  5. AI算法图片转二次元卡通
  6. SQL基础--过滤和排序
  7. 原HP大中华区总裁孙振耀的退休感言
  8. 概率论——超几何随机变量
  9. excel (wps) 文件受保护处理方案
  10. 完美C语言通讯录(含代码)
  11. PCB板材及生产流程详述
  12. excel函数去重_【Excel VBA】使用字典快速对数据去重
  13. 数据库系统概论 (王珊.第五版)第七章数据库设计习题答案
  14. win11安装mysql8.0.29最新压缩包版
  15. 《趣弹幕-滚动LED显示屏-隐私协议》
  16. 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛错题笔记
  17. win10本地组策略功能说明
  18. 新年美食鉴赏——基于注意力机制CBAM的美食101分类
  19. 基于simulink的飞轮储能发电系统仿真
  20. Linux下的视频采集(V4L2)

热门文章

  1. 2021有效的电子邮箱号码大全,外贸企业邮箱地址大全
  2. 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)java
  3. 为什么学小易显示服务器开小差,学小易搜题APP
  4. 手机WIFI传文件到局域网服务器,局域网内手机和电脑怎么实现无线传输文件?
  5. 酷睿i9 12950HX怎么样 相当于什么水平
  6. raid之创建磁盘列阵raid-0
  7. 1564 区间的价值
  8. 基于JavaEye-API实现的Gerry-聊天QQ版v1.0 (全)
  9. PAT-ADVANCED1118——Birds in Forest
  10. 从零开始写一个Jison解析器(3/10):良好的开端是成功的一半——《政治学》 (亚里士多德)