机器学习之预测回归一:简单线性回归

python机器学习-线性回归(LinearRegression)算法 用python进行线性回归分析非常方便,如果看代码长度你会发现真的太简单。但是要灵活运用就需要很清楚的知道线性回归原理及应用场景。现在我来总结一下用python来做线性回归的思路及原理。 线性回归应用场景 线性回归介绍 机器学习中的线性回归 简单的线性回顾实例 线性回归应用场景 线性回归介绍 ——线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系... 阅读详情

机器学习之预测回归一:简单线性回归

回归的目的是预测数值型的目标值。

本文介绍单变量线性回归和多变量线性回归的算法原理,然后给出 Python 实战案例。关于回归进一步的问题(局部加权回归和惩罚线性回归)可以参考另一篇文章: 预测回归二:局部加权回归和惩罚线性回归

1、单变量线性回归

假设自变量 x 与因变量 y 之间是线性函数的关系,可以假设线性函数为:
在这里插入图片描述
回归系数为:
在这里插入图片描述
以平方误差计算代价函数:
在这里插入图片描述
其中,x,y 是输入数据(训练集),h 是y的预测值。此代价函数也被称为平方误差函数 ( square error function ),或平方误差代价函数 ( square error cost function )。误差平方对于大多数问题,尤其是回归问题都是合理的选择。平方误差函数是解决回归问题最常用的方式。

求解回问题转化为优化问题,优化目标是使代价函数(或称为损失函数)最小:
在这里插入图片描述
采用梯度下降算法求解优化问题。梯度下降背后的思想是:开始时我们随机选择一个参数的组合,计算代价
函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到
一个局部最小值( local minimum) , 因为我们并没有尝试完所有的参数组合,所以不能确定
我们得到的局部最小值是否便是全局最小值( global minimum),选择不同的初始参数组合,
可能会找到不同的局部最小值。下图是梯度下降的直观示意图:
在这里插入图片描述
参数的计算公式可以写为:
在这里插入图片描述
其中 α 是学习率( learning rate),是决定收敛速度的超参数。

求解上面的方程关键在于求偏导:
在这里插入图片描述
求导后得到;
在这里插入图片描述
以上公式就是梯度下降算法求单变量解线性回归的递归公式。

2、多变量线性回归

多变量线性回归的推导过程同单变量线性回归一样,最后得到梯度下降的递归公式:

在这里插入图片描述

3、多项式回归

可以通过变量变换转化为多变量线性回归。如:

在这里插入图片描述

4、正规方程

求解线性回归还有另一种方法,它可以在不需要多步梯度下降的情况下,也能解出代价函数 J 的最小值,这是另一种称为正规方程(normal equations)的方法。

设有 n 个特征,有 m 个样本。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

则可以直接通过正规方程计算参数:

在这里插入图片描述

推导过程:

在这里插入图片描述

5、Python 代码实现

测试数据集使用 ex0.txt,数据文件中第二列是自变量 x,第三列是因变量 y,而第一列全为1,故而前两列可以作为矩阵 X。

梯度下降算法

首先是导入所需的包:

from numpy import matrix, linalg
import numpy as np
import matplotlib.pyplot as plt

加载样例数据

def loadDataSet(filename, separator='\t'):
    dataSet = []
    labels = []
    with open(filename, 'r') as fr:
        for line in fr.readlines():
            lineArr = line.strip().split(separator)
            feat = []
            for i in range(len(lineArr) - 1):
                feat.append(float(lineArr[i]))
            dataSet.append(feat)
            labels.append(float(lineArr[-1]))
    return dataSet, labels

根据代价函数的计算公式,得到代价函数的计算函数:

def costJ(X, y, theta):
    """
    计算代价函数,(注意这里的X,和 y 都是 numpy 的 matrix 对象)
    :param X: matrix, [X0, X1, X2, ..., Xn]^T, X0 = 1, m * (n+1) 矩阵, m 个样本,n个特征
    :param y: matrix, [y1, y2, ..., ym], 1 * m  向量
    :param theta: 1 * m 向量, 权重
    """
    m = float(len(y))
    j = (X * theta - y)
    J = sum(j.transpose() * j) / (2*m)
    return float(J)

