机器学习系统设计(Building Machine Learning Systems with Python)


然而根据亲身经验,我们知道做这些很"酷"的事–使用和调整机器学习算法比如SVM,NNS,或者同时支持两者–其实只需要耗费一位优秀机器学习专家的一点时间。看看下面这个典型的工作流程,你就会发现绝大部分时间花费在一些相当平凡的任务上:1)读取和清洗数据;2)探索和理解输入数据;3)分析如何最好地讲数据呈现给学习算法;4)选择正确的模型和学习算法;5)正确地评估性能。

你通常不会直接将数据输入机器学习算法,而是在训练前对部分数据进行提炼。很多时候,使用机器学习算法会让你得到性能提升的回报。一个简单算法在提炼后数据上的表现,甚至能够超过一个非常复杂的算法在原始数据上的效果。这部分机器学习流程叫做特征工程(feature engineering),通常是一个非常令人兴奋的挑战。你有创意和智慧,便会立即看到效果。

好特征的目标是在重要的地方取不同值,而在不重要的地方不变。一个很自然就会想到的问题式,我们能否自动滴把好特征选取出来。这个问题叫做特征选择(feature selection). 人们已经提出了很多方法来解决这个问题,但是在实践中,极简单的想法可能已经可以做得很好。

要提升效果,我们基本上有如下选择:1)增加更多的数据[learning_curve];2)考虑模型复杂度[cross_validation and validation_curve];3)修改特征空间;4)改变模型。


逻辑回归中的逻辑函数引入是这样的:


朴素贝叶斯分类器要求所有特征之间相互独立。虽然在实际应用中很少有这种情况,但是在实践中它仍然能够达到非常好的正确率。


回归惩罚函数


整个购物篮分析领域有时又叫做关联规则挖掘(association rule mining). 这些规则式:如果一个顾客购买了X的话,相对于基线,那么他更有可能购买Y。有一个指标来衡量每个规则的价值,称为提升度。提升度就是规则和基线所得到的概率之间的比值:life(X->Y) = P(Y|X) / P(Y). 其中P(Y|X)就是规则对应的概率,而P(Y)则是基线。Apriori是这方面问题的经典算法。


下面这些理由会告诉你为什么在实践中应该尽可能消减维度: