AdaBoost vs KNearest Neighbors vs支持向量分类器
监督学习部门有一个capstone项目,根据收入寻找潜在的慈善捐赠者。选择3个模型,适合于求解问题,并对各模型的性能进行比较。在这篇博文中,我将评估这三个模型在这个问题上的表现。我们将使用UCI机器学习库提供的数据集(https://archive.ics.uci.edu/ml/datasets/Census+Income)。
探索数据
现在,要进行分类的重要特征是“收入”。我们将假设,如果收入≤= 50k,那么该人可能不是捐助者。现在我们的目标是减少使用其他剩余特征来查看收入是否≤50k。
准备数据
在将数据用作机器学习算法的输入之前,通常必须对其进行清理,格式化和重构 - 这通常称为预处理。
转换Skewed连续特征
数据集有时可能包含至少一个特征,其值趋向于靠近单个数字,但也会有比单个数字大得多或更小的值。算法可能对这些值的分布很敏感,如果范围没有被正确地归一化,算法可能会表现不佳。根据人口普查数据,有两个特征符合这一描述:“capital-gain”和“capital-loss”。对于高度倾斜的特征分布,如“capital-gain”和“capital-loss”,通常的做法是对数据应用对数变换,使非常大的和非常小的值不会对学习算法的性能产生负面影响
归一化数值特征
除了对高度偏斜的特征执行变换之外,通常还可以对称为特征缩放的数字特征执行某种类型的缩放。我们可以用sklearn.preprocessing.MinMaxScaler
实现:数据预处理
从上面的数据中,我们可以看到每个记录都有一些非数字的特性。通常,学习算法期望输入是数字的,这要求转换非数字特性(称为直言变量)。一种常见的转换分类变量的方法是使用one-hot编码方案。
- 使用pandas.get_dummies()对“features_log_minmax_transform”数据执行one-hot编码。
- 将目标标签' incom_raw '转换为数值项。
- 将“<=50K”的记录设置为0,将“>50K”的记录设置为1。
评估模型的性能
我们可以用F-beta分数作为衡量精度和召回率的指标:
Precision告诉我们我们将哪些消息归类为垃圾邮件,实际上是垃圾邮件。它是真阳性(被分类为垃圾邮件的词,实际上是垃圾邮件的词)和所有阳性(所有被分类为垃圾邮件的词,不管这是否是正确的分类)的比率,换句话说,它是比率
[True Positives/(True Positives + False Positives)]
召回告诉我们实际上垃圾邮件的比例被我们归类为垃圾邮件。它是真阳性(被归类为垃圾邮件,实际上是垃圾邮件的单词)与所有实际上是垃圾邮件的词的比率,换句话说就是它的比例
[True Positives/(True Positives + False Negatives)]
Fβ=(1+β2)⋅(precision⋅recall)/((β2⋅precision)+recall)
特别是,当β= 0.5,更强调精度
现在数据已经准备好,我们将在数据集中训练3个模型。
集成学习(AdaBoost)
集成学习通过组合各种结果有助于提高机器学习效果。AdaBoost采用各种弱学习者(假设结果比随机机会更好)并对这些弱学习者进行加权求和以形成强大的学习者。(http://www.nickgillian.com/wiki/pmwiki.php/GRT/AdaBoost).AdaBoost应用于分类问题,其中有大型数据集可供学习。它用于人脸检测算法。AdaBoost不太容易过度拟合,这是它的最大优势。然而,它可以被噪声数据所感染。AdaBoost可用于创建这些各种独立特征的假设,这些特征可以组合起来以创建强有力的最终假设。
K-Nearest Neighbors
在模式识别中,k-nearest method是一种用于分类的非参数方法。当您有兴趣查找类似于推荐引擎的类似项目时,常常使用它。K-nn很容易使用,结果也很容易理解。K-nearest method对噪声数据具有鲁棒性。基于距离的学习还不能确定使用哪些特性。当前数据集的各种特性可以用n维表示分类。
支持向量机
它用于分类,其中每个数据点在空间中表示,使得来自单独类别的示例被表示为尽可能宽,使得可以进行明确的分类间隙。用于计算机视觉和语音识别等各种应用。(https://statinfer.com/204-6-8-svm-advantages-disadvantages-applications/)。它具有正则化参数,使用户考虑避免过度拟合。缺点是该理论仅真正涵盖了正则化和内核参数的给定值以及内核选择的参数的确定。虽然对我们的大型当前数据集进行训练可能会成为一个问题,但该模型仍然是一个很好的候选者,因为数据中似乎有一些特征可以更清楚地定义收入水平边界。
选择最好的模型
正在考虑的三个模型是SVC,AdaBoost,KNeighboursClassifier。评估这3个模型的度量标准
1)如果我们考虑使用100%训练数据时测试数据的F得分,我们发现AdaBoost优于SVC和KneighboursClassifier。
2)预测/训练时间与其他两种算法相比,AdaBoost的预测/训练时间几乎可以忽略不计。从可视化中我们可以看出,KneighboursClassifier占用了AdaBoost算法所花费的最多时间和时间。
3)数据包含各种功能。AdaBoost算法可用于在这些特征上创建弱假设。这些弱假设可以结合起来创建一个可以用于分类的强假设。
结论
在对模型进行训练时,选择算法和超参数是最重要的任务。尽管我们可能对算法的工作有直觉,但我们可能没有能力去理解正在发生的复杂数学。在这种情况下,最好使用不同的算法来训练模型,交叉验证模型的性能,然后选择算法。