根据梯度下降的迭代公式,计算回归系数:

def linear_regres(X, y, alpha, num_iters):
    """
    梯度下降算法求解线性规划
    :param X: list, [X0, X1, X2, ..., Xn]^T, X0 = 1, m * (n+1) 矩阵, m 个样本,n个特征
    :param y: list, [y1, y2, ..., ym], m * 1 向量
    :param alpha: 学习率
    :param num_iters: 最大迭代次数
    :return:
    """
    m = float(len(y))
    X = matrix(X)
    y = matrix(y).transpose()
    theta = matrix([[0.], [0.]])
    J = []
    J.append(costJ(X, y, theta))
    theta_s = theta.copy()
    for i in range(num_iters):
        theta[0] -= alpha / m * sum(X * theta_s - y)
        theta[1] -= alpha / m * sum((X * theta_s - y).transpose() * X[:, 1])
        J.append(costJ(X, y, theta))
        theta_s = theta.copy()
    return theta, J

导入数据求解线性回归:

x, y = loadDataSet('ex0.txt')
theta, J = linear_regres(x, y, 0.01, 500)
plt.plot(range(len(J)), J)
plt.show()

绘制代价函数随迭代次数的变化:

在这里插入图片描述

绘制样例数据与拟合曲线:

def plot_reg_line(X, y, theta):
    X = matrix(X)
    y = matrix(y)
    fig = plt.figure()
    aX = fig.add_subplot(111)
    aX.scatter(X[:, 1].flatten().A[0], y.T[:, 0].flatten().A[0])
    XCopy = X.copy()
    XCopy.sort(0)
    yH = XCopy*theta
    aX.plot(XCopy[:, 1], yH, C='black')
    plt.show()
plot_reg_line(x, y, theta)

在这里插入图片描述

正规方程

根据正规方程求解线性回归:

def normal_equ(X, y):
    """
    正规方程计算线性回归,theta = (X^T*X)^-1*X^T*y
    :param X: list, [X0, X1, X2, ..., Xn]^T, X0 = 1, m * (n+1) 矩阵, m 个样本,n个特征
    :param y: list, [y1, y2, ..., ym], m * 1 向量
    :return: theta, 1 * m 向量, 权重
    """
    X = matrix(X)
    y = matrix(y).transpose()
    XTX = (X.transpose() * X)
    if linalg.det(XTX) == 0.0:
        print('矩阵无法求逆!')
        return
    theta = XTX.I * X.transpose() * y
    return theta

由正规方程求解的就是最佳拟合曲线:

x, y = datasets.loadDataSet('ex0.txt')
theta = normal_equ(x, y)
print(theta)
plot_reg_line(x, y, theta)
机器学习-用简单线性回归做预测(实战篇) 这是参加贪心学院训练营的第一周,这一周老师主要交了我们简单的线性回归算法与 KNN算法的理论与实战。在机器学习里面,主要可以分为两大类问题,即,分类与回归。 分类主要是判断新得到的数据为哪一类,回归就是预测某一个连续的值。归根结底, 机器学习就是对拿到的历史数据,去训练出数据模型,然后能够对未知数据有一定预测。 在进入本次实战任务之前,我们需要先对机器学习有一定的认识。 请看我的“一文初窥机... 阅读详情

相关推荐

利用Weka进行线性回归预测

