linear regression

本文介绍线性回归的基本原理及其在房价预测中的应用,详细解析了假设、学习及决策三个阶段,并对比了批量梯度下降与随机梯度下降两种优化算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回归

这个概念源于英国生物学家对人类身高的研究。自然界有一种约束力,使人类身高在一定时期是相对稳定的。如果父 母身高矮了(高了),其子女比他们更高(矮),它让身高有一种回归到中心的作用。

linear regression

一个机器学习模型可以划分为三部分。

hypothesis 假设

在这个阶段建立对模型的假设(通常包含未知参数)

learning 学习

构建学习准则(通过优化算法学习得到未知参数)

decision 决策

评判模型的性能
房价预测问题
对于图中的房价预测问题,我们建立模型如图。
学习准则是平方误差最小化。
平方误差最小化
从图中可以看出,平方误差最小化有一个合理的几何解释。它最小化所有样本点到分类面(线)的距离,以期获得最优分类面(线)。

正规方程组法

求解这个问题我们可以直接使用矩阵运算求得结果。
这里写图片描述
但是,这里涉及到矩阵的逆,难以计算,有时甚至无法计算。

梯度下降法

梯度的定义为:
这里写图片描述
所以,沿着梯度的方向,函数值增大。沿着负梯度方向,函数值降低。梯度下降法是一个迭代算法,不停沿着负梯度方向前进,直到函数值降低到最优解(或局部最优解)或达到停止条件。
这里写图片描述
这里有个小练习:
这里写图片描述

import numpy as np
import matplotlib.pyplot as plt
#特征
x = [ i for i in range(14)]
#标签
y = [2.0,2.5,2.9,3.147,4.515,4.903,5.365,5.704,6.853,7.971,8.561,10.0,11.28,12.9]
def loss(w,b):
    #计算损失
    error = 0
    for i in range(len(x)):
        error+=1/2*(w*x[i]+b-y[i])**2
    return error
def batch_gradient_descent(maxCycles,alpha,eps):
    #批量梯度 batch_gradient_descent
    w=0
    b=0
    iter = 0
    error=[]
    for i in range(maxCycles):
        #计算整个数据集的梯度
        sigma1=0
        sigma2=0
        xx= np.linspace(0,14,15)
        ax = fig.add_subplot(2,2,3)
        ax.scatter(x,y,s=30,color='black')
        for i in range(len(x)):
            sigma1 = sigma1 + (w*x[i]+b-y[i])*x[i]
            sigma2= sigma2 + (w*x[i]+b - y[i])
        w = w - sigma1*alpha/len(x)
        b = b - sigma2*alpha/len(x)
        yy=w*xx+b
        plt.plot(xx,yy,color='red',linestyle=':',linewidth=0.5)#画出拟合直线
        plt.xlabel('year')
        plt.ylabel('price')
        plt.title('batch gradient descent')
        iter = iter +1
        error.append(loss(w,b))
        xx = [i for i in range(len(error))]
        ax = fig.add_subplot(2,2,4)
        plt.plot(xx,error,c='red')
        plt.xlabel('iterations')
        plt.ylabel('error')
        plt.title('batch error')
        if loss(w,b)<eps:
            break
    print('批量迭代=',iter,'w=',w,'b=',b,'14年房价=',w*14+b)
    return w,b
def stochastic_gradient_descent(maxCycles,alpha,eps):
    #随机梯度 stochastic_gradient_descent
    iter =0
    w = 0
    b = 0
    flag = 0
    xx= np.linspace(0,14,15)
    ax = fig.add_subplot(2,2,1)
    ax.scatter(x,y,s=30,color='black')
    error=[]
    while True:
        for i in range(len(x)):#循环取数据集中的一个样本计算梯度
            h = w*x[i]+b
            w = w - alpha * (h-y[i]) * x[i]
            b = b - alpha * (h - y[i])
            yy=w*xx+b
            plt.plot(xx,yy,color='blue',linestyle=':',linewidth=0.2)#画出拟合直线
            iter = iter+1
            error.append(loss(w,b))
            if loss(w,b)<eps or iter>=maxCycles:
                flag =1
                break
        if flag:
            break
    plt.xlabel('year')
    plt.ylabel('price')
    plt.title('stochastic gradient descent')
    ax = fig.add_subplot(2,2,2)#画出损失
    xx = [i for i in range(len(error))]
    plt.plot(xx,error)
    plt.xlabel('iterations')
    plt.ylabel('error')
    plt.title('stochastic error')
    print('随机迭代=',iter,'w=',w,'b=',b,'14年房价=',w*14+b)
    return w,b
#初始化参数
maxCycles=200
alpha=0.006
eps = 0.1
#画出数据集
fig = plt.figure()
w1,b1=stochastic_gradient_descent(maxCycles,alpha,eps)
w2,b2=batch_gradient_descent(maxCycles,alpha,eps)
plt.show()

这里写图片描述

基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值