Linear回归与Logistic回归

回归问题与分类问题

回归问题

回归问题主要关注的是预测一个数值型的目标变量(因变量)。这种预测是基于一个或多个输入特征(自变量)的。回归模型的目标是找到一个最佳拟合线或曲面,使得预测值与实际值之间的误差最小。常见的回归问题包括房价预测、股票价格预测、销售额预测等。在这些例子中,输出变量(如房价、股票价格、销售额)都是连续的数值

分类问题

分类问题则关注于预测一个离散型的目标变量。这意味着输出变量只能取有限个离散值,通常用于识别或分类。例如,在电子邮件分类中,模型可能需要将邮件标记为“垃圾邮件”或“非垃圾邮件”;在图像识别中,模型可能需要将图像分类为“猫”、“狗”或“其他”。这些输出变量(如邮件类别、图像类别)都是离散的,且通常表示为标签或类别。

线性回归模型(Linear Regression)

线性回归模型是一种常用的统计方法,用于探索变量之间的关系,特别是当一个变量(因变量)受一个或多个变量(自变量)影响时。该模型的基本假设是因变量与自变量之间存在线性关系。通过拟合一条最佳直线(回归线),模型能够描述这种关系,并用于预测因变量的值

一元线性回归:

y = β0 + β1x + ε

β0是常数项(截距项),β1是回归系数,ε是随机误差项

多元线性回归:

线性回归模型的主要特点包括:

  1. 线性关系:模型假设自变量与因变量之间存在线性或近似线性的关系。这意味着当自变量发生变化时,因变量会按照一个恒定的速率增加或减少。
  2. 参数估计:通过最小二乘法等方法,模型可以估计出回归线的斜率和截距等参数。这些参数表示了自变量对因变量的影响程度。
  3. 预测能力:基于估计出的参数,模型可以用于预测新的数据点。当新的自变量值输入时,模型可以输出一个预测的因变量值。
  4. 统计检验:线性回归模型还提供了一系列的统计检验方法,用于评估模型的拟合效果、参数的显著性以及预测的准确性。

需要注意的是,线性回归模型有其适用条件和局限性。例如,它要求自变量和因变量之间的关系是线性的,且误差项应满足一定的分布假设(如正态分布)。在实际应用中,需要根据数据的特点和研究目的来选择合适的模型,并进行必要的模型验证和修正。

用numpy实现线性回归模型

import matplotlib.pyplot as plt
import numpy as np

x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]

#定义forward函数,用于计算预测值y_pred
#定义线性模型y_pred=wx
def forward(x):
    return x * w

#定义loss函数,用于计算预测值y_pred与实际值y之间的平方误差
def loss(x,y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

#存储权重w
w_list = []
#对应的平均平方误差
mes_list = []

#使用for循环遍历权重w的范围(0.0到4.0,步长为0.1)
for w in np.arange(0.0,4.1,0.1):
    print("w=",w)#打印当前权重w的值
    l_sum = 0#初始化一个变量l_sum,用于累加每个样本的损失值
    for x_val,y_val in zip(x_data,y_data):#使用zip函数将x_data和y_data组合成元组,然后遍历这些元组
        y_pred_val = forward(x_val)
        loss_val = loss(x_val,y_val)
        l_sum += loss_val#将损失值累加到l_sum中
        print("x_val=" , x_val, "y_val", y_val, "y_pred=", y_pred_val, "loss=", loss_val)
    print("MES=",l_sum / 3)
    w_list.append(w)
    mes_list.append(l_sum / 3)

plt.plot(w_list,mes_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()

梯度下降算法

梯度下降是一种迭代法,主要被用于求解损失函数的最小值。在机器学习算法中,尤其是深度学习中,梯度下降法常被用于求解模型参数,即无约束优化问题。

具体来说,梯度下降法通过不断迭代计算函数的梯度,判断该点的某一方向和目标之间的距离,最终求得最小的损失函数和相关参数。损失函数是一个自变量为算法参数的函数,其函数值为误差值,因此梯度下降就是找让误差值最小时算法取的参数。

梯度下降法的中心思想在于通过迭代次数的递增,调整使得损失函数最小化的权重。在每一次迭代中,它都会沿着梯度的反方向(即函数在该点处变化率最大的负方向)进行搜索,以找到使函数值下降最快的点。通过逐步调整参数,梯度下降法能够逐渐逼近损失函数的最小值,从而优化目标函数

请注意,梯度下降法只能保证找到梯度为0的点,但不能保证找到极小值点。此外,迭代终止的判定依据是梯度值充分接近于0,或者达到最大指定迭代次数。

梯度下降算法

import matplotlib.pyplot as plt

x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]

w = 1.0
def predict(x):
    return x * w

def cost(xs,ys):
    cost = 0
    for x,y in zip(xs,ys):
        y_pred = predict(x)
        cost+=(y_pred - y)**2
    return cost/len(xs)

#计算梯度
def gradient(xs, ys):
    grad = 0
    for x,y in zip(xs,ys):
        grad += 2*x*(predict(x) - y)
    return grad/len(xs)

epoch_list = []
cost_list = []
print('predict(before training): ',4, predict(4))
#epoch:训练轮次,表示重复训练的次数
for epoch in range(100):
    cost_val = cost(x_data,y_data)
    grad_val = gradient(x_data, y_data)
    w -= 0.01 * grad_val  #学习率设为0.01
    print('epoch:',epoch,'w=',w,'loss=',cost_val)
    epoch_list.append(epoch)
    cost_list.append(cost_val)

print('w=',w)
print('predict(after training)',4,predict(4))
#绘制图像
plt.plot(epoch_list,cost_list)
plt.ylabel('cost')
plt.xlabel('epoch')
plt.show()

随机梯度下降算法

import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
w = 1.0

# 定义线性模型y=wx
def forward(x):
    return x * w

def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

# 计算梯度SGD
def gradient(x, y):
    return 2 * x * (x * w - y)

epoch_list = []
loss_list = []
print("predict(after training", 4, forward(4))
for epoch in range(100):
    for x, y in zip(x_data, y_data):
        grad = gradient(x, y)
        w = w - 0.01 * grad
        print("\tgrad:", x, y, grad)
        l=loss(x,y)
    print("epoch", e
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值