Python 机器学习入门之线性回归

news2024/10/7 8:20:45

系列文章目录

第一章 Python 机器学习入门之线性回归

线性回归

  • 系列文章目录
  • 前言
  • 一、线性回归
    • 1.线性回归是什么
    • 2.线性回归的分类
  • 二、实现线性回归
    • 1.步骤
    • 2.代价函数
    • 3.梯度下降
  • 总结

前言

最近在上机器学习的课程,第一次实验是做线性回归,那神马是线性回归呢?

一、线性回归

1.线性回归是什么


根据百科给出的定义是这样子的,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析

在这里插入图片描述


对于一个菜鸡来说有些深奥,先将这个概念拆开来看,回归是什么?

简单来说就是衡量多个自变量X对因变量Y的影响程度,同时预测因变量Y未来的发展趋势,举个简单的例子,在打王者的时候决定你击杀对手的因素很多,比如装备,技术,经济等等,在一定情况下,甚至可以直接通过经济的高低来判断你是否可以击杀对手,这也可以理解为一个相对简单的回归

在这里插入图片描述

那线性又是指什么呢?

线性通常是指变量之间保持等比例的关系,简单来说,你是一位大房东,你出租的房间越多,你每月获得的租金就越多,出租房间和租金之间就是一个等比例的关系;当然,这是一种假设。


最后就是线性回归了,就是要找出一条直线能直观地反映出自变量X和因变量Y之间的关系的过程

2.线性回归的分类

对于线性回归的分类,就是根据自变量X的数量来划分
当自变量X只有一个时,我们称之为一元线性回归
当自变量X超过一个时,我们称之为多元线性回归

二、实现线性回归

我们用一个例子来简单实现一下一元线性回归,假设你是一家奶茶店的老板,你目前有开设奶茶店的城市人口数据和利润,你想知道它们之间是否存在某种关系,来决定接下来开店的位置

1.步骤

  1. 根据预测目标,确定自变量和因变量(自变量是人口,因变量是利润)
  2. 绘制散点图,选择回归模型(将相关数据可视化并选择合适的模型)
  3. 估计模型参数,建立回归模型(最小二乘法)
  4. 对回归模型进行检验
  5. 利用回归模型进行预测(找到接下来开店的城市)

2.代价函数


首先我们实现第一二步,将相关数据可视化展示出来,我们的回归模型就是线性回归模型;

在这里插入图片描述
从图中我们可以看到真实情况往往是非常复杂的,而线性回归模型的任务就是找出一条能准确反映自变量X和因变量Y的直线,所以这当中肯定会出现误差,那让误差越小,我们的模型预测起来就更准确,那如何计算误差呢,就得使用代价函数了;

在这里插入图片描述
我们使用的是平方误差代价函数来计算最小代价,实现代码如下

# 最小化代价函数,X为训练数据,y是目标数据,theta是模型参数,即相关系数
def computeCost(X, y, theta):
    inner = np.power(((X * theta.T) - y), 2)
    return np.sum(inner) / (2 * len(X))

3.梯度下降

我们现在有了最小化代价函数,就可以通过它来找到最优的模型参数了;因此在前人的基础上我们采用梯度下降函数来寻找最小化的代价函数和模型参数值

# 梯度下降函数,X为训练数据,y是目标数据,theta是模型参数,alpha学习率,iters循环次数
def gradientDescent(X, y, theta, alpha, iters):
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)
    for i in range(iters):
        error = (X * theta.T) - y
        for j in range(parameters):
            term = np.multiply(error, X[:, j])
            temp[0, j] = theta[0, j] - ((alpha / len(X)) * np.sum(term))
        theta = temp
        cost[i] = computeCost(X, y, theta)
    return theta, cost

将梯度下降函数中得到的代价函数绘制出来可以看出,这是一个明显的凹函数,意味着代价函数是明显减小的
在这里插入图片描述

总结

结果如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于FPGA的图像坏点像素修复算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 202…

竞赛选题 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

Linux 读写锁

