经常在面试过程中被问到:“你是否尝试了其他方法”或者“你还了解其他的方法吗?”,在遇到这种问题时,一个我认为是初级者的回答是“我还使用了某某某方法”。我本身对研究各种分类方法没有特别大的兴趣,所以往往会回答“我没用过其他方法,效果恐怕也一般。”但是这样的回答虽然是实践总结出来的事实,但往往会使你丢失掉一次机会,或者会让面试你的人觉得你没什么水平。被迫或者说也是用证据来证明在算法上改进来提升分类的效果不太可行,因此特意搜集并整理了这篇文章。
模型选择经验
在《信息检索导论》这本书中有下边的几条分类算法选择原则,当然这里也有我自己实践的心得。
- 一个普遍的事实是,采用领域相关的文本特征在效果上会比采用新的机器学习方法获得更大的提升。
- Jackson和Moulinier(2002年)指出:“对数据的理解是分类成功的关键之一”。
- 当面对一个具体的分类需求时,第一个要问的问题是:训练数据(已准确标注的数据)有多少?如果有足够的时间用于系统实现的话,那么大部分时间可能要花在数据的准备上。
- 在没有标注数据的情况下,一般首先采用编制规则的方法分类数据。一个基本合理的时间长度是每个类别需要标注两天时间。
- 在已标注数据较少的情况下,一般采用高偏差低方差的分类器比如朴素贝叶斯分类器,这样可以有效避免过拟合。当然,无论采用何种模型,模型的质量始终会因训练数据有限而受到不利影响。
- 快速标注数据的方法有bootstraping方法。将分类器有所犹豫的文本交给人工进行标注。
- 快速进行错误纠正的方法是在分类器之上,再建立一个基于布尔规则的分类器(人工干预)
- 如果具有极大规模的数据,那么分类器的选择也许对最后的效果没有什么影响。在这种情况下,一般可以从训练模型扩展性和运行效率这两方面来选择分类算法。
- 一个通用的经验法则是,训练数据规模每增加一倍,那么分类器的效果将得到线性提高。
- 对于类别数目很多的分类问题,应当采用多类别分类器比如朴素贝叶斯,或者对类目体系分层以达到性能和效果的提升。
- 从特征选择上下功夫,比如抽取短语特征。比如将实体特征(ISBN号,化学式等)按照类别统一编号。
模型选择图
上图为sklearn提供的关于模型选择的参考图。该图的源网页为(https://scikit-learn.org/stable/tutorial/machine_learning_map/)。图中左上为分类算法,左下为聚类算法。在聚类算法中,GMM、VBGMM为语音处理算法。MeanShift为图像处理算法。因此应用于文本的聚类算法有KMeans(数据量小于1万)、MiniBatchKMeans(数据量大于1万)、Spectral Clustering(数据量小于1万),它们都是用来解决已知簇数量的算法,对于未知簇数量的情况,可以采用增量聚类算法比如single-pass。在分类算法中当数据量小于10万时,使用分类器LinearSVC或者NaiveBayes。当数据量大于10万时采用随机梯度下降线性分类器SGD Classifier。