在这篇文章中,将探讨多种方法来优化或微调机器学习模型。将使用“加州房价”数据集来理解这些概念。在开始之前,让快速查看一下即将处理的数据集:加州房价。通过使用数据框架的head方法,可以查看前五行数据。每行代表一个区域。总共有十个属性,包括经度、纬度、房屋中位年龄、总房间数、总卧室数、人口、家庭数、中位收入和中位房价以及海洋接近度。使用info方法,可以快速获取数据的信息。可以看到数据集中有20640个实例,从机器学习的角度来看,这个数量稍显不足,但足够开始。可能已经注意到总卧室属性只有20433个值,这意味着其余的207个值是空缺的。海洋接近度是唯一的非数值属性,其类型是对象,这意味着它可能是任何类型的Python对象,但由于这些数据是从CSV文件加载的,它必须是文本。让查看一下海洋接近度属性。
正如所知,这是一个分类属性,可以查看之前的博客“为机器学习算法烹饪数据”,其中解释了如何处理缺失值和分类属性。最后,为了更好地了解正在处理的数据类型,让为每个数值属性绘制直方图。使用matplotlib库,可以直观地看到数据的分布情况。通过这些直方图,可以更好地理解数据的分布和特征,这对于后续的模型优化至关重要。
模型微调的含义是什么?简单来说,微调模型就像调整电视天线直到得到清晰的图像一样。在这里,需要调整模型的超参数以达到最大的准确性。假设有一系列有前景的模型,现在所需要做的就是微调它们。让看看可以这样做的几种方式。
1.网格搜索:可以手动调整超参数,直到找到一组很好的超参数值。但这项任务将非常繁琐,可能需要很多时间,而且也可能无法探索尽可能多的组合。这里,Scikit-learn的网格搜索CV可以帮助。只需要告诉它想要它选择哪些超参数以及想要它尝试哪些值,它将使用交叉验证来评估所有可能的超参数值组合。
2. 随机搜索:网格搜索技术适用于尝试探索一些超参数组合的情况。但如果想搜索和探索大量的超参数组合,使用随机搜索技术更可取。这种技术与网格搜索几乎相同,唯一的区别是它不是尝试所有可能的组合,而是通过为每个超参数设置随机值来评估随机组合。这种方法的主要好处是,假设运行了500次迭代的搜索,这种方法将为每个超参数探索500个不同的值,而不是网格搜索中的少数几个。