天池新人赛,幸福感预测

首先感谢天池论坛中的Mr_yang大佬(https://tianchi.aliyun.com/forum/postDetail?postId=48823)提供的思路。在此记录一下根据大佬提供的代码而做的小小的修改。

本文所用代码可以在https://github.com/IPostYellow/Prediction-of-happiness中找到。

查询完赛题所给的数据,发现一共有8000个样本。其中,通过info()函数可以查询到哪些样本缺少了值。我们可以看到如下图所示。前四个状态有8000-2951=5049个缺失值,最后一个family_income有一个缺失值。

可以发现在work_status,work_yr,work_type和work_manage中有较多的缺省值,所以直接去除掉这些特征,为了简便,family_income也去除掉(此处不妥,但是我太懒了)。又因为survey_time调查时间与幸福感关系不大,也直接去除。



本次比赛,使用主成分分析法对数据特征进行处理(主成分分析法的原理可以参考https://blog.csdn.net/Murray_/article/details/79945148)。本文直接使用PCA()函数实现。使用DNN(深度神经网络)算法进行幸福感预测。下面是实验的结果。


使用以下参数构建DNN神经网络

6个主成分,两层神经网络:6*16*1,Relu函数,1200epoch,每批量20,损失函数mean_squared_error,优化函数 Adam,最低loss 1.1

波动特别大,感觉不是很靠谱。

下面增加epoch大小试试

6个主成分,两层神经网络:6*16*1,Relu函数,1600epoch,每批量40,损失函数mean_squared_error,优化函数 Adam,最低loss 10.73

发现还是不行

难道是成分选少了吗,增加两个主成分试试

8个主成分,两层神经网络:8*16*1,Relu函数,1200epoch,每批量20,损失函数mean_squared_error,优化函数 Adam,最低loss 9.895

结果发现还是没很大变化

换个优化模型试试

6个主成分,两层神经网络:6*16*1,Relu函数,1200epoch,每批量20,损失函数mean_squared_error,优化函数 Adagrad,最低loss 4.7

看起来效果好了很多

加大训练力度

6个主成分,两层神经网络:6*16*1,Relu,1600epoch,每批量40,损失函数mean_squared_error,优化函数 Adagrad,最低loss 8.0

好像反而更差了

小步小步地增加训练epoch

6个主成分,两层神经网络:6*16*1,Relu函数,1400epoch,每批量40,损失函数mean_squared_error,优化函数 Adagrad,最低loss 4.0

还可以

增加主成分会不会有所改变呢?

8个主成分,两层神经网络:8*16*1,Relu函数,1200epoch,每批量20,损失函数mean_squared_error,优化函数 Adagrad,最低loss 4.6

对比原来6个主成分的4.7下降了0.1

加大epoch

8个主成分,两层神经网络:8*16*1,Relu函数,1400epoch,每批量20,损失函数mean_squared_error,优化函数 Adagrad,最低loss 2.9

哦吼,可以

加大力度不要停

8个主成分,两层神经网络:8*16*1,Relu函数,1600epoch,每批量20,损失函数mean_squared_error,优化函数 Adagrad,最低loss 2.6

再加大试试

8个主成分,两层神经网络:8*16*1,Relu函数,1800epoch,每批量20,损失函数mean_squared_error,优化函数 Adagrad,最低loss 4.7

似乎不行了,再多就出事了

此时如果再换一个优化模型呢?

8个主成分,两层神经网络:8*16*1,Relu函数,1600epoch,每批量20,损失函数mean_squared_error,优化函数 Adadelta,最低loss 未知

额。。。。算了不搞了。

绘制loss图可以参考 https://www.jianshu.com/p/78d27a1d1657

使用Tensorboard绘制。

你可能感兴趣的:(天池新人赛,幸福感预测)