我们可以很容易地用Keras序列模型拟合回归数据并预测测试数据。
在这篇文章中,我们将简要地学习如何用Python中的Keras神经网络API拟合回归数据。我们将用Keras回归和序列模型本身这两种方法检查模型。
该教程涵盖了以下内容。
- 准备数据
- 定义模型
- 用KerasRegressor进行拟合(准确度检查和结果的可视化)
- 用序列模型进行拟合(准确度检查和结果可视化)。
可下载资源
我们将从加载所需的模块开始。
from keras.models import Sequential
准备数据
模型确定
在做预测之前,首先得训练出一个最终的模型。你可能选择k折交叉验证或者简单划分训练/测试集的方法来训练模型,这样做的目的是为了合理估计模型在样本集之外数据上的表现(新数据)
当评估完成,这些模型存在的目的也达到了,就可以丢弃他们。接下来,你得用所有的可用数据训练出一个最终的模型。
分类预测
对于分类问题,模型学习的是一个输入特征到输出特征之间的映射,这里的输出即为一个标签。比如“垃圾邮件”和“非垃圾邮件”
继续说回到分类预测的问题。我们希望最终得到的模型能进行两种预测:一是判断出类别,二是给出属于相应类别概率。
-
类预测
一个类别预测会给定最终的模型以及若干数据实例,我们利用模型来判断这些实例的类别。对于新数据,我们不知道输出的是什么结果,这就是为什么首先需要一个模型。
在Keras中,可以利用predict_class()函数来完成我们上述所说的内容—-即利用最终的模型预测新数据样本的类别。
需要注意的是,这个函数仅适用于Sequential模型,不适于使用功能式API开发的模型。(not those models developed using the functional API.)
比如,我们在名为Xnew的数组中有若干个数据实例,它被传入predict_classes()函数中,用来对这些数据样本的类别进行预测。
Xnew = [[…], […]]
ynew = model.predict_classes(Xnew)
-
关于类别标签的注意事项
准备数据时,应该将其中的类别标签转换为整数表示(比如原始数据类别可能是一个字符串),这时候你就可能会用到sklearn中的LabelEncoder。
当然,在我们使用LabelEcoder中的函数inverse_transform()时,还可以将那些整数表示的类别标签转换回去。
因为这个原因,在拟合最终模型时,你可能想要保存用于编码y值的LabelEncoder结果。
概率预测
另外一种是对数据实例属于某一类的可能性进行预测。它被称为“概率预测”,当给定一个新的实例,模型返回该实例属于每一类的概率值。(0-1之间)
在Keras中,我们可以调用predict_proba()函数来实现。举个例子:
Xnew = [[…], […]]
ynew = model.predict_proba(Xnew)
在二分类问题下,Sigmoid激活函数常被用在输出层,预测概率是数据对象属于类别1的可能性,或者属于类别0的可能性(1-概率)
在多分类问题下,则是softmax激活函数常被用在输出层。数据对象属于每一个类别的概率作为一个向量返回。
回归预测
回归预测是一个监督学习问题,该模型学习一个给定输入样本到输出数值的映射。比如会输出0.1或0.2这样的数字。
首先,我们将为本教程创建一个回归数据集样本。
x_ax = range(N) plt.plot(x_ax, x, 'o') plt.plot(x_ax, y, lw=1.5, color=c) plt.legend()
红线是y输出,其余的点是x输入的特征。
定义模型
接下来,我们将建立一个keras序列模型。
def Model(): model = Sequential() model.add(Dense(128, input_dim=3,activation='relu')) .... return model Model()
用Keras回归模型拟合
我们将上述模型纳入Keras回归模型中,用x和y的数据拟合模型。然后,我们可以预测x数据。
regressor.fit(x,y) regressor.predict(x)
我们检查平均平方误差率 `````` mean\_squared\_error(y, y_pred)
最后,我们绘制结果。
plt.plot(y) plt.plot(y_pred)
keras序列模型进行拟合
这一次,我们将在没有封装类的情况下拟合模型。
fit(x, y, nb_epoch=100) model.predict(x)
我们检查一个平均平方误差率。
mean\_squared\_error(y, y_krm)
最后,我们绘制结果。
随时关注您喜欢的主题
在本教程中,我们已经简单地学习了如何用Python中的Keras神经网络模型来拟合和预测回归数据。谢谢您的阅读!
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!