需要源码和数据集请点赞关注收藏后评论区留言私信~~~
超参数调优
超参数调优需要依靠试验的方法,以及人的经验。对算法本身的理解越深入,对实现算法的过程了解越详细,积累了越多的调优经验,就越能够快速准确地找到最合适的超参数
试验的方法,就是设置了一系列超参数之后,用训练集来训练并用验证集来检验,多次重复以上过程,取效果最好的超参数。训练数据的划分可以采用保持法,也可以采用K-折交叉验证法。超参数调优的试验方法主要有两种:网格搜索和随机搜索。
网格搜索
网格搜索法将各超参数形成的空间划分为若干小空间,在每一个小空间上取一组值作为代表进行试验。取效果最好的那组值作为最终的超参数值。
这种暴力的方法,只适合于小样本量、少参数的情况,否则效率很低。可以作适当地改进,1)在影响大的参数上作更细的划分,而在影响小的参数上作粗的划分,2)先将网格粗切分,然后再对最好的网格进行细切分,3)还有一种改进效率的贪心搜索方法,先在影响最大的参数上进行一维搜索,找到最优参数,然后固定它,再在余下参数中影响最大参数上进行一维搜索,如此下去,直到搜索完所有参数。
随机搜索
随机搜索的思想和网格搜索比较相似,只是不固定分隔子空间,而是随机分隔。它将每个特征的取值都看成是一个分布,然后依概率从中取值。每轮试验中,每个特征取一个值,进行模型训练。随机搜索一般会比网格搜索要快一些。但是无法保证得到最优超参数值。
在sklearn.model_selection.RandomizedSearchCV中实现了随机搜索。
房价回归预测实战
Kaggle提供了一个房价预测的题目,在官网及其他网站出现了大量对该题目的分析和研究,很适合初学者参考学习。
该题目是依据房屋的属性信息,包括房屋的卧室数量、卫生间数量、房屋的大小、房屋地下室的大小、房屋的外观、房屋的评分、房屋的修建时间、房屋的翻修时间、房屋的位置信息等,对房屋的价格进行预测。
1:初步数据分析
从Kaggle官网下载数据后,用Pandas进行初步分析,发现数据完整,没有缺失和重复的现象
2:划分训练集和验证集,并标准化
3:初步建立模型
选择K近邻回归、决策树回归、随机森林回归和梯度提升树回归等多个模型进行初步实验
4:超参数调优
对用时最少、得分最高的梯度提升树回归模型进行超参数调优。具体采用网格搜索方法。
5:特征选择
用相关系数来观察不同特征之间以及它们和标签值之间的相关性
去掉与标签相关系数值较小的特征,重新训练模型,比较结果,发现得分略降低,但用时大幅下降
用散点图观察特征与标签的相关性
从平均绝对误差来看,第一应该去掉的特征bathrooms 从均方误差来看,第一应该去掉的特征是sqft_basement
神经网络模型
最后 尝试使用全连接层神经网络来对该回归问题建模
训练过程和训练误差结果如下
最后 部分代码如下
from sklearn.preprocessing import StandardScaler sc = StandardScaler() sc.fit(X_train) X_train= sc.transform(X_train) X_test = sc.transform(X_test) from sklearn.neighbors import KNeighborsRegressor model = KNeighborsRegressor(n_neighbors=10) time_start=time.time() model.fit(X_train, y_train) print('K近邻回归模型训练用时:', time.time()-time_start) y_pred=model.predict(X_test) print ('K近邻回归模型在验证集上的平均绝对误差和均方误差分别为:', mean_absolute_error(y_test,y_pred), mean_squared_error(y_test,y_pred)) from sklearn.tree import DecisionTreeRegressor model = DecisionTreeRegressor() time_start=time.time() model.fit(X_train, y_train) print('决策树回归模型训练用时:', time.time()-time_start) y_pred=model.predict(X_test) print ('决策树回归模型在验证集上的平均绝对误差和均方误差分别为:', mean_absolute_error(y_test,y_pred), mean_squared_error(y_test,y_pred)) from sklearn.ensemble import RandomForestRegressor model = RandomForestRegressor(n_estimators=500) time_start=time.time() model.fit(X_train, y_train) print('随机森林回归模型训练用时:', time.time()-time_start) y_pred=model.predict(X_test) print ('随机森林回归模型在验证集上的平均绝对误差和均方误差分别为:', mean_absolute_error(y_test,y_pred), mean_squared_error(y_test,y_pred)) plt.figure(figsize=(14,12)) sns.heatmap(raw_data.corr(), annot=True, cmap="YlGnBu") plt.title('Feature Correlation') plt.tight_layout() plt.show()
创作不易 觉得有帮助请点赞关注收藏~~~