TowardsDataScience 博客中文翻译 2021(七百四十三)
本文面向可能考虑使用深度学习算法的数据科学家,并希望了解更多关于在您的工作中实施这些类型的模型的缺点。深度学习算法有很多好处,功能强大,炫耀起来也很有趣。然而,有一些时候你应该避免它们。我将在下面讨论你应该停止使用深度学习的时间,所以如果你想更深入地研究深度学习,请继续阅读。总的来说,在你深入研究深度学习之前,要意识到有些时候你应该出于各种原因避免使用它。当然,有更多的理由避免使用它,但也有使用它
当锤子遇见舞蹈
新冠肺炎疫情早期德国和瑞典的社会距离政策展开的鹰眼比较
盖尔·马塞尔在 Unsplash 上拍摄的照片
新冠肺炎疫情促使全球各国政府建立了一个非药物干预(NPI)的军火库。除了接种疫苗,NPI 是公民必须遵循的社区缓解策略,以防止冠状病毒的传播。无论 NPIs 是作为纯粹的建议(例如,经常洗手)还是强制性措施(例如,晚间宵禁),我们可能都同意这些干预措施已经从根本上改变了我们近两年的日常生活方式。在我的上一篇文章中,我以德国和瑞典的单一政策为例,证明了政府干预的影响,这两个国家对疫情问题的反应截然不同。但是这些策略总体上如何发挥作用呢?现有的研究暗示,各国政府何时以及以何种节奏推出 NPI 存在相当大的差异(Hale 等人,2020 年)。受到这些发现的启发,我接下来提出了以下问题:
德国和瑞典在疫情早期针对每日 COVID 病例动态制定严格的社会和物理隔离措施方面有何不同?
我们为什么要关心?在新冠肺炎·疫情事件之后,我们只有直觉。进入疫情将近两年,我们拥有的是数据,大量的数据。将政策部署时间表与灾后的案例动态联系起来,为政府提供了宝贵的经验,以便在今后制定更多基于证据的应对战略。
设置
我收集了 2020 年 2 月下旬至 11 月下旬的数据,以分析疫情早期阶段应对新冠肺炎病例动态的政策动员。
收集流行病学数据。我进入可公开访问的 OxCOVID19 数据库(Mahdi et al .,2020)查询在感兴趣的时间跨度内,这两个国家累计的确诊新冠肺炎病例数。(在我的上一篇文章中阅读更多关于这个库的信息)。由于事件数据是以累积计数的形式返回的,所以我首先将所有值分解成每日数字。这项工作揭示了瑞典 88 例连续 0 日病例中的可疑部分。通过对来自 worldometer 的案例报告进行抽查,我将这些数据点暴露为缺失值。此外,20 例每日病例数为负值的情况发出了危险信号。我求助于欧洲疾病预防控制中心(ECDC,2021)的事件数据来解决缺失和错误的值。这对于防止此类记录扭曲任何数据操作至关重要。
从这条弯路中得到的启示是双重的:首先,即使是通过最著名的来源提供的数据,也不能让我们在一头扎进分析之前摆脱严格验证的任务。第二,如果快速浏览一下可能会给我们带来“有机”替代价值,我们应该抵制采用更复杂估算策略的诱惑。为什么?数据驱动的插补减轻了痛苦,但考虑到算术合成值是未披露现实的纯近似值,因此无法提供解决方案。
在消除了所有提到的不一致之后,另一个问题浮现在脑海中。某个新冠肺炎案例被确认的那一天,不一定是这个事件进入数据库的那一天(官僚主义是我们最大的敌人,数据工程师也有周末……)。为了消除报告延迟的影响,我将案例数转换为 7 天移动平均数。值得一提的是,重新采样到更高的粒度级别(例如,从几天到几周或几个月)为我们提供了一种驯服噪声的替代方法。然而,我故意决定不采用这种方法,因为我的目标是在尽可能低的粒度级别上探索案例策略动态。最后,我将观察结果归一化为每 10 万公民的每日病例数,以排除瑞典和德国之间总体人口规模的巨大差异(德国的居民人数大约是瑞典的 8 倍)。
收集策略数据。世界卫生组织的 PHSM API 被查询以获取两国在一段时间内采取的公共卫生和社会措施的数据(世卫组织,2021)。鉴于 OxCOVID19 将政策数据预先分为 8 个粗粒度类别,PHSM 提出了一个更细粒度的分类方案。使用分类属性 who_category、 who_subcategory 、 who_measure 和 enforcement ,我将这些政策划分为严格的社会和物理距离措施。此外,属性 prev_measure_number 和following _ measure _ number允许我追溯策略之间的父子依赖关系。这对于更深入地描述两个国家所采取的政策部署方案非常有价值。从这个意义上来说,任何没有在 prev_measure_number 中输入的策略都有资格作为新引入的干预。相反,与 prev_measure_number 相关联的任何策略都是现有策略的后代。
图一。 针对常态化每日案例的 7 天移动平均线的政策部署。
我创建了一个 2 乘 2 的小倍数图,以框定我对德国和瑞典每日案例数相关的政策部署动态的分析。底部两个类似甘特图的图表显示了一段时间内这两个国家政策干预的开始和持续时间。颜色编码区分没有前任的父策略和代表前一干预的修改、扩展或重新引入的子策略。为直观起见,在任何给定时间点有效的母公司和子公司保单的数量以堆叠条形图的形式投射到上部两个象限,描绘了两个国家/地区在可用日期的 7 天移动平均案例数。
下面的两个图表(图 1,支线剧情 3 和 4)描绘了一个对比鲜明的叙述。在最初的几个案例被记录下来后,德国政府发布了一系列的 68 条强制性的距离政策,是瑞典出台的数量的 4 倍多。事实上,在德国当局实施的所有强制距离政策中,有 54%在观察范围结束时仍然有效。两次干预措施出台之间的时间间隔非常短,平均不到 4 天,而大范围的平均政策运行时间为 101 天,这成为德国政策动员机制的主导主题。总之,视觉线索和汇总统计暗示了一个非常系统和充分的政策反应。联邦政府结构通常被认为是迅速遏制危机的协调障碍。根据这一分析,我敢说德国的分权行政结构可能最终会支持快速、全面地推出这些干预措施。
这些发现与从瑞典相应图表中得出的推论形成鲜明对比。截至 9 月底,瑞典所有 16 项强制距离政策都已逐步取消。这些政策不仅出台的时间间隔更长,平均为 11.53 天,而且平均持续时间仅为 42 天。支持这些观察的相关线图(副曲线 2)显示,当每日病例数变化时,瑞典几乎不改变齿轮。相比之下,德国的政策组合在最初的快速增长之后稳步扩大,几乎与病例数的增加完全同步,直到 3 月中旬事件首次达到峰值(子情节 1)。即使新确诊病例仍然很少,德国也维持了许多父母和子女政策的 2:1 混合。
统计分析
使用皮尔逊相关系数,我将有效保单的数量与每日确诊病例和死亡人数相关联,以从统计角度观察已确定的动态。简单地说,相关系数量化了两个不同变量之间线性关系的强度。接近 0 的值暗示弱关系,而接近绝对 1 的值暗示两个变量接近完美同步。正系数意味着两个变量朝同一个方向移动,而负系数表示朝相反方向移动。值得一提的是,变量之间线性关联的假设仍然是对现实的天真简化,但这没关系。在解释结果时,我们对这些潜在假设的认识很重要。最重要的是,相关系数是易于计算和概念上可访问的关联度量,便于我们对潜在的更复杂的关系得出初步结论。
表 1。 现行保单数与每日确诊病例/死亡数的皮尔逊相关系数(归一化 7 天移动平均数)。
表 1 中展示的相关性分析结果证实了瑞典和德国政策部署方案如何适应日常案例动态的推断差异。将德国的有效保单数量与标准化每日病例数和死亡数相关联,得出的相关系数分别为 0.33 和 0.36。具有证明统计显著性的低 p 值的系数对。我们可能会哀悼这些系数的数量级。然而,研究结果应该放在国家政策制定的背景下。当考虑到官僚主义的障碍无疑会限制一个民主的、联邦政府组织的政策日程每天重新调整的灵活性时,已确定的相关性被认为是实质性的。
同样的分析得出瑞典的相关系数相对较小,不显著,为-0.1。这些发现再一次与强调瑞典政府极简政策反应的文献产生共鸣,瑞典政府选择自愿的自我监管,而不是通过明确的立法行动来缓解(Capano 等人,2020 年)。然而,将有效保单的数量与标准化的每日死亡人数相关联产生了 0.3 的统计显著相关系数。这一有点令人惊讶的发现可能源于瑞典随着累计死亡人数的上升而从较宽松的政策干预转向更严格的政策干预的趋势(Cheibub 等人,2020 年)。
这一切意味着什么?
疫情政策回应中发现的差异与 Cheibub 等人(2020)的发现相呼应,即国家民主政体对疫情的回应方式绝不相似。这些异质性背后的驱动力仍然存在争议。我借助霍夫斯泰德的文化维度理论来解释德国和瑞典之间的明显差异。这一理论将不确定性规避的概念定义为“(……)一种文化的成员感受到模糊或未知情况威胁的程度,并创造了试图避免这些情况的信念和制度” (Hofsede-insights.com,2020)。
瑞典在满分 100 分中获得 29 分,被描绘成一个容忍不确定性的国家,它更愿意在一套最基本的必要规则下引导其社会。另一方面,德国在 100 分中得了 67 分,它依赖于规划和对不确定性的系统预测。两张甘特图(图 1,子图 3 和 4)为这一推理提供了令人信服的支持。德国在疫情早期发布了一套密切关注的父母政策,随着时间的推移,新的父母和子女政策不断增加,这些政策不仅在很大程度上得到维持,而且扩展到大量的社会距离政策中。虽然这可以被理解为一种彻底缓解不确定性的行为,以对抗未知比例的疫情,但德国维持平均父母与子女政策比率为 2.23 比 1 的事实(图 1,子曲线 1)描绘了政策干预的持续而可控的扩张。相比之下,瑞典 0.53 比 1 的比率是反应主义方法的缩影(图 1,副曲线 2)。最终,瑞典的政策机构在所有主题化的维度上都有所欠缺——政策持续时间、部署频率和迄今为止的总干预量——这暗示了一个高信任度社会所特有的政策足迹,它无视过度的政府控制。
限制
我的分析采用了两个外部数据源来解决 OxCOVID19 数据库中的不足,并获得了将手头的研究问题“数据化”所需的额外变量。然而,整合来自多个来源的数据意味着整合不同的信息分类法、数据收集和预处理方法,这些只是在数据控制者的网站上暂时披露。由于我的分析受制于几个关于数据来源和方法的未知因素,因此必须像往常一样,对调查结果有所保留。
虽然该分析确定了活动策略数量和每日案例计数之间的显著相关性,但我提醒您不要将相关性误认为是因果关系。这一分析为读者提供了一个描述性的切入点,让他们见证不同的社会距离政策策略在起作用。然而,这种便利是以忽略许多因素为代价的,这些因素很容易将我们推入错误的因果归属。例如,在夏季的几个月里,其他因素,如不受分析控制的天气,可能会促进社交距离。这种情况提醒我们不要把社交距离政策的数量贴上降低每日病例数背后的独立驱动因素的标签。我在我的上一篇文章中简要地谈到了省略变量偏差的概念,以防这个小小的反思引起你的兴趣。
结论
我们首先提出以下问题:德国和瑞典在疫情早期针对每日 COVID 病例动态制定严格的社会和物理隔离措施方面有何不同? Capano 等人(2020)称疫情为“自然实验”,在此过程中,政府对同一问题表现出明显不同的政策反应。我的分析揭示了德国和瑞典政府在动员起来对抗疫情方面的巨大差异。与此同时,我得出的结论是,这些应对措施是国家领导、政府组织以及在全国范围内构想和部署政策的政治能力的复杂产物。
士气:这不是锤子或舞蹈,而是需要在国家和文化特殊性的背景下理解的新闻和发布之间精心制作的混合。但如果我们可以肯定地说一件事,它可能是这样的:一个答案,在什么情况下我们需要多少锤打和舞蹈不应该放弃把这个疫情提供给我们的数据进行测试的机会。
参考
Capano,g .,Howlett,m .,Jarvis,D. S. L .,Ramesh,m .,和 Goyal,N. (2020)。动员政策(能力)抗击新冠肺炎:理解国家反应的差异。政策与社会,39(3),1–24 页。https://doi.org/10.1080/14494035.2020.1787628
洪金元,朱耀杰,朱耀杰(2020)。权利与死亡:政府对疫情的反应。SSRN 电子杂志。【https://doi.org/10.2139/ssrn.3645410
t .黑尔、n .安格里斯特、a .彭斯瑞克、b .基拉、t .菲利普斯和韦伯斯特(2020 年)。政府对新冠肺炎的反应各不相同。Blavatnik 政府学院工作文件系列,32。www . bsg . ox . AC . uk/covidtracker % 0ah ttps://www . bsg . ox . AC . uk/research/publications/variation-government-responses-新冠肺炎
数据
ECDC (2021 年)。每日更新世界各国新报告的新冠肺炎病例。[数据集]。https://www . ecdc . Europa . eu/en/publications-data/download-todays-data-geographic-distribution-新冠肺炎-cases-worldwide
马赫迪、布拉什奇克、德洛特科、萨尔维、陈、T. S. T .、哈维和扎雷布斯基(2020)。OxCOVID19 数据库:更好理解新冠肺炎全球影响的多模态数据库。medRxiv。
世卫组织(2021 年)。PHSM:跟踪公共卫生和社会措施。【数据集&码书】。https://www . who . int/emergencies/diseases/novel-coronavirus-2019/phsm
产品特征与评论层次的情感分析:当部分比整体更有价值时
入门
由德克萨斯州奥斯汀西湖高中的 Aadit Barua 和 Josh Barua 制作。
主旨
我们开发并测试了一种简单的方法,用于从用户评论中提取关于产品或服务的个体特征的情感。动机是用户可能在他们的评论中提到多个特性,并且可能对这些特性持有不同甚至相反的意见。例如,客户可能喜欢一副耳机的音质,但不喜欢噪声消除功能。然而,对整个评论执行情感分析可能产生关于对个体特征的情感的误导或不正确的结果。因此,在假设用户表达他们的情感接近特征词的情况下,我们首先预处理文本以提取特征周围的词窗口,而不是通过情感分析器传递整个评论。使用跑鞋的评论,我们为每个特征情感分数建立了基础事实,并且表明与我们的方法相关联的误差显著小于通过使用整体评论获得的误差。
何必纠结于功能级的情绪?
情感分析在许多自然语言处理应用中扮演着重要的角色,包括推荐系统和理解消费者对品牌和产品的看法。评论通常涉及多个特征或属性。下面的表 1 提供了一些例子。
表 1:经常提及的产品特性
对完整评论进行情感分析是很常见的。然而,总体评论的情绪可能不会正确地反映对个别特征的情绪。考虑表 2 中显示的一些评论。特征词以粗体显示。
表 2:功能级别与总体情绪
在这些例子中,用户表达了对两个特征的相反意见,其结果是总体情感没有反映与任一特征相关联的正确情感。
特征级情感分析什么时候有用?
特征级情感分析在许多应用中是有用的。将消费者对产品特征的偏好作为输入的推荐系统可以使用针对个体特征的情感分数来做出更相关的建议。我们可以根据消费者对特定功能的感受(例如,两款智能手机的摄像头和电池质量),准确地比较产品。向公司提供详细的反馈以帮助改进其产品或服务取决于我们获得特征级情感的能力。例如,从酒店评论的情感分析中,我们可以告诉酒店管理层,消费者喜欢它的酒店。但是在特征级别执行分析可以提供这样的见解,即虽然客人对服务感到兴奋,但对便利设施的体验并不深刻。对第一个特征(服务)的非常积极的看法可能掩盖了对第二个特征(便利设施)的稍微消极的看法。
一种简单的无监督方法
可能有复杂的监督方法来提取特征级情感。然而,我们概述了一个简单的无监督方法。我们假设诸如形容词之类的带有情感的词很可能靠近特征词而不是远离它。表 3 中示出了三个评论、其中包含的特征、带有情感的单词以及特征和带有情感的单词之间的距离(单词的数量)。我们在计数中忽略停用词。 Stanford NLP 页面提供了一个常用停用词以及基本上表现类似停用词的单词的列表。
表 3:特征词和情感词之间的距离
为了提取特征词的情感承载词,我们建议提取特征词周围的词窗口,如图 1 所示。
图 1:围绕特征词的 3 个词的窗口
例如,考虑我们数据中的真实评论(我们在这个相当负面的评论中删除了品牌和产品名称):
“在 10 多双上面有数百英里的(品牌名称)后,我尝试了这些作为替代品。不幸的是,它们在舒适度和质量上倒退了一大步。总的来说,我发现(产品 1)比(产品 2)更窄,但 6 毫米的跌落感觉差不多。对于一双中性的鞋子来说,足弓支撑感觉真的很大,因为它们对我来说太窄了。我喜欢鞋面上添加的网格,但是,我发现(产品 1)在鞋前半部分的缓冲中有所欠缺。”
如果我们对用户对气垫的看法感兴趣,我们提取以下窗口大小为 3 的内容:
这种情绪被“缺乏”这个词抓住了。我们使用短语“发现缺少缓冲前半鞋的产品”作为无监督情感分析的 VADER 的输入。在一篇评论中多次提到一个特性也是可能的。在这种情况下,我们为给定评论的相同特征提取多个窗口。提取单词窗口的代码如下所示:
from nltk.tokenize import word_tokenize #import word_tokenize
limit = 3 #the number of words on either side of the feature word used to create the window
attribute = "cushion" #desired feature
reviews_list = ["I love the cushion, but hate the support.", "Even though the shoe was durable, it had very little cushion and made my feet sore after runs."] #list of product reviews
attribute_position_list = [] #list of positions where the feature word was found in each review
review_with_attribute_list = [] #list of review containing the feature wordfor review in reviews_list:
word_tokens = word_tokenize(review) #tokenizes each review
position = 0 #position in the review where the feature is found
for word in word_tokens: #for each word in the review
if(word.find(attribute)>-1):
attribute_position_list.append(position)
review_with_attribute_list.append(word_tokens)
position = position + 1index = 0 #keeps track of which review is being parsed
for review in review_with_attribute_list:
limited_sentence_list = [] #list of words within the window
for item in range(len(review)):
if(abs(item - attribute_position_list[index]) <= limit):
limited_sentence_list.append(review[item])
parsed_review = ' '.join(limited_sentence_list)
print(parsed_review)
index = index + 1
VADER 代码分享如下:
from nltk.sentiment.vader import SentimentIntensityAnalyzer
def get_sentiment(parsed_review): #passes the parsed review
sid = SentimentIntensityAnalyzer()
score = sid.polarity_scores(parsed_review)
compound = score.get('compound')
return compound #returns the sentiment score
测试我们的方法
我们使用一组跑鞋评论来测试我们的方法。首先,我们使用 VADER 来获得完整评论的情感分数。然后,我们使用上面的解析器提取特征词周围的词窗口。我们使用两个功能:缓冲和支撑。为每个特征提取的单词被用作 VADER 的输入。我们注意到特征情感之间的相关性是. 44(表 4),这不是特别高。结果,如表 4 所示,个体特征和总体情绪之间的相关性甚至更低,这表明总体情绪不会给我们一个用户对特定特征感觉如何的良好指示。
表 4:整个评论、特征 1 和特征 2 的情感之间的相关性
为了建立基础事实,我们手动阅读每篇评论,并对两个特征中的每一个进行评分。我们为每个特征计算两个均方根误差(RMSE)值:一个使用整个评论的基本事实分数和情感分数,另一个使用基本事实分数和特征级情感分数。我们设置的 RMSE 公式是:
表 5:使用整体评论和词窗进行情感分析的 RMSE 值
结论
情感分析是自然语言处理的一个关键要素,它的有用性依赖于它对顾客偏好的洞察。向公司提供有关其产品或服务的详细指导和建议的能力取决于我们在特征或属性层面进行情感分析的能力。我们在本文中演示了一个简单的方法。我们希望你能尝试更复杂的方法。也许 Peter Turney (2002)提出的提取词类二元模型和分析语义倾向的想法可以适用于我们的环境。也许 BIOES 标记方法可以以修改的形式应用。但是无论你做什么,玩得开心点!
参考文献
彼得·特尼,《竖起大拇指还是竖起大拇指?语义导向应用于评论的无监督分类。”arXiv 预印本 cs/0212032 (2002 年)。
何时避免深度学习
意见
以下是原因和时间…
纳丁·沙巴纳在Unsplash【1】上拍摄的照片。
目录
- 介绍
- 当你想简单地解释
- 当你可以使用其他算法时
- 当你有一个小的数据集和预算
- 摘要
- 参考
介绍
本文面向可能考虑使用深度学习算法的数据科学家,并希望了解更多关于在您的工作中实施这些类型的模型的缺点。深度学习算法有很多好处,功能强大,炫耀起来也很有趣。然而,有一些时候你应该避免它们。我将在下面讨论你应该停止使用深度学习的时间,所以如果你想更深入地研究深度学习,请继续阅读。
当你想简单地解释
因为其他算法存在的时间更长,所以它们有无数的文档,包括使可解释性更容易的例子和函数。这也是其他算法的工作方式。由于这个原因,深度学习可能会让数据科学家望而生畏,当你不确定如何向利益相关者解释时,使用深度学习算法可能会令人厌烦。
这里有 3 个例子,说明你在解释深度学习时会遇到困难:
- 当你想要描述你的模型的主要特征时——这些特征变成了隐藏的输入,所以你不知道是什么导致了某个预测的发生,如果你需要向利益相关者或客户证明为什么达到了某个输出,这可能更像是一个黑盒
- 当您想要调整学习率和批量大小等超参数时
- 当你想解释算法本身是如何工作的——例如,如果你要向利益相关者展示算法本身,他们可能会迷路,因为即使是简化的方法仍然难以理解
这里有 3 个例子,说明如何从非深度学习算法中解释上述相同的情况:
- 当你想解释你的主要特性时,你可以很容易地访问 SHAP 库,比如说,对于 CatBoost 算法,一旦你的模型被拟合,你可以简单地从
feat = model.get_feature_importance()
制作一个摘要图,然后使用summary_plot()
按特性名称对特性进行排序,这样你就可以向利益相关者(和你自己)展示一个不错的图
非深度学习模型的分级 SHAP 输出示例[3]。
- 作为一种解决方案,其他一些算法通过随机网格搜索或更结构化的集合网格搜索方法,使调整超参数变得非常容易。甚至有一些算法可以自行调整,因此您不必担心复杂的调整
- 解释其他算法的工作原理可能会容易得多,比如决策树,例如,你可以轻松地显示是或否,0/1 图表,显示导致预测的特征的简单答案,如是的,下雨了,是的,现在是冬天,将提供是的,天气将会变冷
总的来说,深度学习算法是有用和强大的,所以它们肯定有一个时间和地点,但也有其他算法可以替代,我们将在下面讨论。
当你可以使用其他算法时
卢卡·布拉沃在Unsplash【4】上拍摄的照片。
坦率地说,有一些算法可以很快给你一个很好的模型和很好的结果。其中一些算法包括线性回归、决策树、随机森林、XGBoost 和 CatBoost。这些是更简单的选择。
这里有一些例子,说明为什么你会想要使用非深度学习算法,因为你有这么多其他更简单的非深度学习选项:
- 它们可以更容易、更快速地设置,例如,深度学习可能需要您让您的模型添加连续、密集的层,并对其进行编译,这可能比简单地使用回归器或分类器并用非深度学习算法对其进行拟合更复杂、更耗时
- 我个人发现,这种更复杂的深度学习代码可能会导致更多的错误,如何修复它的文档可能会令人困惑或过时,不适用,而使用类似随机森林的算法,可以有更多易于理解的错误文档
- 深度学习算法的训练有时可能并不复杂,但当从一个端点进行预测时,可能会对如何提供预测值感到困惑,而一些模型,您可以简单地将值放在有序值的编码列表中
我会说,你当然可以尝试深度学习算法,但在你这样做之前,最好从一个更简单的解决方案开始。这取决于你训练和预测的频率,或者是一次性的任务。还有一些其他原因让你不想使用深度学习算法,比如当你有一个小数据集和小预算时,我们将在下面讨论。
当你有一个小的数据集和预算
通常,你可以在一家小公司或者一家初创公司担任数据科学家。在这种情况下,您可能没有太多的数据,也没有太多的预算。因此,你会尽量避免使用深度学习算法。有时,您甚至可以有一个只有几千行和几个要素的小数据集,您可以简单地在本地运行一个替代模型,而不是频繁地花费大量资金来维护它。
这里是你应该根据成本和数据可用性使用深度学习算法的时候:
- 小数据可用性通常是许多公司的情况(但并不总是如此),深度学习在具有大量数据的信息上表现更好
- 您可能正在执行一次性任务,因为模型只预测一次—并且您可以在本地免费运行它(并非所有模型都会在生产中频繁运行),就像一个简单的决策树分类器。在深度学习模型上投入时间可能不值得。
- 您的公司对数据科学应用感兴趣,但希望保持较小的预算,而不是从深度学习模型中执行昂贵的执行,而是使用带有早期停止轮次的基于树的模型,以防止过度拟合,缩短培训时间,并最终降低成本
我曾经提出过深度学习,但由于各种原因,它被否决了,而这些原因通常都是如此。但是,我不想完全劝阻某人使用深度学习,因为这是你在职业生涯中有时应该使用的东西,可以是你经常做的事情,或者主要取决于环境和你工作的地方。
摘要
总的来说,在你深入研究深度学习之前,要意识到有些时候你应该出于各种原因避免使用它。当然,有更多的理由避免使用它,但也有使用它的理由。最终还是要看你自己深度学习的利弊。
以下是不应使用深度学习的三种情况/原因:
* When You Want to Easily Explain* When You Can Use Other Algorithms* When You Have Small Dataset and Budget
我希望你觉得我的文章既有趣又有用。如果你同意或不同意避免深度学习的原因,请在下面随意评论。为什么或为什么不?作为一名数据科学家,你认为还有哪些原因应该避免使用深度学习?这些当然可以进一步澄清,但我希望我能够对深度学习有所启发。感谢您的阅读!
我不属于这些公司中的任何一家。
请随时查看我的个人资料、 Matt Przybyla 、和其他文章,并通过以下链接订阅接收我的博客的电子邮件通知,或通过点击屏幕顶部的订阅图标 的 ,如果您有任何问题或意见,请在 LinkedIn 上联系我。
订阅链接:https://datascience2.medium.com/subscribe
参考
[1]Nadine sha abana 在 Unsplash 上拍摄的照片,(2018)
[2]照片由马尔特·赫尔姆霍尔德在 Unsplash 上拍摄,(2021)
[3] M.Przybyla,来自非深度学习模型的排名 SHAP 输出的例子,(2021)
[4]Luca Bravo 在 Unsplash 上拍摄的照片,(2016)
何时使用套索回归
如果您正在处理大数据,LASSO 回归是您数据科学武库中的一个很好的工具。计算效率很高和同时执行变量选择和回归。那有多厉害?!在本文中,我们将讨论何时需要使用这个强大的工具对多元线性回归建模。
照片由迈克考克斯在 Unsplash。
1.你想要一个稀疏模型。
在多元线性回归中使用 LASSO 的第一种情况是当您想要一个稀疏模型时。实际上,稀疏模型可以采取多种形式。最“经典”的情况是,你有一大组变量,但其中只有一小部分是真正重要的。但情况并非总是如此。例如,所有的变量可能都很重要,但是在一个局部区域内,只有少数变量是必需的。例如,假设您有高光谱成像数据,这些数据的波长彼此高度相关。因为它们高度相关,所以你只需要在高度相关的集合中选择一个变量。基本上,这一个变量充当所有与其高度相关的变量的代表。最后,也有可能你的所有变量都很重要,但只有少数变量解释了大部分变异。
该图显示了 15 种不同的组织类型,基因从上到下排列。套索正则多项式分类器显示相对少量的基因是重要的(4,718 个基因中的 254 个),右边的条表示正系数,左边的条表示负系数。图片来自具有稀疏性的统计学习(2015)。
套索回归适用于稀疏模型,因为它是围绕“赌稀疏”原则建立的。本质上,这一原则表明,如果我们想有效地估计我们的参数,“真相”必须是稀疏的。
“使用在稀疏问题中表现良好的过程,因为没有过程在密集问题中表现良好。”
哈斯蒂,提布拉尼,&弗里德曼(2015)
然而,一些人认为“真相”本质上是密集的,我们的模型应该考虑到这一点。绝对是哲学辩论的话题!
2.n << p
当预测变量的数量远大于观测值的数量时,您会希望选择套索回归而不是多元线性回归。当 n < < p 时,这就是所谓的大 p ,小 n 的问题。这是非常典型的基因组数据。有了基因组数据,每个人都有成千上万个基因。这意味着,仅仅为了使 n 等于 p ,你就必须收集数千个样本。这种情况通常不会发生,因为这相当昂贵,而且需要做很多工作。这通常意味着你会留下一个大问题,小问题。
包含 1,000 个基因序列的微阵列数据。照片由国家癌症研究所在 Unsplash 上拍摄。
n < p 怎么了?本质上,如果真实的模型不是稀疏的,我们就没有足够的观测值来精确估计我们的参数。如果 n < p ,最小二乘法将失效,我们将无法获得唯一的估计值(Hastie,Tibshirani,& Wainwright,2015)。现在,如果我们假设稀疏性,或者,如果我们假设只有一小部分变量是重要的,我们可以使用 LASSO 将许多系数缩小到零,只留下大 p ,小 n 场景中的重要系数。
3.你有一些多重共线性。
最后,当您的模型中存在多重共线性时,套索回归非常有用。多重共线性意味着预测变量(也称为独立变量)并不那么独立。对于多元线性回归,这可能会导致系数发生显著变化,并影响模型的可解释性。幸运的是,由于 LASSO 内置的变量选择,它可以在不牺牲可解释性的情况下处理一些多重共线性。但是,如果共线性太高,LASSO 的变量选择性能将开始受到影响。如果有高度相关或共线的预测值,它将只选择其中一个。如果每次运行 LASSO 时得到不同的预测值,您将知道您的共线性是否过高。如果您确实发现您的数据有许多多重共线性,请尝试使用弹性网。这是岭回归和套索回归的混合,在多重共线性较高时效果很好。或者,你可以通过多次运行 LASSO 来破解它,每次运行都跟踪所有重要的预测因素。
多元线性回归是对大量数据进行建模的一个很好的工具,但是它也有其局限性。幸运的是,LASSO 回归是处理稀疏模型和大数据的一个很好的选择。我希望你有机会自己尝试套索!快乐造型!
参考
Hastie,T.J .,Tibshirani,R.J .,和 Friedman,J.H. (2001 年)。统计学习的要素:数据挖掘、推理和预测。纽约斯普林格。
t . j . hastie、r . j . TiB shirani 和 m . wain right(2015 年)。稀疏统计学习。佛罗里达州博卡拉顿 CRC 出版社。
原载于 2021 年 12 月 28 日【https://thatdarndata.com】。
何时使用可空的 NaN
当 NA 不为 False、False 为 False 且 NA 不为 Null 时的布尔值。
在 Unsplash 上由 Nerfee Mirandilla 拍摄的照片
对于 Pandas 中的布尔数据来说,NaN、Null、NA 和 bools 之间有着至关重要的区别——简要介绍何时以及如何使用它们。
**任务:**清理包含布尔值(真/假)的熊猫数据帧以优化内存。约束是将所有空值保留为空值,即不要将空值变为 False,因为这是一个有意义的变化。
**动作:**显式转换列 dtypes ,即使用 float32 代替 float64 节省内存,使用 bool 代替 object 。
**问题:**将选定的列转换为 bool 时,所有行的计算结果要么全为真,要么全为假,并返回一个令人头疼的问题。
要在布尔值中保留类似 null 的值,请用 pd 显式替换 null 值。NA 并将 dtype 设置为‘布尔型’而不仅仅是‘布尔型’—这就是布尔型数组。
**要点:**当源列包含空值或非布尔值,例如像 1.0 这样的浮点数时,应用 Pandas ‘bool’ dtype 可能会错误地将所有行评估为 True 。相反,用 pd 显式替换空值。NA 并将 dtype 设置为“boolean”而不仅仅是“bool”
该项目
在构建和部署应用程序时,我变得非常专注于让事情尽可能快地运行。为此,我最初开始大幅度地将 Pandas dtypes 设置为*、 布尔 或 浮动 32 ,只要有可能。然而,虽然我节省了大量内存,但我后来发现我的数据完整性受到了影响。*
继续阅读,学习如何修正和避免这种错误。
权衡
当强制一个列为 bool 数据类型时,几乎可以立即节省一半的内存。虽然这很诱人,但事情还有另外一面。当源数据不只有真/假值时,Pandas 将返回一些不想要但逻辑上正确的结果。
例如,假设在数据帧中有几个“标志”列,表示某种真/假组合。
*# unique values of columns in a DataFrame# col1 -> False True
[False True]# col2 -> True True
[nan True] # col3 -> True True
[nan 1.]*
在 col1 中,唯一的值只有 False 和 True——这是理想的,应用一个 dtype 的 bool 可以很好地工作。
在第二栏中,我们遇到了一个问题。虽然我们有一个真值,但是我们也有一个 nan 值。“南”代表熊猫“不是一个数字”,这是计算机知道那里应该什么都没有的一种方式。虽然我不会深入到逻辑地狱( TDS 已经在那里了),但应该足以说明将 col2 设置为 dtype bool 会将每一行评估为 True。这很糟糕,因为不应该为真的行现在为真,而应该为空的行现在有东西了。
在列 3 中,我们有与列 2 相同的问题,但是现在有一个浮点数 1。( 1。是电脑 1.0 的简称。与 col2 非常相似,在没有任何干预的情况下,Pandas dtype bool 将对该列求值为 True,如果我们以后按此标志进行过滤,就会出现问题。
失败的解决方案
要解决这种情况,您可以像我一样尝试用字典映射数据,然后将 dtype 设置为 bool。例如,如果 1。应该是真的,那就把它映射出来,然后忘掉它,对吗?没那么快。
*# a tempting but spurious solution
# given a dataframe as dfimport pandas as pd
import numpy as npkey = {'nan': np.nan,
1.: *True*} df['col1'] = df['col1].map(key)
df['col1'] = df['col1].astype(bool)# this will not work like you might think*
上面的代码片段不起作用的主要原因是它试图将字符串“nan”映射到一种特殊类型的 NaN 值——这永远不会起作用。可以肯定的是,如果你字面上把’ nan '作为一个字符串,字典映射返回 np.nan ,但是接下来呢?正如我们从 col3 例子中所知道的,它最终都是真值,我们又回到了起点。
解决方案设置
为了说明如何让 Nulls、nan 和 bools 为您工作,考虑一个示例表和通过 GitHub Gist 编写的代码,它用实际数据涵盖了到目前为止的问题。
如何看待空值的条件匹配
通常,我们可能会尝试测试 if 语句的等价性,但是由于很多原因,传统的条件语句不能处理空值,这些原因我不会在本文中讨论。
*a = 1
b = 1
if b == a:
print('this will work but not for NaNs')*
虽然听起来不可思议,布尔数组允许你在一个布尔列中携带两个以上的值。
可行的解决方案
相反,使用 isnull() 方法结合类似 np.where() 的方法来测试和查找数据。要替换数据,使用 pd。NA 而不是 np.nan 。接下来,在浮点 1.0 的情况下,我们可以嵌套第二个 np.where() 语句,将 1.0 映射为 True。最后,使用 dtype ’ boolean ‘而不是’ bool '来创建一个布尔数组。虽然听起来不可思议,布尔数组允许你在一个布尔列中携带两个以上的值。
结论
优化是神奇的,将 Pandas 对象转换成 bools 以节省内存是一个关键的组成部分。然而,如果不小心,结果可能是痛苦的。在本文中,我描述了在将 null 值保留为 pd.NA 的同时转换 boolean 或 True/False 数据的一些缺陷。
虽然具有两个以上值的可空布尔数组的概念可能看起来很奇怪,但它完全有效,可以帮助您充分利用多个世界的优势!
文件
感谢阅读!请鼓掌或关注我,继续关注我在编程、数据科学和人工智能方面的故事。
当“顶”是误导的时候
神经加速器通常以性能特征“TOPS”为特征,即每秒万亿次运算。但仅此还不够。了解这些加速器是如何工作的,以及在进行比较时还应该考虑什么,这一点很重要。
SpaceX 在 Unsplash 上拍摄的
内容列表
简介
什么是上衣?
通用还是专用?比较 –测量
–比较
我什么时候需要很多陀螺?
总结
补遗
介绍
人工智能的硬件加速器有很多名字。它们被称为神经加速器、AI 加速器、深度学习加速器、神经处理单元(NPU)、张量处理单元(TPU)、神经计算单元(NCU)等。所有这些都表示相同的东西:为矩阵运算而优化的电子设备,这是特别有效地计算人工神经网络所需要的。在下面的博客中,我们将坚持恩智浦的名称声明“NPU”。在前几年,主要是英伟达的 GPU 主导了人工智能(AI)领域。随着 AI 领域日益向边缘拓展(移动设备、工业端硬件等。),edge 产品的专用硬件组件已经开发了好几年了。这些主要集中在低精度计算(主要是整数)、现代数据流架构和最佳内存连接。
什么是上衣?
为了能够以简单的方式比较不同的 NPU 架构,创建了“每秒万亿次运算”(TOPS)这一指标。在专家中,该指标不被认为是最佳指标,但它用一个易于理解和可比的数字抓住了一个复杂的问题:我的芯片一秒钟可以进行多少次数学运算?这个数字可以用来快速比较不同的芯片。没有考虑操作的质量,甚至没有考虑更详细地涉及哪些操作。在许多情况下,芯片还专注于一个特定的任务,在那里它们可以调用它们的最大性能。因此,直接比较并不总是合理的。
在大多数情况下,top 用经典的“ResNet50”来衡量,有时用“MobileNet”架构来衡量。在应用中,ResNet50 现在经常被更现代的网络所取代。然而,它为比较提供了一个良好的基础。
通用还是专用?比较
在这一部分中,我们将比较两个 npu,以展示需要注意的地方。一个侧重于工业应用和“低顶点”,另一个侧重于高速图像分析和“高顶点”。首先,我们展示一些测量,然后讨论一些利弊。
图 1 带有 i.MX 8M Plus 的 phy board-Pollux[图片由作者提供]
—测量
phyBOARD-Pollux 单板计算机(图 1)是基于恩智浦 i.MX 8M Plus 四核处理器的工业板。i.MX 8M Plus 的 NPU 由恩智浦指定为 2.3 TOPS。然而,这本身并不能说明可以实现的推理时间。使用 ResNet50 对该 NPU 进行图像处理测试,结果每秒处理 60+帧(fps ),每张图像的平均推理时间为 16 毫秒(224×224 pxl);在相同分辨率下,MobileNetV1(图 2)每幅图像平均 6 毫秒,每秒 159 帧。恩智浦自己的测试显示,MobilNet 架构的推断时间约为 3 毫秒。
图 2 在 i.MX 8M Plus NPU 上使用 MobileNetV1 (224x224)的推理[图片由作者提供]
还有其他标有名义上更高顶点的神经加速器。我们将看看 Gyrfalcon 的 Lightspeeur 2803s(图 3),它可以提供高达 16.8 TOPS 的峰值。这导致使用图像输入分辨率为 448 x 448 pxl(来自他们的网站)的 MobilNet 的速率超过 100 fps。如果我们假设输入大小与 200.704 pxl 和 50.176 pxl 的推断时间成线性比例,我们可以直接比较 i.mx8 M Plus 的大约 40 fps 和 gyrfalcon 的 100 fps,从而得到大约 60 fps 的增量。因此,TOPS 中 7.3 倍的差异导致 fps 中 2.5 倍的差异。
*对于 Gyrfalcon,在撰写本报告时无法进行测量(见附录)
接下来,我们将讨论两种芯片的不同之处。
—比较
将恩智浦的 i.MX 8M Plus 与 Gyrfalcon 的 Lightspeeur 2803s 进行比较,似乎很明显,Lightspeeur 在 TOPS 中明显优于 8M Plus。然而,当查看细节时,很明显不应仅根据 TOPS 来比较芯片,两者都有其合理的应用领域。
图 3 Gyrfalcon Lightspeeur 2803s [CC 许可]
TOPS 到 fps首先值得注意的是,推理速度仅快 2.5 倍,而 TOPS 是 7.3 倍。尽管我们不能肯定地说,但这似乎归结于集成到模块和/或测量应用代码中的芯片。芯片和嵌入式存储器之间的短连接对于避免数据传输瓶颈非常重要。
NPU-Model Integration
一般来说,i.MX 8M Plus 的一大亮点就是恩智浦提供的 eIQ 库。 eIQ 提供模型和 NPU 之间的无缝连接。eIQ 库支持 TensorFlow Lite 和 ONNX 模型,确保模型在嵌入式硬件上顺利、直接地实施。对于 eIQ ,例如 TensorFlow Lite 中的简单转换和量化足以向 NPU 提供模型。
Gyrfalcon 使用一个 MDK 和 SDK (模型和软件开发工具包)来实现模型,这更具挑战性(*见附录)。不应该低估一个简单的实现,因为模型的简单适应允许更多的时间用于应用程序和模型开发,从而在敏捷模式中实现更快的迭代。
提供用于模型转换的特殊 SDK/mdk 的一个问题是客户依赖于提供软件开发人员的分配和奉献。每个更新周期都依赖于它们;每次故障排除都必须由他们处理。可惜 SDK 尸体一次次出现。因此,软件越接近开源/社区解决方案,对个人开发者的依赖就越少。这是恩智浦 eIQ 库的一个优势,它非常接近 Google 的 NNAPI,直接使用 TF-Lite 和 ONNX 模型格式。
标准还是自有模型架构? 另一个区别是,i.MX 8M Plus 几乎支持当前所有的模型类型和模型架构。另一方面,Lightspeeur 2803s 专注于用于图像处理的卷积神经网络(CNN)。Lightspeeur 2803s 还仅支持三种最重要的模型架构:VGG、ResNet 和 MobileNet。这是三种常用的基础架构,但是这里忽略了适应性模型、现代架构以及其他类型的网络(例如,递归神经网络)。这种对 CNN 的关注使得 Lightspeeur 2803s 达到了最高的 top 数。
综合还是 PCIe? I . mx8 M Plus 的伟大之处还在于它作为片上系统(SOC)的集成,创造了一个“一体化”解决方案。因此,所有硬件组件直接共享存储器(直接存储器访问),并且不需要例如 CPU 和 NPU 之间的额外数据传输。这一点特别有趣,因为 i.mx8M Plus SOC 集成了其他几个非常特殊的硬件组件,如硬件图像预处理、图像和视频解码/压缩、原始传感器图像处理……这些组件可以直接集成到数据管道中,无需任何额外的数据传输。
gyr falcon 当然也可以设计成 SOC,但这需要大量的工作和专业知识才能完成。经典的 Gyrfalcon 是通过 PCIe 作为外部芯片添加的。这需要在开发阶段进行集成,并在推断阶段在硬件组件之间进行额外的数据传输。
目标市场是什么?
许多工业应用的决定性因素是 i.MX 8M Plus 的长期可用性。工业工厂中的边缘设备通常被期望在低维护和特殊条件下运行数年。在这里,Lightspeeur 2803s 更适合消费电子领域的应用,在正常的商业使用中,设备运行时间可以达到两到三年。Gyrfalcon 目前不保证两年后的可用性。假设新的 i.MX 8M Plus 的长期可用性超过 10 年。
图 4 恩智浦和 Gyrfalcon NPU 的对比[图片由作者提供]
功耗
两款芯片的功耗与 Lightspeeur 2803s 的 700mW 相当,i.mx8 M Plus(仅 NPU)的功耗也在 900mW 左右。在这种情况下,功耗并不是一个优于另一个,但是,在比较嵌入式设备的芯片时,功耗通常是一个重要的特征。
通过所描述的要点,您可以看到两种芯片都有不同的关注点和目标群体。在这里,通过 TOPS 进行纯粹的比较会产生误导。i.MX 8M Plus 更像是一种通用芯片,可以用于许多方面,而 Gyrfalcon 则适合于具有高性能要求的狭义应用。
我什么时候需要很多上衣?
这个问题是什么时候出现的 Lightspeeur 2803s 优于 i.MX 8M Plus?高 fps 很快浮现在脑海中,这里更多而不是更少的陀螺是首选。然而,我们必须意识到,大多数相机只能提供 30 到 60 帧/秒。在这里,i.MX 8M Plus,即使有一个有点重的 ResNet50,仍然是完全足够的。
批处理,处理图像流,也经常与 TOPS 相关联。然而,批处理更常用于训练神经网络。在经典推理中,一次处理一个图像,即一个图像一批。
真正需要大量 top 的是“实时关键应用。尤其是在自动驾驶领域。举例来说,如果您想要使用 360 度多流输入,在一毫秒内检测到一个孩子跑到马路上,则需要 TOPS 形式的大规模计算能力,并具有像素精度的检测。对于这项任务,像 Lightspeeur 2803s 这样的高顶芯片是正确的选择。
重要的是要记住,纯粹的推理并不是人工智能应用程序的唯一任务。在许多情况下,至少一个或多个数据预处理步骤发生在计算之前和之后。结果将用于指导进一步的过程。如果没有向 NPU 提供足够的数据,过多的 top 没有影响。目前,一个编程良好的精益应用比一个高度调优的 NPU 更有价值。
当然,这两者的结合将消除任何技术性能障碍。
总结—不同的任务,不同的硬件!
我们对比的两款芯片在各自的特定领域都非常优秀。然而,TOPS 并没有给出 NPU 是否适合计划应用的完整描述。对不同模型的支持,尤其是模型在芯片上的顺利实现,至少与纯粹的性能一样重要。
还必须考虑硬件以及周围的软件应用程序可以利用或服务于 NPU 性能。一个未优化的软件应用无法通过更多的 top 来补偿。基本上,NPU 必须符合整体概念。TOPS 只是众多参数中的一个。
为了更清楚地了解情况,可以提出以下问题:
- 我的输入数据类型和大小是什么?
- 传感器数据,视频流,混合数据流,…
- 我多快需要结果?
——时间关键还是性能关键? - 我们看到的计算难度是什么?
- “经典”ML,深度学习,分类,细分,…
- 你的目标市场是什么?
- 工业和消费市场有不同的要求。
- 功耗是否至关重要? ——手持设备,多个设备累加,或一个插电设备,…
我需要一个 NPU 吗?
是否需要一个 NPU 可以基于以下几点:如果有一个任务可以被“经典机器学习”(支持向量机、树学习器、…)处理,那么在很多情况下使用一个 CPU 就足够了。一旦使用深度学习架构,我们建议使用 NPU。
表 1 不同输入和规格所需的顶部[表格由作者提供]
需要多少个 top 的问题可以大致基于以下准则:如果我们有大量的输入数据(例如,以 HD 图像作为输入的图像处理应用),并且我们需要 1 ms 以下的结果,我们应该选择具有 5+top 的芯片。如果例如 10 ms 就足够了,那么具有 2 个顶部的芯片就足够了。同样重要的是手头的确切任务,例如分类与分割,其中需要不同的计算工作。此外,考虑网络/模型的复杂程度会影响决策。表 1 中的列表旨在给出不同考虑因素下需要多少顶部的粗略概述。请记住本文中提到的影响每个用例的芯片有用性的不同方面。
与数据科学一样,每个问题都需要量身定制的方法。
调查基于 PHYTEC AI 试剂盒:
https://www.phytec.de/produkte/development-kits/phyboard-pollux-ki-kit/
以及回转隼的光速 2803s:
附录
从 Gyrfalcon 芯片上展示我们自己的测量结果会更好。然而,即使我们拥有来自 Gyrfalcon 的 Plai Plug 2803,调试仍然困难重重,导致我们无法生成自己的测量值。
我们在本文中提出的关于客户对开发人员时间、奉献和项目关注的依赖性的观点,在我们使用 Gyrfalcon 芯片的努力中得到了很好的体现。完成文章草稿后,我们试图用自己的数据更新 Gyrfalcon 的结果。当我们遇到自己无法解决的错误时,我们通过他们的 sdk 论坛联系 Gyrfalcon 开发者。截至发稿时,已是 12 天后(8 个工作日),我们没有收到任何答复。
这并不是要抨击 Gyrfalcon,因为这种延迟有许多可能的理由,然而它很好地描绘了所描述的现象。想象一下,你正处于一个紧张的项目进度中,现在不得不依赖这个答案。8/12 天没有任何迹象表明是否会得到答复是不令人放心的。如上所述,问题是,我们可以询问的社区很少,甚至没有,因为 SDK 没有广泛传播。几天后,我们也在 Stackoverflow 上询问过,由于其独特的性质,也没有得到答复。
相比之下,我们在 i.mx8M Plus 尝试运行 TensorFlow lite 模型时也遇到了问题,然而,TFlite 社区非常庞大,我们几乎立即就从社区而不是恩智浦那里收到了我们的解决方案。
请自行检查我们的问题到目前为止是否得到了回答,以及花了多长时间才得到回答:
https://dev.gyrfalcontech.ai/forums/topic/2083-plug-device-cannot-be-found/
2020 年 1 月发布了一个具有非常相似问题的主题,在撰写本文时尚未得到回复(2021 年 4 月 26 日):
https://dev.gyrfalcontech.ai/forums/topic/bugreport-gti-sdk-4-5-0-0-cannot-find-2801-device/
训练模型时,您将需要训练、验证和维持数据集
理解为什么需要 3 组独立的数据来建立模型
照片由 Amirali Mirhashemian 拍摄,来自 Unsplash
介绍
当我第一次开始建立机器学习模型时,我曾经用两组数据训练我的模型— 训练数据集和验证数据集,使用通用的分裂规则(80%用于训练数据,20%用于验证数据)。然而,当模型被部署并应用于新的数据集时,模型性能开始下降。发生这种情况的原因之一是模型没有使用维持数据 t 进行进一步验证,这一点很重要,因为它在训练过程中验证模型性能,从而对模型性能进行最终验证。
在本文中,让我们更多地了解为什么我们在开发机器学习模型时需要不同的数据集,包括每个数据集的功能和重要性— 训练数据集、验证数据集和维持数据集。
数据分割
在您开始构建机器学习模型之前,如果您正在训练一个监督学习模型,则需要对数据进行分区。拥有不同数据集的目的是拥有可用于验证模型性能的数据子集。让我们了解一下您需要划分的 3 组数据:
(1)训练数据集
(2)验证数据集
(3)维持数据集(也称为测试数据集)
什么是训练数据集和验证数据集?
训练数据集和验证数据集(图片由作者提供)
训练数据集是用于训练模型的数据集,这也将是最大的数据集。这是模型将使用并从中学习行为的数据集。将基于训练数据集持续训练模型,以理解其中的行为和模式。
验证数据集用于模型评估,并在训练过程中微调模型超参数。该模型将基于这组数据验证其性能和准确性,但不从验证数据集学习。
什么是维持数据集?
添加维持数据集(按作者分类的图像)
在模型训练过程中不使用维持数据集,而的目的是在训练过程中提供模型性能的无偏估计。只有当模型使用训练数据集和验证数据集完成训练时,才会使用这组数据。维持数据集起着重要的作用,因为它确保模型可以很好地对看不见的数据进行归纳。因此,为了确保模型的准确性,确保维持数据集不包含任何定型或验证数据集非常重要。
此外,还应该将维持数据集上模型的准确性与训练期间的准确性进行比较,以确保模型不会过度拟合。如果与维持数据集的准确性相比,训练期间的准确性表现得明显更好,则这表明模型可能过拟合。
配置分流比
定型、验证和维持数据集的通用拆分比率(图片由作者提供)
通常,经常使用的拆分比率是 60:20:20 (60%用于定型数据,20%用于验证数据,20%用于维持数据)或 50:25:25。然而,这也取决于所用数据的大小和类型。重要的是要确保数据集被很好地划分,每组数据都包含原始数据的模式或趋势,否则我们最终可能会选择一个基于验证数据中的模式或趋势的模型。
结论
这篇短文总结了将数据分成三个不同数据集的重要性,这三个数据集分别是定型数据集、验证数据集和维持数据集。维持数据集用作模型性能的最终估计,仅应在模型完成基于验证数据集的定型和调整后使用。
感谢阅读这篇文章,我希望这对任何人来说都是很好的信息。
参考和链接:
[1]https://machine learning mastery . com/difference-test-validation-datasets/
[2]https://sdsclub.com/how-to-train-and-test-data-like-a-pro/
[3]https://towards data science . com/training-vs-testing-vs-validation-sets-a 44 bed 52 a0e 1
我是如何预测美国何时接种疫苗的
使用广义加法模型预测美国疫苗接种何时不再受供应限制
接种疫苗的竞赛开始了。虽然大多数发达国家只有百分之几的人口接种了疫苗,而发展中国家才刚刚开始,但美国是领先的国家之一,其 21%的人口至少接种了一剂疫苗。那么美国什么时候才能达到所有想要疫苗的人都有疫苗的地步呢?
为了回答这个问题,我决定对美国的疫苗接种工作做一个快速预测。虽然这绝不是详尽无遗的,但希望它能产生一个合理的猜测。
数据
数据取自数据中的我们的世界。我使用至少接种过一次疫苗的人口比例。真实数据的最后一天是 3 月 15 日。
代码
分析是在 R. Code 中执行的,数据集在我的 Github 中可用。
假设
进行了一些调整。目前没有疫苗被批准用于 16 岁以下的儿童。虽然疫苗最终会被批准用于它们,但这项分析并没有解决这个问题。第二,一部分人可能会因为各种原因拒绝接种疫苗。最近的调查显示,目前约有 30%的成年人会拒绝接种疫苗,尽管这一数字在最近几个月呈下降趋势。
根据人口普查局的数据,在这个练习中,我剔除了 14 岁及以下人口的 18.74%(记录没有对 15 岁及以下的人口进行细分,所以这个比例可能会略有偏差)。然后我假设剩下的 30%的成年人会拒绝接种疫苗。据估计,还有大约 57%的人口能够并愿意接种疫苗。实际上,这个数字可能会有所不同。
天气预报
首先,我通常认为疫苗接种会遵循一条“S”曲线,开始时很慢,中间时疫苗接种量增加,最后随着希望接种疫苗的人数减少而逐渐减少。逻辑曲线非常接近这个形状。将数据放入逻辑回归,我得到以下输出:
y 轴代表有能力和愿意的人口
这些数据实际上并不符合逻辑曲线。在某些点上,回归始终低估了实际的疫苗接种。目前,回归结果将实际疫苗接种量高估了几个百分点,曲线显得有些过于陡峭。
这个问题是由于美国疫苗接种在二月中下旬的一个间歇。逻辑回归不够灵活,无法处理疫苗接种中的这种纠结。
图片由我们的世界在数据
因此,需要一个模型来解释这种扭结而不影响预测。为了对此进行建模,我使用了一个广义加法模型(GAM ),它可以表示如下:
其中 E(Y)是 Y 变量的期望值,g 是链接函数。鉴于线性回归具有β系数,在 GAM 中,每个预测变量(由 x 表示)具有可以是线性或非线性的平滑函数(f)。
GAM 是一个高度灵活的模型,可以处理各种模式和情况。虽然我不会详细介绍 GAM 的属性和优点,但是对于感兴趣的人来说,是一本很好的读物。
然而,GAM 并不直观地知道数据在 0%和 100%之间有界(或者在我的假设下是 57%)。如果我做一个预测,模型的预测将远远超过 100%,从而打破了概率定律。为了纠正这一点,首先需要通过将 Y 变量传递到以下等式来转换 Y 变量:
其中 a 是下限(0),b 是上限(0.57)。
我使用 R 中的 mgcv 包来适应游戏。为了估计平滑参数,我通过限制最大似然(REML)使用混合模型方法。
该模型有两个预测因子:时间(以天为单位)和星期几,为此我为平滑函数指定了一个循环三次回归样条。在创建了一个仅使用时间作为预测因子的模型后,我在残差图中发现了一个循环模式,之后添加了工作日预测因子。95%的置信区间是用贝叶斯方法计算的。
拟合模型后,Y 数据以及预测值和置信区间现在需要转换回原始形式进行解释。为此,它们通过以下等式传递:
创建结果图,生成的预测如下:
总的来说,我对模型和预测很满意。预测符合预期的“S”模式,您可以看到预测中的小波动说明了每周的周期。
根据这一预测,超过 90%希望接种疫苗的符合条件的人应该在 5 月底接种疫苗。到 5 月 18 日,预计 50%的人口将接种一剂疫苗。这相当于大约一半的人口作为一个整体在该日期前接种了疫苗。这似乎与白宫提出的计划相一致,该计划承诺疫苗将在 5 月份提供给所有需要的人。
当然,对 COVID 疫苗态度的进一步改变可能会使这一问题复杂化,并稍微推迟这一时间表。也有可能——甚至很有可能——当更多的疫苗被批准时,这个预测将被证明过于保守。据报道,美国已经为 T2 储备了超过 3000 万剂的阿斯利康疫苗,他们正在等待 FDA 的批准,这可能会在下个月初到来。
当你不应该用准确性来评估你的机器学习模型时
以及有哪些选择。
米歇尔·玛特隆在 Unsplash 上的照片
创建机器学习模型是一个迭代的过程。您将需要进行几次迭代,以获得一个健壮且体面的模型。此外,您可能需要在将模型部署到生产环境中之后对其进行更新。
这个过程中的一个重要部分是模型评估。这和创建模型一样重要。
有几种损失函数和度量来评估模型性能。使用哪一个取决于任务和数据。当谈到分类模型时,最简单和明显的选择似乎是分类精度。但是,在某些情况下,它不是最佳选择。
在本文中,我将解释什么时候应该避免使用分类精度,以及存在哪些替代方法。
分类准确度可能是最直观的度量。它显示了正确预测与所有预测的比率。
分类准确性(图片由作者提供)
那么这个基本指标有什么问题呢?
潜在的问题最好通过例子来解释。想一想垃圾邮件。由于高效的垃圾邮件检测算法,我们不必在这些问题上纠缠不休。
假设我们正在设计一个检测垃圾邮件的模型。与其他电子邮件相比,普通电子邮件地址收到的垃圾邮件非常少。因此,用于训练的数据集很可能是不平衡的。
假设数据集中垃圾邮件和普通邮件的比例是 5 比 95。如果一个模型预测每封邮件都不是垃圾邮件,它的准确率将达到 95%,这听起来不错。然而,它是一种无所作为的模式。
此外,垃圾邮件和其他电子邮件中的错误应该以不同的方式处理。错过一封垃圾邮件并让它进入收件箱并不是什么大问题。但是,将重要的电子邮件标记为垃圾邮件可能会产生严重的后果。
分类准确性没有为我们提供区分垃圾邮件和其他电子邮件错误所需的灵活性。
类似的情况可以是用于将肿瘤分类为恶性或良性的模型。将恶性肿瘤检测为良性是一个致命的错误。我们的模型应该更加集中于正确地检测恶性肿瘤。评估指标也应该相应地设置。
对于到目前为止所讨论的情况,我们需要一个比分类精度更高级或更具体的度量。有哪些替代方案?
我认为有些术语对于理解这些替代方案的工作原理很重要。我先解释一下。
混淆矩阵
它分别概述了不同类上的模型性能。在二元分类的情况下,我们可以观察模型在预测正类(或 1)和负类(或 1)方面的表现。
(图片由作者提供)
- True positive (TP)表示实际类值和预测值都为正(或 1)。
- 真负值(TN)意味着实际类值和预测值都是负值(或 0)。
- 假阳性(FP)意味着预测值为正,但实际类值为负。
- 假阴性(FN)意味着预测值为负,但实际类值为正。
TP 和 TN 都是正确的预测,因此我们预计它们比 FP 和 FN 高。
现在,我们可以详细了解分类准确性的替代指标。
精确
精确的焦点是正面的预测。因此,它基于正面预测来评估模型。精度值是正确的肯定预测与所有肯定预测的比率。
(图片由作者提供)
在垃圾邮件检测模型的情况下,假设垃圾邮件代表肯定的类别,我们希望精确度尽可能高。
回忆
回忆的重点是正面类,而不是正面预测。它被计算为正确的正预测与整个正类的比率。
(图片由作者提供)
假阴性的实际类别是阳性,因此所有阳性类别的数量可以通过将真阳性和假阴性加在一起获得。
在肿瘤检测模型的情况下,我们希望最大化召回值,因为检测每个恶性细胞是至关重要的。
注:虽然精度和召回率多用于二分类问题,但也可用于评价多类分类任务。
结论
彻底的评估是机器学习的关键步骤。否则,改进你的模型将是一场艰苦的战斗。
评估过程中最重要的部分是选择合适的指标。对于目标变量不平衡的分类问题,分类精度不是最佳选择。
精确和回忆可以用在这样的任务中。您也可以使用 F1 得分,它是精确度和召回率的加权平均值。
感谢您的阅读。如果您有任何反馈,请告诉我。
当您的机器学习模型与 Django REST API 合作时,成功地部署到了生产中
关于如何构建机器学习模型并使用 Django REST API 部署它的完整概述
介绍
让我们考虑一下下面的场景:您已经实现了一个出色的机器学习模型,该模型可以预测患者是否患有帕金森病。然后,您所在城市的医院希望将您的模型集成到他们的系统中,以供一般使用。但是这些系统是用完全不同的编程语言开发的。这是否意味着他们将不能再使用您的模型了?答案是否定的,因为有了 RESTful 服务,无论应用程序开发人员使用哪种编程语言,他们都可以使用您的模型。
本文分为两个部分:
- 构建一个机器学习模型,预测给定患者是否患有糖尿病。
- 演练 REST 的步骤-使用 Django REST APIs 启用您的机器学习模型。
第一部分:模型构建
目标不是拥有一个花哨的模型,而是快速拥有一个模型并将其序列化,以便创建最终的 REST API。
下图描述了模型构建项目的结构。
按作者列出的项目结构
先决条件
本节的目的是安装正确实现分类模型所需的所有库。
1-创建并激活虚拟环境
python3 -m venv mlAPIEnv # Create the environment
source mlAPIEnv/bin/activate # Activate the environment
2-安装 熊猫 进行数据读取
pip install pandas
3-安装 sklearn 导入机器学习模型
pip install -U scikit-learn
4-安装 作业库 以序列化最终模型
pip install joblib
每个文件的内容
运行以下命令后,您将看到下面的图像:前 7 行,后 7 行,以及分类报告中的模型性能。
cd src # move to the ***scr*** folderpython3 run_training.py # Run the model training
数据帧的头和尾
分类报告
现在,您应该在模型文件夹下找到一个新文件diabete _ detector _ model . pkl***。*
您的机器学习模型已经准备好了。现在是时候休息了——用 Django REST API 启用它。
第 2 部分:应用编程接口的实现
先决条件
本节的目的是安装正确实现 REST API 所需的所有库。
1-安装姜戈
pip install django
2-安装 Django REST 框架
pip install djangorestframework
Django 项目和 REST API
所有库都已安装。下一步是创建一个姜戈项目和姜戈 rest API。
1-从项目的根文件夹创建您的姜戈项目。
django-admin startproject diabete_deployment
运行前面的指令将创建一个名为 diabete_deployment 的新文件夹。移动到该文件夹并创建您的应用编程接口。
2-创建您的 API 文件夹
cd diabete_deployment # Move into the folderdjango-admin startapp diabete_api # Create your API folder
从下图中,我们可以看到前面的附加文件夹及其相应的文件。
按作者列出的带有附加文件夹的项目结构
对于构建我们的 API 很重要的文件是 settings.py , diabete_api/views.py, 和***diabete _ deployment/URLs . py .***我们稍后需要创建额外的文件和文件夹。
- settings.py :用于注册项目中的所有新应用/API。新信息注册在下面突出显示的 INSTALLED_APPS 变量下( diabete_api 和 rest_framework )。
settings.py 内容
每次更新设置文件时,进行迁移是很重要的,以便将更改传播到数据库模式中。确保在 manage.py 所在的 diabete_deployment 文件夹下运行该命令。
运行迁移
python manage.py makemigrations
b-迁移更改
python manage.py migrate
以下是运行 migrate 命令后的输出
运行服务器,检查到目前为止是否一切正常
python manage.py runserver
前面的命令生成以下信息来访问通向 Django 接口的 URL,这意味着到目前为止一切正常。
Watching for file changes with StatReloader
Performing system checks...System check identified no issues (0 silenced).
November 29, 2021 - 03:47:18
Django version 3.2.9, using settings 'diabete_deployment.settings'
Starting development server at [http://127.0.0.1:8000/](http://127.0.0.1:8000/)
Django web 界面,意味着配置是成功的
- diabete _ API/views . py:用于实现调用特定路线时会触发的所有功能。在我们的例子中,实现将基于预测函数。为了进行预测,我们的函数需要加载模型。为此:我们需要 在主diabete _ deployment文件夹下创建一个新的静态/模型 文件夹,该文件夹将包含序列化的 。pkl 型号型号。
diabete_api 文件夹的 views.py
-
新建一个文件diabete _ API/URLs . py,内容如下
-
diabete _ deployment/URLs . py:用于将所有的 URL 链接到它们在 views.py 文件中实现的对应函数。
现在,所有重要的文件都已更新,新的文件也已创建,我们终于准备好重新启动网址,并确保一切正常!
运行服务器
python manage.py runserver
我们可以访问前面命令行生成的 url。
System check identified no issues (0 silenced).
November 29, 2021 - 16:23:24
Django version 3.2.9, using settings 'diabete_deployment.settings'
Starting development server at [http://127.0.0.1:8000/](http://127.0.0.1:8000/)
Quit the server with CONTROL-C.
这是我们得到的屏幕,它指向 索引 页面,显示视图文件内 索引 功能中指定的信息。
此页面显示 HTTP 200 OK 表示页面请求成功。
(图片由作者提供)
从该页面中,我们可以通过在 URL 中添加 /predict 来最终调用预测函数。
(图片由作者提供)
在上一页中,我们可以通过将以下 JSON 数据粘贴到 content 部分来模拟预测。
(图片由作者提供)
从前面的图像中,我们观察了从请求到预测的整体交互。
用 CURL 测试您令人敬畏的 API
下面是我们正在进行的 post 请求的语法
curl -d "param1=val1¶m2=val2...paramN=valN" [URL]/funct_to_call
- param1 :第一个参数和 val1 是对应的值
- param2 :第二个参数和 val2 是对应的值
- 等等。
- URL :要使用的 URL,在我们的例子中是 http://127.0.0.1:8000
- 【funct _ to _ call】:请求调用的函数,在我们这里是 /predict
将所有内容相加,我们得到以下请求:
curl -d 'pregnancies=6&glucose=148&bloodpressure=72&skinthickness=35&insulin=0&bmi=33.6&diabetespedigreefunction=0.627&age=50' http://127.0.0.1:8000/predict
以下是请求的结果:
{"info":"success","patient_status":1,"model_confidence_proba":63.36}
文章结尾
从本文中,您已经学习了如何使用 Django 构建您的机器学习模型和创建 REST API。你现在可以将你的 API 提供给你所在城市的医院,从而拯救生命😃。
额外资源
再见🏃🏾
高级分析从何而来,又将走向何方?
让我们探讨一下基于证据的决策系统如何提供最佳结果,以及预测性分析和规范性分析之间的区别
决策制定是复杂的,但 AI/ML 在这里是为了增强规定性分析,credit: Canva
我们想要高质量的商业分析,一个更好的“在数据中发现有意义和可操作的洞察力的过程”,正如Dursun Delen教授在他的书规定性分析中所描述的那样,因为我们想要通过使用数学/统计模型或机器学习/深度学习算法、技术、工具和实践来做出更好的决策并更好地解决问题。
有许多人试图提出人类理性的决策过程,其中最著名的是赫伯特·亚历山大·西蒙(1916-2001),他是美国经济学家和政治学家,于 1975 年获得图灵奖,并于 1978 年获得诺贝尔经济学奖。
为了取得成功,决策过程应该遵循标准化、系统化和符合逻辑的步骤。H. A. Simon 在 1977 年提出了一个理论,这个理论涉及到智能、设计、选择、实施以及每个阶段之间的反馈形式。西蒙的理论是迄今为止关于基于证据的科学决策的最简明和完整的理论。
西蒙称,人类确实愿意满足于不如最好的东西, 满足感 ,因为他们表现为有限理性,因为他们的理性思维能力有限,他们提出的最佳解决方案可能不是现实世界中的最佳解决方案。这也是许多经理凭直觉行事的另一个原因。如果你想了解更多,我亲爱的朋友艾姆拉有一本关于这方面的很棒的书,叫做《经验的神话》。
简而言之, 智能 阶段是关于理解目标和目的,以及问题识别、问题分类和问题所有权。这个阶段的输出是一个清晰的问题陈述。
第二阶段 设计 是关于模型抽象、模型公式化、方案生成、标准识别。这一阶段会产生一组可供考虑的备选方案。它确实验证了问题陈述。
第三阶段 选择 是对备选方案进行评估、排序,并选择最佳方案。这是进行 敏感度分析 以验证和测试备选方案以及 假设分析 陈述和规划实施的地方。
第四个阶段是 实施 ,就是做需要做的事情,采取行动,了解影响。实施的结果将在周期的下一阶段得到考虑。
现在,我们对人类决策的基本原理有了更好的理解,让我们看看这些年来工具和技术的演变,使我们能够做出更好的决策。
决策系统发展简史
在 20 世纪 70 年代之前,运筹学(or)以类似模拟模型的启发式方法统治了这个行业。随着基于规则的专家系统(ES)的引入,“if/then”语句规范了智能决策算法。
在 20 世纪 80 年代,企业公司需要将来自不同部门的数据统一到一个具有模式的单一数据源中。数据库管理系统和 ERP 系统的出现有助于数据的整合、引用。通过轻松访问数据,基本级别的静态、按需生成的报告提供了系统的总体视图。
20 世纪 90 年代,随着数据仓库的引入,Prism 作为先驱,因曼和金博尔出版了数据仓库的入门书籍,即构建数据仓库和数据仓库工具包。业务主管现在知道他们的决策支持系统的关键绩效指标,并能够在仪表板、记分卡的可视化支持下跟踪结果。
21 世纪初,数据仓库驱动的决策支持系统打上了商业智能的烙印,数据量大到需要“挖掘”数据来“发现”数字背后的含义。持续修补和更新数据仓库基础设施的需求/开销增加,这得益于 IaaS 运动。软件系统也变得越来越复杂,并且需要为每个通信进行拆分和创建契约,于是出现了面向服务的架构来解决这些需求。
在 2010 年代,各种数据源使数据生态系统不堪重负,从智能电表到智能健康监测器,再到社交媒体源,“大数据”成为每个人都参与其中的一部分。大规模并行计算机将它们的位置留给了 Hadoop better Map Reduce 编程,内置了 NoSQL 查询能力。
21 世纪 20 年代挑战了批处理的局限性,实时分析是任何交易的核心,要求管道完全自动化,以缩短反馈循环,更快地提供价值。
分析类型
最基本的分析类型是 描述性分析 。这是关于通过运行来自数据仓库、数据湖、数据仓库的报告,从旨在支持决策过程的信息系统中收集数据。任何解释因果关系的报告都试图解释“发生了什么?”。它提供了洞察力和仪表盘,监控系统显示指标以支持正确的决策。
比汇总数据和处理数据更复杂的一个层次是 预测分析 ,它回答“会发生什么?”并提出建议。预测客户行为/需求、金融市场动向和股票市场价格的能力是无价的。数据挖掘使用高性能基础设施上的多维数据集进行探索性分析,而 ML 模型使用无监督学习(如在您不知道您收集的要素名称的情况下)通过分类、回归或时间序列预测来预测或聚类信息。罗尔斯·罗伊斯拥有一个智能发动机健康管理 (EHM)系统,该系统通过车载传感器和实时卫星传输产生的数百万亿字节数据来跟踪全球范围内的发动机健康状况。这是一种预测性监控形式,可标记潜在威胁并建议发动机改进。他们扩展了该系统,使其航空燃料效率提高了 14%。
规定性分析 使用复杂的优化、模拟和基于启发式的决策建模技术来回答“我应该做什么?”这样系统就能代替人类思考。他们执行强化系统,以及其他应用统计学、运筹学、机器学习、自然语言处理、图像处理、语音识别和信号处理。 Kensho 是最重要的之一增强了分析真实世界事件对金融市场的影响的能力,能够回答复杂的金融查询,对事件进行分类,这是一个平均工资为 35 万美元到 50 万美元的员工。
希望它将澄清混乱的分析,与决策系统的历史背景,模型,以及例子。随着强化系统的到位,我认为我们需要一个新的词来描述自动化版本的规定性分析,(自动化分析听起来很老套),以便我们可以确定建议和采取行动之间的界限。正如我们相信我们的 满意的 决策一样,也许我们可以相信系统从它们的反馈循环中学习…
如果你有任何问题,请留下评论,如果你喜欢,别忘了关注我。直到下一个,保重!
机器人记者在哪里?
面向研究的机器人新闻介绍,或自动化新闻,及其当前状态
安德烈·德·森蒂斯峰在 Unsplash 上拍摄的照片
你遇到过机器人记者吗?机器人记者是一种很棒的方式,可以对重复事件进行报道,同时让人类记者专注于需要研究和人类洞察力的工作。洛杉矶时报的 Quakebot 就是这种系统的一个例子。然而,我发现很难找到明确说明机器人记者证用法的例子。
什么是 robojournalism?
在 robojournalism 或自动化新闻业中,一些数据被转换成用某种人类语言撰写的新闻报道。这是通过自然语言生成技术实现的。根据 Graefe [1,p.9]的说法,机器人记者的动机如下:“……算法不仅可以为特定主题创建数千个新闻故事,而且比任何人类记者都更快、更便宜、可能更少出错。”根据同一篇论文,当有结构化数据时,robojournalism 是最合适的,并且主题本质上是重复的。一些传统的用例是体育、金融和天气预报。
根据 Graefe [1]的观点,自动化新闻的过程有五个阶段:
- 收集数据,
- 有趣事件的识别,
- 洞察的优先顺序,
- 叙事的产生,
- 最后出版这个故事。
他们强调,自动化新闻系统需要领域专家的输入,以定义特定领域的规则和新闻价值的标准。最简单地说,这个系统就像我之前的文章中描述的如何创建你自己的机器人记者。更复杂的系统可以报告更详细的匹配信息,这需要系统对每个匹配的洞察进行优先排序。换句话说,系统应该根据新闻价值对比赛中的事件进行评分。
一篇好的新闻报道需要人类记者满足一些要求。根据为人类记者确定的要求,Leppä nen 等人[2]得出新闻生成系统应该:
- 透明的,
- 准确,
- 可修改并可转移到其他领域,
- 产生流畅的输出,
- 根据现有的数据,
- 制作热门新闻。
新闻自动化的想法一点都不新奇。最早提出这一观点的文章是早在 1970 年由 Glahn 发表的[3]。在文章中,他们描述了天气预报报告的过程,类似于软件提供商当前基于模板的解决方案,其中使用一组预定义的规则来确定选择哪些预先编写的语句来创建故事[1]。
机器人记者(现在)在哪里?
如果想法陈旧,所需技术存在,为什么在各大新闻出版物中发现自动生成新闻的例子却出奇的困难?2020 年,Graefe 和 Bohlken [4]通过对 2017 年至 2020 年间英文科学期刊上的 11 篇同行评议论文进行元分析,总结了读者如何看待自动化新闻与人工新闻相比的可信度、质量和可读性的结果,并指出相同的结果。此外,据他们称,被列为 NLG 提供商客户的媒体机构数量相当少。然后,他们又补充道:“……尽管这可能与商业机密有关。”基于这些概念,他们认为自动化新闻领域仍处于早期市场扩张阶段,类似于多尔在 2016 年已经说过的[5]。
2020 年,Graefe 和 Bohlken [4]通过对 2017 年至 2020 年间英文科学期刊上的 11 篇同行评议论文进行元分析,总结了读者如何看待自动化新闻与人工新闻相比的可信度、质量和可读性的结果。
他们预计媒体机构可能会抑制机器人新闻,而他们的读者可能会不赞成自动新闻。根据 MAIN-model(情态-中介-互动-导航性)[6],自动生成的新闻可能会被读者以冲突的方式感知。
Graefe 和 Bohlken 确定了 Sundar [6]提到的以下启发法,以适用于人类和机器人记者之间的这种对抗。权威启发式建议读者应该更喜欢人类记者,因为他们可以被视为主题专家。此外,对人类记者有利的是,社交存在启发式建议读者应该更喜欢人类记者,因为这感觉更像是与人类而不是机器互动。但是相互矛盾的是,机器启发法认为机器生成的新闻应该比人类撰写的新闻更客观,因为它们不包含偏见。
有趣的是,Graefe 和 Bohlken 陈述了以下内容[4,第 57 页]:“换句话说,不管实际来源是什么[人类还是机器人记者],参与者仅仅是在认为他们阅读了人类撰写的文章时,就给予了更高的评级。”根据他们的说法,总体比较结果显示,读者认为人类和机器人记者的可信度是一样的,质量稍微有利于人类作者,可读性非常有利于人类作者。
“换句话说,不管实际来源是什么(真人还是机器人记者),只要参与者认为他们读了一篇真人写的文章,他们就会得到更高的评级。”
—格雷夫和波尔肯(2020 年)[4,第 57 页]
Graefe 和 Bohlken [4]预计,人们仅仅因为知道机器生成的新闻是由机器生成的而给机器生成的新闻评分较低,这一发现可能会鼓励新闻提供者不要说一个故事是由机器人记者报道的。他们指出,这强调了机器人记者论的伦理挑战(参见关于伦理挑战的讨论[7])。最后,我想补充一点,不说明新闻报道的真实记者,不管是人还是机器人,都是对透明度要求的不尊重。
在 Sirén-Heikel 等人[8]在 2019 年进行的一项研究中,26 名接受采访的美国和欧洲媒体代表中有 13 名提到特定领域、基于模板的 NLG 是他们的媒体机构使用的自动化类型。基于这一点,再加上 2020 年 Graefe 和 Bohlken 没有发现行业有重大进展,我敢预测基于模板的系统仍然是行业标准。
基于模板的系统的使用受到这样一个事实的鼓励,即它们尊重输出的透明度、准确性和流畅性的要求。基于模板的系统的一个缺点是它们不考虑系统的可修改性和可移植性的要求。这里,我指的是本文前一节提到的自动化新闻的需求。
正如在任何遇到自动化的领域一样,机器人记者论当然引起了讨论,人类记者的未来是否岌岌可危。最近有一些关于人类记者被机器人记者取代的新闻,比如微软将在 2020 年用机器人取代记者。
优点和局限性
尽管机器人记者团的使用可能进展缓慢,但它有一些明显的好处。Graefe 列举了 2016 年的以下好处[1]。
- 速度——自动化允许快速发布新闻报道——当源数据可用时,报道可以几乎实时发布。
- 规模–发布报告的规模可以扩大——例如,可以发布一份关于地震传感器所有观测结果的报告,而不是只报道大地震,而不会耗尽新闻资源。
- 无错误——自动化新闻系统被认为不太容易出错,因为它们不会犯拼写或计算错误之类的错误。换句话说,他们的准确性高于人类记者的准确性——假设代码中没有错误,并且源数据是正确的。
- 客观性–再次假设系统中没有编码主观性,数据是客观的,系统将产生客观的输出。
- 个性化–最后,自动化允许为更小的目标群体——甚至是个人——提供个性化的新闻报道,并按需提供新闻。
除了潜在的好处,Graefe 提到了以下限制[1]。应该指出的是,这篇文章发表后,NLG 进步很大。
- 自动化新闻系统的好坏取决于它所使用的数据。换句话说,源数据的可用性和质量是成功的关键。
- 尽管系统可能在源数据中识别出有趣的事件,但它不能问“为什么?”。因此,仍然需要人工验证和推理。
- 这些算法缺乏独创性,因此限制了它们观察社会和完成新闻任务的能力。
- 根据实验证据,人们更喜欢阅读人写的新闻,而不是自动的新闻。
结论
如前所述,robojournalism 有许多好处,已经非常适合于报告结构化数据可用的重复事件。新闻自动化让我们能够为更小的目标受众报道新闻,用多种语言报道同一件事,并对内容进行个性化处理——所有这些都不会产生巨大的额外成本。
尽管有明显的好处,但很难找到由机器人记者撰写的文章的例子。我想知道这是否是由于新闻机构阻止了系统的发展,或者阻止了他们正在使用它们的信息。
参考
- Graefe,A. (2016) 自动化新闻报道指南。
- Leppä nen,l .、Munezero,m .、Granroth-Wilding,m .和 Toivonen,H. (2017) 自动化新闻业的数据驱动新闻生成。在第十届国际自然语言生成会议上,会议记录,188-197 页,美国,9。计算语言学协会。
- 格兰(1970 年)。计算机生成的语言预报。美国气象学会通报,51(12),1126–1132。
- Graefe,a .,& Bohlken,N. (2020 年)。自动化新闻:一项关于读者对人工撰写的新闻和自动化新闻的看法的元分析。媒体与传播, 8 (3),50–59。
- 丹麦注册会计师协会(2016 年)。绘制算法新闻领域的地图。数字新闻。
- Sundar,S. S. (2008 年)。主模型:理解技术对可信度影响的启发式方法。(第 73-100 页)。麦克阿瑟基金会数字媒体和学习计划。
- 多尔,K. N .,&霍恩布希纳,K. (2017 年)。[算法新闻的伦理挑战](http://Dörr, K. N., & Hollnbuchner, K. (2017). Ethical challenges of algorithmic journalism. Digital journalism, 5(4), 404-419.)。数字新闻,5(4),404–419 页。
- Sirén-Heikel,s .,Leppä nen,l .,Lindén,C. G .,& bck,A. (2019)。拆箱新闻自动化:探索自动化在新闻业中的可想象性。北欧媒体研究杂志。
感谢您的阅读!如果你学到了新东西或者喜欢这篇文章,在 Medium 上关注我。我发表关于数据工程和数据科学的文章。你可以从 be 网页了解更多关于我的信息😊
如果你知道一些 robojournalist 的例子,无论有没有关于它被自动化的披露,请让我知道它的评论!👀
线性回归中的置信区间从何而来——最小二乘公式的例子
实践教程
了解线性回归中学习参数权重的标准误差,以及其他指标,如 t 指标和 P>|t| metic。
图片来自 Pixabay
我一直认为我很了解线性回归,直到最近我的大脑对一个同事的问题一片空白——当使用 Python 的普通最小二乘类 OLS 时,参数置信区间来自哪里?我决定推导出线性回归的所有相关公式,并将这些推导汇编成一组文章。这是第一个。
线性回归模型
线性回归模型 f(x)=xᵀ w 是大多数人研究的第一个机器学习模型。在这个模型中:
- x 是特征, w 是模型参数。 x 和 w 都是长度为 p 的向量,其中 p 是特征的数量。是矢量点积。
- 我们需要从训练数据集 (X,Y) 中学习 w 的具体值,其中 X 是形状为 n×p 的特征矩阵,其中 n 是训练数据点的数量。 Y 是形状为 n×1 的观测矩阵。
以下代码使用普通最小二乘类(OLS)来学习模型参数 w 的值:
第 4 ~ 6 行建立了一个线性回归模型,有三个特征声望、教育和一个常数特征(或偏差),目标变量收入*。*
第 10 行打印了下表。在表格中:
- coef 栏(用黄色背景突出显示)显示了我们的特征的学习参数值— 声望、教育和添加的常量特征。这是我们平时关注的。
- 有趣的是,该表还显示了一些概率度量(用粉红色背景突出显示):对于学习的系数, std err , t , P > |t| 和置信区间【0.025,0.975】。它们似乎是概率度量,它们意味着什么?
本文解释了这些概率度量的含义,以及它们是如何在线性回归模型的最小二乘公式中计算出来的。
但是在我们回答这些问题之前,我们首先需要了解如何从训练数据 (X,Y) 中学习我们的模型参数 w 的值。我们使用的方法叫做最小二乘法。
最小二乘公式
*在最小二乘法公式中,为了找到模型参数 *w、的具体值,我们最小化以下损失函数
损失函数 L(w) 是观测值 Y 和模型预测值 X w 之间距离的平方。工作就是最小化这种损失——找到 w 的值,使得 L(w)的值最小,因此得名最小二乘法。**
解正规方程求 w
由于 L(w) 是一个未知 w 的二次函数,找到最小化 L(w) 的 w 的值的显而易见的方法是:
- 求 L(w) 相对于 w 的导数导数是另一个未知的函数 w 。
- 将导数设置为 0。这就给了你著名的法线方程。
- 求解法线方程以找到 w 的具体值。
形式上:
第(1)行左侧是损失函数 L(w) 相对于 w 的导数的符号。“ ∂ 这个符号反映了一个事实,即 w 是一个变量的向量,而不是单个变量,所以我们在偏导数的世界里。“偏导数”是指每个导数都与向量 w 中的单个变量相关,从而产生 p 偏导数,其中 p 是 w 向量的长度。我们将在本文后面更清楚地看到这一点。
线(2)插入 L(w) 的定义。
第(3)行应用向量微分规则来计算导数。将这个导数设为 0,我们就得到了正规方程。
为了求解法线方程,我们做:
让我们用名字 wₒₚₜ 来指代使法线方程成立的 w 的值,换句话说:当 w 取值 wₒₚₜ=(XᵀX)⁻ XᵀY 时,法线方程的左侧计算结果为 0。所以我写 w 时,指的是未知模型参数的向量;而当我写 wₒₚₜ 的时候,我指的是 w 可以取的值,让正规方程成立:
*注意在 *wₒₚₜ、的表达式中,你不能用规则(xᵀx)*⁻=x⁻(*xᵀ)⁻来简化 (XᵀX)⁻ ,因为 X 通常不是一个方阵。只有方阵才有逆。例如,如果有 n=10 个数据点,并且 p=2 个特征, X 的形状为 10×2;它不是一个正方形矩阵。
向量微分
我认为以上所有的步骤都很简单,除了我们应用向量微分法则来推导正规方程的那一步。我可以背出 ∂(wᵀw) = 2w 这样的向量微分法则,但结果似乎还是很神秘。
它看起来很神秘,因为使用了线性代数中引入的向量微分规则。这些规则提供了一定程度的抽象。一方面,它们允许你以简洁的方式写下冗长的表达;但另一方面,它们阻止你立即看到计算是如何进行的。
我们应该理解所有这些向量符号和线性代数规则只是为了记账。如果展开所有向量并应用非向量版本的微分规则,向量微分的结果应该是相同的。如果你想知道这是如何解正规方程的,请查阅本文的附录。
求解正规方程是对线性回归模型进行参数学习的一种方法。存在其他方法。这里是关于如何通过另一种方法——随机梯度下降法找到线性回归参数值的好读物。
最小二乘公式中的不确定性
直到现在,我们的线性模型 f(x)=x w 都是确定性模型,而不是概率性模型。要看这个:
- 学习的参数值 wₒₚₜ=(XᵀX)⁻ XᵀY 是确定性的,因为其成分 X 和 Y 是给定的训练数据集。 wₒₚₜ 是一个实标量的具体向量。
- 这个模型ŷ= xwₒₚₜ的预测是确定性的,因为 X 和 wₒₚₜ 都是确定性的。**
但是这里再次显示的模型拟合总结包括概率指标,如标准误差、置信区间。这是怎么回事?
概率测度与随机变量一起存在
这些概率度量只与随机变量的概念一起存在。因此,为了讨论这些指标,我们需要在我们的模型中引入随机变量。具体地,由于标准推导,置信区间是用于学习的模型参数的。我们需要将学习到的模型参数值从一个标量,如 0.6237 的声望*,变成一个随机变量。*
在线性模型中引入随机变量
我们按照以下步骤引入随机变量来表示可能的模型参数值:
第一步
引入一个随机变量向量 y=X wₜᵣᵤₑ+ ε ,其中 wₜᵣᵤₑ 代表我们永远不会知道的单一真实模型参数值。不要担心我们不知道 wₜᵣᵤₑ 的值,稍后,我们会估计它。 ε 是均值为零的多元高斯噪声,在每个数据点上是独立的,方差 η。 y 为形状为 n×1 的随机变量向量,其中 n 为训练数据点的个数:
进一步理解 y 的定义:
- 随机变量向量 y 中的每一项 yᵢ 代表对应的训练数据点 Yᵢ 可能取的值。因此,我们训练数据集中的观察值 Y 向量可以被建模为来自随机变量向量 y 的样本。
- 在这个随机变量向量中,每一项 yᵢ 被定义为两部分之和: yᵢ=Xᵢ wₜᵣᵤₑ+ εᵢ.**xᵢwₜᵣᵤₑ部分是确定性的,因为 Xᵢ 和 wₜᵣᵤₑ 都是具体值。噪声部分 εᵢ 是随机的——是来自高斯分布 N(0,η ) 的一维随机变量。如此定义, yᵢ 也是来自一维高斯分布的随机变量。
- 来自向量 y 的所有单个随机变量遵循相同的定义模式。我们有 n 个数据点,所以有 n 个独立噪声,它们都有零均值和方差 η 。
- 我们可以用一个多元高斯随机变量来更简洁地表示这些 n 独立噪声(但数学上等价): ε~N(0,Iₙ η)。所以 ε 是长度为 n 的随机变量向量, Iₙ 是 n×n 的单位矩阵。 Iₙ η 中的 η 部分表示 ε 中各单个随机变量的方差为η; Iₙ 部分表示所有这些单个随机变量都是独立的。
- 另一种写法 y=X wₜᵣᵤₑ+ ε 是 y ~ N(X wₜᵣᵤₑ,Iₙ η)。
第二步
我们已经解出了得到 wₒₚₜ=(XᵀX)⁻ XᵀY. 的正规方程,这是理解这个公式的另一种方式:
- *揭示了具体值 Y 通过变换矩阵 (XᵀX)⁻ Xᵀ,)线性变换为 *wₒₚₜ.注意 wₒₚₜ 与我们在步骤 1 中介绍的 wₜᵣᵤₑ 不同。 wₜᵣᵤₑ 是我们永远不会知道的真实系数的符号。 wₒₚₜ 当使用最小二乘法作为估计方法时,我们对 wₜᵣᵤₑ 的估计(或学习参数值)。
- 既然现在我们将 Y 建模为来自随机变量向量 y 的样本,该向量具有分布 N(X wₜᵣᵤₑ,Iₙ η ) ,我们可以将wₒₚₜ*=(xᵀx)⁻xᵀy建模为来自新的随机变量向量 ŵ ,定义为 ŵ=(XᵀX)⁻ Xᵀ y. 没错,随机变量向量*ŵ**
- *从结构上看, ŵ 是由 (XᵀX)⁻ Xᵀ 对 y 的线性变换,正如 wₒₚₜ 是由 Y. 而来,甚至 ŵ 也是由 *y、的线性变换,请注意 w 是 p×1 的形状,而
作为一个随机变量向量, ŵ=(XᵀX)⁻ Xᵀ y 代表我们的线性回归模型的参数的所有可能值及其概率密度。我们使用 ŵ 的概率密度函数,我们将在后面推导,来谈论我们的线性回归模型中的参数的那些概率概念,如标准差、置信区间。
ŵ,“学习参数值的分布”是什么意思?
理解我们引入 ŵ 来表示学习参数值的分布是很重要的。但是短语“学习参数值的分布”是什么意思呢?
理解这个短语的最好方法是提醒我们自己,我们假设有一个单真参数值 wₜᵣᵤₑ** 。并且我们想要通过从线性模型xt14】wₜᵣᵤₑ的透镜来查看训练数据集 (X,Y) 来弄清楚 wₜᵣᵤₑ 是什么。这适用于以下情况:**
- 观察值 Y 确实是使用公式xt22】wₜᵣᵤₑ从 X 生成的。
- 当我们对 Y 的测量确实精确时。
然后我们可以通过解正规方程来计算出 wₜᵣᵤₑ 的值。
作为建模者,我们可以挑战上述两个条件。
我们可以挑战第一个条件,说 X 和 Y 之间的线性关系不正确,反而应该是指数关系。这很好,它将我们引向一个模型选择问题——我们到底应该考虑线性模型吗?或者我们应该考虑指数模型,或者神经网络,或者决策树?这个题目我再写一篇。现在,让我们保持线性。
**我们可以挑战第二个条件,说由于一些测量上的困难,测得的观测值 Y 并不严格等于 X *wₜᵣᵤₑ.取而代之的是被具有零均值的高斯噪声 ε 破坏的 X wₜᵣᵤₑ 。*一种等价的说法是 Y 现在是随机变量 y 的一个样本,它被定义为 y~ N(X wₜᵣᵤₑ,Iₙ η)。这就是我们在这篇文章中所做的。
根据其定义 Y 是来自随机变量向量 y 的样本,我们必须将训练数据集中的具体观察值 Y 视为随机过程的结果——我们必须承认,下次采样时,我们将获得一组不同的观察值 Y (我说不同的组是因为 Y 是具有 n 标量的具体向量)。
由于学习到的参数值 (XᵀX)⁻ XᵀY 是从 Y 计算出来的,而 Y 因为来自于 y 所以现在具有随机性,所以学习到的参数值变成了一个随机变量。我们用 ŵ 来表示这个随机变量向量,定义为 ŵ=(XᵀX)⁻ Xᵀy. 根据定义,一个随机变量代表一个值的分布(具有不同的概率密度),因此短语“ ŵ 代表学习参数值的分布”。
推导出 ŵ 的概率密度函数
要谈概率性如 ŵ 的标准差,我们需要导出它的概率密度函数。推导很简单:
- *因为随机变量向量 y 定义为 *y=X wₜᵣᵤₑ+ ε。和 ε 是多元高斯随机变量 ε~N(0,Iₙ η ) , y 也是多元高斯随机变量: y ~ N(X wₜᵣᵤₑ,Iₙ η)。我们只需要将平均值从 0 移动到 X wₜᵣᵤₑ.
- *由于根据多元高斯线性变换规则, ŵ 被定义为 y : *ŵ=(XᵀX)⁻ Xᵀ y,的线性变换, ŵ 也是多元高斯随机变量,规则告诉我们 ŵ 的概率密度函数是什么。
多元高斯线性变换规则
这个规则在机器学习里很多地方都会弹出来,比如卡尔曼滤波、高斯过程,所以请大家用心记住。形式上,它说:
用英文说,如果一个多元高斯随机变量 a 有一个已知的概率密度函数,随机变量 b 是由 a 经变换矩阵 A 的线性变换,那么 b 就是与 a 形状相同的多元高斯随机变量。并且 b 的概率密度函数具有上述固定形式,即从 a 的分布中提及均值、协方差矩阵,以及变换矩阵 A 。
对于 ŵ ,我们有 :
对于ŵ.来说,这是一个非常长的概率密度函数幸运的是,我们可以大大简化它:
第(2)至(3)行简化了平均分量。第(4)~(7)行简化了协方差矩阵分量。需要注意的一点是从第(6)行到第(7)行的简化是有效的,因为 (XᵀX)⁻ 是一个对称矩阵,它自己转置它。
从第(7)行我们注意到, ŵ 的平均值是真正的参数值 wₜᵣᵤₑ ,换句话说, ŵ 是**wₜᵣᵤₑ.的无偏估计量**
估计 ŵ 的概率密度函数中的未知量
*简化的概率密度函数, *ŵ~N(wₜᵣᵤₑ,**(xᵀx)⁻η)有两个未知数, wₜᵣᵤₑ 和 η 。在使用这个概率密度函数来报告概率度量之前,我们需要给它们具体的值。
- *对于 *wₜᵣᵤₑ,我们用 wₒₚₜ=(XᵀX)⁻ XᵀY.
- 对于 η,我们使用以下公式,其中ŷ= xwₒₚₜ是来自我们的线性回归模型的样本内预测:
估计为wₜᵣᵤₑt35】**
*我们先来理解一下为什么可以用 wₒₚₜ=(XᵀX)⁻ XᵀY 来估算 *wₜᵣᵤₑ.*从导出的 ŵ~N(wₜᵣᵤₑ、【xᵀx】⁻η)*的概率密度函数可知 ŵ 是 wₜᵣᵤₑ.的无偏估计量因此,如果我们从这个分布中抽取无限数量的样本,这些样本的平均值(或期望值)将等于 *wₜᵣᵤₑ.*换句话说,我们可以用样本的期望从 ŵ 到估计**wₜᵣᵤₑ.
实际上,我们不能从这个分布中抽取无限的样本。其实我们只有一个样本,那就是 wₒₚₜ=(XᵀX)⁻ XᵀY ,它的平均值就是它自己。
首先,你可能会问为什么 wₒₚₜ 是 ŵ 分布的样本?这是
因为:
- ŵ 定义为线性变换,用变换矩阵 (XᵀX)⁻ Xᵀ ,,从随机变量 y.
- Y 是来自 y. 的样本
- wₒₚₜ是通过对样本应用相同的变换而定义的
那么你可能会问,我们应该用 ŵ 分布的无限个样本的平均值来估计 wₜᵣᵤₑ ,但是我们只有一个样本。这样可以吗?嗯,不太理想,但我们只有这些了。
估计为η**
现在让我们来理解对 η 的估计:
**η 是观测噪声随机变量的方差 ε~N(0,Iₙ η)。我们不直接观察噪音。相反,我们只从随机变量 y=X wₜᵣᵤₑ+ ε中观察到一个样本 Y 。根据定义, y 的方差等于噪声 ε 的方差,因为 y 中唯一的随机分量来自噪声。在 y 的定义中的 X wₜᵣᵤₑ 分量只是移动了 y 的平均值,而不是它的方差。
y 是包含 n 个随机变量的随机变量向量:
- 这些随机变量的平均值,即 X wₜᵣᵤₑ,我们用ŷ=xt30】wₒₚₜ.来估计
- 我们知道 y 的一个样本,那就是 Y 。这个观察 y 不等于ŷ.换句话说,拟合的线不会通过所有的观测值。我们使用引入的噪声分量来解释这些偏差——我们的模型接受实际观测值 Y 不等于其均值预测值xt42】wₒₚₜ因为在模型中,观测值 Y 只是来自高斯分布 N(X wₜᵣᵤₑ,Iₙ η ) 的样本,在我们插入均值估计值后,它变成了n(ŷ,Iₙ η )* 。样本不需要等于该分布的平均值*。样本 y 与均值相差多少由噪声方差 Iₙ η决定。
- 所以y-ŷ可以被看作是噪声的观测值。y-ŷ是一个长度为 n 的向量,代表噪声部分,每次观测一个。根据定义我们知道,所有这些噪声随机变量的均值为零,它们彼此独立,并且具有相同的方差 η 。
由于所有这些 n 噪声共享相同的方差值 η ,我们可以这样想:我们有一个单一的随机变量,它的均值为零,我们也有这个随机变量的 n 个样本y-ŷ。*我们要估计这个随机变量的方差,也就是 *η。回忆一下从样本中计算随机变量方差的公式(来自 wiki ):
在我们的例子中,我们有一些类似的东西,其中y-ŷ*是样本,0 是平均值。(y-ŷ-0)ᵀ(*y-ŷ-0)为平方部分,简化为(y-ŷ)ᵀ(y-ŷ)),所以估算 η 的公式(再次)为:
需要规格化器 1/(n-p-1) 来将结果转化为噪声方差的无偏估计量——还记得在估计样本总体方差时为什么我们使用 n-1 而不是 n 的讨论吗?这是同样的论点,部分 -p 反映了我们使用 p 特征来预测ŷ.的事实这导致了 p 自由度的减少。
为 ŵ 完全指定概率密度函数
随着 wₜᵣᵤₑ 和 η 的估计,最终的、完全指定的 ŵ 的概率密度函数为:
在我们插入 wₒₚₜ=(XᵀX)⁻ XᵀY 后,我们有一个学习模型参数 ŵ 的可评估(没有未知数)概率密度函数。我们可以使用它来报告学习参数值的那些概率度量。
随着ŵ完全指定的概率密度函数的推导,我们终于可以理解这些概率度量是如何计算的。
的标准误差(或标准差)
汇总表中的标准误差栏报告了 ŵ.中每个随机变量的标准偏差
从 ŵ 的分布,也就是多元高斯、我们得到随机变量向量ŵ—【var(ŵ】=(xᵀx)⁻η的协方差矩阵。是一个 p×p 矩阵。每个随机变量的方差在这个矩阵的主对角线上。所以每个随机变量的标准差就是那些主对角线元素的平方根。**
ŵ的置信区间t69】
现在来说说 ŵ 的置信区间,重点介绍如下:
列名[0.025,0.975]定义了系数值的 95%范围—系数值的真实值有 95%的可能性位于该区间内。
由于 ŵ 是一个多变量高斯随机变量,每个单个随机变量的置信区间,如声望,在 ŵ 只是偏离其均值的一些标准偏差(上下)。[0.025,0.975]范围对应于偏离平均值 2 个标准偏差,因为我们讨论的是高斯分布。**
为了报告突出显示的置信区间,我们需要找到学习参数值的平均值和标准偏差:
- 我们用 wₒₚₜ 来估计 ŵ 的均值,并在系数栏中报告。**
- ŵ 中每个单变量随机变量的标准偏差已经在标准误差列中。这是因为多元高斯边缘化规则。**
特征重要性
现在,让我们了解与功能重要性相关的列,如下所示:
**有两个相关的指标 t 和 P > |t|。P>| t |度量对 t 度量的假设检验。
P > |t| 度量报告模型参数值为 0 的概率,不管 coef 列中报告的是什么。P > |t|度量的高值表示该特征的系数可能为 0,因此它对预测目标变量 Y 没有贡献。
从上面的汇总表中可以看出:
- 对于特征声望,的 P > |t| 列报告有 0%的概率声望的系数为 0。换句话说,很有可能声望特征有助于预测目标变量。**
- 对于特征教育,**P>| t |列报告有 80%的可能性教育的系数为 0。换句话说,教育功能不太可能有助于预测目标变量。****
为了计算这个 0%或 80%的概率,我们需要引入 t 统计量。
t 统计量
对于 ŵ 中的第 j 个随机变量,我们表示为 ŵⱼ,我们从 ŵ 的概率密度函数中得到这个随机变量的均值和标准差:
- 平均值是平均值向量中的第个条目。让我们用 μⱼ、来表示平均值,这是一个特性的报告系数值——0.6237 表示声望*,0.0323 表示教育。***
- 标准差是协方差矩阵主对角线中第 j 个项的平方根。让我们用 ηⱼ 来表示标准偏差,这是一个特性的报告标准误差值——0.125 表示声望,0.132 表示教育。
那么第 j 个特征 tⱼ 的 t 统计量为
**该统计测量估计参数 ŵⱼ 的平均值 μⱼ 到平均值 0 之间的归一化距离。该距离按分母中的标准偏差进行缩放。汇总表中的 t 栏报告该 tⱼ 数量。事实上, t 统计量是一个缩放的距离(也称为无标度度量),这一点很重要,它使得不同特征的 t 统计量具有可比性。
**P>| t |公制
由于 tⱼ 统计被缩放,我们可以使用单位高斯概率密度函数来研究它。从现在开始,让我们使用 t 而不是 tⱼ 来与汇总表中的度量名称保持一致。
P > |t| 指标报告单位高斯分布中两条阴影线的累积概率。这是[-∞,-t]和[t,+∞]中的紫色阴影区域,加在一起:
我们要问的问题是:如果一个特征的系数确实为零,那么(从单位高斯分布来看)具有由[-∞,-t]和[t,+∞]定义的两个尾部的概率是多少。
t-统计量越大(如果t-统计量为负,则越小),从-t 和 t 开始的两个尾部越小,因此计算出的t-统计量越不可能来自均值为零的单位高斯分布。**
所以,如果我们看到一个具有大的 t 统计量的特征,我们就更确定那个特征的报告系数确实不为零。或者等价地,该特征更可能有助于预测目标变量,因此它更重要。
你可能会问,为什么我们把 P > |t| 度量定义为两个尾部的累积概率,而不是只看 t 位置的概率密度?这是因为我们想要报告一个概率,根据定义,概率是概率密度函数曲线下一系列值的面积。如果我们只看 t 位置,概率为 0,因为单位高斯是连续分布。
你可能还会问,为什么我们测量两条尾巴的面积而不是一条?我们使用双尾,因为我们正在进行一个双尾假设检验,其零假设是 t 统计量来自一个单位高斯分布。我们使用双尾假设检验,因为我们有兴趣知道计算出的t-统计量和零之间是否存在差异(或者是正的,由一个尾捕捉,或者是负的,由另一个尾捕捉)。
您可能会进一步问,我可以使用单尾假设检验来报告特性的重要性吗?是的,你可以,只是 OLS 班报告了一个双尾假设检验结果。
结论
本文解释了如何将随机变量引入确定性最小二乘线性回归模型,以推断学习到的模型参数值的不确定性。我们使用随机变量,因为不确定性度量,如置信区间,只存在于随机变量中。
除了最小二乘法,线性回归还有其他公式,如完全贝叶斯公式、最大似然公式(MLE)和最大后验公式(MAP)公式。这些方法对不确定性有更自然推理方式。我将在以后的文章中介绍它们。
支持我
如果你喜欢我的故事,如果你考虑通过这个链接成为一名灵媒会员来支持我,我将不胜感激:https://jasonweiyi.medium.com/membership。
我会继续写这些故事。
附录:法线方程的梯度
让我们用一个例子来推导法线方程,其中我们有三个数据点,并且 w 是一个二维向量。形式上:
在上面:
- 【x₁=[x₁₁、x₁₂】【x₂=[x₂₁、x₂₂】【x₃=[x₃₁、x₃₂】。它们是 2×1 行向量。**
- X₁₁、X₁₂、X₂₁、X₂₂、X₃₁、X₃₂ 是标量。**
- Y ₁ ,Y ₂ ,Y ₃ 都是标量。**
- w₁ 、 w₂ 都是标量变量。
下面我们进一步介绍一下向量 U :
其中 U₁、U₂、U₃ 都是标量根据他们对 Uᵢ=Yᵢ-Xᵢ w. 的定义可以清楚的看到 U 是 w 的函数。这为应用链式法则计算 L(w) 相对于 w 的导数铺平了道路。
现在让我们推导正常方程(再次显示):
线(1)是损失函数 L(w) 相对于模型参数 w 的导数的符号。
线(2)插在 L(w) 的定义中。
第(3)行使用 U 简化公式,并应用微分中的链式法则将整个导数分成两部分。
让我们分别关注这两个部分。
第一部分首先:
第(1)行是第一项。
第(2)行用基于元素的定义替换了向量 U 。
第(3)行对分子应用点积运算。
第(4)行明确写下了偏导数的定义——计算每个变量的导数,分别是 U₁、、、、按照约定将这三个导数组织成一行。
第(5)行应用求导规则。
第(6)行插入 u₁、U₂ 和 u₃.的定义**
第(7)行使用向量符号来简化公式。这给了我们一个接近正态方程中团队的项。
现在我们研究第二个术语:
第(1)行是第二项。
第(2)行扩展了 U 和 w 的元素式定义。
第(3)行应用向量偏导数规则,遵循行越过 U 列越过 w 的约定。
第(4)行扩展了 U 的定义。
第(5)行计算导数。
Lien (6)使用向量符号简化了公式。
现在我们可以将这两项相乘:
注意,在第(5)行,我们有一个行向量——记住,当我们做 ∂w 时,我们遵循惯例,在一个行向量中写下关于 w 的每个元素的偏导数。为了把 ∂L(w)/∂w 变成一个列向量,我们转置它得到法线方程 -2Xᵀ(Y-X w) 的左手边大小,我们也可以 drop -2,因为我们有一个方程。**
AI 从何说起?
进入人工智能的世界
在过去 7 年多的时间里,我与许多希望踏上第一次人工智能之旅的领导者一起工作。他们中的大多数人不知道如何或从哪里开始。一些人认为他们做到了。为了让你的企业实现使用人工智能的可能收益,你需要确保你在正确的道路上开始你的旅程。以下是开始旅行时需要考虑的一些关键事项…
弗拉德·巴加西安在 Unsplash 拍摄的照片
目标
你需要能够清楚地阐明你的最终目标是什么。如果你不能做到这一点,那么你还没有准备好真正开始旅程。你的目标不应该是“我要跑一个 AI 项目”。这太模糊了,不是结果或结果驱动的。这是一个危险信号,而且往往是失败的原因。
明确的目标也可以是不同层次的。一个有针对性的,但有点高的目标可以是“我想改善客户体验”。总体结果是明确的——“改善客户体验”,但在没有目标维度的意义上,它仍然是模糊的。一个更具体的目标是“我想改善呼叫中心的客户体验”。一个非常具体的目标是“我想通过减少呼叫处理时间来改善呼叫中心的客户体验”。你能得到的越具体,你在下游就越有利。
同样,试图在没有清晰愿景和目标的情况下使用人工智能启动一个项目,可能不会给你带来最佳结果。不要为了“做”而试图实现 AI。带着明确的目标开始旅程。
确定优化领域
下一步是确定痛点在哪里。在本例中,您将看到端到端的客户体验。您将确定什么是最佳的和非最佳的、现状和目标场景、涉及的参与者等等。这可以通过设计思考会议来实现——我不会在这里讨论这个话题。有很多讨论和解释设计思维的在线资源。IBM 有一个非凡的设计思维项目来帮助客户开始他们的旅程。
让我们假设您已经完成了设计思考会议,并且已经确定了这些领域。在这个环节中,你还将确定优化这些领域的人工智能能力。例如,实现对话式人工智能助理将帮助您的呼叫中心代理更快地获得问题的答案,这将减少呼叫处理时间。始终首先确定优化的用例/领域,然后用技术来解决它。不要做相反的事情!
一个重大决定
您还需要决定如何处理实现。这里有几种选择。
1 —建立自己的人工智能实践,开发自己的人工智能技术
这通常需要最多的时间和投资。作为一名领导者,你需要评估许多事情,例如:你内部是否拥有现有的人工智能技能?如果没有,你将如何获得它们?你有什么技术可以开始使用?与你的时间表相比,这需要多长时间?这会带来最好的结果吗?这是否符合我们公司的战略和愿景?到 2021 年,有许多公司已经拥有成熟的人工智能平台。你需要评估是否有必要为自己的目的重新发明轮子。
2-使用现有的人工智能供应商平台建立自己的人工智能实践
在这里,你在另一个人工智能供应商的平台上提升员工的技能,如 IBM Watson 或微软人工智能。在这种情况下,你更大的投资是在你自己的员工知识上。这里的好处是你不需要开发人工智能技术——只需要学习如何使用它。在本例中,您的员工将定制虚拟助手,以满足您的用例。例如,使用 IBM Watson Assistant(一个人工智能支持的虚拟助手),您可以利用现有的云服务 API(通过 SaaS 模型)。你也可以在 Azure、AWS 或 GCP 上部署 Watson,或者你也可以选择在本地部署 Watson。无论哪种情况,您的团队都可以专注于构建虚拟助手来满足您的用例。他们不需要担心开发或维护人工智能服务本身。
3 —聘请专业服务人员为您实施
作为一名领导者,有些情况下你根本没有时间或人手去执行选项 1 或 2。人工智能也可能令人生畏,这取决于你的技能组合。您可以选择雇佣专业服务人员来为您实现虚拟助理。在这里,你仍然利用市场上现有的人工智能平台,但你将雇佣一家公司来定制助手,以适应你的用例。这应该会让你安心一些,因为你已经雇佣了专业人士。他们将指导实施的每一步。您的主要参与将是向实现团队提供领域主题专业知识。
4-建立自己的人工智能实践并雇佣专业服务
这是上述选项 2 和 3 的混合模式。您可以聘请专业服务来指导实施,同时您的内部团队与专业人员一起提升技能。这种方法有很多好处。最大的好处是,你可以在训练自己的员工自给自足的同时,获得所需的专业帮助。在这里,你在提升团队技能的同时,平衡了虚拟助理的主要项目成果。你正在同时完成两个主要目标。
当你做出选择时,有许多方面需要考虑。你需要评估预算、时间表、策略、员工等。你也可以用不同的方式开始你的旅程。例如,您可以从第一个版本的选项 3 开始,然后转到第二个版本的选项 4。理想情况下,你想选择一个策略,并努力坚持下去,以实现价值最大化。
最后
底线是你需要确保你出于正确的原因开始你的人工智能之旅,有可量化的目标,有意义的业务成果和正确的实施计划。如果你不确定,寻求专业帮助。还有许多在线资源可以帮助你学习人工智能,让你免费动手操作,比如 IBM Watson services。
马克是IBM 沃森人工智能战略合作组织的首席技术官。当不领导 IBM 合作伙伴的技术战略和愿景时,Marc 喜欢做 DJ、玩视频游戏和摔跤。
易贝在人工智能上的对错:你衡量的东西很重要
了解人工智能需要付出努力,而且这是值得的
马库斯·温克勒在 Unsplash 上的照片
以下改编自真实世界 AI。
我在 2006 年加入易贝,在 2009 年,公司的情况非常糟糕。其股价处于历史低点,远低于近 24 美元的历史高点;它在削减成本,负增长,市场份额在萎缩,技术团队没有能力创新。
简而言之,公司陷入了严重的困境。
他们扭转了局面,这主要归功于对技术的投资。特别是,该公司开始了使用技术、数据和人工智能来推动业务的旅程。我很幸运地加入并建立了搜索科学团队,这是首批利用机器学习来优化买家体验并帮助他们在易贝网站上更容易找到所需商品的团队之一。
我们开始建立一个人工智能模型,以改善客户体验并推动收入,但我们在第一次尝试时并没有做到完美。通常,对于人工智能,事情在变好之前就变坏了。作为一名企业所有者或决策者,或者作为一名工程师或数据科学家,理解为什么人工智能模型可能不会像预期的那样工作很重要,这样你就可以修复它,更有效地使用人工智能。
建造我们的第一个模型
因为我们想增加收入,当我们第一次开始构建我们的人工智能模型时,我们的团队专注于增加每次会话的购买量:买家在一次用户会话中购买的平均商品数量。
考虑到这个目标,我们的人工智能模型强调销售(一件商品销售了多少次)而不是印象(一件商品被浏览了多少次),较便宜的商品比昂贵的商品销售得更频繁,排名高于其他商品。
我们尝试了不同的机器学习模型——重写买家查询的模型,生成用于排名模型的特征的模型,以及对最终搜索结果进行排名的模型。然后,我们运行了一系列 A/B 测试来评估模型结果,取得了巨大的成功。许多模型证明了购买者的转变已经增加。其他团队受到这些成功的激励,开始努力增加每次会议的购买量。
一切看起来都很美好。也就是说,直到财务团队发现这些 A/B 测试的胜利并没有转化为收入的增加。
工作模式不一定是盈利模式
我们在某个地方走错了路,我们需要一个解决方案——要快。在公司一分钱都输不起的时候,我们损害了公司的收入。
我们深入挖掘了不同查询的搜索结果,发现了一个有趣的现象:我们经常将附属物品排在最上面。例如,当买家搜索“iPhone”一词时,许多 iPhone 手机壳会排在结果的顶部虽然这些配件在网站上很受欢迎,但它们并不是用户一直在搜索的,所以这就造成了我们所说的“配件污染”,并导致了糟糕的用户体验。
啊哈!我们已经找到了收入下降的原因;一个 10 美元的 iPhone 手机壳比一个 300 美元的 iPhone 少得多。我们的模型推荐了不太贵的配件,而它应该推荐价格更高的手机。
我们的模型完全按照我们构建的那样工作,但是我们构建它是为了做错误的事情。
选择正确的测量方法
很多时候,成功取决于你选择衡量什么。
当我们开始我们的旅程时,技术团队将不同的目标统一成一个单一的目标,专注于增加销售。说你的唯一目标是卖出更多,这是一个非常以客户为中心的选择,但这是卖家和买家想要的,也是我们最终获得报酬要做的。
经过多轮讨论后,我们开始通过每次会话的购买量来衡量成功与否。我们的人工智能模型成功实现了目标,但创造了糟糕的用户体验,未能实现业务增长。我们需要找到一种不同的人工智能模型的新解决方案,更重要的是,一种新的方法来衡量人工智能模型的成功。显然,“每次购买”在我们的人工智能模型和团队中产生了错误的动机。
教训是显而易见的:小心选择正确的度量,因为它将告知你的人工智能的方向。
后来,我们将价格相关信号纳入模型,解决了“配件污染”问题。更重要的是,我们将每次会议的购买量改为每次会议的商品总值(GMV)。有了这些改变,我们不仅有了一个工作模式,而且有了一个盈利模式。
人工智能需要工作,但很值得
一旦我们的团队向整个公司展示了机器学习和数据的强大,更多的团队开始利用人工智能作为业务增长的动力。这最终对收入产生了巨大影响,并帮助公司实现了惊人的转变。
到 2012 年,易贝的股价上涨了 65%,该公司实现了约 1750 亿美元的电子商务——约占全球电子商务的 19%,占全球零售市场的近 2%。
如果易贝没有拥抱人工智能,该公司现在可能会在一个非常不同的地方。今天,错过人工智能的机会就意味着失去你所在行业的竞争优势。
解决人工智能可能会感觉势不可挡,过于技术性,但重要的是要记住这是一个过程。第一次尝试你可能不会做对,但是如果你从错误中学习——并努力衡量正确的事情——你就可以构建具有真正影响力的强大工具。
关于构建有效的、以商业为中心的人工智能的更多建议,你可以在亚马逊上找到真实世界的人工智能。
Wilson Pang 于 2018 年 11 月加入阿彭,担任 CTO,负责公司的产品和技术。Wilson 在软件工程和数据科学领域拥有超过 19 年的经验。在加入阿彭之前,Wilson 是携程中国的首席数据官,他带领数据工程师、分析师、数据产品经理和科学家改善用户体验,提高运营效率,从而推动业务发展。在此之前,他是加州易贝的高级工程总监,也是 IBM 的架构师,为各种客户构建技术解决方案。Wilson 在中国浙江大学获得了电子工程硕士和学士学位。
Alyssa Rochwerger 是一位以客户为导向的产品领导者,致力于打造为现实生活中的人们解决难题的产品。她乐于将对顾客产生积极影响的产品推向市场。她在将产品从概念扩展到大规模投资回报方面的经验已经在初创公司和大型企业中得到证明。她在机器学习组织中担任过许多产品领导职务。她曾担任 Figure Figure(被阿彭收购)的产品副总裁,阿彭的人工智能和数据副总裁,以及 IBM Watson 的产品总监。目前,她担任加州蓝盾公司的产品总监,在这里,她愉快地被大量的数据、许多难题以及产生积极影响的机会所包围。Alyssa 在加利福尼亚州旧金山出生和长大,拥有三一学院美国研究学士学位。
“隐私第一”失败的地方
数据最小化、粒度和分散处理的挑战
“我们是一家隐私至上的公司”。今天你经常听到这句话。“我们根据设计原则使用隐私”。“我们实行数据最小化”。这些都是善意的声明,并且通常它们的实现也是完全正确的,但是这种方法经常会留下一些问题,如数据完整性的损失或缺乏真正的去身份验证,这导致“隐私第一”失败。让我们将这些概念分解,并探索一些替代方案。
为了本文的目的,让我们使用一个疲劳应用程序的实际用例。这个疲劳应用程序使用 24 小时的时间序列心率数据,从中生成一个疲劳分数。该疲劳分数可用于管理例如驾驶员的疲劳,以降低事故。
“我们匿名处理所有数据”
好的。所以我们来考虑一下这个。你有可穿戴数据,例如你的个人客户的活动数据。您可以去掉个人身份信息等唯一标识符,用假名“Mary Adams”称呼用户,但这对于属性级别意味着什么呢?
作为一个例子,考虑这个完全合理的输出,它实际上是完全合成的。
{“data”: {
“person”: {
“sex”: “Female”,
“device”: “Android”
},“deviceLocation”: {
“coordinates”: {
“latitude”: 51.5072682,
“longitude”: -0.1657303
},“altitude”: 16,
“accuracy”: 95,
“verticalAccuracy”: 90,
“velocity”: 4
},“activity”: {
“timestamp”: “2021–01–02T23:37:00+00:00”,
“type”: “Sleeping”
},“heartRate”: {
“currentHeartRate”: 58,
“minHeartRate”: 45,
“maxHeartRate”: 83},
}
}
你可能把用户名匿名了,但是怎么把 GPS 坐标匿名呢?上面的数据清楚地显示了你的用户睡在哪里。只有这么多的人会花大量的时间在你的家庭住址或工作地址,所以结合这些信息在事后识别这个人(这个过程叫做再识别)真的是幼儿园水平。
《纽约时报》发表了一篇很棒的文章,并附有关于这个话题的例子,展示了匿名位置数据如何能够轻易地识别在最安全的地点工作的军事官员。如果五角大楼不能做到这一点,你会相信你的普通公司吗?
解决方案:让我们删除敏感的数据对象
在清理数据时,可以采取剥离数据对象和属性的方法(通常都是这样做的),比如位置历史,以后很容易重新识别。这似乎是一个解决方案,但是它有明显的缺点:我们丢失了用户和应用程序的有价值的数据。
您的输出如下所示。它的确远没有那么具有侵略性,但也远没有那么丰富。说白了,你把你的“玛丽·亚当斯”丢在地图上了。
{“data”: {
“person”: {
“sex”: “Female”,
“device”: “Android”
},“altitude”: 16,
“accuracy”: 95,
“verticalAccuracy”: 90,
“velocity”: 4
},“activity”: {
“timestamp”: “2021–01–02T23:37:00+00:00”,
“type”: “Sleeping”
},“heartRate”: {
“currentHeartRate”: 58,
“minHeartRate”: 45,
“maxHeartRate”: 83},
}
}
等等:现在我们丢失了所有的 GPS 定位数据!对于需要复杂数据集和上下文信息的更复杂的应用程序或用例,删除数据不是最佳解决方案,因此我们可以采取另一种方法来调整数据粒度。
关于数据粒度的一点注记
数据粒度是一个光谱,从绝对、详细的度量开始,一直延伸到没有信息价值的无用抽象。但是,作为一个频谱,您可以上下调整粒度。
作者图片
一组 GPS 坐标是数据的一个极端的很好的例子,非常精确和丰富,而邮政编码仍然是关于位置的信息,但是远没有精确到一个人那么独特。
“deviceLocation”: {
“coordinates”: {
“place": 94105
},
同样的逻辑可以应用于几乎所有的数据对象,您可以在属性级别上创建一个分组,比如收入范围或年龄组。然而,在有些领域,这变得更加二元,如个人是否属于少数群体或报告了收入。这些二进制分组中的一些也可能成为不成比例的信号,例如用户是否有任何疾病或报告的犯罪行为。它们也是强标识符。
考虑到我们的个人疲劳应用,该时间序列数据对于确定疲劳至关重要,以便能够判断过去 24 小时的变化以及心率强度的相对偏差。使用更小粒度的数据(总结过去 24 小时)不会产生有意义或准确的疲劳评分。虽然心率很难与个人联系起来,但降低数据质量不是一个选项。
数据结果不应显示 N<50 的组群
不同的法规和行业有不同的规则。经常使用的一种方法是限制结果群体的大小,以保证去识别。该限制可以是 50 人的群体,在这种情况下,您的算法不能在结果中显示比该群体更小的群体。
然而现实并非如此简单。如果您正在利用位置数据,有多少人有可比较的位置模式呢?然后,您必须将属性抽象或聚合到组中,例如处理邮政编码。但即使这样也不足以保证 N<50。
其他数据点呢,比如健康数据?个体模式要具体得多,尤其是考虑到糖尿病或损伤等情况时。例如,通过简单地记录“条件”是否存在来进行抽象,可能有助于避免小组规模变小。
使用主观属性而非绝对属性
bpm 中的心率等客观属性很容易理解,类似的还有经纬度坐标中的位置。然而,静息心率的±15%的相对心率或距离旧金山 1 条市场街 5 公里的相对位置都是有意义的,但是相对难以从外部联系到特定的个人。
“deviceLocation”: {
“coordinates”: {
“distanceFromHome": 1-5km
},
因此,将数据抽象为主观属性可能很有吸引力,但在管理大型数据集时,这将显著增加开销,而且这也不是微不足道的,因为主观测量的组合将越来越多地集中于特定的个人。
管理组合数据的群组是很棘手的
即使您将基础属性抽象成组,如果有足够的数据点,群体大小也很容易识别。例如,考虑位置历史(抽象到邮政编码级别)和活动数据(抽象到用户是否活动)的时间序列。即使这个相当模糊的数据集也能很容易地创造出小于 50 的人口。
你很容易得到数据最小化的概念。为了实现这些限制数据敏感性的目标,我们限制了数据本身的质量,甚至是我们包含的数据维度,从而潜在地降低了我们可以提供的价值。
使用合成数据集来保证隐私
数据市场中令人兴奋的方法之一是合成数据,它允许开发人员和数据工程师基于真实数据集创建合成数据集,允许数据工程师保留数据隐私。这方面的先驱公司的一个例子是格雷特尔。
这种方法处理数据隐私的一个更基本的方面,即底层数据集可能无法匿名化或剥离个人身份信息。因此,创建一个可比较的(注意:数据完整性问题取决于对正在讨论的用例的理解)合成数据集,是一个概念上有吸引力的选择。
现在这个选项有它的局限性,主要与它实际上适合什么类型的用例并产生足够的结果有关。人们还经常对保持数据的统计完整性持怀疑态度,因为即使稍微修改数据,也可能会失去许多联系和意义。
合成数据可以作为一个起点,但是不能代替与要回答的问题密切相关的真实数据。理解如何生成合成数据取决于对真实数据的理解,这对于每个不同的数据对象和源来说,复杂性增加了几个数量级。
正如一位合作伙伴所说,“我们不喜欢使用合成数据来预测心脏病发作”,强调在健康相关的使用案例中,真实数据是唯一真实的选择。
作为一种选择的分散数据处理
分散数据处理是指在中央服务器之外处理数据,例如在用户自己的设备、计算机、电话或浏览器上。分散处理还可以受益于没有外部共享,这意味着除了用户自己的设备之外没有共享日志。因此,数据和数据的使用属于个人。
在一些个人数据用例中,我们可以观察中央服务器之外的数据处理(“在用户侧”)。由于能够在不从用户处删除数据的情况下处理数据,这也使得关于数据隐私的争论大相径庭。作为一种操作,它是个人优先的,个人自己从数据中获得代理和效用。
默认情况下,分散式应用提供了更多隐私
同样重要的是要记住,并非所有的隐私都来自于数据处理,其中一些来自于更平凡的方面,比如你的用户如何连接到你的应用程序或服务器。无论您如何解构数据,如果您的最终用户通过他们的 IP 地址直接与您通信,匿名性可能会丧失。是的,有 VPN 部分地解决了这个问题,但是,VPN 的使用远远没有达到正常水平,大多数用户可以通过他们的直接网络连接来识别。
从用户处删除数据需要正当理由
有各种各样的数据工程方法用于处理数据以及在节点上部署和训练算法,例如联邦学习。假设可以在用户侧以分散的方式处理高清晰度数据,将数据从用户传输到集中的服务器需要证明,这不仅是因为这不可避免地使用户暴露于更大的风险,而且由于隐私和伦理问题,还需要降低数据粒度。
我们已经在各种论坛上讨论过数据工程,例如在 Liberty Equality Data 播客上与 Privacy By Design 的发明者 Ann Cavoukian 博士讨论,我们经常得出这样的结论:存在许多方法,默认采用集中处理可能只是因为不熟悉。
对于我们的疲劳应用程序,我们打印出一个绿灯/红灯类型的结果(是否太累),根据用户的疲劳分数显示给用户。然而,利用过去 24 小时的时间序列心率数据,我们不仅可以确定疲劳,还可以确定酒精和物质的使用。
共享绿灯/红灯类型的结果有效地共享了个人的疲劳分数。然而,共享整个数据集(时间序列心率数据)也会暴露嵌入到结果中的其他因素,例如饮酒。
这意味着远离用户传输原始数据可能会给双方带来额外的风险,而疲劳评分或红灯或绿灯系统的最终结果可以在不泄露底层数据的情况下交付。
复杂的应用需要数据完整性
当然,我们不能得出一种方法适合所有用例的结论。
复杂的应用程序依赖于高清晰度的上下文数据可用性,剥离敏感数据可能会破坏整体数据的完整性。对合成数据集进行数据工程以获得初始假设集,对于某些用例以及构建模型来说是一个非常有价值的选择,但是它不能替代真实数据。当部署模型或启动应用程序时,通过限制共享,能够采取不同的方法来利用数据,这具有巨大的适用性。
疫情之后我应该在哪里吃饭?(第 1/2 部分)
使用变压器进行基于方面的情感分析进行决策。
我们以前都遇到过这种情况:查找我们感兴趣的新产品或我们想尝试的餐馆的评论。我们从一篇评论到下一篇评论收集信息,每篇评论都更精确地再现了产品。我们不停地翻啊翻,突然一个小时过去了,而我们并没有比以前更接近答案。我们意识到这是一种徒劳的努力,我们将无休止地寻找决定如何使用我们辛苦赚来的钱的决定性因素。那么,在本教程中,我将使用基于方面的情感分析(ABSA)来解决这个西西弗式的任务。花更少的时间筛选评论,花更多的时间享受产品或服务。我们开始吧!
介绍
由于疫情,我对旅行和美食有着无法满足的渴望。我没有花时间在网上搜索,而是想弄清楚一旦情况允许,我应该去哪里。通过自动化上述过程,我分析了超过 100 万条评论,以选择最适合我个人偏好的餐厅。在我们进入细节之前,让我们从一个更简单的例子开始。
奥米德·阿明在 Unsplash 上拍摄的照片
例子
我想买无线耳机,我想在 AirPod Pros 和 Powerbeats Pros 之间做出选择。以下是购买前需要考虑的一些特性:音质、舒适度、降噪质量和电池寿命。我为每个组成部分分配了一个重要性权重,并着手梳理评估每个产品表现的评论,以创建一个如下所示的表格:
耳塞比较
方便的是,这些特性和相应的特性评级都在 Amazon 上,所以我不必做自己想出这些值的繁重工作。通过将每个特性评级乘以重要性,并对所有特性求和,我可以得到每个产品的最终得分。例如,对 AirPod Pros 的评估如下所示:
对比最后的分数,我们可以看到 AirPod Pros 击败出局(哈!)Powerbeats Pros。有一个系统的方法来达成我的决定是非凡的,但是有一些实际的问题。例如,这个分析花了我不到 10 分钟的时间,但也是在亚马逊上已经有基于方面的评级的产品之间进行的。由于这些是而不是其他大多数产品容易得到的,我将不得不筛选大量的评论来为每个产品产生基于方面的评级。另一件要考虑的事情是,在这种情况下只有两种产品;以这种方式比较更多的产品会让我 10 分钟的分析变成 2-3 个小时的冗长努力。
那么,我们如何协调我们的系统决策和效率呢?自动化。通过自动化这个过程,我们可以更快地做出决策。下面定义了我们将在其中工作的框架:
由于这一过程适用于任何产品或服务,我决定在 Yelp 数据集中的餐馆中进行尝试。我总是很难决定我想去哪里吃饭,经常花太多时间在 Yelp 上,以至于已经过了晚餐时间。鉴于疫情,现在外出就餐不是一个很好的选择,所以我想在一切结束后找到一个最好的地方吃一顿令人难以置信的饭。不要再拖延了,让我们开始吧!
数据集
首先,让我们导入我们将使用的所有库。
塞姆瓦尔-2014 年
对于教程的这一部分,我们只需要 SemEval-2014 数据集。在 SemEval-2014 数据集中,餐厅的各个方面是食物、服务、价格、氛围和轶事。对于每个方面,只有一个相关的标签:积极、消极、冲突或中立。您可以从我的 GitHub 中检索该数据集;然而,这已经在我们将要构建的预处理函数中考虑到了。
我们所有的数据都准备好了,让我们继续训练吧!
模型
这项任务可以选择几种不同的模型,从基于规则的模型到深度学习。在翻阅文献之后,我看到了一篇利用变形金刚完成 ABSA 任务的论文。作者将 ABSA 任务转换为句子对分类任务,使他们能够使用 BERT 作为他们的模型。下表显示了论文的结果:
来源:转载自“利用 BERT 通过构造辅助句进行基于体的情感分析”,作者:孙,黄,邱,2019,arXiv。
作者对来自transformers
库的bert-base-uncased
模型进行了微调,报告伯特-对-NLI-M 模型的准确率为 85.1%,伯特-对-QA-B 模型的准确率为 85.9%。由于两者之间的唯一区别是预处理的方法,我选择伯特-对-NLI-M。虽然这不是最高的性能,但它比伯特-对-QA-B 更快。伯特-对-QA-B 模型需要构建 25 个句子来执行评论的全方面分类。相比之下,伯特-对-NLI-M 只需要五个句子,每个句子都是一个单词,就可以完成同样的任务。就我的目的而言,这两个模型之间的精确度差异可以忽略不计。换句话说,精度提高 0.08%不足以保证速度降低 5 倍。
预处理
对于句子对分类任务,该模型将两个句子作为输入,并输出单个标签。我们把感兴趣的方面作为第二个输入句子。因此,预处理如下:
预处理示例
为了准备用于训练和评估的数据集,我使用以下代码从我的 GitHub 存储库中加载 SemEval-2014 数据集,并为 PyTorch 准备它:
火车
现在我们已经使用 transformers 结合上面定义的预处理方法将模型的范围缩小到句子对分类,对于我们想要微调的特定模型,我们仍然有几个选项。鉴于最近在用更少的参数逼近 BERT 方面的进展,我想看看这些模型中是否有比 BERT 表现更好的。如果较小的模型可以达到相同或更高的精度,我将能够更快地处理 Yelp 数据集,而不会牺牲性能。以下是变压器库中的模型列表,以及训练时使用的相应超参数:
模型比较
为每个模型设置的时期是验证损失达到平稳状态所需的数量。我将使用以下代码来训练每个模型:
评价
在训练完所有模型后,我根据精确度和马修相关系数(MCC)对每个模型进行评估。可以包括其他指标,如宏观 F1 分数,但 MCC 比其他单一分数指标更能提供信息。关于 MCC 的更多细节,你可以访问它的维基百科页面。在多变量情况下,混淆矩阵用于计算 MCC。
除了质量度量之外,我还将计算每个模型评估测试集所花费的时间。以下是我将用来评估每个模型的代码:
模型比较
从表中我们可以看出,bert-tiny 虽然速度很快,但精度或 MCC 不够高,无法与其他模型相媲美。然而,从其他方面来看,我们可以看到 bert-small 在 88.8%的准确率方面做得非常好,并且比 bert 快大约 7 倍,比 distilbert 快大约 3 倍。有趣的是,在所有显示的指标中,distilbert 的表现略好于 bert,除了 MCC 之外,其表现微不足道。本质上,我们发现在这个任务上,distilbert 总体上比 bert 好,并且快了大约 2 倍!因此,选择真的归结为伯特-小或蒸馏伯特。作为一个主观的决定,我将选择 distilbert,因为我重视精度提高 2.4%,而不是速度降低。下面快速浏览一下 distilbert 的混淆矩阵:
混乱矩阵热图
我们可以看到,该模型很好地预测了无标签和正标签,同时在负标签和中性标签上具有低于标准的性能。然而,冲突标签似乎给这个模型带来了最大的麻烦。这可能很难克服,因为如果句子是矛盾的,就会有积极和消极的情绪嵌入其中。如果没有足够数量的例子来说明一个句子何时是冲突的,那么该模型将不会学习如何区分肯定和否定。然而,我们将继续使用 distilbert。
例子
为了了解我们的分类器是如何做出决策的,让我们看几个例子,看看它是如何执行的,从下面我写的综述开始,然后是模型的分类。
We had a good time at the restaurant.
示例 1
这个例子中的模型是正确的;句子中没有具体关于食物、服务、价格或环境的内容。然而,对于去那里的一次特殊的轶事经历,人们有一种积极的情绪。这个例子很简单,所以我将添加另一个讨论食物的句子。
We had a good time at the restaurant. The food was delicious.
示例 2
在这种情况下,模型正确地将食物分类为好的。然而,它错过了积极的轶事部分的审查。我试着用颠倒的句子运行它,但是分类器犯了同样的错误。
现在,我将添加一些关于该服务的信息。
The waiter we had was horrible, but the food was amazing.
示例 3
这是一个很好的测试例子,因为它在同一个句子中包含了对两个不同类别的积极和消极情绪。该模型正确地识别了两个类别的情感。
最后,我将尝试一个更长的审查,并添加另一个类别。
My girlfriend is still not even speaking to me after I took her on a date here last week. The atmosphere was nice, but the food here was disgusting and the service was even worse. I will never in my life go back to this pizzeria.
实例 4
该模型对所有类别都是正确的,除了轶事,它被认为是负面的。然而,考虑到评论是多个句子,这个模型做得很好。尽管它在这个评论上表现良好,但当评论超过几个句子时,该模型表现不佳。然而,有办法处理这个问题。就我个人而言,我已经对数据集中的所有评论运行了该模型。我采用的方法是使用spacy
将评论分成多个句子,对每个句子运行模型,然后通过取平均值将它们聚合回一个输出。如果你准备好了,也试着迈出下一步。然而,由于时间关系,我们不会在这里展示。
结论
现在我们对模型的行为有了更多的了解,是时候探索 Yelp 数据集了!在下一篇文章中,我将深入研究使用 Yelp 数据集来决定在疫情之后去哪里吃饭。
敬请期待!
代号
链接
参考
[1]孙驰,黄,邱希鹏,利用 BERT 通过构造辅助句进行基于体的情感分析(2019)arXiv 预印本 arXiv:1903.09588
疫情之后我应该在哪里吃饭?(第二部分)
使用变压器进行基于方面的情感分析进行决策。
在上一篇文章中,我从 SemEval-2014 数据集训练了一个关于 ABSA 任务的模型,并分析了它的性能、速度和行为。本文详细介绍了我如何使用这个模型从 Yelp 数据集中选择一家餐馆就餐。不要再拖延了,让我们开始吧!
Yelp 数据集
我们可以通过两种方式下载 Yelp 数据集:
第一种要求与 Yelp 签署协议,之后数据集可以作为 zip 文件下载。Kaggle 方法需要一个在本地~/设置了用户名和 API 密钥的帐户。kaggle/kaggle.json。以下链接可以帮助您设置 kaggle:
如果你使用 Yelp,你必须下载 zip 文件,然后上传到 Google Colab。然而,如果你使用 Kaggle,你可以避免额外的步骤,直接将数据传输到 Google Colab。对于我自己,我将在本教程中使用 Kaggle 方法。以下代码从 Kaggle 下载数据集:
极性
为了给每篇评论打分,我们需要将每个标签映射到一个极性范围[-1,1]。
极性映射
与其拿分类器的硬分类,不如处理它的软会更有信息量。软分类将提供关于如何评价的正面或负面方面的信息。通过利用模型产生的概率向量和我们上面定义的极性图,我们可以找到一个方面在审查中的预期极性。例如,假设我们向模型中输入一个评论,并沿着食品方面进行评估,得到以下输出:
示例输出
我们没有将食物的极性指定为-1,而是发现这些标签的预期极性如下:
正如我们所看到的,这种方法更加实用,因为我们可以获得正负极性之间的梯度,从而为每个类别呈现更具代表性的情绪。
技巧
在运行我们的算法之前,有一件重要的事情需要注意。数据集中有两个评论来源:reviews
和tips
。提示比评论更紧凑;它们通常只有一句话。这是有帮助的,因为我们的模型的缺点之一是对较大的文本进行分类,正如我们在上一篇文章中看到的。以下是每种类型评论的文本中发现的单词数量的累积分布比较:
分布比较
显然,一个提示的字数比一篇评论的字数少得多。因此,小费将在模型的范围内很好地工作。考虑到这一点,我还将筛选未倒闭且相关小费超过或等于 100 的餐馆。这增加了有足够的信息为每个方面生成评级的可能性。下面的代码将对我们筛选出的所有提示进行批量预测,并将它们写入一个 JSON 文件,以便在下一步中进行处理。
此外,我将为我们的设置添加一个方面:餐厅的总体星级。我不会直接用星,我会考虑每个用户的平均星,做一个调整后的星系统。
在评估评论时,偏见分布是向左倾斜的。也就是说,在适当的 1-5 星评级系统中,人们倾向于给出比预期更多的星。
星级偏差修正
在做了这个修正后,我们现在可以根据我的偏好对每个提示进行个人重要性加权,从而对餐馆进行评分。
结果
运行完上面的代码后,我终于来到了我的餐馆列表🎉。看来我要去唱歌熊猫亚洲餐厅&酒吧用餐了!
结果
在谷歌上搜索了这个地方之后,我非常兴奋,准备在合适的时候尝试一下。看了一眼评论,我只看到了对这个地方的正面评价。以下是我谷歌搜索结果的截图:
来源:谷歌搜索“唱歌熊猫亚洲餐厅&酒吧”
现在我有了结果,我想尝试一些不同的权重。尝试了几种不同的重要性权重配置,我得到了非常相似的答案,这让我质疑结果中有多少变化。为了测试这一点,我从狄利克雷分布中生成了 100,000 个随机重要性权重并进行分析。这是我想到的:
根据这些发现,看起来你们中的很多人可能会和我一起去歌唱熊猫亚洲餐厅&酒吧!显然,对于大多数人来说,使用权重相对相同的方面的警告是,结果可能缺乏多样性。也就是说,有许多方法可以获得更个性化的结果。例如,您可以尝试添加更多方面,或者通过使用数据集业务表中的类别属性,尝试对您想吃的食物类型进行过滤。至于我,我对我的结果很满意,所以我会在我的晚餐时间结束之前停止我的分析😉。
结论
总之,本文的目的是展示如果我们采用机器学习的方法来为我们工作,我们如何利用大量的评论对我们有利。
在这种意见挖掘中可以做的一个改进是开发非特定领域的模型。换句话说,拥有一个框架,在从相应的评论中预测每个特征的极性的同时,衍生出任何产品的特征,将是一个明显的进步。
无论是您应该购买什么样的耳塞、应该穿什么样的鞋,还是应该在什么样的餐厅用餐,基于方面的情感分析都可以为我们节省普通决策所需要的时间和精力,是一个很好的决策工具。本文到此为止,我希望在这个疫情,每个人都保持安全和健康。当一切都结束了,希望你能看到我在亚利桑那州钱德勒的歌唱熊猫亚洲餐厅&酒吧用中国菜填饱我的脸!
下次见!
密码
链接
- https://www.yelp.com/dataset
- https://www.kaggle.com/yelp-dataset/yelp-dataset
- https://alt.qcri.org/semeval2014/task4/index.php?id =数据和工具
参考
[1]池孙,黄,邱锡鹏,利用 BERT 构建辅助句进行基于方面的情感分析 (2019), arXiv 预印本 arXiv:1903.09588
机器学习和量子力学之间的对称性改善了模拟
思想和理论
UT 奥斯汀物理学研究生克里斯·罗斯用对称的力量解决奇异的量子问题。
以不直观著称的量子力学定律预言了一系列奇怪的效应。许多奇异的材料,如超导体,具有如此复杂的行为,即使是最强大的计算机也无法处理它们的计算[1]。因此,一些系统必须通过创新的大规模模拟来征服[2]。UT Austin 的研究人员 Chris Roth 开发了一种机器学习算法,使用两种对称来使这个问题更容易处理[3]。首先,他的周期系统在输入结构中找到一个模拟。第二,粒子之间的力方便地服从算法输出的一种依赖性特征。
对称性的概念在物理学中不断出现;它简化了问题,突出了不同属性之间的关系。引用先驱量子物理学家菲利普·安德森的话:“说物理学是对对称性的研究只是稍微夸大了一点。”它可以采取多种形式,比如一片叶子的两面是彼此的反射,或者是时间上的循环模式。晶体的定义是展现对称性:当你以不连续的步骤穿过一种材料时,你会发现任何地方的局部环境都是一样的。这被称为“平移不变性”,如图 1 所示。
图一。二维晶体的一部分。对于长度 a 的垂直或水平方向上的每次平移,左下角的橙色点和右上角的绿色点的图案会重复自身。在这种情况下,晶胞是长度为 a 的平方,其中有一个橙色原子和一个绿色原子。因此,只要你在这些类型的离散位移中移动,从 P 点的视图将是相同的。图片作者。
在固体中,带正电的原子核固定在一个周期模式中,电子或多或少可以自由漫游。因此,模拟只专注于模拟电子之间的相互作用[4]。库仑力导致同性粒子相互排斥,并不取决于电子的确切位置,而是取决于它们之间的距离。这种只关心相对距离而不是精确位置的特性也出现在递归神经网络(RNN)中,这是一种机器学习算法。然而,在 RNN 的情况下,该距离是输入步骤的索引之间的距离,而不是实际空间。输入被分解成离散的、连续的片段,每一个片段都被编码以产生自己的输出。RNN 允许更早的输入被向前传递以告知结果,因此最终的输出依赖于所有的输入[5]。该过程如图 2 所示。三个彩色圆圈代表这个“隐藏状态”,即输入和输出之间的步骤。在本例中,有三条输入,索引为 1-3。输入 1 (i1)被馈送给算法,该算法将特定于 RNN 试图解决的问题。然后,i2 和先前的隐藏状态被馈送给算法。它们产生 o2,这就更有料了。这将传播许多步骤,直到考虑了所有的输入。在此图中,只多了一个步骤,即生成最终输出 o3。
图二。具有三个输入和输出的递归神经网络。与以前的投入相比,最近的投入对产出的影响更大。图片作者。
如图所示,并非所有的输入都同等重要——最近的输入对输出的影响最大。这被称为“短期记忆丧失”,RNN 氏症的形成方式导致了这种效果。在具有输入和正确输出的数据集上训练模型。训练模型微调每个隐藏状态中的参数,以产生正确的最终值。预测后,根据与已知答案的比较计算误差,并调整每层的参数。这个调整就是机器学习的方式!每一层中的更新取决于前一层必须改变多少。通常,调整随着每一层而减少,从末端向后传播。因此,第一层几乎没有经历任何调整,也没有学到太多东西。
虽然短期失忆在某些情况下是一种缺点,但在其他情况下,它实际上反映了自然。电子有一种叫做自旋的性质,自旋是内部角动量的度量。一个电子处于某一位置的概率可以从一种叫做波函数的东西中预测出来[4]。在 Roth 的情况下,输入是每个晶胞的自旋态,输出是波函数。如果电子只关心其他附近的,那么短期记忆丧失不是问题——答案应该更少依赖于远处的电子输入!因此,RNN 重视本地输入多于进一步输入的特性模拟了系统的物理特性。但是,需要注意的一点是,每个输出只考虑前面的输入,实际上忽略了后面的输入,即使它同样在附近。这相当于支持一个方向,尽管电子排斥应该是空间对称的。为了说明 RNN 架构中的这种不对称,可以对输出取平均值,以获得精确的结果。系统之间的第二个模拟出现在 RNN 离散输入格式中,这在晶体中是合适的,因为它们的属性仅适用于离散空间平移。
计算几个晶胞的波函数在定性上可能很有趣,但接近实验中使用的实际晶体大小将提供关于新量子行为的更确定的答案。Roth 的方法不仅适用于小系统,而且随着输入量的增加,计算质量也会提高。这表明 RNN 能够学习系统的物理学,也许能够捕捉到使用具有相似对称性的算法来模拟一个系统是多么自然。如果物理学家要理解我们这个时代一些最有趣的量子现象,如超导、相互作用的磁场和电场效应(量子霍尔效应)和纠缠,这样的计算进步是必要的。
参考
[1]https://www.nature.com/articles/s41524-018-0085-8
[2]https://www.nature.com/articles/s41567-018-0048-5
[3]https://arxiv.org/abs/2003.06228
[4] R. M. Martin,《电子结构:基本理论与实践方法(剑桥大学出版社,英国剑桥,2004)。
[5]https://towards data science . com/illustrated-guide-to-recurrent-neural-networks-79 E5 EB 8049 c 9
量子优势从何而来
格罗弗算法的直觉
本帖是本书的一部分: 用 Python 动手做量子机器学习 。
在许多情况下,我们需要在一组项目中找到一个特定的项目。毫不奇怪,搜索算法是计算机科学中最突出和最有用的算法之一。
让我们想象一下,你需要给一个著名的量子计算先驱打电话,格罗弗先生。你在电话簿里搜索他的号码,因为你还没有。你在中间打开这本书,你会看到以 L 开头的名字,因为 G 在 L 之前,你拿起书的前半部分,再在中间打开。你会看到有 E 的名字,因为 G 在 E 后面,你翻开书,在 E 和 l 中间,你会看到 Grover 先生的号码。
我们把这种搜索算法称为二分搜索法。该算法重复地将搜索间隔分成两半。如果搜索的项目低于区间中间的项目,它会将区间缩小到下半部分。否则,它会将范围缩小到上半部分。它会重复,直到找到值或间隔为空。二分搜索法算法缩小了搜索空间非常快,收敛到一个解决方案。唯一的问题是,该算法依赖于你搜索的数据进行排序。如果数据没有排序,算法就不起作用。
这是一个大问题,因为不仅二分搜索法依赖于分类数据,几乎所有的搜索算法都是如此。
如果数据没有以任何其他方式排序或结构化,唯一有效的搜索算法是线性搜索。在线性搜索中,我们必须评估每一个条目,以验证它是否是要搜索的条目。虽然这种方法适用于小数据,但不适用于大数据集。
这就是格罗弗算法发挥作用的地方。在这篇文章中,我们了解了 Deutsch 的算法,该算法可以计算两个输入参数的函数,而只运行一次。Grover 的算法告诉我们如何在一个无序列表中搜索一个项目,而不需要逐个查看每个项目,而是一次查看所有项目。它使用两种技术来实现。首先,它使用量子神谕来标记被搜索的状态。第二,它使用一个扩散器来放大被标记状态的幅度,以增加其测量概率。
我们可以用状态、振幅和测量概率来描述量子系统。但这些都是我们无法直接观察到的内在描述。每当我们测量一个量子系统时,我们都会得到一个单一的值——这个特定系统所处的状态。
如果我们测量两个相似的系统,我们可能会测量不同的值。然后,我们知道这个特殊的系统可以处于不同的状态。如果我们有许多相似的系统,我们可能在某些州比在其他州更频繁地测量系统。我们测量一个量子系统在某个状态下的频率取决于概率。量子系统的每个状态都有一定的测量概率。它越高,我们就越有可能在这种状态下测量系统。
一个状态的测量概率取决于这个特定状态的幅度。数学上,测量概率是振幅的绝对值的平方。我们马上就会明白这意味着什么。
格罗弗的搜索算法从一组相等叠加的量子位开始。这意味着所有状态的振幅相等。因此,它们都具有相同的测量概率。如果我们只测量这个系统一次,我们会发现它处于任何状态。哪一个取决于运气。如果我们测量这个系统无数次,我们会看到它在每一个国家同样频繁。
作者弗兰克·齐克特的图片
我们要寻找的州就在这些州中。目标是以一种方式改变系统,如果被测量,我们会发现系统处于这一状态。一直都是。
量子预言机的任务是识别被搜索的状态。量子神谕不是一种神奇的成分,而是一种控制结构。它是一个量子算符。该运算符对搜索状态的幅度求反。
当然,重要的问题是:“神谕如何识别被搜索的状态?”
先知使用被搜索的量子态的任何特征。如果我们从一组相等的状态开始,那么根据定义,这些状态只是在枚举方面不同。它们的不同之处在于,我们测量(如果我们测量的话)某个量子位是 0 还是 1。例如,如果我们使用四个量子位,那么就有不同的 2^4=16 态。从|0000⟩出发,到|0001⟩,在|1111⟩.结束
每个量子位可以有特定的意义。我们可以把它理解为一封信。这封信没有 26 个不同的选项,只有两个,|0⟩和|1⟩.有了足够数量的量子位,我们可以代表所有活着的人。有了 33 个量子位,我们可以代表大约 85 亿个不同的状态。人类的电话簿。我们还没有分类。
现在,假设四个量子位就足够了,格罗弗先生被称为|0010⟩.oracle 使用该状态的特定特征来识别它。也就是说,这个州有一个|1⟩在第三位,而|0⟩在第三位。
由于量子预言机将所有量子位作为输入,它可以很容易地应用这种精确状态的转换。我们用 4 个量子位还是 33 个都没关系。先知一下子就认出了格罗弗先生。
神谕应用于被搜索状态的变换是振幅的反转。
作者弗兰克·齐克特的图片
在振幅的这种表示中,我们可以清楚地看到被搜索状态和所有其它状态之间的差别。我们可以过早地宣布搜索结束。
唯一的区别是振幅的符号。对于来自振幅的绝对平方的测量概率结果,符号根本不重要。
振幅源于这样一个概念,即每个量子实体不仅可以描述为粒子,也可以描述为波。波浪的主要特征是它在运动时上下起伏。振幅是波的中心和波峰之间的距离。
如果我们颠倒一个波在所有位置的振幅,结果是同一个波偏移了其波长的一半。
这两种波的不同之处仅在于它们的相对位置。这是波的相位。对于外界来说,波的相位是不可观测的。单独观察,这两个波看起来是一样的。所以,问题是我们无法区分这两种波。
作者弗兰克·齐克特的图片
因此,该系统从外部看起来没有任何不同。即使神谕标记了被搜索的状态,因此它不同于其他状态,所有状态仍然具有相同的测量概率。
我们需要将差异转化为可衡量的东西。我们需要增加标记状态的测量概率。这是扩散器的任务。扩散器应用关于平均振幅的反转。
我们来看看平均振幅。
作者弗兰克·齐克特的图片
有了四个量子位,我们就有了 16 种不同的状态。每个状态的幅度为 1/sqrt(16)=1/4。事实上,除了一个状态之外,每个被搜索的状态都有这个振幅。搜索状态的幅度为 1/4。因此,平均值为(15÷1/4 1/4)/16 = 0.21875。
平均值比我们没有标记的所有状态的振幅小一点。如果我们用这个平均值来反转这些振幅,它们最终会比平均值低一点,为 0.1875。
因为标记状态的振幅是负的,它离平均值相当远。均值的反转有更大的影响。它将幅度从 0.25 乘以 2(0.25+0.21875)翻转到 0.6875。
作者弗兰克·齐克特的图片
如果我们在许多正振幅中寻找单个或几个负振幅,关于平均值的反演工作得很好。然后,这个操作增加了我们知道是正确的负振幅。这个操作减少了正振幅,我们知道这是错误的。
该操作将负振幅增加一个大的量,同时将正振幅减少一个小的量。
但是我们拥有的状态越多,整体效果就越低。在我们的例子中,我们计算出被搜索状态的新振幅为 0.6875。相应的测量概率是 0.6875^2=0.47265625.因此,在我们寻找的状态下,我们大约每隔一段时间才测量这个系统。否则,我们在任何其他情况下测量它。
当然,我们现在可以多次测量系统,并将我们搜索到的状态视为最有可能的状态。但是运行这个算法这么多次将会失去我们从不搜索所有状态中获得的任何优势。
相反,我们重复算法。我们用同样的神谕来否定被搜索状态的幅度。然后我们再次反转平均值附近的所有振幅。
然而,我们不能重复这个过程太多次。有一个重复这个过程的最佳次数,以获得测量正确答案的最大机会。获得正确结果的概率增长,直到我们达到大约π/4*sqrt(N)其中 N 是量子系统的状态数。超过这个数字,测量正确结果的概率再次降低。
在我们有四个量子位和 N=16 个状态的例子中,最佳迭代次数是 3。
结论
格罗弗的算法搜索未排序的数据。它遵循一个简单的程序。量子预言反转了被搜索状态的振幅。然后,扩散器反转关于平均振幅的所有状态,因此,放大搜索的状态。该算法重复这些步骤,直到解决方案具有接近 100%的测量概率。
重复的次数取决于它需要考虑的状态的数量。由于重复次数只增加了大约状态数的平方根,与经典的线性搜索相比,该算法提供了二次加速,这是唯一能够搜索未排序数据的经典方法。
然而,像所有的量子计算机算法一样,格罗弗的算法是概率性的。它以很高但不是绝对的概率返回正确答案。因此,我们可能需要重复该算法,以尽量减少失败的机会。
本帖是本书的一部分: 用 Python 动手做量子机器学习 。
在这里免费获得前三章。
哪里有物质,哪里就有几何…
规范理论、对称性、机器学习等等
目的: 对于这篇初始帖子,我想简要介绍一下微分(黎曼)几何中的关键概念,这是理解即将到来的帖子所必需的,这些帖子位于机器学习、能效、拓扑和几何的交叉点。然而,与其直接推动机器学习,我希望科学家和工程师们思考一下— 为什么要利用几何来理解统计推断 ?总是从为什么开始!我们使用几何学,不是因为它很酷,相反它是必要的。
在 ubi materia,ibi Geometria 是约翰尼斯·开普勒的原话。看看你的周围;世界充满了不同的形状和空间——橙子(圆形)、马鞍(双曲线)、地球(椭圆形)以及许多其他形状。随着复杂算法的出现,我们可以很容易地推断出纽约离伦敦有多远,或者如果你是一个机器学习爱好者,你可以测量分布之间的距离和散度(Kullback-Leibler,Jensen-Shannon 等)。).为我们提供这种洞察力的纯数学部分是几何学。几何本身以不同的形式出现——从欧几里得几何、解析几何、代数几何等等。作为剑桥大学的一名研究生,我非常幸运地在伊萨克牛顿数学科学研究所呆了很长时间,学习了许多不同类型的几何知识。然而,直到我遇到了甘利顺一,我对信息几何(基本上是用来理解概率分布的几何)及其与统计物理的联系的兴趣才被激发起来。Amari-san 的眼睛里有一种明亮的火花,我总是喜欢去听他的讲座。说够了。
我们周围物体的常见形状。来源:科学杂志
机器学习特别感兴趣的是微分几何。为什么?因为它集合了微积分和多元线性代数的工具来研究各种流形。微分几何着眼于黎曼流形——这些是带有度量的光滑流形(就像信息几何中的那些),洛伦兹流形——这是爱因斯坦广义相对论的基础,芬斯勒流形,克勒几何——用于复杂流形,等等。正如你所看到的,有很多东西要学,我们从某种东西开始怎么样,这种东西为我们理解我们周围的任何物理现象提供了一个平台——规范理论。
规范理论是预测一个或多个物理场如何与物质相互作用的物理理论。每一个规范理论都有一个关联的拉格朗日量(即一个概括了所讨论的系统动力学的函数),它在一组局部变换下是不变的。考虑惯性参考系中的牛顿运动定律(例如,一个球在一个空房间中)。这些定律在房间的任何地方都有效。这意味着动力学和拉格朗日不依赖于球的位置。在这个系统中,在空间平移下,动力学将是不变的。这些变换——保持了拉格朗日——据说配备了规范对称性。简而言之,对称只不过是对参照系变化的不变性或免疫。
取一个旋转的参照系(如地球),称之为系统。在地球自转的过程中,每个城镇之间的距离保持不变。随着地球的旋转,我们可以说我们有一个规范转换,它不会改变城市的距离。这意味着系统保持其对称性(,自然法则),尽管全局力(作用于系统的每一点)的作用(或规范变换)。这个动作对应于系统的全局变换——保持不变的变换;在这种情况下,距离。然而,还有另一种可能性:例如,比较地球和其表面的运动物体(例如,海洋中的水)。当相对于地球描述水的运动时,它的惯性(即它沿直线运动的趋势)扭曲了它的运动。这种现象被称为科里奥利效应:电流在北半球往往以顺时针方向(相对于行进方向)流动,而在南半球则以逆时针方向流动,而不是像在非旋转世界那样直接从高压区流向低压区。因此,科里奥利效应是旋转(非惯性系)参照系中的曲线运动。不恒定的规范变换,即随空间位置变化的规范变换,被称为局部对称性。一个或多个局部力只作用于系统的几个部分,产生局部变化。
尽管有局部力的扰动作用,为什么对称性仍然存在?这是因为局部力被另一个力平衡了——称为规范场。注意,当系统的整体对称性在局部力的作用下保持不变时,就会出现局部变形,这种对称性被称为局部破坏,或者充其量是隐藏。在一个具有整体对称性的系统中,有可能找到一个可以被规范场“修复”的局部对称性破缺。让我们再次以科里奥利力为例。对于只使用惯性参考系的人来说,科里奥利力不存在;它们只是我们发明的力,用来假装我们在一个惯性系统中,而事实上我们并不在:它们是实用的,因为它们允许我们继续使用牛顿定律。阿尔伯特·爱因斯坦发现了类似的东西;当重力(由能量和动量引起)存在时,狭义相对论就不成立。然而,通过允许能量和动量弯曲时空,他可以保留狭义相对论,至少在局部,使引力消失。对爱因斯坦来说,重力和科里奥利力一样不真实;当选择一个不合适的参照系时,它们是我们必须发明的力量。让我用一个单摆的例子来说明这些想法:
*Consider a simple pendulum that oscillates with the same frequency **ω** in ***x***and ***y*** coordinates. It is usually convenient to use polar coordinates, where **z = x + iy**, such that the motion can be described by a (second order) differential equation **∂ₜₜz + ω²z = 0** and the direction or angle satisfies **tan θ = y/x**. In terms of the motion, the absolute coordinates (the ***x*** and ***y*** axes) are simply irrelevant; for example, we can rotate the axes by **a** to represent the motion in new coordinates **x'** and **y'**. The differential equation remains the same (although we need to replace **θ** by **θ−α**. This amounts to multiplying the differential equation by **exp(-iα)** and redefining **z'=zexp(-iα)**. This means that although we have rotated the frame of reference, the equation of motion is unchanged. This is **global gauge invariance**. It is global because the entire frame of reference was rotated by the same amount, irrespective of where or when we describe the motion.Now imagine we rotate the ***x*** and ***y*** co-ordinates by an angle that depends on time: i.e., the rotation **α** now becomes **α(t)**. With this local transformation (local with respect to a particular time), multiplying by **exp(-iα)** does not ensure the invariance of the differential equation. How could we then retain the laws of motion? Remarkably, we can do so by replacing the time derivatives by **∂ₜ − iA(t)**. The field **A(t)** is the compensatory **gauge field** that ensures the equation of motion holds, locally. This is **local gauge invariance**. This amounts to rotating our coordinate system with an angular velocity **∂ₜa(t)** creating a fictitious force (like a Coriolis force). In short, the gauge field **A(t)** induces compensatory yet fictitious forces, necessary to retain invariance under a local gauge transformation. From a local perspective, the pendulum will appear to move erratically in response to the gauge field; while, from a global perspective, nothing has changed.*
简而言之,规范理论相对简单:有一个描述运动方程式的拉格朗日量。这些运动方程在空间参考系的变化下通常是不变的(例如,一条直线在一张纸上的任何地方都是直线);然而,如果我们退后一步,看到运动(时空中的一条线)随着位置而改变(例如,一张弯曲的纸上的一条直线),我们可以通过引入补偿场或力——规范场,将整体对称性扩展为局部对称性。这里弯曲或曲率的概念很重要,因为在概率分布空间中形成轨迹的流形必然是弯曲的。
微分几何
我们所有人都沉浸在一个 4 维的世界里,3 个空间坐标和 1 个时间坐标构成了参照系。纤维束是微分几何的构造,它提供了这种参考系的一般公式。直观地说,通过将一组相同的一维线粘合在一起,例如堆叠在 x 轴上,可以对二维薄片进行采样。然后,这些线被称为纤维( F ),将它们粘合在一起的子空间被称为基底(b)——合在一起,这些线形成了一个纤维束( F̄ )。用圆柱体代替二维薄片只是改变了基底;其中纤维附着在一个圆上,一条线的坐标在正负无穷之间,而圆上的坐标取值在 0 和 2π之间。在这种情况下——很容易找到一个全局坐标系——我们称相应的束 平凡 。一个重要的束可能是一个莫比乌斯带,其中不可能实例化一个全局坐标系。这种情况经常发生。在这些情况下,可以使用局部坐标系网络。唯一的要求是建立一些规则来描述局部坐标如何在相邻的面片之间变化。一个连接域——也称为规范域——满足了这一要求,并协调了粘合到基底附近点的光纤坐标系之间的明显不一致。
因此,规范场是一个由独立的底坐标组成的向量场。对于两个坐标系统(两个局部点)的比较,只需构建一个框架调整规则以及独立的基座坐标即可。这种差异可以通过沿着独立方向的一系列转变来说明(比如说 b )。在数学上,计算基数 db 和规范域的点之间的差的标量积。**
这里的规范域 A 是F(b)和 F(b + db) 坐标系之间的转换。和之间的路线定义了一条曲线;连同轨距字段,这些定义了沿曲线的平行传输**。当我们用一个连接场来比较一根纤维中两个相距很远的元素时——没有发现差异——我们可以说第二个元素是第一个元素沿曲线平行传输的结果。现在让我们将我们到目前为止所描述的概念形式化:**
****定义 1。一个光滑纤维丛是一个复合对象,由——( a)一个光滑流形 F̄ 组成,称为全(丛)空间,(b)一个光滑流形 B 称为基空间,©一个光滑映射 w: F̄ → B 称为投影,要求它的雅可比矩阵在每一点都具有最大秩, (d)称为纤维的光滑流形 F 和(e)称为纤维束的结构群的纤维 F 的光滑变换群 G 。 相切和共切束是纤维束的特例。总结动力学的拉格朗日函数是切线束上的自然能量函数,而哈密顿函数是共切线束上的自然能量函数。一个喷射束概括了切线束和余切束。
****定义 2。如果我们可以引入全局坐标系,使得任何点都可以使用一对坐标 (x,f) 来识别,则光纤束被表征为 平凡的 ,其中 f 是光纤上的一组坐标, x 是基底上的一组坐标。同样, 主纤维丛 是一种特殊的纤维丛,其纤维是群 G 。
定义 3。对于底座上的一条曲线 γ ,一条连线**是光纤在点 γ(m) 到光纤在点 γ(n) 的映射 (b) ϕᵧ 与路径的参数化无关——平行输送是由路径而不是函数 γ(⋅) ,(c ) ϕᵧ 是恒等映射如果*【t】γ(t)【d】沿两条连续曲线的平行输送是等价的 其推论表明,在相反方向的运输产生反向平行运输。如果映射 ϕᵧ 是基中任意曲线的结构组的一个元素,则称一个连接为g-连接*。综上所述,端点相同但路径不同的并行传输的结果可以不同。纤维束的曲率测量这种差异。****
出于我们的目的,我们将把自己限制在一个黎曼流形**——一个解析的流形,其中每个切空间都配有一个内积,从点到点平滑变化。这个内积采用局部逼近流形的切丛上的度量的形式。这使我们能够定义各种概念,如长度、角度、体积等。**
定义 4。流形 上的黎曼度量是共变的 2 张量 g ,它将流形上的每个点与切空间 Tₓℳ 上的内积g =<->ₓ。度量是双线性的、对称的和正定的,因此定义了切空间上的欧几里德距离。在局部坐标方面,度量由矩阵 给出 gᵢⱼ = < Xᵢ,> ₓ 其中 Xᵢ 和 Xⱼ 是 ℳ 在处的切向量,并且随着 x 平滑变化测地线曲线是用黎曼度量计算的弧长的局部最小值。********
***定义 5。*在黎曼几何中, Levi-Civita 连接是保持黎曼度量的切丛的挠率或曲率自由连接。更具体地说,它是一个独特的仿射连接 ∇ 使得它是
兼容公制,即:
具有对称性,即,
其中**【X,Y】为卧括号*。*
相容条件可以用协变导数来表示,即如果 X(t) = X(γ(t)) 和 Y(t) = Y(γ(t)) 是沿曲线 γ 和 D/dt 的两个向量场
***定义 6。*在已经参数化的流形中,曲线 γ(t) 表示为 ({x }(t),…,{xᴹ}(t)) ,向量场 v 的协变导数可以写成:
在这里,连接γᵢⱼᵐ的系数被称为克里斯托夫符号*。简单地说,沿曲线的平行输送变成一阶线性系统,*
在这种情况下,克里斯托夫符号由下式给出:
gᵐˡ 代表公制倒数。测地线方程现在可以写成一个二阶系统,
今天就到此为止。
注:我不得不承认,在介质上使用 LaTeX 写数学并不简单,因为需要将所有内嵌的 LaTeX 方程转换成 Unicode 🤐。因此,请原谅这篇文章中的数学排版。
我打算写一些帖子,要么是(a)数学的(就像这里的这个),要么是(b)机器学习的商业用例(这里的这个关于 人工智能产品-市场契合度 )。我会试着将每篇文章交错,以保持不同受众群体的博客文章之间的平衡。
DOTA2 中在哪里放置选区
实践教程
向职业玩家学习
由叶夫根尼·切尔卡斯基在 Unsplash 上拍摄的照片
TL;博士:购买病房并把它们放在战略位置
成为 DOTA 中的支援英雄
DOTA2 是一款 MOBA 游戏,有许多有趣且有时隐藏的机制。这是一项团队运动,每个队员都要扮演各自的角色。例如,支援英雄被期望为农场依赖英雄创造喘息空间,堆叠营地,并购买支援物品。
当我学习扮演支援英雄时,一个重要的角色是地图视觉。事实上,正确的愿景可以帮助团队实现关键目标。此外,视觉创造了地图感知和空间,让你的队友相对安全地漫游或伏击( gank )。
该员额的目标是:
- 借助一些数据科学工具,探索职业玩家在何时何地使用视觉。
- 作为休闲玩家的向导,改善他们的游戏体验。
- 推断一下像 Dota Plus 这样的付费订阅是如何做病房建议的。
完整的代码可以在这里找到:
https://github.com/NadimKawwa/DOTAWardFinder
定义愿景
第一种是观察区,提供一个区域的视野。他们的视线被树线挡住了,一个放置在山顶上的观察病房提供了飞行视野。注意观察结界不会暴露隐形单位。
另一方面,哨兵病房没有自己的视野。然而,站在岗哨旁边的玩家可以看到隐形单位。
两种类型的结界对敌人来说都是不可见的,除非设置了岗哨结界。在战略要地放置结界的行为称为 守卫 ,移除敌方队伍放置的结界称为 去守卫 。
地图概述
下图显示了完整的 DOTA 地图,辐射队在左下方,可怕队在右上方。更多详情,请参见这篇维基文章。
来源: CC BY-NC-SA 3.0 牌照下的【https://dota2.fandom.com/wiki/Map】T2
OpenDota 项目允许玩家查看比赛概要和有用的情节,如下图取自一场样本比赛:
- 绿色光芒四射
- 红色是可怕的
- 带虹膜的椭圆形是一个观察病房
- 没有虹膜的椭圆形是一个哨兵病房
请注意,观察员病房有一个更大的视线,地图没有考虑到由于树木或高地上的障碍。
由 OpenDota 制作的病房地图样本在麻省理工学院许可下提供
数据收集
OpenDota 的任何人都可以免费查询这些数据:
https://www.opendota.com/explorer
用于解析数据的 SQL
以下 SQL 查询返回专业比赛的日志数据。时间框架被任意设定为 2021 年 1 月 1 日及以后。此外,25000 个匹配应该足以满足我们的目的。
数据格式
下图显示了感兴趣的两个主要列。这些日志是 JSON 格式的,为了更好地接收数据,它们将被扁平化。以下信息与本项目相关:
- (x,y)病房的位置。
- 哨兵或观察者。
- 时间安排。
- 如果由辐射或可怕的团队放置。
作者截屏
OpenDota 坐标系
OpenDota 使用的坐标系与实际地图尺寸不同。实际上,地图的左下角对应于坐标(64,64),并且地图被分成从 0 到 127 编号的象限。因此,地图的右上角有坐标(192,192)。
数据一览
数据看起来怎么样?下图显示了数据集中所有观察区的分布情况,以及按高度显示的地图颜色。蓝色点(z=132)对应于一座小山,因此位于山顶的病房视野开阔。此外,还添加了一个红色边界框来显示地图的范围。
有趣的事实:( 100,150)处的灰色空白点对应罗山的坑,里面不能放置任何结界。
作者的情节
之前的剧情很乱,没有透露太多。因此,让我们来看看所有病房的安置时间:
作者的情节
有人可能会问:两个团队的守卫活动是一样的吗?下图证实了这一点,没错,不管是哪个团队,活动都是一样的。
作者的情节
此外,让我们看看下图中山丘的守卫活动。它遵循与整体防护活动相同的趋势,并在游戏的第 40 分钟后下降。
作者的情节
如何识别病房群集
考虑下面的情节,它显示了游戏开始前放置的所有观察者的病房。一眼我们就能推断出玩家想要在哪里放置结界,但不知道他们优先选择在哪里放置。
作者的情节
如果我们想要识别具有激烈竞争视觉的位置呢?团队在哪里优先考虑守卫?我们可以使用下一节中解释的聚类算法来回答这些问题。
选择的型号:DBSCAN
DBSCAN 由两个关键参数控制:
- ε:两个样本之间的最大距离,其中一个被认为是另一个的邻域。
- min_samples:一个点的邻域中被认为是核心点的样本数。
DBSCAN 的一个优点是它不需要指定簇的数量,并且它可以找到任意形状的簇。此外,它有一个噪声的概念,是健全的离群值。因此,一些病房将不会被分配到一个集群,并作为离群值。
为什么不使用 KMeans?
KMeans 可以作为一种替代的聚类算法。然而,它依赖于三个假设:
- 每个变量分布的方差是球形的(KMeans 喜欢球形斑点)。
- 所有变量都有相同的方差。
- 每个聚类都有大致相等数量的观察值。
这是第三个最严重阻碍知识手段的假设。事实上,有些地方有几个病房就可以了,比如中间的车道,而其他地方经常会有争议,比如安全车道。
时间的影响:后期游戏 Vs 早期游戏
DOTA 是一个分秒必争的游戏,每一刻都是创造新事物的机会。事实上,时间(游戏的阶段)的影响是制定策略的一个主要因素。
如果一级塔还在的话,在你的基地里放置一个守卫区是没有意义的。因此,根据任意的时间框架对病房进行分组比忽略时间的影响更有见地。
每个阶段的地图视觉集群
这一部分包含了由哨兵/观察者和辐射者/恐怖分子划分的守卫图。此外,还提供了一个注释来解释集群如何反映玩家的策略。
赛前—0:00 分钟前
在第一波蠕动波离开基地之前,玩家会争夺金色符文。因此,玩家在河流附近的地图中心放置观察哨,以便观察敌人在做什么。此外,有些人会在敌人有时间撤退之前,在敌人的丛林深处安置观察员。
最后,红色显示的岗哨对应的是经济战。事实上,在一个中立的爬行动物营地的边界内放置一个岗哨可以防止后者产卵。因此,敌人的团队被剥夺了黄金和拉蠕变波的能力。
早期游戏— 0 点到 10 点
在早期的游戏中,中线和安全丛林仍然是有争议的。因为一级塔可能还在,所以优先视野在丛林入口附近。
游戏早期到中期— 10:00 到 20:00
在游戏的早期到中期,恐怖和光辉都试图将观察者的守卫放在敌人安全的丛林深处。在游戏的这个阶段,三角形开始变成一个有争议的区域。
游戏中期— 20:00 到 30:00
视觉主要集中在三角形和山顶上。
游戏中后期— 30:00 到 40:00
比赛中后期,队伍可以把注意力转向罗山的坑。这表现在矿坑附近的山顶上布满了观察哨和岗哨,它们被放置在入口处,用来探测抢夺神盾的企图。
游戏后期— 40:00 到 60:00
现阶段罗山的坑还是一个相关的客观。重点是三角形。一些岗哨被安置在基地附近。
非常晚的游戏— 60:00 及以后
在游戏的最后阶段,兵营和三级塔可能已经没有了。为了弥补塔楼视野的损失,在基地内部安置了病房。
创建交互式浏览器
图的输入和参数是任意的,并且基于领域知识(即,数百小时的游戏)。如果你想调整数据,请使用下面的 streamlit 应用程序:
https://share . streamlit . io/nadimkawwa/dotawardfinder/main/appwardfinder . py
下面的截图显示了该应用程序,并要求用户输入 3 个信息:
- ε值
- 时间范围
- 每个聚类的最小样本数
本项目的优势
这个项目使用真实可靠的大规模数据。因此,它可能会捕捉职业玩家的最佳实践,并跟上战略和游戏机制的变化。
此外,这里使用的方法与地图的变化无关。因此,输出中已经考虑了对地图布局或高程的任何更改。
固有的局限性
这个项目不评估一个病房的寿命。玩家面临着决斗的优先权:
- 守卫一个敌人可能会向其开火的区域,因为它提供了有利的视野。
- 守卫一个鲜为人知的地点,失去关键视野,但敌人不太可能放弃它。
此外,一个岗哨守卫需要 50 金币,如果被摧毁将不会得到任何奖励。另一方面,观察结界是免费的,但是提供 100 金币奖励,并且每 15 秒额外提供 1 金币。因此,有一个成本/收益比方面的 warding,这个职位没有解决。
结论
有可能查询数据和识别关键地图位置,在那里病房可以帮助团队安全杀死或关键目标。这篇文章的方法的优点是它跟上了地图布局和游戏机制的变化。因此,通过观察大量的比赛,我们可以发现关键位置,并在我们的游戏中实现它们。
参考
https://github.com/odota http://varianceexplained.org/r/kmeans-free-lunch/ https://en.wikipedia.org/wiki/DBSCAN#Disadvantages https://github.com/odota/core/issues/1473
更多推荐
所有评论(0)