我有一组数据,存储在一个.tsv文件中,可以在这里获取。我已经编写了几种分类器来判断给定的网站是短暂的还是长久的。
我的初始做法是快速原型设计,我尝试了随机分类器、1R分类器、进行了一些特征工程、线性回归、逻辑回归、朴素贝叶斯等各种方法。
然而,我所有的尝试都是杂乱无章的。我想知道,如果你得到了一组数据(为了讨论方便,就用上面提到的数据),你会如何分析它来找到合适的分类器?你会从数据集中最初提取哪些信息来理解它?
在高层次编程的时代,我可以在一个晚上运行5/6种算法,我所做的是正确的吗?快速原型设计的方法在这里是最好的选择吗,还是有更合理的、逻辑性的方法可以采用?
目前,我已经清理了数据,删除了所有无意义的行(这些行数量很少,可以直接丢弃)。我编写了一个脚本来交叉验证我的分类器,所以我有一个指标来测试偏差/方差,并检查整体算法性能。
接下来我该怎么做?我需要考虑哪些方面?我在这里应该思考什么?
回答:
你可以加入一些理论元素。例如:
- 朴素贝叶斯分类器假设所有变量都是独立的。也许事实并非如此?但这种分类器速度快且易于使用,因此即使变量不是真正独立的,它仍然是许多问题的良好选择。
- 线性回归对远离分类边界的样本赋予过多的权重。这通常不是一个好主意。
- 逻辑回归试图解决这个问题,但仍然假设输入变量之间存在线性相关。换句话说,类别之间的边界在输入变量空间中是一个平面。
当我研究一组数据时,我通常会从绘制每个变量在每个样本类别的分布开始,以找到最具区分性的变量。
然后,对于每个样本类别,我通常会绘制一个输入变量与另一个输入变量的关系图,以研究变量之间的相关性:是否存在非线性相关?如果是,我可能会选择能够处理这种相关性的分类器。两个输入变量之间是否存在强相关性?如果是,可以删除其中一个变量来降低问题的维度。
这些图表还可以帮助你发现数据集中的问题。
但总的来说,像你所做的那样尝试多种分类器并优化它们的参数以在交叉验证中获得最佳结果,这是一种实用且有效的方法,并且这在某个阶段是必须要做的。
从这个帖子的标签来看,我了解到你使用了scikit-learn的分类器。如果你还没有注意到,这个包还提供了强大的交叉验证工具 http://scikit-learn.org/stable/modules/cross_validation.html