逻辑回归(公式推导+numpy实现)
公式推导
含义 | 公式 | 维度 |
---|---|---|
输入(矩阵形式) | 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=[w1w2⋯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)={10if 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)=m1i=1∑mcost(i)+2mλj=1∑nwj2=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)=m1i=1∑m(fw,b(x(i))−y(i))xj(i)+mλwj=m1i=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)=m1XT(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实现)相关推荐
- 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
逻辑回归(Logistic Regression)是一个二分分类算法.逻辑回归的目标是最小化其预测与训练数据之间的误差.为了训练逻辑回归模型中的参数w和b,需要定义一个成本函数(cost functi ...
- logistic逻辑回归公式推导及R语言实现
Logistic逻辑回归 Logistic逻辑回归模型 线性回归模型简单,对于一些线性可分的场景还是简单易用的.Logistic逻辑回归也可以看成线性回归的变种,虽然名字带回归二字但实际上他主要用来二 ...
- 逻辑回归公式推导过程
1 逻辑回归模型 回归是一种极易理解的模型,就相当于y=f(x),表明自变量x与因变量y的关系.最常见问题有如医生治病时的望.闻.问.切,之后判定病人是否生病或生了什么病,其中的望闻问切就是获取自变量 ...
- 联邦学习纵向逻辑回归公式推导
原文链接 [技术博客]纵向联邦学习简介及实现--MomodelAI 在研究纵向联邦学习时,为了对细节有更深入的理解,查询了一些资料并对图中的公式(出自上文引用)进行了推导. 推导过程如下. 其中, 1 ...
- 入门篇(二)模型:逻辑回归(一步步从原理到实现)
<老饼讲解机器学习>专注于机器学习的学习网站http://ml.bbbdata.com/teach#187 目录 一.问题 二.逻辑回归的思想 三.模型表达式 四.损失函数 (一) 单个 ...
- 逻辑回归原理简述及代码实现
Logistic回归 1 逻辑回归原理 1.1 线性回归 1.2 逻辑回归 2 具体过程 2.1 构造预测函数 2.2 构造损失函数J(θ) 2.3 采用梯度下降算法minJ(θ) 2.4 采用向量化 ...
- 机器学习基础-逻辑回归-09
逻辑回归 正确率/召回率/F1指标 梯度下降法-逻辑回归 import matplotlib.pyplot as plt import numpy as np from sklearn.metrics ...
- Python机器学习:逻辑回归005决策边界
#实现逻辑回归 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets iris = datas ...
- python机器学习库keras——线性回归、逻辑回归、一般逻辑回归
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性回归 import numpy as npfrom keras.models import Sequential from ker ...
- Python遇见机器学习 ---- 逻辑回归 Logistic Regression
综述 "子非鱼,焉知鱼之乐" 本文采用编译器:jupyter 逻辑回归方法是从线性回归方法发展过来的,通常解决的是分类问题,读者或许有这样一个疑问:既然是回归算法又么解决分类问题的 ...
最新文章
- c++ vector简单使用
- Android类动态加载技术
- linux谁动了我的服务器,linux系统监控之谁动了我的服务器?
- idea中新增package总是嵌套的解决方法
- AI算法图片转二次元卡通
- SQL基础--过滤和排序
- 原HP大中华区总裁孙振耀的退休感言
- 概率论——超几何随机变量
- excel (wps) 文件受保护处理方案
- 完美C语言通讯录(含代码)
- PCB板材及生产流程详述
- excel函数去重_【Excel VBA】使用字典快速对数据去重
- 数据库系统概论 (王珊.第五版)第七章数据库设计习题答案
- win11安装mysql8.0.29最新压缩包版
- 《趣弹幕-滚动LED显示屏-隐私协议》
- 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛错题笔记
- win10本地组策略功能说明
- 新年美食鉴赏——基于注意力机制CBAM的美食101分类
- 基于simulink的飞轮储能发电系统仿真
- Linux下的视频采集(V4L2)
热门文章
- 2021有效的电子邮箱号码大全,外贸企业邮箱地址大全
- 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)java
- 为什么学小易显示服务器开小差,学小易搜题APP
- 手机WIFI传文件到局域网服务器,局域网内手机和电脑怎么实现无线传输文件?
- 酷睿i9 12950HX怎么样 相当于什么水平
- raid之创建磁盘列阵raid-0
- 1564 区间的价值
- 基于JavaEye-API实现的Gerry-聊天QQ版v1.0 (全)
- PAT-ADVANCED1118——Birds in Forest
- 从零开始写一个Jison解析器(3/10):良好的开端是成功的一半——《政治学》 (亚里士多德)