是课本的例子,详见《机器学习与R语言 [美]Brett Lantz》第7.2章,154页。
准备
下载csv文件,https://github.com/stedy/Machine-Learning-with-R-datasets
在目录下创建R语言的workspace,将concrete.csv放在工作目录下;
下载neuralnet添加包用于网络实现,可以直接通过键入语句下载:
如果因为网络问题无法下载成功也可以选择手动导入.tgz文件,https://github.com/HazelNuto/RLanguage.git
下载Deriv_3.8.5.tgz和neuralnet_1.44.2.tgz两个文件,然后在RStudio中到Tools -> Install Packages… -> 选择Package Archive File
使用’setwd()'设置改变工作目录:
载入下载的concrete.csv:
使用标准化函数对数据进行处理:
as.data.frame()表示对已有的常用的类型转换,lapply(list apply)表示对列表的每个组件执行给定的函数,并返回另一个列表;
观察处理后的数据
将标准化处理后的数据分成训练集和测试集两部分:
这里的训练集和测试集对标准化数据进行拷贝赋值,[]中第一个数据1:773表示将原列表中1到773行作为新列表的行,第二个数据为空表示使用原列表中的所有列(属性)作为新列表的列;
观察得到的测试集的数据
使用neuralnet进行建模:
第一个参数是需要建模的输出变量,第二个参数是用于预测的特征的公式,第三个参数是包含了前面的特征和标签的数据集,第四个参数(可以不写,默认是1)是隐藏层中神经元的数目; 绘制出的模型的图像 如果我们反复的用同样的方式建模,得到的结果是不同的
基于测试数据集使用compute()函数生成预测:
compute()返回一个带有两个分量的列表:$neurons存储网络中每一层神经元,$net.results存储预测值;这里得到预测值即预测强度后,使用cor()函数进行对预测值和测试集中的强度参数进行相关性计算;
相关性接近1表示两个变量之间具有很强的线性关系,因此预测得到的数据与测试集间相关性越接近1,表示预测的模型越好。
要生成更复杂的前馈网络模型,在之前的基础上添加更多的隐藏点,即设置参数hidden为隐藏点个数:
模型变的更加复杂
重新计算与测试集数据的相关性,已经提升到了0.8,证明在当前情况下增加一定的隐藏点确实提升了模型的准确性:
|
请发表评论