美文网首页
[R - ml]神经网络

[R - ml]神经网络

作者: XuXiaolu | 来源:发表于2018-11-26 17:46 被阅读4次

神经网络 对鸢尾花进行分类

iris

require(neuralnet)
require(caret)
# 准备数据
data(iris)
inTrain = createDataPartition(y = iris$Species, p = 0.8, list = F)
iris.train = iris[inTrain, ]
iris.test = iris[-inTrain, ]
# 需要分别构建3个dummy变量
iris.train = cbind(iris.train, iris.train$Species=='setosa')
iris.train = cbind(iris.train, iris.train$Species=='versicolor')
iris.train = cbind(iris.train, iris.train$Species=='virginica')

names(iris.train)[6] = 'setosa'
names(iris.train)[7] = 'versicolor'
names(iris.train)[8] = 'virginica'

# 讲这3列作为预测对象,使用3层
nn = neuralnet(setosa + versicolor + virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
               data = iris.train, hidden = c(3))

plot(nn)

# 计算出的是概率
mypredict = compute(nn, iris.test[-5])$net.result
head(mypredict)

# 需要写一个函数,来找出概率最大的是哪个
maxidx = function(arr) {
  return(which(arr == max(arr)))  # 返回每行最大的数是第几列
}

idx = apply(mypredict, 1, maxidx) # 1 表示对行进行操作

# 映射到对应的species
predict.species = c('setosa', 'versicolor', 'virginica')
prediction = predict.species[idx]
table(prediction, iris.test$Species)

混凝土压力强度

数据准备

混凝土强度数据

concrete = read.csv('E:/rpath/Concrete_Data.csv')
str(concrete)
names(concrete) = c('Cement', 'Slag', 'Ash', 'Water', 'Superplasticizer', 'CoarseAgg', 'FineAgg', 'Age', 'strength')
summary(concrete)

通过 summary 我们看到各个特征的数据范围不同,差异很大,因此我们对数据进行标准化处理

normalize = function(x) {
  return((x - min(x)) / (max(x) - min(x)))
}
concrete_norm = as.data.frame(lapply(concrete, normalize))
summary(concrete$strength)
summary(concrete_norm$strength)
set.seed(2014)
inTrain = createDataPartition(y = concrete_norm$strength, p = 0.8, list = F)
concrete_train = concrete_norm[inTrain, ]
concrete_test = concrete_norm[-inTrain, ]

建立模型

concrete_model = neuralnet(strength ~ Cement + Slag + Ash + Water +
                             Superplasticizer + CoarseAgg + FineAgg + Age,
                           data = concrete_train, hidden = 5)
plot(concrete_model)

模型评估

model_results <- compute(concrete_model, concrete_test[1:8])
predicted_strength <- model_results$net.result
cor(predicted_strength, concrete_test$strength)

神经网络没有使用predict函数,而是使用compute函数,
使用帮助参考?compute,
comcrete_test[1:8]为前面构建模型用到的8个covariate。
从以上输出我们看出预测的数据与实际的数据相关性是0.83.
当然MAE评估可能更恰当

MAE <- function(actual, predicted) {
  mean(abs(actual - predicted))
}

MAE(concrete_test$strength, predicted_strength)

# MAE 0.08656618178 # hidden = 1
# MAE 0.05479880408 # hidden = 5

五个第二层的MAE 比一个第二层的MAE降低了很多

相关文章

  • [R - ml]神经网络

    神经网络 对鸢尾花进行分类 iris 混凝土压力强度 数据准备 混凝土强度数据 通过 summary 我们看到各个...

  • Deep_in_mnist 1:自己动手实现神经网络识别mnis

    缩写ML:机器学习Machine LearningNN:神经网络Neural NetworkANN:人工神经网络A...

  • 沧县医院产房

    奥迪R8ML

  • ML 神经网络

    神经网络(neural networks)是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神...

  • [R - ml] 分类

    OneR 单条规则 利用One R 规则 对mushroom 分类 数据准备 首先下载mushroom 数据 这里...

  • 神经网络实现手写识别

    这个项目基于coursera上的ML课程,学过神经网络之后,就利用octave做了一个神经网络识别手写数字的程序。...

  • TensorFlow Develop

    MNIST For ML Beginners Deep MNIST for Experts 第一部分:单层神经网络...

  • 考马斯亮蓝染色

    考马斯亮蓝R250配方(100 mL):考马斯亮蓝R250:0.25g甲醇:45mL冰醋酸:10 mLddH2O:...

  • [R - ml]聚类

    社交网络用户画像 美国的中学生在社交网站上的信息聚类 性别,年龄,有多少个朋友个人描述的内容谈论内容:足球、游泳、...

  • [R - ml]关联分析

    数据准备 9835条交易,也就是说大约327条每天,是一个不大也不小的店。对于交易数据arules提供了一个函数来...

网友评论

      本文标题:[R - ml]神经网络

      本文链接:https://www.haomeiwen.com/subject/rytiqqtx.html