游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

创建一个机器学习算法,用不到30行的Python代码预测NC

  在Python和一些很棒的库的帮助下,你可以构建自己的机器学习算法,用不到30行代码预测NCAAB比赛的最终得分。本内容旨在解释创建机器学习应用程序所需的所有步骤,包括设置,数据检索和处理,训练模型以及输出最终预测。
  建立
  先决条件
  要学习本教程,强烈建议您对Python有基本的了解,但不是必需的。了解导入模块,获取和设置变量,字典和实例化类的目的是一个很好的基础,而使用Pandas和sklearn的经验是一个巨大的优势。
  开发要求Python3:下面的所有代码也适用于Python2,但是建议使用Python3。pandas,sportsreference,sklearn:我们所需的依赖关系,将在下面进一步详细说明。它们可以通过PIP安装,具体如下:pipinstallpandassklearnsportsreference活动网络连接:对于大多数人来说这可能不是问题,但是您最终使用的开发环境必须能够访问外部Web才能从我们的代码下载数据集。
  构建应用程序
  现在我们已经设置了开发环境,让我们开始构建实际的应用程序。
  完整算法importpandasaspd
  fromsportsreference。ncaab。teamsimportTeams
  fromsklearn。ensembleimportRandomForestRegressor
  fromsklearn。modelselectionimporttraintestsplit
  FIELDSTODROP〔awaypoints,homepoints,date,location,
  losingabbr,losingname,winner,winningabbr,
  winningname,homeranking,awayranking〕
  datasetpd。DataFrame()
  teamsTeams()
  forteaminteams:
  datasetpd。concat(〔dataset,team。schedule。dataframeextended〕)
  Xdataset。drop(FIELDSTODROP,1)。dropna()。dropduplicates()
  ydataset〔〔homepoints,awaypoints〕〕。values
  Xtrain,Xtest,ytrain,ytesttraintestsplit(X,y)
  parameters{bootstrap:False,
  minsamplesleaf:3,
  nestimators:50,
  minsamplessplit:10,
  maxfeatures:sqrt,
  maxdepth:6}
  modelRandomForestRegressor(parameters)
  model。fit(Xtrain,ytrain)
  print(model。predict(Xtest)。astype(int),ytest)
  对于那些喜欢直接跳到代码的人来说,上面的要点是我们将要使用的最终程序。如果您已经熟悉pandas和sklearn,可以跳到本内容的底部,了解该程序的运行方式以及如何扩展它以获得更高的精度,更快的运行时间和更高的可用性。对于其他想要进一步解释此代码的人,请继续阅读下面的内容,了解每个步骤的目的。
  导入依赖项importpandasaspd
  fromsportsreference。ncaab。teamsimportTeams
  fromsklearn。ensembleimportRandomForestRegressor
  fromsklearn。modelselectionimporttraintestsplit
  几乎每个Python程序都以一个import部分开头,其中包含了必需的依赖项,以便稍后在模块中使用。对于这个项目,我们需要导入我们之前安装的以下包:pandas:一个流行的Python数据科学库,我们将用它来存储和操作我们的数据集。sportsreference:一个免费的Python运动API,我们将用它来从NCAAB比赛中提取统计数据。sklearn:Python最大的机器学习库之一,包括几个预先制定的算法,例如:我们将要使用的算法RandomForestRegressor,以及帮助数据创建传输路径的有用工具,例如traintestsplit自动创建训练和测试数据集。
  初始化数据集datasetpd。DataFrame()
  teamsTeams()
  forteaminteams:
  datasetpd。concat(〔dataset,team。schedule。dataframeextended〕)
  没有数据集,任何机器学习应用程序都不完整。为了帮助我们预测NCAAB比赛的最终得分,我们想要创建一个包含所有单个比赛统计数据的数据集(例如投篮命中率,失误数和盖帽次数,篮板百分比等等),然后我们可以使用这些数据来预测这些因素如何与最终得分相关联。
  要创建此数据集,我们首先需要初始化一个空PandasDataFrame,我们将用它来存储我们的最终数据。接下来,我们从sportsreference中初始化Teams类,其中包含当前或最近一个赛季NCAA男子组的每个篮球队的信息,并允许我们轻松地逐个团队获取统计数据。
  在提取数据之前,我们需要通过运行forteaminteams:每个迭代对应于联盟中一个独特的团队。sportsreference公开每个团队的日程安排和技术统计信息,使我们能够编写类似于team。schedule。dataframeextended的代码,它可以收集每支球队在当前赛季参加的每场比赛的统计信息。该dataframeextended属性返回一个pandasDataFrame,其中每个索引对应不同比赛的位置。
  在收集每个比赛的技术统计信息后,我们希望将其添加到我们的整个数据集中,以便我们拥有一个单一的数据源。这可以通过将我们现有的数据集与DataFrame包含当前团队完整的技术统计信息的本地数据连接起来来完成。通过用结果连接覆盖我们现有的数据集,我们确保数据集不仅包括最近团队的信息,还包括之前查询过的所有团队的信息。
  预处理数据集FIELDSTODROP〔awaypoints,homepoints,date,location,
  losingabbr,losingname,winner,winningabbr,
  winningname,homeranking,awayranking〕
  。。。
  Xdataset。drop(FIELDSTODROP,1)。dropna()。dropduplicates()
  ydataset〔〔homepoints,awaypoints〕〕。values
  Xtrain,Xtest,ytrain,ytesttraintestsplit(X,y)
  在我们的数据集完成构建之后,我们需要从我们不想使用的数据集中过滤掉一些类别(或者通常在机器学习中调用的特征)即那些string类型(或分类)类似的:球队名称或日期和地点。有时,基于字符串的特征可能是有用的,例如在预测房屋价值的情况下,并且确定列为海滨的房产具有比分类为内陆的房产更高的价值。虽然此特征对房价预测很有用,但大多数机器学习算法无法处理基于字符串的数据。替换这些类型的特征的一种方法称为独热编码它使用唯一的特征列自动替换类似的分类值,其中属于该特征的每个索引的值都为1,否则为0。通过将类别更改为1和0,机器学习算法能够更有效地处理这些特征。
  对于我们的目的,我们会简单地删除这些特征,因为他们要么数量太多,要么是无意义的,或者会引入偏差。因此,我们将删除所有这些类别。
  在这一点上,有些人可能会奇怪,为什么要在要删除的字段列表中包含homepoints以及awaypoints。这两个字段是我们想要预测的最终输出(通常称为标签),因此我们不希望它们包含在我们的主要特征中,而应该专门为我们的输出标签保留它们。
  执行上面的代码,我们首先从数据集中删除所有不需要的特征,并将修剪后的输出保存为X。删除不需要的特征后,我们接下来删除所有不完整数据的行。如果sportsreference。com上的数据没有正确填充,或者球队没有执行特定的统计操作,例如没有封盖投篮或罚球,有时会发生这种情况。我们可以通过两种方法处理这些不完整的数据,方法是设置缺失值和设置数(例如类别的平均值或默认为零)或删除任何无效的行。因为无效单元格的数量对于我们的数据集来说非常少,所以我们将删除任何具有不完整数据的行,因为它不会影响我们的最终结果。
  因为一场比赛需要两个参赛队伍,所以每个比赛都会有另一个版本,因为在这种比赛中参赛队伍一次是主队,一次是客队。这只是污染我们的数据集,并没有提供任何值,因为行完全相同,所以我们想要删除任何其他版本并保留每场比赛的一个实例。为此,我们只需添加dropduplicates()到数据集中以确保每个索引都是唯一的。
  接下来,我们需要创建输出标签,用于在训练时确定模型权重的准确性,并测试最终算法的精度。我们可以通过创建一个仅包含home和away点的两列向量来生成我们的标签,并将结果设置为y。
  最后,通常的做法是将数据集拆分为训练和测试子集,以确保训练后的模型是准确的。理想情况下,我们希望使用大约75的数据集进行训练,并保留剩余的25进行测试。应随机采用这些子集以防止模型偏向于特定的信息集。在使用训练数据集训练模型之后,应该针对测试数据集运行模型以确定模型的预测性能并查看其是否过度拟合。
  幸运的是,sklearn有一个内置函数,可以为我们创建这些子集。通过将我们的X和y输入traintestsplit,我们能够检索具有预期拆分的训练和测试子集。
  创建和训练模型parameters{bootstrap:False,
  minsamplesleaf:3,
  nestimators:50,
  minsamplessplit:10,
  maxfeatures:sqrt,
  maxdepth:6}
  modelRandomForestRegressor(parameters)
  model。fit(Xtrain,ytrain)
  现在我们的数据集已经处理完毕,是时候创建和训练我们的模型了。我决定在这个例子中使用一个随机森林回归器,因为与标准决策树相比,该算法的易用性和相对准确性,以及它在减少过度拟合方面的良好处理,使其易于使用。随机森林算法创建多个决策树,并将随机性注入到特征权重中。然后,这些决策树被组合以创建森林(因此是决策树的随机森林),该森林用于训练、验证或推断时的最终分析。该算法同时支持分类和回归,使其对各种应用程序非常灵活。
  分类确定属于固定数量类别的输出标签,例如学生在测试中收到的字母等级(A,B,C,D或F)。只能有五个类别(或分类),因此模型只会尝试将输出放入这五个类别中的一个。另一方面,回归决定了输出标签可能具有不确定范围的值,例如房价。虽然房价往往会有一系列标准房价,但房价没有限制,任何正数都是有效的。由于篮球比赛的最终得分在技术上可以是任何正数(或零!),我们希望使用回归。
  在我们构建和训练模型之前,我们首先需要设置一些超参数。超参数是在训练之前输入到模型的参数,并且影响它的构建和优化方式。对于机器和深度学习领域的大多数初学者来说,这些参数往往是最大的障碍,因为这些设置通常没有完美的价值,如果有的话,它可能会让人难以确定应该放什么。
  一般的经验法则是坚持使用这些超参数的默认值,然后一旦模型被训练并完成,并且您能够测试它,就开始使用反复试验方法调整值,直到您满意为止。对于我们的模型,我选择了六个不同的超参数,并找到了这组特定的值,以提供性能和准确性之间的最佳平衡。
  在选择超参数之后,终于可以创建我们的模型了。首先,我们需要实例化之前导入的RandomForestRegressor类并包含我们的超参数。通过使用(parameters),我们将字典的键值对扩展为类的命名参数,该参数在功能上与以下内容相同:modelRandomForestRegressor(bootstrapFalse,
  minsamplesleaf3,
  。。。
  maxdepth6)
  现在我们的模型已经实例化了,剩下的就是训练它。通过包含RandomForestRegressor的fit方法,sklearn使这一点变得非常简单,因此我们只需要用输入特征和相应的输出标签运行它。这个方法运行在适当的位置,所以我们的模型变量现在将自动指向一个经过训练的模型,我们可以使用它进行预测!
  输出结果print(model。predict(Xtest)。astype(int),ytest)
  我们的应用程序的最后一步是针对我们的测试子集运行预测,并将它们与我们的预期结果进行比较。
  运行应用程序
  最后,我们一直在等待的那一刻!我们的应用程序现已完成,我们剩下的就是运行算法。
  请注意,该程序可能需要很长时间才能完成,因为大部分处理时间用于为DivisionICollegeBasketball中的所有350多个团队构建数据集。如果您只是希望看到一个有效的算法,您可以通过在数据连接行之后的第一个循环中添加break语句来尽早停止数据创建。
  一旦程序完成,它将输出类似于以下内容的东西(我减少了行数以节省空间):(array(〔〔86,86〕,
  〔71,71〕,
  〔78,77〕,
  〔74,72〕,
  〔90,81〕,
  。。。
  〔52,66〕,
  〔68,65〕〕),
  array(〔〔83,89〕,
  〔71,73〕,
  〔80,76〕,
  〔77,72〕,
  〔92,84〕,
  。。。
  〔46,73〕,
  〔66,65〕〕))
  此输出包含两个部分:预测输出和预期输出。从array(〔〔86,86〕到〔68,65〕〕)是预测的输出,同时array(〔〔83,89〕到〔66,65〕〕)为实际的数据。如前所述,第一列指的是主队的的预期得分,第二列是主队的预计得分。
  预测输出中的行也与预期输出中的行匹配,因此〔86,86〕与〔83,89〕相关等等。如果我们比较列表,我们会发现我们的预测并不太糟糕!在大多数情况下,预计得分仅与实际结果相差几分。