一、实验目的和内容 (一)实验目的和内容 利用Weka对现有数据进行短期预测。先利用excel和weka软件将数据记性预处理,再将数据载入weka中,开始创建模型并进行预测。通过本实验,掌握Weka软件的使用,对数据创建模型并预测。从而掌握回归分析的基本思想和方法。 (二)背景知识 1、Weka Weka全名怀卡托智能分析环境(Waikato Environment for Knowle...

IT女孩儿的日常的博客 1万+

当Sklearn遇上Plotly,机器学习变得如此简单、易于理解

在学习sklearn(机器学习)过程中,模型原理可谓是枯燥无味,加上大多数模型训练过程也是不可见的,这使得很多小伙伴们望而却步,当然也有很多学者试图通过各种方式以可视化模型学习及预测过程,但大多数是复杂且不美观的。 本文将给大家带来一个全新方式。当机器学习遇到简洁、强大且美观的plotly可视化库时,可谓是强强联手,从模型训练、预测、决策边界、残差、交叉验证、网格搜索到模型评价,均可以很容易地可视化出来。喜欢本文记得收藏、点赞、关注。 【注】完整版代码、资料、技术交流群,文末获取 Plotly基本介绍 P

Python学习与数据挖掘 1560

【机器学习小论文】sklearn线性回归LinearRegression代码及调参

一、前言 最近在写小论文,就是硕士毕业论文的部分成果,需要用到线性回归,所以就把相关代码贴上,便于日后写论文时总结,也顺便给后来者提供思路。小论文的思路主要是,先用线性回归,再用随机森林,最后再用xgboost,来预测房价,最后得出结论。所以,这个会陆续的贴出相关代码。至于数据清洗那一块,暂时不贴上了,主要原因就是数据清洗不容易,并且每个人的清洗方法也不一样,所以主要还是看思路。 二、算法简介 2.1 什么是回归分析 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关

xiaohutong1991的专栏 7107

生活中的算法的实际举例_三张图读懂机器学习:基本概念、五大流派与九种常见算法...

一、机器学习概览1. 什么是机器学习?机器通过分析大量数据来进行学习。比如说,不需要通过编程来识别猫或人脸,它们可以通过使用图片来进行训练,从而归纳和识别特定的目标。2. 机器学习和人工智能的关系机器学习是一种重在寻找数据中的模式并使用这些模式来做出预测的研究和算法的门类。机器学习是人工智能领域的一部分,并且和知识发现与数据挖掘有所交集。更多解读可参阅《一文读懂机器学习、数据科学、人工智能、深度学...

weixin_32122595的博客 2303

【机器学习】简单线性回归算法及代码实现

本文讲解了线性回归算法的基础知识和应用,强调线性回归主要用于解决回归问题。通过分析房产价格与房屋面积的关系,展示了线性回归的基本思想。文中提到线性回归算法的实现简单,但背后有强大的数学支撑。介绍了简单线性回归与多元线性回归的区别,并解释了如何通过最小二乘法找到最佳拟合直线。同时,探讨了线性回归算法的可解释性以及在机器学习中的重要地位,指出它是许多复杂模型的基础。此外,还提到了最优化原理在机器学习算法中的应用,以及如何通过线性回归算法学习机器学习中的重要思想。线性回归算法是机器学习领域的重要算法,

聚焦大数据、AI、数据库三大核心领域,分享 Flink/Spark 实时计算、数仓架构设计、AI 模型落地、数据库性能调优的实战干货,附可直接运行的源码与方案。提供企业技术内训、项目咨询与定制化服务,助力开发者与企业高效搞定数智技术难题。 1072

机器学习经典算法:简单线性回归(一元)

一元线性回归是一种用来预测单个因变量与单个自变量之间线性关系的算法。

Norah 的技术博客 1193

python回归结果可视化图表解读_Matplotlib 可视化最有价值的 14 个图表(附完整 Python 源代码)...

本文来源 | 公众号 Python数据之道翻译 | Lemon作者 |Machine Learning Plus本文总结了 Matplotlib 以及 Seaborn 用的最多的 50 个图形,掌握这些图形的绘制,对于数据分析的可视化有莫大的作用,在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 s...

weixin_39748928的博客 788

python:机器学习(随机森林、支持矢量机等)回归预测结果精度图绘制

本文记录了使用python回归方法对输入特征做了预测,并绘制了预测值和真实值之间的相关性图。

养乐多的博客 3022

线性回归 10 种图表 上

至于数据集,表现方式,大家可以根据我给出的代码继续调整即可!那么,在线性回归学习中,以下10种图表是很重要的:散点图线性趋势线图残差图(Residual plot)正态概率图学习曲线方差-偏差权衡图残差对预测值图部分回归图杠杆图Cook's 距离图。

CKissjy的博客 4093

机器学习笔记一:使用LinearRegression实现Boston房价线性回归

一、LinearRegression类 sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None) 参数 含义 fit_intercept 是否有截据,如果没有则直线过原点 normalize 是否将数据归一化 copy_X 默认为True,当为True时,X会被copi

