知乎视频www.zhihu.com
越来越觉得模型的速度非常重要, 一般来说, 模型的性能瓶颈在"训练"这个阶段. 因此, 只要比较训练时间就可以了.
很多"精妙"的模型, 因为速度慢的原因, 难以应用, 或者使用成本非常高.
先给出结果, 计算过程在下文中详细说明, 测试的模型以scikit-learn的模型为主, 还包括lightgbm里面的模型, 读者如果对其他模型有兴趣的话, 可以使用本文给出的测试程序自行测试.
按照运行时间从小到大排序:
警告说明: 这些数据是在随机数据集下, 模型的默认超参下, 有限的样本量范围, 有限的特征数量范围下的测试的结果,仅供参考, 如果改变条件, 结果很可能发生变化. 建议具体问题具体分析
NearestCentroid速度最快, 很正常, 因为训练阶段就只是求类内中心点.
SGD系列排名靠前
"Kernel Approximation + SGD"比SVR, SVC快一个数量级或者两个数量级.
更重要的是, 随着样本量的增大, 前者的优势会更加明显, 因为前者的时间复杂度是O(n), 而后者的时间复杂度是O(n^2)
LinearSVC, LinearSVR排名处在中间位置
排名靠后的主要是: tree-based模型, 神经网络, 高斯过程模型, 非线性SVM
为什么RandomForestRegressor最慢?
因为RandomForestRegressor默认下, 是充分生长的, 而且每次分裂的时候, 考虑所有的特征.
而RandomForestClassifier默认下, 也是充分生长的, 但是每次分裂的时候, 只考虑特征总数的平方根个特征.
当心那些