咕咕了那么久的第二篇,实在抱歉。
本篇是续上一篇的内容:
R语言实现分类算法 - https://zhuanlan.zhihu.com/p/99848813
首先是建立评估模型准确性的函数(在网上找的)
performance
以下是各种分类方式的结果:
print('逻辑回归')
## [1] "逻辑回归"
performance(logit.perf)
## Sensitivity = 0.25
## Specificity = 0.97
## Positive Predictive Value =0.53
## Negative Predictive Value =0.89
## Accuracy = 0.87
print('逐步向后逻辑回归')
## [1] "逐步向后逻辑回归"
performance(logitstep.perf)
## Sensitivity = 0.25
## Specificity = 0.97
## Positive Predictive Value =0.53
## Negative Predictive Value =0.89
## Accuracy = 0.87
print('决策树')
## [1] "决策树"
performance(dtree.perf)
## Sensitivity = 0.63
## Specificity = 0.98
## Positive Predictive Value =0.81
## Negative Predictive Value =0.95
## Accuracy = 0.93
print('修整后的决策树')
## [1] "修整后的决策树"
performance(dtree_new.perf)
## Sensitivity = 0.57
## Specificity = 0.99
## Positive Predictive Value =0.89
## Negative Predictive Value =0.94
## Accuracy = 0.93
print('条件决策树')
## [1] "条件决策树"
performance(ctree.perf)
## Sensitivity = 0.61
## Specificity = 0.99
## Positive Predictive Value =0.89
## Negative Predictive Value =0.94
## Accuracy = 0.94
print('支持向量机')
## [1] "支持向量机"
performance(svm.perf)
## Sensitivity = 0.26
## Specificity = 1
## Positive Predictive Value =0.92
## Negative Predictive Value =0.9
## Accuracy = 0.9
print('随机森林')
## [1] "随机森林"
performance(forest.pref)
## Sensitivity = 0.62
## Specificity = 1
## Positive Predictive Value =0.99
## Negative Predictive Value =0.94
## Accuracy = 0.95
print('朴素贝叶斯')
## [1] "朴素贝叶斯"
performance(nb.pref)
## Sensitivity = 0.42
## Specificity = 0.97
## Positive Predictive Value =0.65
## Negative Predictive Value =0.91
## Accuracy = 0.89
print('KNN算法')
## [1] "KNN算法"
performance(knn.perf)
## Sensitivity = 0.3
## Specificity = 1
## Positive Predictive Value =0.93
## Negative Predictive Value =0.9
## Accuracy = 0.9
可以看出随机森林的敏感度和准确率较高。
算法总结(优点与缺点)
总结是通过不同的网页的内容汇集,有错误请指正!
逻辑回归
- 实现简单,广泛的应用于工业问题上;
- 分类时计算量非常小,速度很快,存储资源低;
- 便利的观测样本概率分数;
- 对逻辑回归而言,多重共线性并不是问题;
- 当特征空间很大时,逻辑回归的性能不是很好;
- 容易欠拟合,一般准确度不太高
- 不能很好地处理大量多类特征或变量;
决策树
- 决策树易于理解和解释;
- 数据的准备往往是简单或者是不必要的;(其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性。)
- 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。
- 可以对有许多属性的数据集构造决策树。
- 决策树可很好地扩展到大型数据库中,同时它的大小独立于数据库的大小。
- 对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征。
- 决策树处理缺失数据时的困难。
- 过度拟合问题的出现。
- 忽略数据集中属性之间的相关性。
KNN算法
- 简单、有效。
- 重新训练的代价较低
- 计算时间和空间线性于训练集的规模。
- 该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
- 类别评分不是规格化的(不像概率评分)。
- 输出的可解释性不强,例如决策树的可解释性较强。
- 计算量较大。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。
K均值算法
- 原理简单,容易实现
- 可解释度较强
- K值很难确定
- 局部最优
- 对噪音和异常点敏感
- 需样本存在均值(限定数据种类)
支持向量机
- 可以解决小样本情况下的机器学习问题。
- 可以提高泛化性能。
- 可以解决高维问题。
- 可以解决非线性问题。
- 可以避免神经网络结构选择和局部极小点问题。
- 对缺失数据敏感。
- 对非线性问题没有通用解决方案,必须谨慎选择Kernelfunction来处理。
朴素贝叶斯
- 有着坚实的数学基础,以及稳定的分类效率。
- NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。
- 需要计算先验概率;
- 分类决策存在错误率;
- 对输入数据的表达形式很敏感。
adaboost
- adaboost是一种有很高精度的分类器。
- 当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。
- 简单,不用做特征筛选。
- 不容易发生overfitting。
- 对outlier比较敏感。
随机森林
- 随机森林能处理很高维度的数据(也就是很多特征的数据),并且不用做特征选择。
- 在训练完之后,随机森林能给出哪些特征比较重要。
- 训练速度快,容易做成并行化方法(训练时,树与树之间是相互独)
- 对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。
- 随机森林抗过拟合能力比较强
- 随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。
- 可能有很多相似的决策树,掩盖了真实的结果。
- 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。