一、 数据分析
install.packages(“neuralnet”)
library(neuralnet)
#粗处理数据
concrete<-read.csv("/Users/wenfeng/Desktop/R&ML/机器学习和R语言/机器学习实验4 神经网络/concrete.csv")
str(concrete)
神经网络输入数据最好在0附近,但由上图可见数据在百千左右,我们需要将数据标准化。
normalize<-function(x){
return((x-min(x))/(max(x)-min(x)))
}
concrete_norm<-as.data.frame(lapply(concrete, normalize))
summary(concrete_norm
s
t
r
e
n
g
t
h
)
s
u
m
m
a
r
y
(
c
o
n
c
r
e
t
e
strength) summary(concrete
strength)summary(concretestrength)
二、训练模型
#训练模型
concrete_train<-concrete_norm[1:773,]
concrete_test<-concrete_norm[774:1030,]
concrete_model<-neuralnet(strength~cement+slag+ash+water
+superplastic+coarseagg+fineagg+age,
data=concrete_train)
plot(concrete_model)
误差平方和为5.078,训练步数为8590
三、评估模型
#评估模型
model_results<-compute(concrete_model,concrete_test[1:8])
predicted_strength<-model_results
n
e
t
.
r
e
s
u
l
t
p
r
e
d
i
c
t
e
d
s
t
r
e
n
g
t
h
c
o
r
(
p
r
e
d
i
c
t
e
d
s
t
r
e
n
g
t
h
,
c
o
n
c
r
e
t
e
t
e
s
t
net.result predicted_strength cor(predicted_strength,concrete_test
net.resultpredictedstrengthcor(predictedstrength,concreteteststrength)
预测的混凝土强度与实际的强度的相关性为0.8064
四、提高模型性能
1.设置隐藏层为4
#提高模型性能
concrete_model22<-neuralnet(strength~cement+slag+ash+water
+superplastic+coarseagg+fineagg+age,
data=concrete_train,hidden=4)
plot(concrete_model22)
model_results22<-compute(concrete_model2,concrete_test[1:8])
predicted_strength22<-model_results22KaTeX parse error: Expected 'EOF', got '#' at position 12: net.result #̲predicted_stren…strength)
隐藏层为4时,误差平方和为2.244,训练步数为8324.预测值与实际值的相关性为0.92。误差减少了,相关性变大了,效果更好。
2、设置隐藏层为5
concrete_model2<-neuralnet(strength~cement+slag+ash+water
+superplastic+coarseagg+fineagg+age,
data=concrete_train,hidden=5)
plot(concrete_model2)
model_results2<-compute(concrete_model2,concrete_test[1:8])
predicted_strength2<-model_results2KaTeX parse error: Expected 'EOF', got '#' at position 12: net.result #̲predicted_stren…strength)
隐藏层为5时,误差平方和为1.688,训练步数为10185,相关系数为0.92。相比隐藏层为4时,误差变小了,但相关性系数没有变化。
完整代码如下:
install.packages("neuralnet")
library(neuralnet)
#粗处理数据
concrete<-read.csv("/Users/wenfeng/Desktop/R&ML/机器学习和R语言/机器学习实验4 神经网络/concrete.csv")
str(concrete)
normalize<-function(x){
return((x-min(x))/(max(x)-min(x)))
}
concrete_norm<-as.data.frame(lapply(concrete, normalize))
summary(concrete_norm$strength)
summary(concrete$strength)
#训练模型
concrete_train<-concrete_norm[1:773,]
concrete_test<-concrete_norm[774:1030,]
concrete_model<-neuralnet(strength~cement+slag+ash+water
+superplastic+coarseagg+fineagg+age,
data=concrete_train)
plot(concrete_model)
#评估模型
model_results<-compute(concrete_model,concrete_test[1:8])
predicted_strength<-model_results$net.result
predicted_strength
cor(predicted_strength,concrete_test$strength)
#提高模型性能
concrete_model22<-neuralnet(strength~cement+slag+ash+water
+superplastic+coarseagg+fineagg+age,
data=concrete_train,hidden=4)
plot(concrete_model22)
model_results22<-compute(concrete_model2,concrete_test[1:8])
predicted_strength22<-model_results22$net.result
#predicted_strength2
cor(predicted_strength22,concrete_test$strength)
concrete_model2<-neuralnet(strength~cement+slag+ash+water
+superplastic+coarseagg+fineagg+age,
data=concrete_train,hidden=5)
plot(concrete_model2)
model_results2<-compute(concrete_model2,concrete_test[1:8])
predicted_strength2<-model_results2$net.result
#predicted_strength2
cor(predicted_strength2,concrete_test$strength)