伴随着ChatGPT的大火,很多人也逐渐认识到人工智能正在逐步由底层建筑上升到交互服务,其实在没有兴起ChatGPT时,人工智能技术就已经发展的比较成熟了。像是现在机器学习以及深度学习都已经普及在各大高校社区了,而且市场上已经有非常多的目标识别、图像检测等计算机视觉落地项目,可以说这是人工智能发展最为迅速的十年,受到ChatGPT的冲击,将来人工智能的速度只会只增不减。
尽管人工智能技术已经比较成熟,但机器学习服务的落地仍然存在一些限制,如数据安全性、模型可解释性、部署成本等问题。为了摆脱这些限制,人工智能从底层建筑到交互服务的转变是必然的。随着ChatGPT等技术的出现,人工智能正在逐步实现智能交互,使得机器学习服务得以更加灵活、高效、安全地落地。在这个过程中,需要采用新的技术和方法,如联邦学习、深度强化学习、解释性机器学习等,以解决当前机器学习服务落地面临的问题,并推动人工智能技术更快地发展和普及。
当然以上这些处理方法并没有字面上写的那样如此简单就能实时,完完整整落地一个机器学习的项目比我们想的要困难得多,而且我们要持久保持数据更新以及准确性的稳定性以及模型的灵活性,就连这一小块之间的学问都特别的多。倘若我们必须要快速落地一个机器学习人工智能项目,我们要了解现需要面对什么样的限制以及困境,以及如何应对它们。
最近受邀参与了亚马逊云科技【云上探索实验室】活动,利用基于Amazon SageMaker完全托管的机器学习服务高效的完成一次机器学习服务部署-贷款违约数据训练 XGBoost 二进制分类模型,在Amazon SageMaker上实验进行的非常顺利且该平台功能俱全便捷,训练迭代模型也十分快捷,适用场景广泛,很值得机器学习工程师一用。
一般来说完成机器学习服务部署需要遵循以下几个步骤,以确保高效优雅地完成:

那么就以上述基础服务部署流程来看,有五点是必须也是容易注意到的问题:

数据安全性问题是机器学习服务落地的一个重要限制。数据作为机器学习模型的基石,模型的质量和效果往往直接受数据质量和数量的影响。同时,由于很多数据涉及到个人隐私和商业机密等敏感信息,因此,数据的安全性就显得尤为重要。

解决数据安全性问题的方法有以下几种:
模型可解释性问题是指在机器学习模型的应用过程中,用户或客户无法理解或解释模型的决策过程和结果,从而降低了模型的可信度和可接受性。

解决模型可解释性问题的方法有以下几种:
部署成本问题是指在机器学习模型的部署过程中,需要投入大量的时间和资源来完成部署,从而增加了部署的成本和难度。

解决部署成本问题的方法有以下几种:
数据样本的不均衡问题是指在机器学习训练数据中,不同类别的数据样本数量不平衡,导致机器学习模型在预测时对于少数类别的数据表现较差的问题。

解决数据样本不均衡问题的方法有以下几种:
模型漂移问题指的是当训练好的机器学习模型在应用阶段的数据分布发生变化时,模型的预测性能下降的问题。这种情况下,模型需要不断地进行更新和重新训练,以保证其在新的数据分布上的预测性能。

解决模型漂移问题的方法有以下几种:
那么就现在来说,我们了解了一般的机器学习服务搭建流程,也清楚了我们将会面临什么样的困难,当然也知晓了对于这些困难我们可以用何种方法去应对它们,但是要是在短期内快速启动机器学习服务还是相当困难,于是如何探索能够解决上述问题以及能够实现一站式开发的平台成为了快速搭建机器学习服务的首要问题。
那么一个高可用机器学习服务部署平台,需要以下几种特质:
其实市面上已经有比较成熟的机器学习平台了,那么我们就根据Amazon SageMaker平台来探索机器学习服务应该如何落地。
Amazon SageMaker是亚马逊AWS提供的一项机器学习服务,它提供了一整套完整的机器学习流程,包括数据预处理、模型构建、训练、调优、部署等一系列功能。通过Amazon SageMaker,开发人员和数据科学家可以更轻松地构建、训练和部署机器学习模型,并快速将其应用于生产环境中。

Amazon SageMaker还具有自动模型调整功能,它可以通过自动调整超参数,最大限度地提高模型的准确性。此外,SageMaker还提供了与其他AWS服务集成的功能,如Amazon S3、Amazon Athena、Amazon Redshift和AWS Lambda,从而为用户提供完整的数据处理和存储解决方案。
Amazon SageMaker 的工作原理其工作原理可以概括为以下几个步骤:
以金融风控中的个人信贷为背景,根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题。数据取自阿里天池:

