• [热门活动] 【证书领取】华为云DevCloud训练赛等你来!
    参加华为云DevCloud训练赛并完成心得分享的同学你们的证书已经制作完成啦请在本贴附件中下载按照名字找到自己的证书即可~欢迎日后多多参与活动哦~【竞答奖】奖项内容:1、完成在线课程学习、沙箱实验、心得分享的同学,均可获得官方结业证书(电子版);2、参与小班授课的同学,根据线下实验成绩(60%)+心得分享(40%)=总成绩,根据总成绩排名,分别评出以下奖项:卓越奖1名、优秀奖1名、进步奖1名、积极奖2名、青春奖10名奖项奖品卓越奖1名华为云官方结业证书+华为手表FIT优秀奖1名华为云官方结业证书+华为freebuds 4i无线耳机进步奖1名华为云官方结业证书+快充移动电源10000mah积极奖2名华为云官方结业证书+华为手环4e活力款青春奖10名华为云官方结业证书说明:(1)奖品将在大赛结束后统一发放;(2)如因缺货等原因导致奖品缺失,将替换为等价值其他奖品。参与方式:1、参加训练赛的同学,点击报名链接并“立即报名”;2、根据报名页面,据实填写学校信息、专业、学号、姓名等。报名成功后,可在线学习课程、完成沙箱实验;请及时进行心得分享;3、完成上述3步的同学(课程学习+沙箱实验+心得分享),即获得领取华为云官方证书(电子版)的资格,请及时将真实姓名+心得分享截图,评论在此贴中,完成信息登记,内容仅工作人员可见。工作人员将在大赛结束后,在评论区打包发送电子证书,可自行下载;4、证书将在大赛结束后14个工作日内发放完成;5、本次活动一切解释权归华为所有。证书示例:
  • [技术干货] Python机器学习算法之决策树算法
    决策树算法是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法。分类算法是利用训练样本集获得分类函数即分类模型(分类器),从而实现将数据集中的样本划分到各个类中。分类模型通过学习训练样本中属性集与类别之间的潜在关系,并以此为依据对新样本属于哪一类进行预测。
  • [其他]   分享论文自注意力对齐:使用自注意力网络和跳块的一种延时控制的端到端语音识别模型
    论文名称:self-attention aligner: a latency-control end-to-end model for ASR using self-attention network and chunk-hopping作者:Linhao Dong / Feng Wang / Bo Xu发表时间:2019/2/18论文链接:https://paper.yanxishe.com/review/16749?from=leiphonecolumn_paperreview0420为了解决RNN结构的语音识别模型存在的训练时间长、对一些噪音很敏感等问题,作者参考了transformer结构设计了一个语音识别模型,其中编码部分使用了时间维度的池化操作进行下采样来进行时间维度的信息交互并提高模型速度,解码的部分设计了一种模拟CTC的对齐结构。此外,作者将语音识别模型与语言模型进行端到端的联合训练,使得CER得到进一步提升。将transformer结构应用语音识别,今天已经不新鲜了。但是就去年本文发表的时期而言,将另一个领域的优秀模型应用到本领域来,会遇到什么问题,要怎么解决这些问题,如何进行优化?本文的这些思路都是很值得参考的。比如,transformer模型能很好的解决文本类的NLP任务,那么将其与语音识别联合训练,也更有可能收敛,以达到提高表现的目的。转自AI研习社,https://www.leiphone.com/category/academic/QWnCOMr50v4w5a7x.html
  • 求小助手能在商城上架关于机器学习,深度学习的书
    求小助手能在上传上架关于机器学习,深度学习的书
  • [热门活动] 【实操有礼-华为云AI论文精读会2021】一种有效提升RCNN系列网络表现的动态训练方法
    【华为云AI论文精读会2021】直播活动,2021年5月13日(周四)晚上19:00不见不散,让更多人低门槛使用经典算法!1.直播页面(建议先看海报进群关注直播抽奖福利):https://bbs.huaweicloud.com/live/cloud_live/202105131900.html2.直播实操活动,学以致用马上动手起来吧:https://marketplace.huaweicloud.com/markets/aihub/activity/detail/?id=1d888fe4-7538-4a4a-a9f5-dadda9f5d912华为云AI论文精读会2021邀请计算机视觉、迁移学习、自然语言处理等领域专家学者基于华为云ModelArts解读经典论文算法,让更多人来低门槛使用经典的算法,论文算法实战赛邀请AI开发者基于ModelArts进行经典论文的复现和算法实战学习。华为云AI论文精读会2021 · 论文算法实战赛报名地址:https://competition.huaweicloud.com/information/1000041393/introduction各位可爱的开发者小伙伴:看完白璐斌老师的直播(直播回看链接:待更新),你是不是也跃跃欲试,想自己动手做一下【DynamicRCNN-目标检测算法实战】呢?华为云已经帮大家做好详细的baseline,欢迎大家动手实操:DynamicRCNN-目标检测算法实战baseline:https://marketplace.huaweicloud.com/markets/aihub/article/detail/?content_id=d86d6bdf-08fa-4561-9355-a0a653430146ModelArts开发速成,看这里!!(快速入门、进阶学习资料、开发案例、开发者活动等):https://bbs.huaweicloud.com/forum/thread-90020-1-1.html按照【DynamicRCNN-目标检测算法实战baseline】成功提交实战结果(上传模型到AI GAllery),就可以获取精美的礼品,我们将按照时间顺序(提交完成之后修改会以你修改的时间为完成时间,建议完成提交的请勿修改)。活动规则:认真观看直播,之后按照【DynamicRCNN-目标检测算法实战baseline】提交实战结果在【DynamicRCNN算法】下认真评价(10个字以上)将提交的实战结果(你上传的模型)链接回帖在:https://marketplace.huaweicloud.com/markets/aihub/activity/detail/?id=1d888fe4-7538-4a4a-a9f5-dadda9f5d912,并文字记录上传成功时间,如:2021/05/20上传+链接根据时间的顺序我们评选获奖用户活动奖项:第一名:华为蓝牙耳机Free Lace第二~四名:机械键盘第五~十名:无线鼠标参与奖(限量20个):认真完成实操,我们将为后面的同学准备神秘的华为云周边精美礼品活动时间:2021/05/13 21:00~2021/05/27 24:00对以上内容有任何疑问请在本帖回帖或扫描如下二维码回复“论文”加入交流群!活动规则 1)请务必使用个人账号参与活动(IAM、企业账号等账号参与无效);2) 为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等破坏活动公平性的行为),利用资源从事违法违规行为的用户收回抽奖及奖励资格,本次活动一个实名认证账号只能对应一个收件人,如同一账号填写多个不同收件人,不予发放奖励;3)本活动规则由华为云在法律规定范围内进行解释。华为云保留不时更新、修改或删除本活动规则的权利。上述更新、修改或删除于公布时即时生效,用户应当主动查阅本活动规则的最新内容。4) 所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》,包括以援引方式纳入《华为云用户协议》的《可接受的使用政策》、《法律声明》、《隐私政策声明》、相关服务等级协议(SLA),以及华为云服务网站规定的其他协议和政策(统称为“云服务协议”)的约束。如果您不同意本活动规则和云服务协议的条款,请勿参加本活动。
  • [最佳实践] 【TICS动态】基于华为TICS实现联合风控模型训练
    作者:部陪原文链接: https://bbs.huaweicloud.com/blogs/265925背景       在银行传统的信用评估决策机制中,最常用的几个特征维度无非是个人资产、收入、信贷历史、抵押担保等。这些维度虽然能够反映借款人的还款能力,但是过于简单的规则往往也会拒绝掉很多潜在的优质客户。并且审核过程过于依赖网点客户经理,不但成本很高,人为风险也比较大。       随着互联网的快速发展,我们在网络上留下越来越多的轨迹,比如购物、租房、招聘、学历、社交信息等等。将这些特征引入到信用评分体系当中,能对金融机构的业务决策起到很好的辅助作用。这些特征虽然不直接反应一个人的信贷属性,但是能够帮助金融机构更好地全方位了解这个人。       利用大数据做金融风控的决策方式,是从数据本身出发,去反应一种与信贷属性的内在关联关系,这种关系不容易受偏见的影响,能达到更客观的效果。并且更加丰富的特征维度往往能够带来更高的预测准确率。但是在实际的实施过程中,银行受限于客户特征数据不足,构建的模型往往无法达到预期的效果,而从第三方获取数据的渠道又壁垒重重,隐私合规地使用数据面临巨大的挑战。合作方案       华为TICS基于可信硬件和MPC算法构建联邦学习平台,实现了数据不出本地的情况下进行多方联合建模。解决了多方数据共享交换过程中端到端隐私保护问题。                         图1 华为TICS服务架构图支付平台提供特征数据,通过TICS安全代理接入系统。xx银行提供标签样本数据,通过TICS安全代理接入系统。TICS服务提供能力:基于元数据完成数据授权过程,用户可以自定义设置数据隐私策略。基于可信硬件TEE完成秘钥生命周期管理。基于OPRF的自研PSI算法提供样本对齐能力,对齐过程中原始数据不出本地,对齐字段通过密文比较,结果在本地加密保存。使用同态加密技术,将标签样本发送到支付平台侧,完成特征分箱和IV值计算。提供基于XGBOOST算法的联邦训练能力,由支付平台发起训练过程,结果模型输出到支付平台侧,提供业务系统使用。业务系统对银行方开放接口提供业务支持。执行过程基于区块链实现存证,方便事后做安全审计。实现过程环境搭建图2 TICS服务部署方式支付平台基于TICS服务在华为云上创建数据联盟,并且邀请银行方加入联盟。支付平台使用TICS服务在华为云上部署安全代理。银行使用TICS服务部署边缘代理到本地环境中。数据准备支付平台把准备好的特征数据csv文件放到OBS,通过安全代理将特征数据的元数据发布到联盟,并设置访问权限。银行把准备好的标签数据csv文件放到安全代理本地目录,将标签数据的元数据发布到联盟,并设置访问权限。数据预处理支付平台从安全代理发起样本对齐请求,TICS通过PSI算法实现样本对接,并将结果加密保存到各自本地目录。支付平台从安全代理发起分箱和IV值计算请求,TICS通过同态加密方式将银行标签发送到支付平台方,实现加密计算。支付平台根据IV值筛选有价值特征。模型训练支付平台从TICS服务发起联合风控建模任务,TICS负责任务调度,并将任务发送给双方安全代理进行计算。TICS将训练完的模型保存到支付平台的OBS上。开放业务业务系统得到联合风控模型,用于信用评分服务,提供API接口对银行开放服务。行通过API接口调用获取个人信用评分。总结       TICS服务提供的数据共享交换过程中端到端隐私保护能力,为行业内部、跨行业之间的数据协同创造了可能性。使用联邦学习进行联合建模弥补了传统金融机构中缺乏用户画像数据的问题。在反欺诈领域、信贷准入审批、风险定价、贷后监测等方面都将为金融机构提供巨大的价值。
  • [其他] 在线学习用于(单细胞多数据整合),无需从头开始计算
    单细胞测序作为一种相对较新的技术,研究人员能够根据细胞表达的基因等特征来识别和分类细胞类型。但是,这类研究会产生大量数据,其中包含数十万到数百万个细胞的数据集。  近日,美国密歇根大学的研究团队开发了一种新算法,使用在线学习,大大加速了大量数据集处理。与先前方法相比,效率的提高不会牺牲数据集的对齐方式和聚类保留性能 。该算法将对整合不断增长规模的单细胞多组数据集越来越有用。 该研究以「使用在线学习的迭代单细胞多组学集成」(Iterative single-cell multi-omic integration using online learning)为题发表在《自然生物技术》(Nature Biotechnology)杂志上。 众所周知,**是由细胞组成的。然而,令人惊讶的是,科学家们仍在尝试确定组成我们的器官并有助于我们健康的各种细胞。 长期以来,细胞类型的定性特征包括形态学、细胞表面蛋白的存在或缺失以及广泛的功能。 最近,高通量单细胞测序技术使研究人员能够描述多种分子模式,包括基因表达,染色质可及性和DNA甲基化。整合不同的单细胞数据集为全面和定量定义离散细胞类型和连续细胞状态提供了巨大的机会。 然而,目前的单细胞数据集成并非旨在集成多种模式或无法扩展为海量数据集。此外,现有方法都不能在不从头开始重新计算的情况下合并新数据。  Welch说:「我们在之前发表的LIGER方法[1]的核心部分扩展了非负矩阵分解方法,开发了一个在线学习算法——在线集成非负矩阵分解(iNMF)算法。该算法可解决以上限制,允许对不同组学技术生成的单细胞数据集进行可扩展和迭代的集成。」 iNMF的示意图:将输入的单细胞数据集联合分解为共享的(W)和特定于数据集的(Vi)元基因以及相应的元基因表达水平或细胞因子负荷(Hi)。这些元基因和细胞因子负载量提供了细胞「身份」的定量定义,以及其在生物学环境中的变化方式 在线iNMF两个重要优点的是:(1)通过小批量多次循环数据来集成大型单细胞多组数据集;(2)集成持续到达的数据集,训练期间的任何时候都无法使用整个数据集。  研究表明在线学习可用于单细胞数据集成的三种不同场景。 高效收敛而不失准确性  Welch说:「我们的技术允许任何拥有计算机的人都可以对整个生物体进行分析。这正是该领域发展的方向。」  在实验中,研究人员评估了在线iNMF算法在成年小鼠皮层数据集上的收敛性,该数据集包含来自额叶皮层的156,167个细胞和来自后皮层的99,186个细胞。在线iNMF算法在训练集和保留测试集上的收敛速度都比以前的批处理iNMF算法快。在线iNMF在不同生物学背景下的其他几个数据集上也表现出卓越的性能。 在线iNMF算法所产生的可视化在质量上与批处理iNMF非常相似,表明几乎相同的数据集对齐方式和对所有三个数据集合的原始聚类结构的准确保留。 所需时间和内存少 在线iNMF使用更少的时间和内存即可产生最先进的单细胞数据集成结果。 研究人员从同一只成年小鼠的额叶和后叶皮质数据中抽取了5个不断增大的数据集(从10, 000到255, 353个细胞)。将在线iNMF与批处理iNMF以及两种最新的单细胞数据集成方法进行基准测试。结果表明在线iNMF所需的运行时间不会随数据集大小的增加而大幅增加,并且存储每个微型批处理所需的内存量与单元总数无关。整体上,在线iNMF是最快的方法。 此外,在线iNMF算法使用的内存远远少于其他任何方法,内存使用量主要由mini batch大小决定。 可扩展性 为了证明在线iNMF的可扩展性,研究人员在大量前人研究的数据集上进行了验证,比如小鼠器官发生细胞图谱(MOCA)等。 「由于在线iNMF一次只能处理一个mini batch,我们的方法允许通过互联网而不是从磁盘流处理数据集。」Welch说,「为了演示此功能,我们创建了一个HDF5文件,其中包含鼠标皮质数据集(255,353个细胞),将文件保存在远程服务器上,然后直接通过Internet读取mini batch。以这种方式处理皮质数据集大约需要18分钟,而使用本地磁盘读取大约需要6分钟。」 无需从头开始 Welch解释说,「我们的新方法允许将新数据集添加到现有数据集中,而无需重新处理旧数据集。」 「这对于越来越多地生成数百万个细胞集至关重要。」Welch说。「今年,已经有五到六篇论文具有200万个或更多的单元,而仅用于存储原始数据所需的内存量远比任何人在他们的电脑上拥有的要多。」 Welch将在线技术比作Facebook和Twitter之类的社交媒体平台进行的连续数据处理,这些平台必须处理用户不断生成的数据,并为人们的订阅提供相关的帖子。「在这里,我们在世界各地的实验室进行着实验并发布其数据,而不是人们写推文。」  这一发现有可能大大提高其他「雄心勃勃」的项目效率,如**图谱和**细胞图谱。Welch说:「了解身体细胞的正常相互作用是了解它们如何在疾病中出错的第一步。」参考文献:[1]Welch, J. D. et al. Single-cell multi-omic integration compares and contrastsfeatures of brain cell identity,https://pubmed.ncbi.nlm.nih.gov/31178122/论文链接:https://www.nature.com/articles/s41587-021-00867-x参考内容:https://pubmed.ncbi.nlm.nih.gov/31178122/转载https://www.jiqizhixin.com/articles/2021-05-10-4
  • [中间件课堂] TVM编译机器学习到 WASM 和 WebGPU
    TLDRTVM 深度学习编译器对 WASM 和 WebGPU 的支持。实验表明,TVM 的 WebGPU 后端在将模型部署到 Web 时可以接近原生 GPU 性能。在这里插入图片描述引论计算是现代机器学习应用的支柱之一。引入 GPU 以加快深度学习工作量,大大提高了进步速度。鉴于部署机器学习无处不在的需求日益增长,浏览器成为部署智能应用程序的自然场所。虽然 TensorFlow .js 和 ONNX .js是将机器学习引入浏览器的现有努力,但 Web 版本和本地版本在性能上仍然存在非同小的差距。众多原因之一是缺乏对 Web 上的 GPU 的标准和执行访问。WebGL 缺乏重要的功能,如计算着色器和通用存储缓冲器,这些功能是高性能深度学习所必需的。WebGPU 是下一代 Web 图形的即将推出的标准,有可能显著改变这种状况。与最新一代图形 API(如 Vulkan 和 Metal)一样,WebGPU 提供一流的计算着色器支持。为了探索在浏览器中使用 WebGPU 进行机器学习部署的潜力,增强了深度学习编译器 Apache(孵化)TVM,以针对 WASM(用于计算启动参数和调用进入设备启动的主机代码)和 WebGPU(用于设备执行)。初步结果是相当积极的-第一次,可以部署机器学习应用程序在网络上,同时仍然接近本地性能的GPU。机器学习编译器
  • [技术干货] 【PyTorch】多GPU并行训练DistributeDataParallel(Linux版)
    前言常见的多GPU并行的方法有model parallel 和 data parallel两种,这里主要讲的是data parallel:并行训练数据,相当于增大了batch_size.主要需要注意的几点:    数据集如何在不同的设备间分配    误差梯度如何在不同的设备间通信    BatchNormalization如何在不同的设备间同步(使用会提升一点,但是会降低一点并行速度)一、DataParalled和DistributeDataParallel    DataParalled只能用于单机多卡,而DistributeDataParallel可以用于单机多卡,多机多卡    单机情况下通常DataParalled要慢于DistributeDataParallel二、多GPU训练常见启动方式    torch.distributed.launch: 代码少,启动速度快(用的多)    注意: 如果开始训练后,手动强制终止程序,有小概率会出现进程没有杀掉的情况,最好看下GPU占用情况。# 其中nproc_per_node为并行GPU的数量python -m torch.distributed.launch --nproc_per_node=2 --use_env train_multi_gpu_using_launch.py    torch.multiprocessing: 代码多点,速度慢点,但是拥有更好的控制和灵活性(这里不讲)三、torch.distributed.launch代码讲解3.1、main中添加了几个新的变量注意: 这里一般只需要手动选择syncBN即可,后面三个参数不要动,系统会自动选择    # 是否启用SyncBatchNorm BN在多个GPU上同步    parser.add_argument('--syncBN', type=bool, default=True, help="同步BatchNormalization")    # 不要改该参数,系统会自动分配    parser.add_argument('--device', default='cuda', help='device id (i.e. 0 or 0,1 or cpu)')    # 开启的进程数(注意不是线程),不用设置该参数,会根据nproc_per_node自动设置    parser.add_argument('--world-size', default=4, type=int,                        help='number of distributed processes')    parser.add_argument('--dist-url', default='env://', help='url used to set up distributed training')3.2、初始化各进程环境# 初始化各进程环境init_distributed_mode(args=args) def init_distributed_mode(args):    # 使用python -m torch.distributed.launch --nproc_per_node=2 --use_env train_multi_gpu_using_launch.py指令    # --use_env这个参数,他就会在我们os环境中(os.environ)存入RANK、WORLD_SIZE、LOCAL_RANK    if 'RANK' in os.environ and 'WORLD_SIZE' in os.environ:        # 多机多卡:WORLD_SIZE代表使用几台机器,RANK代表第几台机器,LOCAL_RANK代表某台机器上第几块GPU设备        # 单机多卡:WORLD_SIZE代表有几块GPU,RANK=LOCAL_RANK代表哪块GPU        args.rank = int(os.environ["RANK"])        args.world_size = int(os.environ['WORLD_SIZE'])        args.gpu = int(os.environ['LOCAL_RANK'])    elif 'SLURM_PROCID' in os.environ:  # 一般不执行        args.rank = int(os.environ['SLURM_PROCID'])        args.gpu = args.rank % torch.cuda.device_count()    else:  # 一般不执行        print('Not using distributed mode')        args.distributed = False        return    args.distributed = True    torch.cuda.set_device(args.gpu)    args.dist_backend = 'nccl'  # 通信后端,nvidia GPU推荐使用NCCL    print('| distributed init (rank {}): {}'.format(        args.rank, args.dist_url), flush=True)    # 创建进程组(重要)    # backend:通信后端  init_method:使用默认(env://) world_size:几块GPU  rank:当前进程处于哪块GPU    # 注意:对于不同的进程而言,它的world_size是相同的,但是rank是不相同的    dist.init_process_group(backend=args.dist_backend, init_method=args.dist_url,                            world_size=args.world_size, rank=args.rank)    dist.barrier()  # 等待每一块GPU都运行到这个地方之后再接着往下走  3.3、调整学习率学习率要根据并行GPU的数量进行倍增,这里方法不一定,有很多种这里暴力增加,直接乘以GPU个数# 学习率要根据并行GPU的数量进行倍增  world_size = GPU数量args.lr *= args.world_size # 也可以写成这样args.lr *= max(1., args.world_size * args.batch_size / 64)3.4、在第一个进程中进行打印和保存等操作 if rank == 0:  # 在第一个进程中打印信息,并实例化tensorboard        print(args)        print('Start Tensorboard with "tensorboard --logdir=runs", view at http://localhost:6006/')        tb_writer = SummaryWriter()        if os.path.exists("./weights") is False:            os.makedirs("./weights")     3.5、DistributedSamplerDistributedSampler: 给每个rank(gpu)对应的进程分配训练的样本索引 train_sampler = torch.utils.data.distributed.DistributedSampler(train_data_set) val_sampler = torch.utils.data.distributed.DistributedSampler(val_data_set) 
  • [技术干货] 机器学习经典算法
    经典算法所谓“工欲善其事必先利其器”,要解决问题,就要有好的算法。Scikit-Learn库中的几种经典机器学习算法:一、K最近邻(KNN)这个算法思路特别简单,就是随大流。对于需要贴标签的数据样本,他总是会找几个和自己离得最近的样本,也就是邻居,看看邻居是什么标签。如果他的邻居中的大多数样本都是某一类样本,他就认为自己也是这样一类样本。参数k,就是邻居的个数,通常是3,5,7,等不超过20的数字。在机器学习算法中,常用的距离计算公式包括欧式距离和曼哈顿距离所以,KNN算法的结果和K值的取值有关系,要注意的是,KNN要找的邻居都已经是“站好队的人”,也就是已经正确分类的对象。下面进行实战:对心脏病数据的进行推断客户是否有心脏病:1.导入数据:import numpy as np # 导入NumPy数学工具箱import pandas as pd # 导入Pandas数据处理工具箱df_heart = pd.read_csv("heart.csv")  # 读取文件df_heart.head() # 显示前5行数据2.查看患病个数:import matplotlib.pyplot as pltimport seaborn as sns #导入seaborn画图工具箱sns.countplot(x="target", data=df_heart, palette="bwr")plt.show()   3.对某些特征转换为数值类型的哑变量:a = pd.get_dummies(df_heart['cp'], prefix = "cp")b = pd.get_dummies(df_heart['thal'], prefix = "thal")4.划分训练集和测试集:# 构建特征和标签集y = df_heart.target.valuesX = df_heart.drop(['target'], axis = 1)from sklearn.model_selection import train_test_split # 拆分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2,random_state=0)5.进行特征缩放:# 进行特征缩放from sklearn import preprocessingscaler = preprocessing.MinMaxScaler()X_train = scaler.fit_transform(X_train)X_test = scaler.transform(X_test)    =6.模型训练:from sklearn.neighbors import KNeighborsClassifier # 导入kNN算法k = 5 # 设定初始K值为5kNN = KNeighborsClassifier(n_neighbors = k)  # kNN模型kNN.fit(X_train, y_train) # 拟合kNN模型y_pred = kNN.predict(X_test) # 预测心脏病结果from sklearn.metrics import (accuracy_score, f1_score, average_precision_score, confusion_matrix) # 导入评估标准print("{}NN 预测准确率: {:.2f}%".format(k, kNN.score(X_test, y_test)*100))print("{}NN 预测F1分数: {:.2f}%".format(k, f1_score(y_test, y_pred)*100))print('kNN 混淆矩阵:\n', confusion_matrix(y_pred, y_test))   =7.寻找最佳K值# 寻找最佳K值f1_score_list = []acc_score_list = []for i in range(1,15):    kNN = KNeighborsClassifier(n_neighbors = i)  # n_neighbors means k    kNN.fit(X_train, y_train)    acc_score_list.append(kNN.score(X_test, y_test))    y_pred = kNN.predict(X_test) # 预测心脏病结果    f1_score_list.append(f1_score(y_test, y_pred))index = np.arange(1,15,1)plt.plot(index,acc_score_list,c='blue',linestyle='solid')plt.plot(index,f1_score_list,c='red',linestyle='dashed')plt.legend(["Accuracy", "F1 Score"])plt.xlabel("K value")plt.ylabel("Score")plt.grid('false')plt.show()kNN_acc = max(f1_score_list)*100print("Maximum kNN Score is {:.2f}%".format(kNN_acc)8.结论当K=3时,F1分数达到89.86%,虽然K=7、8时也能达到88%,但是此时的F1分数不如k=3高。KNN算法在寻找最佳邻居时,要将余下所有的样本都遍历一遍,以确定谁和她最近,因此,如果数据量特别大,他的计算成本还是比较高的。=
  • [技术干货] 求推荐机器学习的视频
    求推荐机器学习的视频
  • [互动交流] 求推荐机器学习的视频
    求推荐机器学习的视频
  • [行业动态] 专家解惑 | 关于华为云盘古大模型,你想问的都在这里~
    4月25日,华为云发布盘古系列超大规模预训练模型,包括30亿参数的全球最大视觉(CV)预训练模型,以及与循环智能、鹏城实验室联合开发的千亿参数、40TB训练数据的全球最大中文语言(NLP)预训练模型。其中,盘古NLP大模型由华为云、循环智能和鹏城实验室联合开发,具备领先的语言理解和模型生成能力:在权威的中文语言理解评测基准CLUE榜单中,盘古NLP大模型在总排行榜及分类、阅读理解单项均排名第一,刷新三项榜单世界历史纪录;总排行榜得分83.046,多项子任务得分业界领先, 向人类水平(85.61)迈进了一大步。外界对盘古大模型充满了好奇,在华为开发者大会(Cloud)期间,参与大模型开发的两位华为云专家回答了以下几个大家关心的问题。谢凌曦博士专访 Q:作为一个开发者,请问这些预训练模型的易用性如何?使用成本有多高?谢凌曦:预训练模型设计的目的就是为了让大家降低使用成本。模型的预训练过程,成本是比较高的,但这个成本不需要开发者来承担。而在使用这些大模型的时候,它本身的易用性会使得使用成本进一步降低,达到一个比较合适的水平。比如说,我们会开发出一些比较通俗易懂的Pipeline,如果你是有一定基础的开发人员,你可以从我们的Pipeline当中去做更多的定制化的开发,更好地去释放我们预训练模型的能力。如果你只是一个AI开发小白,想用大模型去做AI简单的开发,我们也会给你更加通俗易懂的界面,让大家能够用一些拖拉拽的方式使用盘古大模型。总体来讲,大家在使用预训练模型的时候,计算时长、调参所需要重复的代价等都会被降到很低,总体来讲是对开发者非常友好的。Q:对于新入门计算机视觉的人来说,需要掌握什么哪些知识才能快速进入到学习和研发中?谢凌曦:人工智能、计算机视觉,经过几十年的发展,到现在已经拥有很庞大的知识体系。如果一个初学者想要把这些东西都了解以后再开始做研究,效率会稍微有点低。我给大家的建议是,你在学习过程当中,可以先找准一个问题。刚开始的时候,这个问题可能是相对初级的问题,但一定有具体的场景。比如想做弱监督学习,一般就是遇到某个实际的问题,它确实需要弱监督算法。但是这个时候我是不是一定要掌握全监督才能去做弱监督呢?并不是这样的。你可以先去查阅一些资料,了解当前的弱监督学习方法,它的基线是什么,它的前沿在哪里。然后你就可以开始做一些简单的实验。实验的过程当中,一般会遇到一些困难或者一些疑惑。解决这些困难和疑惑的过程,一般就会把你引导到它的基础,比如说全监督到底是怎么做的。当你有了更多基础以后,回过头来,也会发现你对当前做的算法有了一个更好的理解。所以我的建议是大家可以找一本机器学习、计算机视觉这类介绍比较深入的教材去看。但是不要局限于这个教材:一边做具体的课题,一边去学习知识,效率会比较高。张晓鹏博士专访Q:盘古CV大模型有哪些成功的落地?跟业界相比处在什么位置?  张晓鹏:视觉预训练CV大模型,结合相关流程化开发,已经在华为内部以及其他合作项目上,有100+成功落地,这些方向涵盖了各行各业,包括工业视觉、网络审查、零售商超,以及医疗等场景,都获得了一些相较于之前不使用预训练大模型更高的结果。在某些场景上,比如刚才提到的遥感影像分割,我们通过设计针对遥感影像的预训练算法,在没有增加额外标注代价的情况下,达到了最多12%的分割精度提升。还有另外一个比较有意思的现象,我们使用超大规模图像进行的预训练模型具有更好的可迁移性,即直接把这样一个模型,迁移到了工业质检的缺陷上进行推理,我们非常欣喜地发现,我们在下游数据集上没有进行任何微调,但是在工业缺陷检测上,获得了比之前我的模型不停地高度的优化,甚至利用下游的数据微调更好的结果,这个结果基本上会高出3到4个百分点。这个启发我们,模型数据一旦够多,其实它的泛化能力能够获得更好的保障。第二,我们是国内最早做视觉预训练大模型的公司之一。在国外是Facebook和谷歌从2019年开始在图像上做了一些应用。我们视觉预训练模型大概从2019年底的时候就开始了,通过自研的一些列改进算法,我们首次在基于imagNet 的无监督预训练模型线性分类精度上达到了全监督基线的水平,同时在小样本学习上大大领先现有技术,这些都是业界领先的成果。Q: 华为的预训练是采用什么类型数据和学习任务?大模型如何保证端侧性能? 张晓鹏:针对视觉图像不同角度,以及不同场景的变化,我们采取的方法非常简单。一,我们可能有海量数据集,这个数据集规模已经达到了亿级甚至十亿级这样的规模,我们相信这个海量的数据集,它能够建模,我们实际场景图像的方方面面。另外一个,我们采取了什么样的学习方式。其实它的一个核心思想,就是2019年开始,比较火的基于全局的对比度自监督学习方法。当然我们在这上面做了很多改进。包括如何来利用弱标签信息,如何把全局的信息拓展到局部来更好建模局部相关关系。同时也会呼应刚才提到的,如何处理不同视角,不同尺度图像问题,怎么来让它进行高效的建模,这里面就是让它进行不同的数据增强,我们在预训练算法里面,集成了十余种数据增强方法,让它通过不同的数据增强,使得整个模型具有针对不同数据增强的不变性。到目前为止,我们在一个大模型,搭载模型蒸馏、抽取以及行业大模型,我们现在已经适配了大概十余种预训练模型。而这十余种模型都是通过我们一个大模型的抽取,蒸馏所得到的,它在相应的行业上,得到了非常大的精度提升。同时也极大的减少了标注代价以及模型迭代周期。Q:华为的预训练模型是如何结合不同行业知识,解决标注数据大的问题?张晓鹏:举一个我们在HDC Cloud上发布的国网电力智能巡检的例子,这就是非常典型的利用盘古CV大模型解决行业知识。在国网电力巡检模型开发的过程中,它有海量的数据,标注非常困难,我们做了什么呢?通过我们的视觉预训练算法,在海量的巡检数据上进行预训练,这个预训练是利用了无人机巡检的数十TB,上百万规模的数量,进行预训练,它的预训练可以看到我们非常多的数据,它的内在分布。我们的大模型,模型参数越大,也看了更多的数据,所以说它能够更好的建模无人机巡检过程中的图片的细微差异。利用我们的视觉预训练大模型,它能够提供更好的表征以后,因为它的缺陷和正常样本的表征能力更强,我们在标注代价上,基本上减少了80%以上,这一块整个在人力上是一个非常大的提升。除了减少标注,我们一个模型可以适配我们电力行业一百多种缺陷,从而让模型迭代周期大大减少,整个迭代效率大概提升了10倍,我们在每次迭代过程中反馈给人需要标注的整体的工作量就会越少,通过这两种模式,我们实现了在电力行业方面,利用我们视觉预训练模型,极大的提升了我们的开发效率。
  • [其他] 什么时候该改变开发/测试集和指标
    你已经学过如何设置开发集和评估指标,就像是把目标定在某个位置,让你的团队瞄准。但有时候在项目进行途中,你可能意识到,目标的位置放错了。这种情况下,你应该移动你的目标。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005556taswqyoyrj2eqgpx.png) 我们来看一个例子,假设你在构建一个猫分类器,试图找到很多猫的照片,向你的爱猫人士用户展示,你决定使用的指标是分类错误率。所以算法和分别有3%错误率和5%错误率,所以算法似乎做得更好。 但我们实际试一下这些算法,你观察一下这些算法,算法由于某些原因,把很多**图像分类成猫了。如果你部署算法,那么用户就会看到更多猫图,因为它识别猫的错误率只有3%,但它同时也会给用户推送一些**图像,这是你的公司完全不能接受的,你的用户也完全不能接受。相比之下,算法有5%的错误率,这样分类器就得到较少的图像,但它不会推送**图像。所以从你们公司的角度来看,以及从用户接受的角度来看,算法实际上是一个更好的算法,因为它不让任何**图像通过。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005607d15qaiccp9gqu5o0.png) 那么在这个例子中,发生的事情就是,算法A在评估指标上做得更好,它的错误率达到3%,但实际上是个更糟糕的算法。在这种情况下,评估指标加上开发集它们都倾向于选择算法,因为它们会说,看算法A的错误率较低,这是你们自己定下来的指标评估出来的。但你和你的用户更倾向于使用算法,因为它不会将**图像分类为猫。所以当这种情况发生时,当你的评估指标无法正确衡量算法之间的优劣排序时,在这种情况下,原来的指标错误地预测算法A是更好的算法这就发出了信号,你应该改变评估指标了,或者要改变开发集或测试集。在这种情况下,你用的分类错误率指标可以写成这样: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005630bk9h6ywpoasetnik.png) 是你的开发集例子数,用表示预测值,其值为0或1,这符号表示一个函数,统计出里面这个表达式为真的样本数,所以这个公式就统计了分类错误的样本。这个评估指标的问题在于,它对**图片和非**图片一视同仁,但你其实真的希望你的分类器不会错误标记**图像。比如说把一张**图片分类为猫,然后推送给不知情的用户,他们看到**图片会非常不满。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005643xs0x0johesopqolp.png) 其中一个修改评估指标的方法是,这里(与之间)加个权重项,即: 我们将这个称为,其中如果图片不是**图片,则。如果是**图片,可能就是10甚至100,这样你赋予了**图片更大的权重,让算法将**图分类为猫图时,错误率这个项快速变大。这个例子里,你把**图片分类成猫这一错误的惩罚权重加大10倍。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005652clkfyjfot32zvupj.png) 如果你希望得到归一化常数,在技术上,就是对所有求和,这样错误率仍然在0和1之间,即: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/0056583kaknx9nd6kwkit4.png) 加权的细节并不重要,实际上要使用这种加权,你必须自己过一遍开发集和测试集,在开发集和测试集里,自己把**图片标记出来,这样你才能使用这个加权函数。 但粗略的结论是,如果你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。这是定义评估指标的其中一种可能方式(上述加权法)。评估指标的意义在于,准确告诉你已知两个分类器,哪一个更适合你的应用。就这个视频的内容而言,我们不需要太注重新错误率指标是怎么定义的,关键在于,如果你对旧的错误率指标不满意,那就不要一直沿用你不满意的错误率指标,而应该尝试定义一个新的指标,能够更加符合你的偏好,定义出实际更适合的算法。 你可能注意到了,到目前为止我们只讨论了如何定义一个指标去评估分类器,也就是说,我们定义了一个评估指标帮助我们更好的把分类器排序,能够区分出它们在识别**图片的不同水平,这实际上是一个正交化的例子。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005712ypbnskixlii6qepi.png) 我想你处理机器学习问题时,应该把它切分成独立的步骤。一步是弄清楚如何定义一个指标来衡量你想做的事情的表现,然后我们可以分开考虑如何改善系统在这个指标上的表现。你们要把机器学习任务看成两个独立的步骤,用目标这个比喻,第一步就是设定目标。所以要定义你要瞄准的目标,这是完全独立的一步,这是你可以调节的一个旋钮。如何设立目标是一个完全独立的问题,把它看成是一个单独的旋钮,可以调试算法表现的旋钮,如何精确瞄准,如何命中目标,定义指标是第一步。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005719uetung2iasfbguh5.png) 然后第二步要做别的事情,在逼近目标的时候,也许你的学习算法针对某个长这样的成本函数优化,,你要最小化训练集上的损失。你可以做的其中一件事是,修改这个,为了引入这些权重,也许最后需要修改这个归一化常数,即: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005808wbjzyodtdoyci2ln.png) 再次,如何定义并不重要,关键在于正交化的思路,把设立目标定为第一步,然后瞄准和射击目标是独立的第二步。换种说法,我鼓励你们将定义指标看成一步,然后在定义了指标之后,你才能想如何优化系统来提高这个指标评分。比如改变你神经网络要优化的成本函数。 在继续之前,我们再讲一个例子。假设你的两个猫分类器和,分别有用开发集评估得到3%的错误率和5%的错误率。或者甚至用在网上下载的图片构成的测试集上,这些是高质量,取景框很专业的图像。但也许你在部署算法产品时,你发现算法看起来表现更好,即使它在开发集上表现不错,你发现你一直在用从网上下载的高质量图片训练,但当你部署到手机应用时,算法作用到用户上传的图片时,那些图片取景不专业,没有把猫完整拍下来,或者猫的表情很古怪,也许图像很模糊,当你实际测试算法时,你发现算法表现其实更好。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/0057554r28aohcmtmtnkjz.png) 这是另一个指标和开发集测试集出问题的例子,问题在于,你做评估用的是很漂亮的高分辨率的开发集和测试集,图片取景很专业。但你的用户真正关心的是,他们上传的图片能不能被正确识别。那些图片可能是没那么专业的照片,有点模糊,取景很业余。 所以方针是,如果你在指标上表现很好,在当前开发集或者开发集和测试集分布中表现很好,但你的实际应用程序,你真正关注的地方表现不好,那么就需要修改指标或者你的开发测试集。换句话说,如果你发现你的开发测试集都是这些高质量图像,但在开发测试集上做的评估无法预测你的应用实际的表现。因为你的应用处理的是低质量图像,那么就应该改变你的开发测试集,让你的数据更能反映你实际需要处理好的数据。 但总体方针就是,如果你当前的指标和当前用来评估的数据和你真正关心必须做好的事情关系不大,那就应该更改你的指标或者你的开发测试集,让它们能更够好地反映你的算法需要处理好的数据。 有一个评估指标和开发集让你可以更快做出决策,判断算法还是算法更优,这真的可以加速你和你的团队迭代的速度。所以我的建议是,即使你无法定义出一个很完美的评估指标和开发集,你直接快速设立出来,然后使用它们来驱动你们团队的迭代速度。如果在这之后,你发现选的不好,你有更好的想法,那么完全可以马上改。对于大多数团队,我建议最好不要在没有评估指标和开发集时跑太久,因为那样可能会减慢你的团队迭代和改善算法的速度。本视频讲的是什么时候需要改变你的评估指标和开发测试集,我希望这些方针能让你的整个团队设立一个明确的目标,一个你们可以高效迭代,改善性能的目标。
  • [其他] 开发集和测试集的大小
    在上一个文章中你们知道了你的开发集和测试集为什么必须来自同一分布,但它们规模应该多大?在深度学习时代,设立开发集和测试集的方针也在变化,我们来看看一些最佳做法。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005301siugokwyanbfvkuo.png) 你可能听说过一条经验法则,在机器学习中,把你取得的全部数据用70/30比例分成训练集和测试集。或者如果你必须设立训练集、开发集和测试集,你会这么分60%训练集,20%开发集,20%测试集。在机器学习的早期,这样分是相当合理的,特别是以前的数据集大小要小得多。所以如果你总共有100个样本,这样70/30或者60/20/20分的经验法则是相当合理的。如果你有几千个样本或者有一万个样本,这些做法也还是合理的。 但在现代机器学习中,我们更习惯操作规模大得多的数据集,比如说你有1百万个训练样本,这样分可能更合理,98%作为训练集,1%开发集,1%测试集,我们用和缩写来表示开发集和测试集。因为如果你有1百万个样本,那么1%就是10,000个样本,这对于开发集和测试集来说可能已经够了。所以在现代深度学习时代,有时我们拥有大得多的数据集,所以使用小于20%的比例或者小于30%比例的数据作为开发集和测试集也是合理的。而且因为深度学习算法对数据的胃口很大,我们可以看到那些有海量数据集的问题,有更高比例的数据划分到训练集里,那么测试集呢? 要记住,测试集的目的是完成系统开发之后,测试集可以帮你评估投产系统的性能。方针就是,令你的测试集足够大,能够以高置信度评估系统整体性能。所以除非你需要对最终投产系统有一个很精确的指标,一般来说测试集不需要上百万个例子。对于你的应用程序,也许你想,有10,000个例子就能给你足够的置信度来给出性能指标了,也许100,000个之类的可能就够了,这数目可能远远小于比如说整体数据集的30%,取决于你有多少数据。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005311rf4cp58uehroiok3.png) 对于某些应用,你也许不需要对系统性能有置信度很高的评估,也许你只需要训练集和开发集。我认为,不单独分出一个测试集也是可以的。事实上,有时在实践中有些人会只分成训练集和测试集,他们实际上在测试集上迭代,所以这里没有测试集,他们有的是训练集和开发集,但没有测试集。如果你真的在调试这个集,这个开发集或这个测试集,这最好称为开发集。 不过在机器学习的历史里,不是每个人都把术语定义分得很清的,有时人们说的开发集,其实应该看作测试集。但如果你只要有数据去训练,有数据去调试就够了。你打算不管测试集,直接部署最终系统,所以不用太担心它的实际表现,我觉得这也是很好的,就将它们称为训练集、开发集就好。然后说清楚你没有测试集,这是不是有点不正常?我绝对不建议在搭建系统时省略测试集,因为有个单独的测试集比较令我安心。因为你可以使用这组不带偏差的数据来测量系统的性能。但如果你的开发集非常大,这样你就不会对开发集过拟合得太厉害,这种情况,只有训练集和测试集也不是完全不合理的。不过我一般不建议这么做。 总结一下,在大数据时代旧的经验规则,这个70/30不再适用了。现在流行的是把大量数据分到训练集,然后少量数据分到开发集和测试集,特别是当你有一个非常大的数据集时。以前的经验法则其实是为了确保开发集足够大,能够达到它的目的,就是帮你评估不同的想法,然后选出还是更好。测试集的目的是评估你最终的成本偏差,你只需要设立足够大的测试集,可以用来这么评估就行了,可能只需要远远小于总体数据量的30%。 所以我希望本视频能给你们一点指导和建议,让你们知道如何在深度学习时代设立开发和测试集。接下来,有时候在研究机器学习的问题途中,你可能需要更改评估指标,或者改动你的开发集和测试集,我们会讲什么时候需要这样做。
总条数:5192 到第
上滑加载中