python中的增量机器学习
creme的Python项目详细描述
creme
是用于在线机器学习的库,也称为cremental learning。在线学习是一种机器学习机制,模型一次只学习一个观察结果。这与一次处理所有数据的批量学习形成对比。当数据太大而无法放入内存时,或者当您希望以流式方式处理数据时,增量学习是可取的。除了许多在线机器学习算法之外,creme
还提供了从数据流中提取特征的实用程序。该api的灵感来自于scikit-learn,这意味着熟悉它的用户应该感到舒适。
有用链接
安装
:point_up:creme
用于Python3.6及更高版本。
creme
只需使用pip
安装即可。
pip install creme
您还可以安装最新的开发版本,如下所示:
pip install git+https://github.com/creme-ml/creme --upgrade
至于依赖项,creme
主要依赖于python的标准库。有时它依靠numpy
,scipy
和scikit learn
来避免重新发明轮子。
快速示例
在下面的示例中,我们将使用线性回归来预测图卢兹市自行车站中可用自行车的数量。
我们将使用可用的数值特性,并计算目标的运行平均值。在输入到线性回归之前,将使用StandardScaler
缩放功能。注意,这些步骤中的每一个都以流方式工作,包括特征提取。我们将通过要求它提前30分钟预测并延迟真实答案来评估该模型,从而确保我们正在模拟生产场景。最后,我们将每隔20000次预测打印当前分数。
>>>importdatetimeasdt>>>fromcremeimportcompose>>>fromcremeimportdatasets>>>fromcremeimportfeature_extraction>>>fromcremeimportlinear_model>>>fromcremeimportmetrics>>>fromcremeimportmodel_selection>>>fromcremeimportpreprocessing>>>fromcremeimportstats>>>X_y=datasets.fetch_bikes()>>>defadd_hour(x):...x['hour']=x['moment'].hour...returnx>>>model=compose.Whitelister('clouds','humidity','pressure','temperature','wind')>>>model+=(...add_hour|...feature_extraction.TargetAgg(by=['station','hour'],how=stats.Mean())...)>>>model+=feature_extraction.TargetAgg(by='station',how=stats.EWMean(0.5))>>>model|=preprocessing.StandardScaler()>>>model|=linear_model.LinearRegression()>>>model_selection.online_qa_score(...X_y=X_y,...model=model,...metric=metrics.MAE(),...on='moment',...lag=dt.timedelta(minutes=30),...print_every=20_000...)[20,000]MAE:13.743465[40,000]MAE:7.990616[60,000]MAE:6.101015[80,000]MAE:5.159895[100,000]MAE:4.593369[120,000]MAE:4.19251[140,000]MAE:3.904753[160,000]MAE:3.725466[180,000]MAE:3.568893MAE:3.555296
我们还可以绘制模型来了解数据是如何流动的。
>>>dot=model.draw()< div >
通过只使用几行代码,我们构建了一个健壮的模型,并通过模拟生产场景对其进行了评估。您可以在这里找到本示例的更详细版本。creme
是一个有很多可供选择的框架,因此,如果您想了解更多信息,请参阅文档。
与其他解决方案的比较
- scikit learnscikit learn:一些it估计器有一个
部分拟合的方法,允许他们用新的方法更新自己观察。然而,在线学习并没有被视为一等公民,这会让事情变得尴尬。如果您的数据适合内存,那么您绝对应该使用scikit learn,而且每次有新数据可用时,您都可以从头开始重新培训您的模型。
- vowpal-wabbit:大众可能是最快的核心学习系统。它的核心是用许多技巧实现一种最先进的自适应梯度下降算法。它也有一些机制来执行主动学习和使用强盗。然而,它不是一个"真正的"在线学习系统,因为它假设数据在一个文件中可用,并且可以循环多次。此外,对于新来的用户来说,grok也有些困难。
- libol:这是一个很好的图书馆,由学者编写,有一些很棒的文档。它是用c++编写的,而且速度似乎很快。然而,它只关注在线学习的学习方面,而不关注其他平凡但有用的任务,如特征提取和预处理。而且,它已经有几年没有更新了。
- Spark流媒体:这是apache spark,它适合大数据从业者。它以小批量处理数据,而不是实际执行流操作。它还与实现在线学习算法的mllib兼容。例如流式线性回归和流式k-means。然而,这是一个有点压倒性的解决方案,对于某些用例来说可能有点过分了。
- tensorflow:深度学习系统在某种意义上是在线学习系统,因为它们使用在线梯度下降。然而,流行的库大多与批处理环境相适应。因为像keras和pytorch这样的框架,在creme中实现神经网络是没有实际意义的。此外,对于许多问题,神经网络可能不是正确的工具,您可能希望使用简单的逻辑回归或决策树(存在在线算法)。
如果您觉得其他解决方案值得一提,请随时提出问题。
贡献
与机器学习的许多子领域一样,在线学习远不是一门精确的科学,因此还有很多事情要做。请随意以您喜欢的任何方式作出贡献,我们总是乐于接受新的想法和方法。如果您想参与代码库的创建,请查看contribution.md
文件。还可以查看问题跟踪器,看看是否有什么能吸引您的注意。
最后但并非最不重要的是,我们非常欢迎您与我们分享您如何使用creme
或一般在线学习!我们相信在线学习可以解决实践中的许多难点,我们愿意分享经验。
本项目遵循所有贡献者规范。欢迎任何形式的贡献!
<表>max-halford
adilzouitine
raphael sourty
geoffrey bolmier
Vincent D Wartemdam
vaysserobin
lygon bowen west
florent le gac
adrian rosebrock
许可证
请参见许可文件