耐心的小黑的博客 2783

利用Docker Compose简化openGauss多节点容器化部署

本文详细介绍了如何利用Docker Compose简化openGauss多节点容器化部署,从环境准备到配置文件编写,再到集群部署与验证,提供了一套完整的解决方案。通过Docker Compose,原本复杂的手动部署流程被大幅简化,显著提升了部署效率和可靠性,特别适合企业级开源数据库的高可用架构需求。

weixin_30338481的博客 60

4.机器学习-十大算法之一线性回归算法(LinearRegression)案例讲解

线性回归是一种用于预测数值型数据的统计学分析方法,它通过建立一个或多个自变量与因变量之间的线性关系来进行预测。线性回归的基本思想是通过拟合最佳直线(也就是线性方程),来描述自变量和因变量之间的关系。这条直线被称为回归线,其目的是使得所有数据点到这条直线的垂直距离(即残差)的平方和最小。这个最小化过程通常称为最小二乘法。以山河作礼。🎖️🎖️:Python领域新星创作者,优快云实力新星认证,优快云内容合伙人,阿里云社区专家博主,新星计划导师,在职数据分析师。💕💕悲索之人烈焰加身,堕落者不可饶恕。

weixin_50804299的博客 1万+

HLM(多层线性模型)在stata中语句

在阅读CEPS中发现有些研究采用的是HLM模型,HLM简单来说用一个方程跑两个回归。举例,对学习成绩影响因素,不同层有不同的影响,如在个体层面上个体特征会对成绩产生影响,在学校层面学校排名等因素会对成绩产生影响,两种因素不在一个层面,每层造成的差异都不相同。 在找相关语句时候发现操作这个语句的软件大多是SPSS和HLM,对于stata操作者并不友好。因此,在有限资料中总结了HLM在stata中的语句,后面会附上学习视频和链接。 先放语句,后面对方程式一个大致解析。由于针对HLM有一本书的介绍,可能一篇文章无

weixin_44652251的博客 1万+

机器学习线性回归算法实验报告_机器学习之简单线性回归

为了利用机器学习进行简单的线性回归,先理解机器学习和线性回归的概念,然后通过案例进行机器学习。本文主要目录如下:一、机器学习的概念二、线性回归的概念三、机器学习线性回归模型 (一)导入数据集 (二)提取特征标签 (三)绘制原始数据散点图 (四)查看相关系数 (五)建立训练数据和测试数据 (六)构建线性回归模型 ...

weixin_39828338的博客 6944

AD/Protel老手才知道的PCB过孔查看技巧:3分钟分清通孔、盲孔和埋孔

本文为PCB设计工程师提供了在Altium Designer/Protel中快速鉴别通孔、盲孔和埋孔的实用技巧。通过层叠管理器、高级筛选工具和实战五步法,帮助用户在3分钟内精准识别过孔类型,提升设计效率和电路性能。特别适合处理高密度HDI板卡中的复杂过孔布局。

weixin_29164497的博客 577

核回归(Kernel Regression)

本文讲解了核函数,并且实战通过核函数进行了预测,并附python代码

a2333333_的博客 6956

机器学习之线性回归算法预测数据

机器学习之线性回归算法预测数据,包括线性回归算法的理解、LinearRegression理解以及预测一元线性回归数据、预测二元线性回归数据、预测多元线性回归数据。

是十一月末的博客 1892

Unity简单操作:PostProcessing的使用

Postprocessing是一个unity2018版本的集成后期插件,有了这个插件,之后用unity开发时,后期调整颜色、光晕等会很方便。 目录 新建一个postprocessing profile(配置文件)。​ 参数说明: 新建一个postprocessing profile(配置文件)。 在主相机下加一个组件PostProcess Layer。 注意:需要将相机的Layer层设置与Post Process Layer 下的Volume blending(体积混合)...

weixin_39114763的博客 7369

头歌——机器学习(线性回归)

