训练和评估
本节主要从两方面学习模型的训练和评估:使用内建的API进行训练和评估或者是自定义函数实现训练和评估。不管使用哪种方法,不同方式构建的模型的训练和评估方式是一样的。
使用内建API 当我们使用内建的API来进行训练和评估时,我们传入的数据必须是Numpy arrays或者是tf.data.Dataset对象,在接下来的几个小节里,我们将会使用MNIST数据集作为示例。
内建API总览首先创建一个模型,如下:
123456789from tensorflow import kerasfrom tensorflow.keras import layersinputs = keras.Input(shape=(784,), name='digits')x = layers.Dense(64, activation='relu', name='dense_1')(inputs)x = layers.Dense(64, activation='relu', name='dense_2')(x)o ...
Keras函数式API
本章了解Keras的函数式API以及灵活使用它们的方法。
简介我们已经熟悉了如何使用keras.Sequential函数来创建我们的层叠模型,而函数式API是比它更加灵活的创建模型的方法:它可以允许我们创建非线性的模型,共用层的模型以及多个输入输出的模型。函数式API的基本思路是深度学习网络是一种有向无环图(DAG),我们可以使用函数式API来创建这些层。
如下一个包含了3个层的模型:
123456789(input: 784-dimensional vectors) ↧[Dense (64 units, relu activation)] ↧[Dense (64 units, relu activation)] ↧[Dense (10 units, softmax activation)] ↧(output: logits of a probability distribution over 10 classes)
为了使用函数式API来创建相同的模型,我们首先创建输入节点:
123from tensorflow import k ...
Keras概览
本节介绍Keras及其相关模块,以帮助我们快速构建人工神经网络。
构建一个简单模型层叠式模型在Keras中,我们使用层(layers)来构建我们的模型,模型通常是一个由多个层构成的流程图,最简单模型类型是层叠式(Sequential)类型。为了构建一个简单全连接的MLP,我们用如下代码:
1234567891011import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersmodel = tf.keras.Sequential()# Adds a densely-connected layer with 64 units to the model:model.add(layers.Dense(64, activation='relu'))# Add another:model.add(layers.Dense(64, activation='relu'))# Add an output layer with 10 output un ...
TF2初始教程
本节我们学习一些TensorFlow的基本使用方法,包括使用TensorFlow构建神经网络来对MNIST数据集进行划分以及学习一下数据的加载方法。
使用TensorFlow对MNIST数据集进行划分首先,我们加载MNIST数据集,同时将数据映射到$ [0, 1] $上:
12345import tensorflow as tfmnist = tf.keras.datasets.mnist(X_train, y_train), (X_test, y_test) = mnist.load_data()X_train, X_test = X_train / 255.0, X_test / 255.0
接下来将各层堆叠起来,来搭建tf.keras.Sequential模型:
123456model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf ...
实现多层人工神经网络
本章中,我们将会学习人工神经网络的基本概念以帮助我们学习后面几章中的内容。
使用人工神经网络对复杂函数建模我们在第二章中从人工神经元入手,开始了机器学习算法的探索。对于本章中将要讨论的多层人工神经网络来说,人工神经元是其构建的基石。
单层神经网络回顾先来回顾一下自适应线性神经元(Adaline)算法:
我们实现了二分类类别的Adaline算法,并通过梯度下降优化算法来学习模型的权重系数:$$w:=w+\Delta w,其中\Delta w = -\eta \nabla J(w)$$在梯度下降优化过程中,我们在每次迭代后同时更新所有权重。此外,将激励函数定义为:$$\phi(z)=z=a$$其中,净输入z时输入和权重的线性组合,使用激励函数来计算梯度更新时,我们定义了一个阈值函数将连续的输出值转换为二类别分类的预测类标:$$\hat{y}=\begin{cases}1 & 若g(z) \ge 0\-1 & 其他\end{cases}$$
多层神经网络架构简介本节中,我们将会看到如何将多个单独的神经元连接为一个多层前反 ...
聚类分析之处理无类标数据
前面几章中,我们使用的数据都是事先已经直到预测结果的,即训练数据中已提供了数据的类标。在本章中,我们转而研究聚类分析,它是一种无监督学习技术,可以在事先不知道正确结果的情况下,发现数据本身所蕴含的结构等信息。
使用k-means算法对相似对象进行分组本节讨论最流行的聚类算法:k-means算法,它在学术邻域及业界都得到了广泛应用。聚类是一种可以找到相似对象群组的技术,与组间对象相比,组内对象之间具有更高的相似度。
尽管k-means算法适用于高维数据,但出于可视化需要,我们使用一个二维数据集的例子演示:
123456789101112from sklearn.datasets import make_blobsimport matplotlib.pyplot as pltX, y = make_blobs(n_samples=150, n_features=2, centers=3, cluster_std=0.5, shuffle=True, ...
使用回归分析预测连续型目标变量
本章将会介绍监督学习的另外一个分支,回归分析(regression analysis)。回归模型可以用于连续型目标变量的预测分析,这使得它在探寻变量间关系,评估趋势,做出预测等领域极具吸引力。具体的例子如预测公司在未来几个月的销售情况等。
简单线性回归模型初探简单(单变量)线性回归的目标是:通过模型来描述某一特征(解释变量x)与输出变量(目标变量y)之间的关系。当只有一个解释变量时,线性模型函数定义如下:$$y = w_0 + w_1x$$其中,$ w_0 $为函数在y轴上的截距,$ w_1 $为解释变量的系数。
基于前面定义的线性方程,线性回归可以看作是求解样本点的最佳拟合直线,如下图:
这条最佳拟合线称作是回归线,回归线和样本点之间的垂直连线就是偏移或残差。
多元线性回归函数定义如下:$$y = w_0x_0+w_1x_1+\cdots+w_mx_m$$其中,$ w_0 $时$ x_0 =1 $时在y轴上的截距。
波士顿房屋数据集在本章的后续内容中,我们将会使用房屋价格(MEDV)作为目标变量,使用其他13个变量中的一个或多个值作为解释变量对其进 ...
在Web中嵌入机器学习模型
本章中,我们将学习如何将机器学习模型嵌入到Web应用中,不仅仅是分类,还包括从实时数据中学习。
序列化通过scikit-laern拟合的模型正如我们上一章所述,训练机器模型会带来很高的计算成本。当然,我们不希望每次进行预测分析都需要训练模型。模型持久化的一个方法是使用Python内嵌的pickle模块,它使得我们可以在Python对象与字节码之间进行转换(序列化和反序列化),这样我们就可以将分类器当前的状态保存下来。当需要对新的数据进行分类时,可以直接加载已经保存的分类器,而不必再次用训练数据对模型进行训练:
123456789101112import pickleimport osdest = os.path.join(os.getcwd(), 'movieclassifier', 'pkl_objects')if not os.path.exists(dest): os.makedirs(dest)pickle.dump(stop, open(os.path.join(dest, 'stopwords. ...
使用机器学习进行情感分析
本章我们将深入研究自然语言处理(natural language processing,NLP)领域的一个分支—-情感分析(sentiment analysis),还将学习如何使用机器学习算法基于文档的情感倾向对文档进行分类。
获取IMDB电影评论数据集情感分析,又是也称作是观点挖掘,是NLP领域一个非常流行的分支,它分析的是文档的情感倾向。本章中,我们将要使用的是互联网电影数据库中的大量电影评论数据。可以访问http://ai.stanford.edu/~amaas/data/sentiment/来下载电影评论。
在下载完成后对文档进行解压,接下来我们着手将从压缩文件中得到的各文本文档组合为一个CSV文件,在下面的代码中,我们把电影的评论读取到pandas的DataFrame对象中。同时使用PyPrid(Python Progress Indicator)包来预测剩余处理时间:
12345678910111213141516import pyprindimport pandas as pdimport ospbar = pyprind.ProgBar(50000)labels = ...
集成学习之组合不同的模型
本章中,我们将会学习如何构建一组分类器的集合,使得整体分类效果优于其中任意一个单独的分类器。
集成学习集成方法(ensemble method)的目标是:将不同的分类器组合成一个元分类器,与包含于其中的单个分类器相比,元分类器具有更好的泛化性能。
本章中介绍的几种流行的集成方法,它们都使用了多数投票(majority voting)。多数投票原则是将大多数分类器预测的结果作为最终的预测指标。基于训练集,我们首先训练m个不同的成员分类器($ C_1, \cdots, C_m $),接着我们将新的未知数据$ x $输入,然后对所有分类器$ C_j $的预测类标进行汇总,选择出得票率最高的类标$ \hat{y} $:$$\hat{y} = mode{C_1(x), \cdots, C_m(x)}$$
mode函数:众数函数,返回出现次数最多的值。
另外,由统计学知识得到,当成员分类器出错率低于$ 50% $时,集成分类器的出错率要低于单个分类器。
实现一个简单的多数投票分类器集成算法允许我们使用单独的权重对不同分类算法进行组合,可以将加权多数投票记为:$$\hat{y} & ...