出品 | AI科技大本营(ID: rgznai100)
【导读】在本文中,我们将探讨不同的机器学习模型,以及每个模型合理的使用场景。
一般来说,基于树形结构的模型在Kaggle竞赛中是表现最好的,而其它的模型可以用于融合模型。对于计算机视觉领域的挑战,CNNs (Convolutional Neural Network, 卷积神经网络)是最适合不过的。而对于NLP(Natural Language Processing,自然语言处理),LSTMs或GRUs是最好的选择。下面是一个不完全模型细目清单,同时列出了每个模型的一些优缺点。
A. 线性回归(Linear Regression)
-
I.Vanilla Linear Regression
· 适用于在已有了一些预先定义好的变量并且需要一个简单的预测模型的情况下使用;
· 不需要进行参数调整(下面的正则化线性模型需要调整正则化参数);
· 不需要特征缩放(下面的正则化线性模型需要特征缩放);
· 如果数据集具有冗余的特征,那么线性回归可能是不稳定的;
· 可能会出现过度拟合(下面的正则化模型可以抵消这个影响);
· 分离信号和噪声的效果不理想,在使用前需要去掉不相关的特征;
-
II. Lasso回归, Ridge回归, Elastic-Net回归
-
II.融合模型(RandomForest,XGBoost, CatBoost, LightGBM)
· 是适用于计算机视觉、机器翻译、情感分析和语音识别任务的最新技术;
· 在非图像、非文本、非语音的任务中优于Boosting算法;
· 非常灵活,带有许多不同的体系结构构建块,因此需要专业知识来设计体系结构;
D. 基于距离的K近邻算法(K Nearest Neighbors – Distance Based)
· 分离信号和噪声的效果不理想,在使用前需要去掉不相关的特征;
· 是内存密集型的算法,因为它可以保存所有的观察结果;
A. 逻辑回归算法(Logistic Regression)
· 不需要参数调整(除非在正则化的时候,我们需要调整正则化参数);
· 如果数据集具有冗余特征,则线性回归可能是不稳定的;
· 分离信号和噪声的效果不理想,在使用前需要去掉不相关的特征;
B. 基于距离的支持向量机算法(Support Vector Machines – Distance based)
· 即使在高维度数据集上也不会产生过度拟合,因此它适用于具有多个特征的情况;
C. 基于概率的朴素贝叶斯算法(Naive Bayes — Probability based)
· 如果这种独立性的条件成立,那么朴素贝叶斯可以在更小的数据集上运行,并且可以以更快的速度进行训练;
D. 基于距离的K近邻算法( K Nearest Neighbors — Distance Based)
· 分离信号和噪声的效果不理想,在使用前需要去掉不相关的特征;
· 是内存密集型算法,因为它可以保存所有的观察结果;
E. 分类树(Classification Tree)
-
II.融合(RandomForest, XGBoost, CatBoost, LightGBM)
· 是适用于计算机视觉、机器翻译、情感分析和语音识别任务的最新技术;
· 在非图像、非文本、非语音的任务中优于Boosting算法;
· 非常灵活,带有许多不同的体系结构构建块,因此需要专业知识来设计体系结构;
A. DBSCAN聚类算法(Density-Based Spatial Clustering of Applications with Noise)
· 可以发现任意形状的聚类,不会假设聚类的形状是球状的;
· 如果整个数据集都是高密度区域,那么该算法不总是有效的;
· 需要调整密度参数epsilon和min_samples为正确的值,以便获得好的效果;
· 如果聚类不是球状的,并且大小相似,那么该算法不总是有效的;
· 需要预先知道聚类的数量,并需要调整k聚类的选择以便获得好的结果;
-
降维算法(Dimensionality Reduction Algorithms);
-
聚类算法(Clustering algorithms);
· 高斯混合模型(Gaussian Mixture Model);
· 分层聚类(Hierarchical clustering);
· 卷积神经网络(Convolutional Neural Networks);
· 图像分类(Image classification);
· 图像分割(Image segmentation)
-
自然语言处理(Natural Language Processing,NLP)
· 循环神经网络(Recurrent Neural Network,RNNs,包括LSTM 和 GRUs)
-
强化学习(Reinforcement Learning)
融合模型是一种非常强大的技术,有助于减少过度拟合,并通过组合来自不同模型的输出以做出更稳定的预测。融合模型是赢得Kaggle竞赛的一个重要工具,在选择模型进行融合时,我们希望选择不同类型的模型,以确保它们具有不同的优势和劣势,从而在数据集中获取不同的模式。这种更明显的多样性特点使得偏差降低。我们还希望确保它们的性能是可以对比的,这样就能确保预测的稳定性。
我们在这里可以看到,这些模型的融合实际上比任何单一的模型生成的损失都要低得多。部分的原因是,尽管所有的这些模型都非常擅长预测,但它们都能得到不同的正确预测结果,通过把它们组合在一起,我们能够根据它们所有不同的优势组合成一个超级模型。
# in order to make the final predictions more robust to overfitting
def blended_predictions(X):
return ((0.1 * ridge_model_full_data.predict(X)) + \\
(0.2 * svr_model_full_data.predict(X)) + \\
(0.1 * gbr_model_full_data.predict(X)) + \\
(0.1 * xgb_model_full_data.predict(X)) + \\
(0.1 * lgb_model_full_data.predict(X)) + \\
(0.05 * rf_model_full_data.predict(X)) + \\
(0.35 * stack_gen_model.predict(np.array(X))))
-
Bagging:
使用随机选择的不同数据子集训练多个基础模型,并进行替换。让基础模型对最终的预测进行投票。常用于随机森林算法(RandomForests);
-
Boosting:
迭代地训练模型,并且在每次迭代之后更新获得每个训练示例的重要程度。常用于梯度增强算法(GradientBoosting);
-
Blending:
训练许多不同类型的基础模型,并在一个holdout set上进行预测。从它们的预测结果中再训练一个新的模型,并在测试集上进行预测(用一个holdout set堆叠);
-
Stacking:
训练多种不同类型的基础模型,并对数据集的k-folds进行预测。从它们的预测结果中再训练一个新的模型,并在测试集上进行预测;
权重和偏差让我们可以用一行代码来跟踪和比较模型的性能表现。选择要测试的模型后,对其进行训练并添加wandb.log({‘score’: cv_score})来记录模型的运行状态。完成训练之后,你就可以在一个简单的控制台中对比模型的性能了!
import wandb
import tensorflow.keras
from wandb.keras import WandbCallback
from sklearn.model_selection import cross_val_score