我应该使用什么分类模型?新机器学习。需要建议

时间:2015-07-24 23:22:51

标签: python machine-learning classification

目标:

嘿伙计们,我试图在Python中创建一个分类模型来预测自行车共享站每小时会有多少相对流入或流出。

我们正在做的事情:

我的数据帧的前5行(总共超过200,000行)看起来像这样,并且我已经在' flux'中分配了值0,1,2。 column - 0如果没有重要的动作,1如果流入太多,2如果流出太多。

enter image description here

我正在考虑使用station_name(超过300个电台),一天中的小时和一周中的某一天作为预测变量来分类' flux'。

模型选择:

我该怎么办?朴素贝叶斯? KNN?随机森林?还有什么其他合适的东西吗? GDMS?支持向量机?

fyi:始终为0的基线预测值非常高,为92.8%。不幸的是,逻辑回归和决策树的准确性是正确的,而且并没有太大的改进。和KNN只需要永远......

那些在处理类似分类问题方面更有经验的机器学习建议吗?

2 个答案:

答案 0 :(得分:4)

Azure机器学习团队an article on how to choose algorithms即使您没有使用AzureML也可以提供帮助。从那篇文章:

  

您的训练数据有多大?如果您的训练集很小,那么   你要训练有监督的分类器,然后进行机器学习   理论上说你应该坚持使用高偏/低的分类器   方差,如朴素贝叶斯。这些优于低价   偏向/高方差分类器,如kNN,因为后者倾向于   过拟合。但是低偏差/高方差分类器更合适   如果你有一个更大的训练集,因为他们有一个更小的   渐近误差 - 在这些情况下,高偏差分类器不是   功能强大,足以提供准确的模型。有理论上的   和实证结果表明,朴素贝叶斯在这方面做得很好   情况。但请注意,拥有更好的数据和良好的功能   通常可以给你比拥有更好的更大的优势   算法。此外,如果您有一个非常大的数据集分类   您使用的算法可能不会影响性能,因此   在这种情况下,根据这些事情选择算法会更好   因为它的可扩展性,速度或易用性。

     

您是需要逐步或以批量模式训练?如果您有   很多数据,或者您的数据经常更新,您可能想要   使用更新的贝叶斯算法。神经网络和SVM   需要以批处理模式处理培训数据。

     

您的数据是专属分类还是专有数字或a   两种混合物?贝叶斯最适合分类/二项式   数据。决策树无法预测数值。

     

您或您的受众是否需要了解分类器的工作原理?   贝叶斯或决策树更容易解释。这要困难得多   查看或解释神经网络和SVM如何对数据进行分类。

     

您的分类需要多快生成?决策树   树很复杂时会很慢。另一方面,SVM   更快地分类,因为他们只需要确定哪一方   "线"您的数据已开启。

     

问题存在或需要多少复杂性?神经网络   和SVM可以处理复杂的非线性分类。

现在,关于你关于" fyi的评论:总是0的基线预测相当高,为92.8%":有异常检测算法 - 意味着分类高度不平衡,一个分类是"异常"这种情况很少发生,例如信用卡欺诈检测(真正的欺诈有望占您总数据集的很小一部分)。在Azure机器学习中,我们使用一类支持向量机(SVM)和基于PCA的异常检测算法。希望有所帮助!

答案 1 :(得分:0)

在这种不平衡数据的情况下,只需使用与平均精度不同的任何东西进行模型评估:精度/召回/ f1 /混淆矩阵:

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics

尝试不同的模型,并根据测试集上选择的指标选择最佳模型。