神经网络设计与实现
上QQ阅读APP看书,第一时间看更新

1.4 Python有监督学习实践

如前所述,有监督学习算法通过映射输入和输出来学习近似一个函数,从而创建一个模型,该模型能够就未见过的输入预测未来的输出。

通常将输入表示为x,输出表示为y。两者都可以是数字或类别。

我们可以据此将有监督学习分为两种不同的类型:

·分类

·回归

分类是一种输出变量可以假设为有限数量的元素(称为类别)的任务。例如根据给定的萼片长度(输入)对不同类型的花朵(输出)进行分类。分类可以进一步分为更多子类型:

·二元分类:预测实例是属于一个类还是另一个类的任务

·多类分类:为每个实例预测其最可能的标签(类)的任务(也称为多项分类)

·多标签分类:可以为每个输入分配多个标签的任务

回归是一种输出变量是连续的任务。以下是一些常见的回归算法:

·线性回归:找到输入和输出之间的线性关系

·逻辑回归:确定二元输出的概率

通常,可以通过以下步骤以标准方式解决有监督学习问题:

1)进行数据清理,以确保我们使用的数据尽可能准确且可描述。

2)执行特征工程,包括从现有特征中创建新特征以改善算法的性能。

3)将输入数据变换成算法可以理解的东西,这称为数据变换。某些算法(例如神经网络)不能很好地处理未按比例缩放的数据,因为它们自然地会更重视数量级较大的输入。

4)为问题选择一个(或几个)合适的模型。

5)选择一个合适的指标来衡量算法的有效性。

6)使用称为训练集的可用数据子集训练模型。在此训练集上校准数据变换。

7)测试模型。

数据清理

数据清理是确保我们最终能够产生良好结果的基本过程。它是任务特定的,在清理音频、图像、文本或时间序列数据时都将有所不同。

我们需要确保没有数据缺失,如果数据缺失,我们可以决定如何处理它。在数据缺失的情况下(例如,某个实例缺失一些变量),可以用该变量的平均值填充它们,或者用输入范围之外的值填充它(例如,如果变量介于0和1之间,填充-1),或者如果我们有大量的数据,则忽略该实例。

另外,最好检查一下数据是否符合我们测量的值的限制。例如,摄氏温度不能低于273.15℃,如果低于了273.15℃,我们马上就知道该数据点不可靠。

其他检查包括格式、数据类型和数据集中的方差。

我们可以直接从scikit-learn下载一些清理好的数据。里面有许多用于各种任务的数据集。例如,如果要加载一些图像数据,可以使用以下Python代码:

该数据被称作Labeled Faces in the Wild(LFW),一个用于人脸识别的数据集。