简单的说,是因为使用平方形式的时候,使用的是“最小二乘法”的思想,这里的“二乘”指的是用平方来度量观测点与估计点的距离(远近),“最小”指的是参数值要保证各个观测点与估计点的距离的平方和达到最小。假如我们将青少年的身高和体重值作为坐标,不同人的身高体重就会在平面上构成不同的坐标点,然后用一条直线,尽可能的去拟合这些点,这就是简单的线性回归。简单线性回归中,一个变量跟另一个变量的变化而变化,但是生活中,还有很多变量,可能由多个变量的变化决定着它的变化,比如房价,影响它的因素可能有:房屋面积、地理位置等等。

m0_73879806的博客 4208

告别Keil!用VSCode+PlatformIO玩转STC单片机(附自动下载配置)

本文详细介绍了如何从Keil迁移到VSCode+PlatformIO进行STC单片机开发,包括环境搭建、自动下载配置等实用技巧。通过对比传统IDE与现代工具链的差异,展示了VSCode+PlatformIO在代码编辑体验、跨平台支持和开发效率上的优势,帮助开发者实现更流畅的STC单片机开发流程。

weixin_27252001的博客 459

五万字解析【ROOT 入门指南】

本文是cern官方root入门指南的初步翻译版,还在进一步校对中....

荷塘阅色 208

三、(机器学习)-LinearRegression线性回归(一)

LinearRegression线性回归(–) 1. 什么是线性回归 线性回归是利用最小二乘法,对一个或者多个自变量和因变量之间的关系进行建模的一种回归分析。 那么什么是回归,什么又是分类呢? 如果一个模型输出的是一个连续的值,比如说估计房子的面积,估计值可以是100.1,100.2也可以是100.3这种连续的值,那么这个模型就是回归分析,如果预测的值不是一个了连续的值,比如说估计房子的房间数,房...

_23__的博客 3886

医疗工具识别(手术器械计数):基于YOLOv8的智能手术器械管理系统

YOLOv8是Ultralytics公司于2023年推出的最新一代目标检测算法,相比前代YOLOv5,在精度和速度上都有显著提升。Anchor-free检测:不再使用预定义的anchor boxes,简化了检测流程更高效的骨干网络:采用CSPDarknet53作为特征提取网络多尺度特征融合:通过PANet结构实现更好的小目标检测损失函数优化:使用CIoU损失提高边界框回归精度YOLOv8提供了多种规模的模型(n/s/m/l/x),可根据实际需求在精度和速度之间进行权衡。

YOLO 480

机器学习 ---线性回归

文章主要介绍了线性回归相关内容,包括简单线性回归与多元线性回归的概念及示例,阐述了残差的定义、在理想与非理想模型中的情况及意义,还讲解了线性回归的正规方程解,涵盖其适用场景、公式推导与代码实现,提及衡量线性回归性能指标可参考其他文章,最后以 scikit-learn 中的 LinearRegression 类为例,介绍了其在波士顿房价预测实践中的应用,包括数据集情况、类的常用参数及训练、预测函数的使用等。

m0_72968288的博客 2549

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ML 系列:机器学习和深度学习的深层次总结(02)线性回归

欢迎学习机器学习系列。这门综合课程目前包括40个部分,指导您了解机器学习、统计和数据分析的基本概念和技术。以下是最基本机器学习模型,线性回归模型。

gongdiwudu的专栏 2165

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

第L2周:机器学习|线性回归模型 LinearRegression:1. 简单线性回归模型

回归之所以能预测,是因为它通过大量的花瓣长度与宽度数据,“弄懂了”花瓣长度与宽度之间的线性关系,在这个基础之上就可以通过花瓣长度预测花瓣宽度了。通过鸢尾花的花瓣长度与宽度的线性关系来预测花瓣宽度,通过杯子里水的体积就可以知道(预测)水的重量。但是也并非所有“越…”都是线性的,比如“弹簧的弹力与位移的关系”。回归的目的是为了预测,比如在通过鸢尾花花瓣长度预测花瓣宽度。○①若不填或者填0,每次生成的数据都是随机,可能不一样。●“汉堡”买的越多,花的“钱”就越多。●杯子里的“水”越多,“重量”就越大。

lihuhelihu的博客 1040

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: python 实现中文文本分类
下一篇: 预测回归二:局部加权回归和惩罚线性回归
XnCSD
博客等级 码龄12年 132粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值