机器学习实验一:线性回归

系列文章目录

  1. 机器学习实验一:线性回归
  2. 机器学习实验二:决策树模型
  3. 机器学习实验三:支持向量机模型
  4. 机器学习实验四:贝叶斯分类器
  5. 机器学习实验五:集成学习
  6. 机器学习实验六:聚类

文章目录

  • 系列文章目录
  • 一、实验目的
  • 二、实验原理
    • 1.线性回归
    • 2.梯度下降法
    • 3.最小二乘法
  • 三、实验内容
  • 四、实验步骤
    • 1. 随机生成数据集
    • 2. 梯度下降法
    • 3. 最小二乘法
    • 4. 绘图
  • 总结


一、实验目的

(1)掌握线性回归的基本原理;
(2)掌握线性回归的求解方法;
(3)掌握梯度下降法原理;
(4)掌握最小二乘法。

二、实验原理

1.线性回归

线性回归的任务是找到一个从输入特征空间X到输出特征空间Y的最优的线性映射函数简单来说给定d个属性描述的示例x=(x1,x2,…,xd),其中xi表示x在第i个属性上的取值。线性模型试图学到通过属性的线性组合来进行预测的函数,即:在这里插入图片描述
写成向量形式:在这里插入图片描述
其中,w=(w1,w2,…,wd),wT表示w的转置。
我们可以使用均方误差确定w和b,均方误差是回归任务中最常用的性能度量,我们试图通过均方误差最小来求解w和b,即:在这里插入图片描述
我们称上式为代价函数或损失函数,我们只需要使代价函数最小即可。

2.梯度下降法

函数沿着导数方向是变化最快的,为了更快地达到优化目标,沿着负梯度方向搜寻w,b使得代价函数最小,即使用梯度下降法更新权重即可求出w和b。
梯度就是多元函数的偏导数,我们求出代价函数对w,b的偏导数,即:在这里插入图片描述
在这里插入图片描述
沿着负梯度方向搜寻w,b使得代价函数最小,即使用梯度下降法更新权重:在这里插入图片描述
在这里插入图片描述
η为学习率,随机初始化w,b,通过不断地迭代上述2个更新公式计算w,b的最优值。

3.最小二乘法

使用最小二乘法求解w,b,即令代价函数对w,b的偏导数为0,这种基于均方误差进行线性模型求解的方法称为最小二乘法。
w,b的计算公式为:
在这里插入图片描述
在这里插入图片描述
可以看出最小二乘法是梯度下降法的一种特殊情况,很多函数解析不出导数等于零的点,梯度下降法是求解损失函数参数更常用的方法。

三、实验内容

准备数据,np.random,rand()产生一组随机数据x,根据y=wx+b,产生数据y,并用np.random.rand()添加随机噪声,y=wx+b+噪声,得到数据集(x,y);
建立线性模型,y_pre=wx+b;
采用均方误差,构建损失函数;
训练模型,梯度下降法进行优化权重求解w和b;
直接使用最小二乘法求解w和b,并与梯度下降法求解的w和b进行比较;
绘制样本点,预测直线。

四、实验步骤

1. 随机生成数据集

使用np.arange()产生0到10、步长为0.2的数据x,再生成与x相同长度的全1向量,两者行叠加再转置得到(1,wT),记为input_data。设置w和b,令y=wx+b+random噪声,记为target_data。input_data和target_data组成数据集。代码如下:

# 构造训练数据
x = np.arange(0., 10., 0.2)
m = len(x)
x0 = np.full(m, 1.0)
input_data = np.vstack([x0, x]).T
w = 2
b = 5
target_data = w * x + b + np.random.randn(m)

2. 梯度下降法

设学习率η=0.001,随机初始化w和b,设(b,w)T向量为theta。沿着负梯度方向搜寻w,b使得代价函数最小。在每次循环中,更新w,b的值,并打印。当循环次数超过设定最大次数或w和b达到收敛条件时,退出循环。代码如下:

