机器学习笔记(1):线性回归

简介: 初次接触机器学习的朋友们,建议先把这篇概念性的科普文章,精读5遍以上:神经网络浅讲:从神经元到深度学习 下列代码来自 https://zh.gluon.ai/chapter_supervised-learning/linear-regression-scratch.

初次接触机器学习的朋友们,建议先把这篇概念性的科普文章,精读5遍以上:神经网络浅讲:从神经元到深度学习

下列代码来自 https://zh.gluon.ai/chapter_supervised-learning/linear-regression-scratch.html

里面有大量的矩阵向量的操作,不熟悉NDArray的,建议先看上一篇mxnet安装及NDArray初体验

下面这个示例的思路,先讲解一下,不然不知道它们在干嘛:)

先给出一个线性方程(1),如下图:

利用这个方程生成一堆数据集,然后再建立一个线性回归模型(2),如下图:

等价于下面这样:

(注:上图中的b1 , b2 ... 其实相同)

再利用随机梯度下降法,进行迭代运算,计算预测值yhat,直到下面的损失函数

不断减小(即:收敛),然后看看这时得到的参数w(是一个向星)以及偏置值b是否跟线性方程中设定的参数[2, -3.4]以及4.2相同,如果很接近,说明我们用深度学习算法,基于一堆数据成功预测出了想要的结果(即:线性回归成功),这种已知答案,利用一堆数据进行训练的学习方法,也称为有监督学习。

 1 from mxnet import ndarray as nd
 2 from mxnet import autograd
 3 import random
 4 
 5 num_inputs = 2
 6 num_examples = 1000
 7 
 8 true_w = [2, -3.4]
 9 true_b = 4.2
10 
11 X = nd.random_normal(shape=(num_examples, num_inputs)) #1000行,2列的数据集
12 y = true_w[0] * X[:, 0] + true_w[1] * X[:, 1] + true_b #已知答案的结果
13 y += .01 * nd.random_normal(shape=y.shape) #加入噪音
14 
15 batch_size = 10
16 def data_iter():
17     #产生一个随机索引列表
18     idx = list(range(num_examples))
19     random.shuffle(idx)
20     for i in range(0, num_examples, batch_size):
21         j = nd.array(idx[i:min(i+batch_size,num_examples)])
22         yield nd.take(X, j), nd.take(y, j) #每次随机从X中取出10行数据,以及对应的结果y值
23 
24 #初始化模型参数(即:需要求解的参数变量)
25 w = nd.random_normal(shape=(num_inputs, 1))
26 b = nd.zeros((1,))
27 params = [w, b]
28 
29 #创建梯度
30 for param in params:
31     param.attach_grad()
32     
33 #定义线性回归模型
34 def net(X):
35     return nd.dot(X, w) + b
36 
37 #定义损失函数
38 def square_loss(yhat, y):
39     # 注意这里我们把y变形成yhat的形状来避免自动广播
40     return (yhat - y.reshape(yhat.shape)) ** 2
41 
42 #随机梯度下降法
43 def SGD(params, lr):
44     for param in params:
45         param[:] = param - lr * param.grad
46         
47 
48 #训练
49 epochs = 5
50 learning_rate = .001
51 for e in range(epochs):
52     total_loss = 0
53     for data, label in data_iter():
54         with autograd.record():
55             output = net(data)
56             loss = square_loss(output, label)
57         loss.backward()
58         SGD(params, learning_rate)
59 
60         total_loss += nd.sum(loss).asscalar()
61     print("Epoch %d, average loss: %f" % (e, total_loss/num_examples))
62 
63 print(true_w) #打印答案
64 print(w) #打印求解结果
65 
66 print(true_b) #打印答案
67 print(b) #打印求解结果
Epoch 0, average loss: 6.012281
Epoch 1, average loss: 0.102830
Epoch 2, average loss: 0.001909
Epoch 3, average loss: 0.000133
Epoch 4, average loss: 0.000101 #5次迭代后,已经快速收敛
[2, -3.4] #已知答案

[[ 2.00017834] #求解结果
 [-3.40006614]]
<NDArray 2x1 @cpu(0)>
4.2

[ 4.19863892]
<NDArray 1 @cpu(0)>
目录
相关文章
|
5月前
|
机器学习/深度学习 算法 TensorFlow
机器学习算法简介:从线性回归到深度学习
【5月更文挑战第30天】本文概述了6种基本机器学习算法:线性回归、逻辑回归、决策树、支持向量机、随机森林和深度学习。通过Python示例代码展示了如何使用Scikit-learn、statsmodels、TensorFlow库进行实现。这些算法在不同场景下各有优势,如线性回归处理连续值,逻辑回归用于二分类,决策树适用于规则提取,支持向量机最大化类别间隔,随机森林集成多个决策树提升性能,而深度学习利用神经网络解决复杂模式识别问题。理解并选择合适算法对提升模型效果至关重要。
228 4
|
5月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】解释什么是线性回归?
【5月更文挑战第15天】【机器学习】解释什么是线性回归?
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习:从线性回归到深度学习
【9月更文挑战第4天】在这篇文章中,我们将深入探讨机器学习的世界,从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过实际的代码示例,揭示这些模型背后的数学原理,以及如何在现实世界的问题中应用它们。无论你是初学者还是有经验的数据科学家,这篇文章都将为你提供新的视角和深入的理解。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习的奥秘:从线性回归到深度学习
【8月更文挑战第26天】本文将带领读者走进机器学习的世界,从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将探讨各种算法的原理、应用场景以及实现方法,并通过代码示例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的知识和技能。让我们一起揭开机器学习的神秘面纱,探索这个充满无限可能的领域吧!
|
2月前
|
机器学习/深度学习 人工智能 算法
探索机器学习:Python中的线性回归模型实现
【8月更文挑战第24天】在机器学习的世界中,线性回归是最基础也是应用最广泛的算法之一。本文将通过Python编程语言,使用scikit-learn库来实现一个简单的线性回归模型。我们将从理论出发,逐步深入到代码实现,最后通过一个实际数据集来验证模型的效果。无论你是机器学习的初学者,还是想要复习线性回归的基础知识,这篇文章都将为你提供有价值的信息。让我们一起踏上这段探索之旅吧!
|
4月前
|
机器学习/深度学习 算法 BI
机器学习笔记(一) 感知机算法 之 原理篇
机器学习笔记(一) 感知机算法 之 原理篇
|
4月前
|
机器学习/深度学习 数据采集 算法
【机器学习】线性回归:以房价预测为例
【机器学习】线性回归:以房价预测为例
201 1
|
4月前
|
机器学习/深度学习 数据可视化 算法
【阿旭机器学习实战】【29】产品广告投放实战案例---线性回归
【阿旭机器学习实战】【29】产品广告投放实战案例---线性回归
|
3月前
|
机器学习/深度学习 人工智能 供应链
|
4月前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
37 0
下一篇
无影云桌面