• 首页
  • ML/DL
  • 视觉相关
  • 数据结构与算法
  • Python
  • Java
  • WEB开发
  • 不知道分到哪里
Pteromyini的小站
没错Pteromyini就是树树的网名
  1. 首页
  2. ML/DL
  3. 正文

简单写个logictic回归

2020年03月10日 16点热度 2人点赞 0条评论

最近做华为软件精英挑战赛热身赛,给出的demo是使用logistic做的金融风控,比赛要求很严格,如果使用Python 进行训练那么不能使用任何第三方机器学习库,只能使用Python和原生numpy1.17。所以就萌生了写一遍原生logistic回归的想法。

数学公式

logistic回归的数学公式很简单,就是以下几个:

$z^{(i)}=w^Tx^{(i)}+b$

$\hat{y^{(i)}}=sigmoid(z^{(i)})$

$l(a^{(i)},y^{(i)}) =-y^{(i)}log(a^{(i)})-(1-y^{(i)})log(1-a^{(i)})$

$J =\frac{1}{m}\sum_{i=1}^ml(a^{(i)},y^{(i)}) $

我们就可以根据这些数学公式建立网络模型了。

编程实现

定义z函数

def z(w, x, b):
    z = np.dot(w.T, x) + b
    return z

定义sigmoid函数

def sigmod(z):
    s = 1 / (1 + np.exp(-z))
    return s

初始化参数w和b

def initialize(n):
    """
    此函数为w创建一个维度为(n,1)的0向量,并将b初始化为0。
    参数:
    n - 我们想要的w矢量的大小(或者这种情况下的参数数量)
    返回:
    w - 维度为(n,1)的初始化向量。
    b - 初始化的标量(对应于偏差)
    """
    w = np.zeros(shape=(n, 1))
    b = 0
    return (w, b)

实现目标函数计算误差反向传播

def j(w, b, X, Y):
    m = X.shape[1]
    A = sigmod(z(w, X, b))
    J = (- 1 / m) * np.sum(Y * np.log(A) + (1 - Y) * (np.log(1 - A)))
    dw = (1 / m) * np.dot(X, (A - Y).T)
    db = (1 / m) * np.sum(A - Y)
    return (dw,db)

梯度下降更新参数,这里使用批处理梯度下降

$ \theta = \theta - \alpha \text{ } d\theta$

def optimize(w, b, X, Y, num_iterations, learning_rate, print_cost=False):
    costs = []
    for i in range(num_iterations):

        dw, db, cost = j(w, b, X, Y)
        w = w - learning_rate * dw
        b = b - learning_rate * db

        # 记录成本
        if i % 100 == 0:
            costs.append(cost)
        # 打印成本数据
        if (print_cost) and (i % 100 == 0):
            print("迭代的次数: %i , 误差值: %f" % (i, cost))
    params = {
        "w": w,
        "b": b}
    grads = {
        "dw": dw,
        "db": db}
    return (params, grads, costs)
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2020年03月10日

Pteromyini

树树虽然是个小辣鸡,但是树树想变强~~

打赏 点赞
< 上一篇

树树虽然是个小辣鸡,但是树树想变强~~

最新 热点 随机
最新 热点 随机
将博客搬至CSDN Dijkstra 最短路算法 windows安装TeX Live 2019及TeXstudio iwrite复制攻略 爬取纽约时报特定关键词新闻并计数 简单写个logictic回归 植树节快到了-那就种棵决策树吧 简简单单做个房价预测 (ML邹博)回归
将博客搬至CSDN
(Github搬砖)动手学深度学习(TF2.0版)-3.15 数值稳定性和模型初始化 (Py练习)输出乘法口诀表 (Py练习)查询子串出现次数 (CV学习笔记)看图说话(Image Captioning)-1 学生免费使用JetBrains全家桶 Conda基本使用方法 web技术培训(三)-宝塔面板搭建wordpress anaconda安装教程 软件工程-软件可行性分析
友情链接

博客园博客

远处有泽细细说




标签聚合
ty-WEB开发 ty-数据结构与算法 py爬虫 微机原理 ty-深度学习 贪心CV ty-未分类 ty-Python

COPYRIGHT © 2020 .Pteromyini ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

鲁ICP备19000938号-2

鲁公网安备 37160202000443号