zoukankan      html  css  js  c++  java
  • 线性回归

    1.什么是线性回归?

    线性回归算法就是用来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法

    2.线性回归的数据表达式

      2.1.一元线性回归  

    '''
    w0:偏置项参数
    w1:自变量系数
    x:自变量
    y:因变量
    '''
    y = w0 + w1 * x

      2.2.多元线性回归

    #自变量可以是任意多个,体现在数据中一般为一条数据中的不同特征
    y = w0 + w1 * x1 + w2 * x2 + .... + wn * xn

      2.3.拓展--非线性多元回归

    #此处的区别在于自变量的幂不再是1
    y = w0 + w1 * x1 + w2 * x 2 **2+ .....+ wn * x ** nn

    3.线性回归的数学推倒

    线性回归使用的Loss Function是最小二乘法:

    最小二乘法损失函数的思想主要是求解所有数据预测值与真实值之间差异的平方,系数1 / 2只是为了再求导时算法的方便。

    以下是对偏置和系数具体的求导公式:

    以下是对整个计算过程的矩阵化:

    4.使用python对整体流程进行实现

    import numpy as np
    #定义线性回归主体函数
    def linear_loss(x, y, w, b): num_train = x.shape[0] num_feature = x.shape[1] # 定义线性回归方程 y_hat = np.dot(x, w) + b # 定义损失函数 loss = np.sum((y_hat-y)**2)/num_train # 计算偏置和系数的导数 dw = np.dot(X.T, (y_hat-y)) /num_train db = np.sum((y_hat-y)) /num_train return y_hat, loss, dw, db
    #初始化参数
    #dims对应特征数量
    def
    initialize_params(dims): w = np.zeros((dims, 1)) b = 0 return w, b
    #整体训练流程
    #learning_rate:学习率,空值参数求导梯度下降速度
    #epochs:模型迭代次数

    def
    linar_train(x, y, learning_rate, epochs): w, b = initialize(X.shape[1]) loss_list = [] for i in range(1, epochs): # 计算当前预测值、损失和参数偏导 y_hat, loss, dw, db = linar_loss(x, y, w, b) loss_list.append(loss)
    # 基于梯度下降的参数更新过程 w += -learning_rate * dw b += -learning_rate * db
    # 打印迭代次数和损失 if i % 100 == 0: print('epoch %d loss %f' % (i, loss)) # 保存参数 params = { 'w': w, 'b': b } # 保存梯度 grads = { 'dw': dw, 'db': db } return loss_list, loss, params, grads

     

  • 相关阅读:
    前端请求跨域理解
    可视化交互行为
    文章标题
    在map上标记point
    基于force布局的map
    stack布局
    python一些特有语法
    histogram布局用法
    patition布局
    Shell命令行处理JSON
  • 原文地址:https://www.cnblogs.com/peiziming/p/12737362.html
Copyright © 2011-2022 走看看