线性回归&逻辑回归

一.线性回归简介

  • 线性回归,就是能够用一条直线较为精确地描述数据之间的关系。这样当出现新的数据的时候,就能够预测出一个简单的值。
    我们将这些数据通过python绘制出来,然后我们需要做的是找一条直线去最大化的拟合这些点,理想情况是所有点都落在直线上。希望所有点离直线的距离最近。简单起见,将距离求平方,误差可以表示为
    在这里插入图片描述


    找到最能拟合数据的直线,也就是最小化误差。通常我们使用的是最小二乘法

    上述公式只有m, b未知,因此可以看最一个m, b的二次方程,求Loss的问题就转变成了求极值问题。 这里不做详细说明。另每个变量的偏导数为0, 求方程组的解。
    在这里插入图片描述


    然后我们通过梯度下降的方法去更新m和b。

    在动手写算法之前我们需要理一下编写思路。回归模型主体部分较为简单,关键在于如何在给出 MSE损失函数之后基于梯度下降的参数更新过程。首先我们需要写出模型的主体和损失函数以及基于损失函数的参数求导结果,然后对参数进行初始化,最后写出基于梯度下降法的参数更新过程。

二.线性回归代码

import numpy as np
import matplotlib.pyplot as plt
 
# 计算loss
def liner_loss(w,b,data):
    """
    :param w:
    :param b:
    :param data:
    :return:
    """
    x = data[:,0]  # 代表的是第一列数据
    y = data[:,1]  # 代表的是第二列数据
    # 损失函数:使用的是均方误差(MES)损失
    loss = np.sum((y - w * x - b) ** 2) / data.shape[0]
    # 返回loss
    return loss
 
# 计算梯度并更新参数
def liner_gradient(w,b,data,lr):
    """
    :param w:
    :param b:
    :param data:
    :param lr:
    :return:
    """
    # 数据集行数
    N = float(len(data))
    # 提取数据
    x = data[:,0]
    y = data[:,1]
    # 求梯度
    dw = np.sum(-(2 / N) * x * (y - w * x -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值