javaNIO学习笔记(四)javaNIO学习笔记(四)JavaNIOSelectorselector(选择器)作为JavaNIO的一个组件,它可以检查一个或多个JavaNIO通道实例,并确定哪些通……奇瑞高质量SUV,搭载1。6T发动机,高配不到15万近日,新款星途追风正式上市了,目前22款共有5款在售车型,售价区间为10。9913。99万元。新车对外观和配置做了一些调整升级,整体的造型更加时尚。下面就随小编了解一下这款车吧……印度Redmi10新机发布!小米5G新机入网!RedmiBuRedmi10Prime新机发布SK数码科技昨天,Redmi10在印度举行了发布会。其该款新机被命名为Redmi10Prime新机。据悉,该机整体外观酷似此前发布的……Kafka系统与ELK的整合(八)我们使用ApacheFlume来采集数据到Kafka中进行存储,最后在ELK中展示出来。到http:flume。apache。org的地址下载ApacheFlume,下载后部署……天玑920真的不值得购买?红米Note11Pro其实没有那么现在手机厂商的竞争是越来越激烈了,特别是千元机这个价位段,因为千元机的市场比较庞大,选择购买的人数较多,但如何在千元机上突出自己的亮点非常重要。上半年,红米Note10系列就搭……黑科技?比特斯拉只差自动变道?现如今,智能科技早已经渗透到人们生活的方方面面,不论是智能家居、智能手机亦或是智能汽车,已然成为消费者追捧的对象。智能技术很显然已经成为了21世纪最火的标签之一。在汽车行业,自……耳机还能当充电宝,极简主义不二之选南卡N2S真无线蓝牙耳机购买理由随着消费观念的转变,我越发喜欢更实用的生活方式,就是极简!从前出门的背包里放满了东西,不仅是负重的问题,而且用的时候也要翻翻找找,很是麻烦,现在则是能省则省,简简……宝马电动车大小王炸发布!iX能跑630公里,i4零百加速3。车东西(公众号:chedongxi)作者James克克编辑晓寒车东西6月2日消息,今早8点,宝马举行了线上发布活动,正式发布了iX和i4的量产版车型,并宣布开……三星GalaxyS21FE发布在即,GalaxyA73镜头模虽然三星GalaxyS22系列手机的发布时间有望再度提前,不过仍然存在数月的空档期,而根据三星尚未发布的新品型号来看,三星GalaxyS21FE无疑拥有最高的关注度。而在近日,……阿里云向财政部投诉成立,采购项目被责令重新招标2月10日,财政部发布第一千五百二十三号至第一千五百三十二号10则信息公告。其中涉及的问题有:供应商提供虚假材料谋取中标;代理机构违反了财政部74号令第二十六条和财库〔2012……恒驰5现身工信部公示清单,广汽本田累计产销达900万辆第一财一汽丰田全新电动轿车将搭载比亚迪刀片电池近日,有消息称,一汽丰田新能源汽车项目一期已经于2021年底建设完成,并于2022年12月底,计划完成三款新车排产,这三款车型包括……家里安装了新的宽带,大部分电视和电影不能观看需要再次购买VI这个解决起来很简单,两种方法,不花钱,不买设备,任何一种都可以完美解决不买会员看大片的目的。01媳妇喜欢看电视剧,曾经我觉得一个视频会员一年也没几个钱,就先后买了三个。但……
社区团购动了谁的蛋糕?生意不好不能甩锅社区团购都在说社区团购抢了小贩的生意,而我觉得社区团购是在方便你我他,现在对社区团购讨伐、封杀难道不是在卸磨杀驴吗?在进入2020年之前,你有听说过社区团购吗?或许有,但用的人多……老牌电源厂商航嘉入局65W氮化镓口红电源在我的认知里,口红电源这个形态是联想最先推出的,之后就有越来越多的品牌跟进,基本上所有的口红电源都有氮化镓技术加持,几乎都是最高65W的输出功率,今天带来的这款65W氮化镓口红……加拉克斯在奥地利推出来自瑞士的大型在线百货公司加拉克斯今天在奥地利上市。拥有50万种产品,它将立即成为一家广泛的商店。它希望成为奥地利五大在线零售商之一。该公司目前活跃在瑞士、德国和奥地利。……施耐德电气将快速兼容Matter智能家居标准施耐德电气表示:致力于Matter的长期成功指定第一款符合Matter标准的智能家居设备,其Wiser生态系统可在规范批准后立即连接Matter呼吁更多开源、可互操作且与供应商……每次10分钟跟我学Python(第二次)大家好!我是幻化意识流,简称意识流。现在我们继续Python的学习。工欲善其事必先利其器!我们搭积木得需要一张桌子和积木,这个桌子就是我们的编程环境,现在我们先来获……智能建筑的4个WiFi设计技巧ByAndrewFroehlich寻求在其物业中部署无线物联网设备和传感器的业主和运营商希望从WiFi连接性、性能和安全性的角度仔细关注他们的需求。随着无线设备、类型和用……全新长安CS75申报图曝出,换装V型格栅,车尾四排气,运动感作为一款国内热销的紧凑SUV,长安CS75的改款必定是备受瞩目的,哪怕是车企保密措施做得再好,但在上市前总要在工信部申报,因此作为一次中期大改款车型,在工信部申报后的第一时间后……金九银十优惠福利不停华为智慧屏刷新你的音画体验临近中秋和国庆,你打算度过这个美好的假期呢?或许是趁着假期回到老家陪爸妈吃顿团圆饭,还是约上三五挚友一起聊聊最近的情况?其实在中秋假期,如果家中有华为智慧屏加持,宅在家里也能玩……为何机油增多乳化出现在本田丰田的车上,但大众却没有问题?眼看冬季就要来临了,相信东北地区不少入手本田以及丰田车型的车主对于机油增多、乳化都开始担心起来了,而且在昨天,后台有位粉丝就专门咨询这一问题。他是长春的一位丰田陆放车主,本月中……iPhone13Pro坏消息,120HZ高刷有限制?现在苹果新款iPhone手机iPhone13系列手机就要发布跟大家见面了,苹果官方已经宣布会在9月14日(北京时间9月15日)举行秋季新品发布会,到时iPhone13系列手机将……让天更蓝云更白,智能家居绿色出行2017年10月19日,香格里拉计划新能源战略重磅出世,长安将实现全谱系产品电动化的目标明确到了2025年;2018年8月24日,北斗天枢智能化战略强势发布,又进一步明确了20……CLTC循环工况与NEDC循环工况有什么区别?谁更接近实际续福特MustangMachECLTC最高续航619公里、特斯拉Model3CLTC续航675公里越来越多的车型改用CLTC循环工况来计算车辆的续航里程。可以发现,通过CL……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网