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

（注：上图中的b1 , b2 ... 其实相同）

``` 1 from mxnet import ndarray as nd
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:
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():
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)>```

0 条评论

## 相关文章

### 人脸检测--Grid Loss: Detecting Occluded Faces

Grid Loss: Detecting Occluded Faces ECCV2016 遮挡问题还是要通过区域分块来解决 针对有遮挡的人脸检测，如果从训练...

35890

32240

17140

19850

26160

### 如何直观地解释 back propagation 算法？

BackPropagation算法是多层神经网络的训练中举足轻重的算法。 简单的理解，它的确就是复合函数的链式法则，但其在实际运算中的意义比链式法则要大的多。 ...

18020

3.1K30

52760

### （数据科学学习手札40）tensorflow实现LSTM时间序列预测

上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识，也提到了LSTM在时间序列预测上优越的性能，本篇就将对如何利用tensorflow，在...

59340

### 【专知-Java Deeplearning4j深度学习教程04】使用CNN进行文本分类:图文+代码

【导读】主题链路知识是我们专知的核心功能之一，为用户提供AI领域系统性的知识学习服务，一站式学习人工智能的知识，包含人工智能（ 机器学习、自然语言处理、计算机视...

3.1K70