• 简单写个logictic回归


    最近做华为软件精英挑战赛热身赛,给出的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)
    

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

    $ heta = heta - alpha ext{ } d heta$

    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)
    
  • 相关阅读:
    hdu 2554 最短路 (dijkstra)
    hdu 1217 Arbitrage (spfa)
    盘点:2018年双11背后的蚂蚁核心技术
    跨境物流链路怎么做?菜鸟工程师打造了全球通关“神器”
    用简单代码看卷积组块发展
    分析core,是从案发现场,推导案发经过
    全图化引擎(AI·OS)中的编译技术
    开源 serverless 产品原理剖析
    手把手教您将 libreoffice 移植到函数计算平台
    在数据采集器中用TensorFlow进行实时机器学习
  • 原文地址:https://www.cnblogs.com/pteromyini/p/12510716.html
Copyright © 2020-2023  润新知