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

系列文章目录

  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 = 1
        break
    else:
        error = theta
    # 打印迭代次数、更新后的w和b
    print('迭代次数 = %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()

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue学习计划-Vue2--Vue核心(二)Vue代理方式

Vue data中的两种方式 对象式 data:{}函数式 data(){return {} }示例&#xff1a; <body><div id"app">{{ name }} {{ age}} {{$options}}<input type"text" v-model"value"></div><script>let vm new Vue({el: …

leetcode 1004. 最大连续1的个数 III(优质解法)

代码&#xff1a; class Solution {public int longestOnes(int[] nums, int k) {int lengthnums.length;int zero0; //计数器&#xff0c;计数翻转 0 的个数int max0; //记录当前获得的最长子数组长度for(int left0,right0;right<length;right){if(nums[right]0){zero;wh…

vsftpd.confg 常用配置,Beyond Compare 测试可用

vsftpd.confg 常用配置,备份一下, 经常配置好久 , 以后直接粘贴即可. Beyond Compare 测试可用. # Example config file /etc/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon m…

使用有道词典复制网页上的字

1. 今天发现一个新大陆&#xff0c;同事教的&#xff0c;有道词典可以复制网页上的字&#xff0c;也可以复制PDF文件等一些限制不可复制的字&#xff0c;原来不可复制的字&#xff0c;现在用有道都可以复制了&#xff0c;不需要用油猴下载脚本了。写给老婆这种纯电脑小白的。其…

销售人员如何自我提升?

销售人员如何自我提升&#xff1f; 在美国有这么一句流行语&#xff1a;不当总统就干销售员。其实在国内很多老板&#xff0c;高收入人群等大部分是来自销售岗位。因为销售是离钱最近的职业&#xff0c;在销售职业生涯中能收获到很多&#xff0c;比如人际关系能力&#xff0c;…

使用Scanner扫描器和if语句来判断QQ等级的活跃程度

一、主要特点 总体使用try包围起来&#xff0c;用到了Scanner扫描器&#xff0c;还用到了若干if语句。 二、运行代码 import java.util.Scanner; public class QQtest {public static void main(String[] args){try (Scanner scan new Scanner(System.in)) {System.out.pr…

【C语言】mmap函数

mmap是一种在Unix/Linux操作系统中将文件映射到进程的地址空间的方法&#xff0c;它允许程序像访问内存一样访问文件。这种方法可以提高文件访问的速度和效率&#xff0c;特别是对于大文件而言。 以下是mmap的基本使用方法&#xff1a; 1. 包含头文件&#xff1a; 在使用mma…

预览控制;预见控制;预测控制;预观控制(preview control)

预演控制&#xff08;preview control&#xff09;作为一种新兴的控制方法&#xff0c;首次在轮式车辆中被提出。 参考文献&#xff1a; https://www.sciencedirect.com/science/article/pii/S0016003219300390https://www.sciencedirect.com/science/article/pii/S0016003219…

消息队列zookeeper集群+kafka

消息队列zookeeper集群kafka kafka 3.0之前依赖于zookpeeper zookeeper开源分布式架构&#xff0c;提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式设计的分布式服务管理架构 存储和管理数据。分布式节点的服务结束观察者的注册&#xff0c;一旦分布式节点…

【WPF 按钮点击后异步上传多文件code示例】

前言: WPF中按钮点击事件如何执行时间太长会导致整个UI线程卡顿&#xff0c;现象就是页面刷新卡住&#xff0c;点击其他按钮无反馈。如下是进行异步执行命令&#xff0c;并远程上传文件的代码。 // 这里对于长时间执行的任务&#xff0c;必须使用异步方法进行处理private async…

HomeAssistant如何添加HACS插件实现公网控制米家与HomeKit等智能家居

HomeAssistant添加HACS插件并实现公网控制米家&#xff0c;HomeKit等智能家居 文章目录 HomeAssistant添加HACS插件并实现公网控制米家&#xff0c;HomeKit等智能家居基本条件一、下载HACS源码二、添加HACS集成三、绑定米家设备 ​ 上文介绍了如何实现群晖Docker部署HomeAssist…

【算法系列篇】递归、搜索与回溯(一)

文章目录 什么是递归、搜索与回溯算法1. 汉诺塔1.1 题目要求1.2 做题思路1.3 代码实现 2. 合并两个有序链表2.1 题目要求2.2 做题思路2.3 代码实现 3. 反转链表3.2 题目要求3.2 做题思路3.3 代码实现 什么是递归、搜索与回溯算法 递归算法是一种通过重复将问题分解为同类的子问…

是宝箱还是潘朵拉魔盒?ChatGPT正在悄然改变世界...

2022年11月30日&#xff0c;OpenAI推出了一款全新的对话式通用人工智能工具——ChatGPT。与以往的人工智障不同&#xff0c;ChatGPT能够与用户进行自然、流畅的对话&#xff0c;帮助人们解答各种问题&#xff0c;提供所需的帮助和支持。 据报道&#xff0c;ChatGPT在推出短短几…

技术阅读周刊第第8️⃣期

技术阅读周刊&#xff0c;每周更新。 历史更新 20231103&#xff1a;第四期20231107&#xff1a;第五期20231117&#xff1a;第六期20231124&#xff1a;第七期 Prometheus vs. VictoriaMetrics (VM) | Last9 URL: https://last9.io/blog/prometheus-vs-victoriametrics/?refd…

中碳CCNG:碳交易领域的革命者

在全球碳减排努力日益增强的背景下&#xff0c;中国碳中和发展集团有限公司&#xff08;简称中碳CCNG&#xff09;正以其创新的碳交易平台引领行业新趋势。中碳CCNG提供的一站式综合服务不仅包括碳信用的托管、买卖和抵消&#xff0c;而且通过其综合性数字平台&#xff0c;促进…

Mysql- 流程函数-(If, CASE WHEN)的使用及练习

目录 4.1 If函数语法格式 4.2 CASE WHEN 条件表达式格式 4.3 练习题1 4.4 练习题2 4.5 练习题3-行转列 4.6 牛客练习题 4.7 LeetCode练习题 4.1 If函数语法格式 IF(expr1,expr2,expr3) 解释&#xff1a; 如果表达式expr1true(expr1 <> 0 and expr1 <> NUL…

element-plus组件中的el-drawer的使用

在项目的制作过程中经常会用到弹窗组件&#xff0c;这里假设一种情况当你在一个页面需要多个弹窗组件的时候怎么样才能精准的打开和关闭对应的弹窗呐&#xff1f;&#xff1f; ① 绑定一个点击事件----【给点击事件传入一个下标】这里是打开事件 ② 使用element-plus中的 :befo…

Redis系列之keys命令和scan命令性能对比

项目场景 Redis的keys *命令在生产环境是慎用的&#xff0c;特别是一些并发量很大的项目&#xff0c;原因是Redis是单线程的&#xff0c;keys *会引发Redis锁&#xff0c;占用reids CPU&#xff0c;如果key数量很大而且并发是比较大的情况&#xff0c;效率是很慢的&#xff0c…

ActiveMQ 反序列化漏洞(CVE-2015-5254)

ActiveMQ 反序列化漏洞 Apache ActiveMQ是一种开源的消息代理&#xff08;message broker&#xff09;&#xff0c;被广泛用于应用程序之间的消息传递。它提供可靠的消息传递模式&#xff0c;如发布/订阅、点对点和请求/响应&#xff0c;非常适合构建分布式系统和应用程序集成…

感觉到自己思想扭曲了

突然觉得自己思想有点扭曲。 ​起因是近期备婚&#xff0c;需要给男方家人买衣服。问男朋友妹妹衣服预算多少&#xff0c;说是500内&#xff0c;然后想想自己这个新娘子&#xff0c;那一身衣服绞尽脑汁凑满减不到300。再联想到装饰新房&#xff0c;新房买家具&#xff0c;为了省…