【机器学习】从0开始进行回归分析

引言

利用神经网络进行线性回归或者利用BP网络进行非线性回归,算是机器学习一个入门级的问题。但是整个算法实现的流程对于更复杂的算法,都具有借鉴意义。为此,总结如下:

准备数据

数据的来源可以很广泛,如果是Kaggle等类型的比赛,数据是由官方提供的;如果是视觉任务,数据可以从数据集中下载,也可以自己去采集;如果是机器人控制方面,除了直接从数据集中下载,自己使用机器人实际采集就不太容易了,那么可以采用仿真的办法生成数据。

数据的保存格式,对于数值类型的数据,常见的由txt和csv两种格式。txt文件通常使用空格来分割数值,csv文件通常使用逗号来分割数值。

本文使用的数据:23280x17

关于怎么生成有质量的特征,那个数据特征工程的事情。

数据读取

当我们开始训练神经网络的时候,我们需要不断读取数据块。如果直接使用案例,比如说mnist等,会有一个设计好的读取数据的函数。但是如果使用自己的数据,那么就需要自己设计数据读取函数。这里我们定义一个函数它每次返回batch_size个随机的样本和对应的目标。我们通过python的yield来构造一个迭代器。

1
2
3
4
5
6
7
8
9
10
import random
import numpy as np
batch_size = 10
def data_iter():
# 产生一个随机索引
idx = list(range(num_examples))
random.shuffle(idx)
for i in range(0, num_examples, batch_size):
j = np.array(idx[i:min(i+batch_size,num_examples)])
yield nd.take(X, j), nd.take(y, j)

初始化模型参数

随机初始化

这个地方会有什么文章吗?对于强化学习来说,如果从随机初始化的模型开始学习,可能不太会收敛。那么就需要使用已有的但效果不那么好的模型来生成数据,预训练。

定义模型

这时候就该神经网络出场了。不同的框架有不同定义模型的方式。但是大致上都差不多。

损失函数

损失函数可以衡量预测结果与真实结果的误差。它对模型参数的偏导数提供了参数优化的方向。

优化器的选择

梯度下降方法,有很多种。

训练

现在我们可以开始训练了。训练通常需要迭代数据数次,在这里使用epochs表示迭代总次数;一次迭代中,我们每次随机读取固定数个数据点,计算梯度并更新模型参数。

总结

参考文献

[1] 动手学深度学习

显示 Gitment 评论