# 终止条件
loop_max = 1e4  # 最大迭代次数
epsilon = 1e-3  # 收敛条件最小值# 初始化权值
np.random.seed(0)
theta = np.random.randn(2)
alpha = 1e-3  # 步长,也叫学习率
diff = 0.
error = np.zeros(2)
count = 0  # 循环次数
finish = 0  # 终止标志# 迭代
while count < loop_max:count += 1# 在标准梯度下降中,权值更新的每一步对多个样例求和,需要更多的计算sum_m = np.zeros(2)for i in range(m):diff = (np.dot(theta, input_data[i]) - target_data[i]) * input_data[i]# 当alpha取值过大时,sum_m会在迭代过程中会溢出sum_m = sum_m + diff# 注意步长alpha的取值,过大会导致振荡theta = theta - alpha * sum_m# 判断是否已收敛if np.linalg.norm(theta - error) < epsilon:finish = 1breakelse:error = theta# 打印迭代次数、更新后的w和bprint('迭代次数 = %d' % count, '\t w:', theta[1], '\t b:', theta[0])print('迭代次数 = %d' % count, '\t w:', theta[1], '\t b:', theta[0])

3. 最小二乘法

使用Python第三方库——scipy中的统计模块——stats中的linregress()计算两组测量值x和target_data的线性最小二乘回归。代码如下:

# 用scipy线性最小二乘回归进行检查
slope, intercept, r_value, p_value, slope_std_error = stats.linregress(x, target_data)
print('使用最小二乘法计算,斜率 = %s 截距 = %s' % (slope, intercept))

4. 绘图

使用Python第三方库——matplotlib中的plot()进行绘图。样本点用蓝色星形点表示,梯度下降法得到的预测直线用红色实线表示,而最小二乘法得到的预测直线用绿色实线表示。代码如下:

# 用plot进行展示
plt.scatter(x, target_data, color='b', marker='*')
# 梯度下降法
plt.plot(x, theta[1] * x + theta[0], label='gradient descent', color='red')
# 最小二乘法
plt.plot(x, slope * x + intercept, label='least square', color='green')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('Experiment 1: Linear regression')
plt.savefig('result.png')
plt.show()

总结

以上就是今天要讲的内容,机器学习实验一:线性回归

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

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

相关文章

12、pytest上下文友好的输出

官方实例 # content of test_assert2.py import pytestdef test_set_comparison():set1 set("1308")set2 set("8035")assert set1 set2def test_dict_comparison():dict_1 {name:陈畅,sex:男}dict_2 {name:赵宁,sex:女}assert dict_1 dict_2def tes…

今日心得:多总结多探索,多于他人沟通,思想观点碰撞

今日在工作中获得了一些新的体验和感悟&#xff0c;使我深刻认识到不断总结和探索的重要性。 通过反思和总结&#xff0c;我能够更好地理解自己的行为和决策&#xff0c;发现自己的优点和不足&#xff0c;从而更好地规划未来的行动。 在人生的旅途中&#xff0c;我们不断地遇到…

Flask项目Day1,Flask常见第三方拓展包

拉项目 git clone https://gitee.com/hahaguai007/python-flask-mysql.git git clone 项目地址运行后即可获取项目 2.创建数据库 在MySQL中创建一个数据库&#xff0c;名字自己定&#xff0c;然后修改RealProject\settings.py里的SQLALCHEMY_DATABASE_URI&#xff0c;格式为 …

第18章 C++11标准库(STL)

STL定义了强大的、基于模板的、可复用的组件&#xff0c;实现了许多通用的数据结构及处理这些数据结构的算法。其中包含三个关键组件——容器&#xff08;container&#xff0c;流行的模板数据结构&#xff09;、迭代器&#xff08;iterator&#xff09;和算法&#xff08;algo…

动态规划求解 fibonacci 数列

动态规划: 动态规划的基本思想是&#xff1a;将原问题拆分为若干子问题&#xff0c;自底向上的求解。是自底向上的求解&#xff0c;即是先计算子问题的解&#xff0c;再得出原问题的解。 思路: 创建一个数组&#xff0c;大小为n1&#xff0c;用于存储斐波那契数列的值。数组的…

maven-profile

指定profile生效的几种方式 maven中profile的使用详解_maven profile_2021不再有雨的博客-CSDN博客 【Maven】【翻译】3、Profiles文件_maven的profiles文件是什么-CSDN博客 查看当前生效的profile mvn help:active-profiles 比如有些是用activeProfiles在pom中指定的&…

我在USC南加大学游戏:真实经历/录取作品集_RoSSo艺术留学