读写锁是一把锁 /*读写锁的类型 pthread_rwlock_tpthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);int pthread_rwlock_destory(pthread_rwlock_t *rwlock);int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);int pt…

Android逆向技术高阶大法

原文链接 Android逆向技术高阶大法 安卓应用是一个客户端,与传统软件类似,需要把软件打包,然后通过某种渠道(应用市场)分发给用户,这是常规的发布方式,它的更新节奏很慢,从你在应用…

系统集成|第十四章(笔记)

目录 第十四章 合同管理14.1 概述及相关概念14.2 项目合同14.3 《合同法》14.4 《仲裁法》 上篇:第十三章、干系人管理 第十四章 合同管理 14.1 概述及相关概念 主要包括合同签订管理,合同履行管理,合同变更管理以及合同档案管理。作为一个重…

自拟实现消息队列(MQ)基于Rabbit MQ(含概念和源码)巨详细!!!!!含思维导图

MQ目录 MQ基本概念什么是MQ?MQ的应用场景 首先先明白需求持久化分析那么MQ如何设计持久化? 可靠性分析高效性分析MQ核心概念(装配层)实现MQ组件思维导图创建项目导入数据库下载SqLite。 创建组件实体类创建交换机(要加…

精通Linux系列第一章:探索Linux世界的大门

文章目录 一、前言二、 什么是Linux?三、Linux系统与Windows系统的区别四、为什么要学习Linux?五、 Linux的优势六、什么是Linux发行版?七、常见的Linux发行版八、如何选择适合你的Linux发行版?九、Linux各种发行版的优势与应用十…

【C语言】进阶——结构体+枚举+联合

①前言: 在之前【C语言】初阶——结构体 ,简单介绍了结构体。而C语言中结构体的内容还有更深层次的内容。 一.结构体 结构体(struct)是由一系列具有相同类型或不同类型的数据项构成的数据集合,这些数据项称为结构体的成员。 1.结构体的声明 …

NVM:node多版本管理的下载安装及使用

NVM:node多版本管理的下载安装及使用 使用之前先卸载node,避免各种奇葩问题导致不成功。win卸载:win > 设置 > 应用 > 应用和功能,找到 node 点击出现卸载按钮并且卸载它。 1、下载安装: https://github.co…

信创之国产浪潮电脑+统信UOS操作系统体验1:硬件及软件常规功能支持情况介绍

一、引言 由于公司要求支持国产信创,最近办公的笔记本电脑换成了软硬件全国产,由于国产操作系统是在开源linux基础上演进的,在换之前,非常担心操作不方便,周边应用软件少,功能差,内心是比较抗拒…

C++:优先级队列模拟实现和仿函数的概念使用

文章目录 使用方法Compare仿函数一些场景模板参数和函数参数 本篇总结优先级队列 使用方法 首先在官网查看它的一些用法 template <class T, class Container vector<T>,class Compare less<typename Container::value_type> > class priority_queue;从…

软件测试之接口测试

1、什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…

Crypto:MD5

题目 下载了题目给的压缩包解压后&#xff0c;打开文件 使用md5解码器解码后得到&#xff0c;即为flag

DS18B20温度传感器

DS18B20简介 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线&#xff08;单总线&#xff09;”接口的温度传感器 这种一线总线就是 三线制 SPI DS18B20的 配置寄存器&#xff1a; TM 是测试位&#xff0c;出厂设置就被设置为0&#xff0c;不需要改动&#xff0c; R1、R…

linux————ceph分布式部署

目录 一、概述 特点 1、统一存储 2、高扩展性 3、可靠性强 4、高性能 组件 1、Monitor 2、OSD 3、MOD 4、Objet 5、PG 6、RADOS 7. Libradio 8. CRUSH 9. RBD 10. RGW 11. CephFS 架构图 二、准备工作 三、ceph安装 创建集群目录 修改配置文件 安装 初…

数据结构上机1

1、题目&#xff1a; 将1~10存入数组a[10]&#xff0c;并将其逆序输出 #define _CRT_SECURE_NO_WARNINGS 1 //(1) 将1~10存入数组a[10]&#xff0c;并将其逆序输出#include <stdio.h>int main() {int a[10];// 将1到10存入数组a[10]for (int i 0; i < 10; i){a[i] i…

[硬件基础]-快速了解I2C串行通信协议

快速了解I2C串行通信协议 文章目录 快速了解I2C串行通信协议1、硬件接口2、数据帧3、数据操作4、时钟拉伸&#xff08;Clock Stretching&#xff09;5、总线仲裁6、权衡&#xff1a;功率与速度7、总结 内部集成电路协议&#xff08;Inter-Integrated Circuit Protocol&#xff…

TS编译选项——TS代码错误不生成编译文件

一、TS不生成编译文件 在tsconfig.js文件中配置noEmit属性 {"compilerOptions": {// outDir 用于指定编译后文件所在目录"outDir": "./dist", // 将编译后文件放在dis目录下// 不生成编译后的文件"noEmit": true,} } 二、TS代码错…

看到一个外贸经典案例, 分享一下

最近看到一个经典案例&#xff0c;案例可能没有多少新奇&#xff0c;但是大家的评论以及给出的解决方案却能给我们很多启发&#xff0c;一个事情要从多方面去进行假设然后一一排除去找到最合适的解决方法&#xff0c; 下面&#xff0c;让我们一起来看看这个外贸小伙伴遇到的问…

《你好,C语言》:从另一个视角学习并重新审视C语言的意义

《你好&#xff0c;C语言》&#xff1a;从另一个视角学习并重新审视C语言的意义 尽管C语言诞生了这么多年&#xff0c;但是它依然活跃在开发者一线&#xff0c;不可否认的是C语言的确有它独特的魅力。本文将从一个全新的视角&#xff0c;重新带领大家学习领悟C语言的奥秘&#…