XGBoost在各种数据挖掘、预测和分类任务中取得了极高的准确率和性能。是目前应用最广泛的机器学习算法之一。可以说,XGBoost的快速发展和广泛应用,推动了机器学习算法的进一步发展和优化,为人工智能技术的普及和应用打下了坚实的基础。
XGBoost的全程为eXtreme Gradient Boosting,即极度梯度提升树。
XGBoost本质上仍然属于GBDT算法,但在算法精度、速度和泛化能力上均要优于传统的GBDT算法。
从算法速度上来看,XGBoost使用了加权分位树sketch和稀疏感知算法这两个技巧,通过缓存优化和模型并行来提高算法速度;从算法泛化能力上来看,通过对损失函数加入正则化项、加性模型中设置缩减率和列抽样等方法,来防止模型过拟合。XGBoost根据结构分数的增益情况计算出来选择哪个特征作为 分割点,而某个特征的重要性就是它在所有树中出现的次数之和。 也就是说一个属性越多的被用来在模型中构建决策树,它的重要性就相对越高。那么我们就用贷款违约数据训练 XGBoost 二进制分类模型来实现对贷款违约的预测。
Amazon SageMaker内置算法对于XGBoost的支持非常好,可以直接通过Amazon SageMaker的参数来设置所有的XGBoost的超参。

那么我们选定超参数(非最优):
hyperparameters = {'alpha': 0.0,
'colsample_bylevel': 0.4083530569296091,
'colsample_bytree': 0.8040025839325579,
'eta': 0.11764087266272522,
'gamma': 0.43319156621549954,
'lambda': 37.547406128070286,
'max_delta_step': 10,
'max_depth': 6,
'min_child_weight': 5.076838893848415,
'num_round': 100, # Not tuned: kept fixed
'subsample': 0.8915771964367318,
'num_class': 10, # Not tuned: defined by Fashion MNIST
'objective': 'multi:softmax' # Not tuned: defined by Fashion MNIST
}
使用Amazon SageMaker内置的算法我们基本不会自己实现算法代码,而只是通过调用Amazon SageMaker的SDK或者API来实现模型训练,因此数据的读取逻辑完全是由内置算法本身来实现的。Amazon SageMaker内有封装好ShardByS3Key数据集分片。

分片的数量至少要大于或等于将来要运行实例的数量,我们要使用ShardByS3Key是S3前缀做Shard的方式对数据集进行切片并分配给不同的训练实例使用。使用SageMaker ShardByS3Key的方式进行数据集切片实际在API调用时比较简单,加入一个参数 distribution='ShardedByS3Key’即可:
train_input = TrainingInput(train_url, content_type=content_type, distribution='ShardedByS3Key')
使用SageMaker中内置算法实现分布式训练很容易:
data = pd.read_csv("贷款数据.csv")
# construct a SageMaker estimator that calls the xgboost-container
estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container,
hyperparameters=hyperparameters,
role=sagemaker.get_execution_role(),
instance_count=2,
instance_type='ml.m5.xlarge',
volume_size=5, # 5 GB
output_path=output_path)
# execute the XGBoost training job
estimator.fit({'train': data, 'validation': validation_input})
可以通过混淆矩阵和准确率、召回率和F1值来进行判断:

最后一定要记得清理资源,以免产生意外费用。

在Amazon SageMaker使用贷款违约数据训练XGBoost 二进制分类模型的过程可以总结为以下步骤:
通过使用Amazon SageMaker,用户可以更加高效地完成机器学习模型的训练、部署和管理,大大降低了机器学习应用的开发和维护成本,同时提高了模型的可用性和性能。
从上述实践可以看出,Amazon SageMaker提供了一个非常强大的机器学习平台,可以帮助我们快速构建、训练和部署机器学习模型。使用Amazon SageMaker时,我们可以使用多种常用机器学习框架,包括TensorFlow、PyTorch和Scikit-Learn等,同时也支持自定义算法。
在这个实践中,我们使用了贷款违约数据,训练了一个XGBoost二进制分类模型,并使用Amazon SageMaker的批量推理功能,批量处理了测试数据并得出了预测结果。整个过程相对来说比较简单,尤其是使用SageMaker Studio提供的Notebook和Autopilot功能,能够让我们快速构建和训练模型。
r时,我们可以使用多种常用机器学习框架,包括TensorFlow、PyTorch和Scikit-Learn等,同时也支持自定义算法。
在这个实践中,我们使用了贷款违约数据,训练了一个XGBoost二进制分类模型,并使用Amazon SageMaker的批量推理功能,批量处理了测试数据并得出了预测结果。整个过程相对来说比较简单,尤其是使用SageMaker Studio提供的Notebook和Autopilot功能,能够让我们快速构建和训练模型。
总之,Amazon SageMaker是一个非常强大和灵活的机器学习平台,能够帮助我们快速构建、训练和部署机器学习模型,同时也需要我们在使用过程中注意一些问题,保障数据安全和合理使用。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为