近日&#xff0c;美国Common App最新早申统计数据&#xff1a;早申人数与疫情前相比增加了41%&#xff01;专注于国际艺术教育的RoSSo也发现&#xff0c;2022-2023申请季提交早申的学生中&#xff0c;各类热门院校以及艺术留学专业申请人数均是“涨”声一片&#xff01; 图源官…

SpringBoot3-快速体验

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

计算机寄存器是如何实现的

冯诺依曼体系 冯诺依曼体系为现代计算机的设计和发展奠定了基础&#xff0c;它的核心思想和原则在当今计算机体系结构中仍然被广泛采用和应用。所以只要谈论计算机的组成就离不开冯诺依曼体系 作为核心组成部分的CPU除了由运算器和控制器组成之外&#xff0c;还有一些寄存器…

阿里云环境下的配置DNS和SLB的几种实践示例

一、背景 对于大多中小型公司来说&#xff0c;生产环境大多是购买阿里云或者腾讯云等等&#xff0c;也就存在以下需求&#xff1a; 外网域名内网域名SLB容器化部署 特别是前两项&#xff0c;一定是跳不过的。容器化部署&#xff0c;现在非K8S莫属了。 既然是购买阿里云&…

Codeforces Round 913 (Div. 3)

等hack完补全&#xff0c;快进到全都被爆开 A. Rook B. YetnotherrokenKeoard 补题&#xff1a;C. Removal of Unattractive Pairs 总结 前两题18分钟快速拿下。C题开始钻牛角尖&#xff0c;钻了2个小时超时一次WA一次。 陷入了危险的无用思维旋涡&#xff01;导致这一次div…

从零构建属于自己的GPT系列2:模型训练1(预训练中文模型加载、中文语言模型训练、逐行代码解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

leetcode203. 移除链表元素

题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入…

NSS [NSSCTF 2022 Spring Recruit]babyphp

NSS [NSSCTF 2022 Spring Recruit]babyphp 考点&#xff1a;PHP特性 开局源码直接裸奔 <?php highlight_file(__FILE__); include_once(flag.php);if(isset($_POST[a])&&!preg_match(/[0-9]/,$_POST[a])&&intval($_POST[a])){if(isset($_POST[b1])&&…

Git篇如何在自己服务器搭建自己的git私有仓库

要在自己的服务器上搭建自己的Git私有仓库&#xff0c;可以按照以下步骤进行操作&#xff1a; 安装Git服务器软件&#xff1a;选择一款适合的Git服务器软件&#xff0c;如GitLab或GitHub&#xff0c;并按照官方文档进行安装和配置。创建数据库&#xff1a;如果使用GitLab&…

Doris 集成 ElasticSearch

Doris-On-ES将Doris的分布式查询规划能力和ES(Elasticsearch)的全文检索能力相结合,提供更完善的OLAP分析场景解决方案: (1)ES中的多index分布式Join查询 (2)Doris和ES中的表联合查询,更复杂的全文检索过滤 1 原理 (1)创建ES外表后,FE会请求建表指定的主机,获取所有…

MATLAB算法实战应用案例精讲-【图像处理】边缘检测(补充篇)(附MATLAB代码实现)

目录 前言 几个相关概念 知识储备 数字图像处理(Digital Image Processing)

Qt 软件调试——windbg初篇(一)

在上一篇《Qt 软件调试&#xff08;二&#xff09;使用dump捕获崩溃信息》中我们结尾处提示大家先准备好windbg&#xff0c;windbg是非常强大的调试工具&#xff0c;对于我们进行代码调试和分析异常有着非常重要的意义。 在Qt软件调试这个系列的首篇&#xff0c;我们介绍了《Qt…

RPG项目01_层级设置

基于“RPG项目01_UI面板Game”&#xff0c; 找到狼人 添加组件&#xff0c;让狼人一定区域自动跟随主角进行攻击 解释&#xff1a;【烘培蓝色】因为如果什么都不做就会被烘培成蓝色对应的功能就是 可修改区域功能 当将区域设置成不可行走状态&#xff0c;则不为蓝色 烘培&…

手机备忘录在哪里找出来?

谈及手机备忘录&#xff0c;每一个品牌的手机大家都能找到很多&#xff0c;现在各大手机品牌都开发的有自带的手机备忘录&#xff0c;所以说&#xff1a;手机备忘录在哪里找出来并不难&#xff0c;即便是手机自带的没有备忘录工具&#xff0c;大家也是可以通过手机应用市场搜索…