一、 数据分析 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)