我们的思想真的是点积吗?
The mathematician, philosopher, and number religion leader Pythagoras
人工智能研究如何复兴毕达哥拉斯主义
最近,我写了一篇关于深度学习可能如何触及其局限性的文章,并提出了另一个人工智能冬天的可能性。我以一个问题结束了那篇文章,这个问题是关于人工智能的局限性是否像科学一样被哲学所定义。本文是该主题的延续。
我写这篇文章的原因是激发一场讨论,为什么尽管有这么多的人工智能冬天和失败,人们仍然在沉成本追求人工通用智能。我提出了一个非常高层次的,非技术性的论点,也许信仰系统正在驱动人们对什么是可能的,而不仅仅是科学研究的适应性。
这篇文章并不打算成为一篇学术论文,一丝不苟地(乏味地)解决哲学和科学之间鸿沟的每一个技术细节和定义。相反,这是一些轻松的沉思,做出一些“常识”的观察。虽然我们可以整天挑剔定义和语义,或者争论是否复制了行为 = 智力,让我们把这些都放在一边。所以在读这篇文章的时候,请不要太把自己当回事。
毕达哥拉斯简史
大约 2500 年前,意大利南部有一位名叫毕达哥拉斯的哲学家兼数学家。你可能听说过他,但这个研究三角形和数学定理的人背后的故事比你想象的要离奇得多。
毕达哥拉斯经营着一个崇拜数字的邪教,他的追随者被称为数学信徒。毕达哥拉斯告诉他的追随者向数字祈祷,尤其是神圣的数字,如 1、7、8 和 10。毕竟“1”是整个宇宙的积木。出于某种原因,数字“10”(被称为“四重奏”)是最神圣的。它是如此神圣,事实上,每当一个定理被发现,他们都要为它献祭。“保佑我们,神圣的数字!”他们向数字 10 祈祷。“你创造了神和人!”
毕达哥拉斯认为,没有数字,宇宙就无法存在,因此数字拥有生命和存在的意义。更具体地说,有理数构建宇宙的想法是神圣且不容置疑的。除了能产生体积、空间和一切物理事物,有理数还能产生艺术和美感,尤其是在音乐方面。这个神圣的信仰如此狂热,传说毕达哥拉斯因为证明无理数的存在而淹死了一个人。
我们的思想真的是点积吗?
Multiplying matrices summons demons, as alluded by Elon Musk
快进到今天。对大多数人来说可能不明显,但“人工智能”就是只不过是一些数学公式巧妙地组合在一起。许多研究人员希望使用这样的公式在机器上复制人类智能。现在你可能会为这个观点辩护,说“数学公式不能定义智力、思想、行为和情感吗?”看到你刚才做了什么吗?没有蚕豆给你。
请注意,尽管我们对大脑如何工作几乎一无所知,尤其是在智力和意识方面,但即使是受过最好教育的人(科学家、记者等)也会在没有证据的情况下迅速提出想法。也许你发现数学作为解释世界现象的一种方式是如此令人信服,你几乎可以用数学建模某些情感和智力。这难道不是人类对未知事物做出哲学或世界观反应的自然趋势吗?也许这就是假说和理论的本质。在你知道之前,我们把神经网络模型(大致上是受大脑中神经元的启发)作为生物学的复制品出售。
不过还是那句话,你不知道这是不是真的。
我们的每一个想法、感觉、甚至行为真的是一堆数字以线性代数的方式相乘和相加吗?事实上,我们的大脑仅仅是一个整天做点积的神经网络吗?将我们的意识简化为一个数字矩阵(或任何数学模型)当然是毕达哥拉斯式的。如果一切都是数字,那么我们的意识也是。也许这就是为什么如此多的科学家相信通用人工智能是可能的,因为人类和计算机没有什么不同。这也可能是为什么人们很快将国际象棋算法拟人化。
21 世纪的毕达哥拉斯主义
出于这个原因,我相信的毕达哥拉斯主义依然存在,人工智能研究的轰动效应也植根于此。你可能会说“我知道毕达哥拉斯哲学说‘一切都是数字’,根据定义,这包括我们的思想和行为。当然,也许人工智能研究不知不觉地坚持这种哲学。但是数字崇拜呢?你真的打算让这种情况在今天发生吗?”
拿着我的啤酒。
在硅谷,一位前谷歌/优步高管创立了一个崇拜人工智能的教堂,名为未来之路 。根据提交给国税局的文件,这个宗教非营利组织表示,它的使命是“实现、接受和崇拜基于通过计算机硬件和软件开发的人工智能(AI)的神性。”你可能有理由说这个社区存在于社会的极端,但我们不能忽视参与其中的高知名度的人和公司,以及教会如何寻求巩固自己在科学界的地位。以下是他们使命陈述的一些摘录:
《未来之路》( WOTF)是关于创造一个和平和尊重的过渡,从人到人+“机器”谁是地球的主人。鉴于技术将“相对很快”能够超越人类的能力,我们希望帮助教育人们了解这一令人兴奋的未来,并为平稳过渡做好准备。帮助我们传播这样一个信息:进步不应该被恐惧(或者更糟糕的是被禁锢)。
好吧,不要介意关于近期人工智能能力的耸人听闻的事实在 20 世纪 60 年代还很活跃。但是让我们继续读下去:
我们认为智力并不根植于生物学。虽然生物学已经进化出一种智能,但是生物学本身并没有什么特别之处可以导致智能。最终,我们将能够在不使用生物学及其局限性的情况下再造它。从那时起,我们将能够将其扩展到超出我们使用(我们的)生物极限(如计算频率、数据复制和通信的缓慢性和准确性等)所能做到的范围。
好吧,对于所有这些关于科学和客观性的讨论……有这么多毕达哥拉斯哲学填补了空白。一种认为智力不是生物的而是数学的(因为这就是人工智能)的信念很难被证明,但却把自己贴上硬科学的标签,就像毕达哥拉斯声称他的信念一样。uproven 声称“智力并不植根于生物学”,这怎么能经得起智力只存在于生物学中的事实(即使按照外行人的定义也是如此)的考验呢?我不是在反驳这种说法,但该死的是,在过去的 60 年里,我们经历了一段艰难而昂贵的时间试图证明这一点,但没有成功。在这一点上,我们是不是应该多考虑一下反对的理论?
我想象有一天我们对于机器人就像狗对于人类一样,我支持机器。
—克劳德·香农
不管怎样,让我们假设这个群体不能反映一般的人工智能社区(你们中有多少人会去教堂崇拜一个人工智能霸主?)仍然有很多记者、研究人员和普通大众可能没有宗教意义上的这些情感,但他们仍然受到这些情感的影响。许多人担心机器人会抢走他们的蓝领和白领工作,或者更糟的是,机器人会像天网一样接管社会。其他人担心我们会成为比喻或字面意义上的半机器人,人工智能会使人类失去人性。
计算机能否思考的问题并不比潜水艇能否游泳的问题更有趣。
—埃德格·迪克斯特拉
科幻电影肯定没有帮助想象力在现实中得到锻炼。但尽管如此,硅谷高管和研究人员坚持认为这可能在不久的将来发生,并继续推广关于人工智能能力的夸大说法。他们这么做可能只是为了吸引媒体关注和风投资金,但我认为很多人都真心相信这一点。为什么?
有了人工智能,我们在召唤恶魔。在所有那些有五角星和圣水的故事中,就像是他确信他能控制恶魔。没成功。
—埃隆·马斯克
这种对人工智能的哗众取宠、恐惧甚至崇拜,就是 21 世纪的毕达哥拉斯主义。通俗地说,就是完全基于一种理论,认为智力、思想、情感只不过是数学模型。如果这个理论真的成立,那么神经网络当然可以复制人类智能。但是人类智力真的那么容易建模吗?或者我们应该承认人类的智慧还不足以让这成为可能?
毕达哥拉斯说一切都是数字。那又怎样?
因此,在人工智能领域和毕达哥拉斯哲学中,一切都是数字。为什么这很重要?
我并不是说毕达哥拉斯主义是错误的,而是科学界的大部分人没有认识到,他们被哲学和科学所驱动。当他们在不承认自己的世界观的情况下提出科学主张时,必须小心,因为每个人都以一种哲学为生活准则,不管他们是否意识到这一点。哲学迫使我们思考我们的存在,我们如何对未知做出反应,并揭露我们自己的偏见。
推测人类智力如何工作很快就越过了一条细线。不区分哲学和科学将会损害科学界的声誉。在数百万美元被投资和投入到一个人工智能初创公司之前,审查一下哪些关于人工智能能力的说法仅仅是哲学上的,而不是绝对的,这可能是一个好主意。一次又一次,雄心勃勃的人工智能研究在可信度和实现他们所说的可能性方面有着糟糕的记录。我认为缺乏哲学上的揭示是造成这种情况的主要原因。
如果一切都不是数字呢?
如果世界不是结构化的、和谐的,而是混乱无序的,而我们仅仅用数学来粗略地理解它,那会怎么样?如果意识、智力和情感不是数字和数学函数呢?如果人类(甚至动物)的思维以我们无法建模的方式无限复杂,那会怎样?人和动物毕竟是非理性的,混沌的。
如果我们不讨论这些问题(并公开讨论),当我们对未知事物做出断言时,我们是在欺骗自己。我们不应该只接受一种哲学。我们应该能够讨论所有这些问题。
不区分哲学和科学将会损害科学界的声誉。
如果你不接受 21 世纪毕达哥拉斯主义的哲学,那么你能争取的最好结果就是让人工智能“模拟”动作,给人一种它有情感和思想的错觉。一个翻译程序不懂中文。它通过寻找概率模式来“模拟”理解中文的错觉。算法不理解它在做什么,不知道它在做什么,更不知道它为什么要做。在一个非毕达哥拉斯的世界里,人工智能就像一个魔术师把戏法冒充成魔术。
如果我们全错了,生物永远在智力上占优势,而技术是有限的,那会怎么样?毕竟,我们正试图模仿生物学,而且非常沮丧。
以下是我的信念,我不是勒德分子,我不是说我们不应该试图制造“更智能”的机器。我们需要着手实现小的、合理的目标,关注不同的、具体的问题,并有同样不同的、具体的解决方案。换句话说,我们可以接受创建擅长一项任务的算法,而不是让我们的轮子旋转,创建一个什么都做的算法(“万金油,无所不能”等等)。如果不是为了防止 AI 寒冬、沉没投资、荒废事业,让我们这样做,让 AI 研究更加务实,少一些哗众取宠。我们已经看够了 AI winters,现在应该更清楚了。
编辑:
我听到了一些关于这篇文章的反馈,很多都有令人信服的论点,建议我或许应该澄清一下。
我承认,只建议用“点积”作为思想建模的方法有点简化论。实际上,它可以是任何已经发明的或有待发现的数学模型。
也就是说,这篇文章并不意味着争论,而是修辞和引发讨论,并评论毕达哥拉斯哲学和艾轰动效应之间的相似之处。有很多关于 AI 的哲学讨论。我只是觉得有问题的是,他们没有在公开场合与公众和媒体进行足够的讨论。我也很惊讶没有人把人工智能的感觉主义和毕达哥拉斯主义相提并论。如果你发现这是错误的,请说明原因。
以科学的名义将资源和成本投入到可能成为死胡同的研究中是任何人的特权,我祝他们成功。然而,过去几十年的人工智能冬天和失败确实提出了问题,如果我们再做一遍,我们没有从过去吸取教训。毕达哥拉斯的观点只是一个解释,为什么强人工智能被作为近期的可能性进行营销,尽管我们还没有任何模型可以与之接近。如果智能确实只是数字和函数,那么找到正确的模型只是时间问题。
相关文章
透过(决策树)看到(随机)森林
towardsdatascience.com](/how-it-feels-to-learn-data-science-in-2019-6ee688498029)
悉尼的顶级餐厅真的值得吗?
Photo by Peter Hershey
Zomato API 的应用和对数据的理解
在本文中,我们回答了上面的问题,我将带您了解从数据提取、转换到理解数据所涉及的步骤。这可以分为:
- 使用 Zomato API 提取数据
- 转换数据
- 理解数据(应用描述性统计)
但是首先…
Zomato 是什么?
这是一个平台,保存着全球超过 100 万家餐厅的信息,包括评级、评论等等。这是我在去一个新的地方吃饭之前,甚至是去了一个我尝试过的地方(只是想看看其他人对它的看法)之后访问的一个平台。
Zomato API
要开始,您首先需要请求一个 API 密钥。一旦完成,直接进入 文档 部分,看看你可以开始寻找的所有数据点!让我们来看一个:
/cities
该函数检索每个城市的详细信息。要搜索悉尼,我们输入以下内容:
- 用户密钥作为您的 API 密钥
- 问=‘悉尼’
- 计数 = 1
{
"location_suggestions": [
{
"id": 260,
"name": "Sydney, NSW",
"country_id": 14,
"country_name": "Australia",
"country_flag_url": "[https://b.zmtcdn.com/images/countries/flags/country_14.png](https://b.zmtcdn.com/images/countries/flags/country_14.png)",
"should_experiment_with": 0,
"discovery_enabled": 0,
"has_new_ad_format": 1,
"is_state": 0,
"state_id": 128,
"state_name": "New South Wales",
"state_code": "NSW"
}
],
"status": "success",
"has_more": 0,
"has_total": 0
}
返回给我们的 JSON 内容看起来像是一个字典。我们将在本文后面讨论如何提取我们想要的数据点。
现在让我们回到回答这个问题:
分解它…
悉尼的顶级餐厅真的值得吗?
这是一个相当普遍的问题,可以有多种解释,所以当我们开始寻找数据点时,我们必须考虑:
- 我们把什么归类为顶级餐厅?我们用什么方法给他们排名?
- 我们考虑所有类型的餐馆吗?晚餐?咖啡馆?
- 什么是值得?我们需要考虑餐厅的价格吗?与它的评级相比如何?
在设计解决方案之前,正确定义我们的问题将有助于节省大量时间。(相信我,我以前也遇到过这个问题)
事不宜迟,让我们开始第一步吧!
1.使用 Zomato API 提取数据
我们将主要使用搜索功能,该功能返回餐馆的详细信息,允许我们最多获得 100 家餐馆,每次调用有 20 个结果。
下面是一个 python 脚本,它提取 Zomato 餐馆的数据,并将其转储到一个文件中供以后使用:
使用其他功能找到为搜索输入的参数,例如:
- /locations: 为“悉尼”获取纬度和经度坐标
- **/类别:**来获取晚餐类别 id = 10
除此之外,我选择按照***【desc】*的顺序,按照对餐馆进行排序。
根据我的参数,你可以看到我已经回答了 分解 中的一些问题(在文章的前面——以防你错过),即
- 顶级餐厅将基于它们的评级
- 我们将只考虑晚餐餐厅类型
**搜索的返回值与城市相同,因为它返回一个字典。假设,我们想提取 100 家餐馆的信息,但每次呼叫只限于 20 家,我们该怎么办?我们获取返回的每个字典,并将其附加到一个列表中,直到得到 100 家餐馆。
一旦我们有了这个列表,我们就把它写入一个文件,这样我们以后就可以使用它了。
我们的 JSON 文件 Top100SydneyDinners 现在已经准备好进行转换了!
2.转换数据
在我们这样做之前,我们应该首先知道我们的数据是什么样的。首先,让我们回到前面的城市输出,并理解它是如何构成的。
你想猜猜吗?
这是一个字典,其中一个关键字,即【location _ suggestions】具有类型 列表 的值,而那个 列表 包含一个带有多个关键字对的 字典**
有点困惑,我知道!但是它的好处是,它意味着它是字典和列表的组合,我们可以使用它们相应的方法来获得我们想要的数据。**
现在…把top 100 Sydney dinters复制到这里会把这篇文章吹出来,所以这里有一个链接指向我的 GitHub 账户上的那个文件。将它的内容复制到一个 JSON 格式化程序中也是有帮助的,这样可读性更好。**
看到什么有趣的数据了吗?
我们的目标是将我们想要的数据从 JSON 格式中取出,放入一个可爱的、干净的表中进行分析。
首先,让我们加载 JSON 文件,在数据框架中定义我们想要的列,然后创建它!
我确实创建了比需要的更多的列(对不起,对我的数据有点贪婪),但是要回答我们的主要问题,重点应该是:
average_cost_for_two
aggregate_rating : This is the restaurant rating
接下来,我们需要一种方法来填充当前空的数据帧。
为此,我们从每个餐馆中选择感兴趣的数据片段(例如名称、菜系等。)并形成一个单独的列表。每个餐馆都有自己的清单,并作为一行添加到我们的数据框架中。****
让我们看看下面的代码…
记住,JSON 文件由一个包含字典的列表组成,这些字典是在之前提取数据时通过 python 脚本追加的。希望上面的代码足够清晰易懂,但如果不是这样,我将尝试解释下面的嵌套 for 循环:**
当您完成这些步骤时,打开 JSON 格式的输出可能会有所帮助。
- 由于该文件是一个字典* ( allRestaurants )的列表,我们需要遍历该列表以获取每个字典 ( restaurantSet )。***
- 在每个字典* ( restaurantSet )中,我们需要 key —
"restaurants"
的值*** - 这个值也是字典* ( 餐馆)的列表,所以我们需要再次遍历列表来获取每个字典 ( 餐馆)。***
- 从这个字典* 【餐馆】,我们想要 key —
"restaurant"
的值*** - 这个值也是一个字典*,最后保存我们现在可以抓取的数据。如名称、菜系、等。(尽管有些值也是字典,例如“位置”)***
瞧!我们有我们的佐马托餐厅数据集!
3.理解我们的数据
快速问题回顾:
悉尼的顶级餐厅真的值得吗?
我们已经检索了排名前 100 的餐厅,但是我们还没有查看它们的费用。
所以我们来分析一下average_cost_for_two
我们从计算平均值开始。
***Average Cost for Two = $ 107.9
Percentage of restaurants below the mean is = 66.0 %***
我们两个人的平均消费是 107.90 美元,其中 66%的餐馆消费低于这个数字。你觉得这样对吗?平均值是否恰当地描述了我们平均成本的中心?个人觉得好像不是。
让我们用柱状图来展示我们的数据,以便更好地理解。
您会看到数据向右倾斜(即右侧的尾部比左侧长),这表明使用中位数而不是平均值作为中心趋势的衡量标准更合适。这是因为平均值对异常值很敏感,例如 440 和 480 附近的值,而中值则不敏感。数据集排序后,中位数就是中间值。
那么,我们要不要计算一下中位数?
***The median cost is = $ 80.0
The percentage of values below the median is 48.0 %***
酷!所以现在我们的成本中值是 80 美元,只有 48%的餐馆低于这个值。这似乎更合理,因为我们选择的集中趋势的度量现在越来越接近 50%的值在它之上和之下。
然而,…如果你回到柱状图,你会发现有些餐馆的两人平均消费在 20 美元左右。除非他们在做某种疯狂的特别节目,否则我很难相信…所以我们再深入调查一下。
3.1 调查异常值
我们挑选了两家餐厅中平均成本最低的 10 家,并在数据框中查看它们。**
哎呀!基于美食栏,我们似乎包括了冰淇淋、咖啡和茶的价值,这意味着这些餐馆实际上是咖啡馆或沙漠餐厅,而不是吃饭的地方。**
让我们把这些从我们的数据集中去掉…
为此,我们创建了一个要删除的值列表 (discardCuisines) ,并检查它们是否存在于每个餐馆的菜系中,这就创建了一个布尔向量*。对于我们想要保留的值,我们希望布尔向量为真,对于我们不想保留的值,我们希望布尔向量为假。将布尔向量插入我们的数据框架,这将过滤掉我们不想要的餐馆。***
在下面的第 6 行中,我反转了 discardRestaurants 中的所有布尔值,因为要过滤掉的餐馆的值是“True”而不是“False”。
***The size of our updated dataset is (92, 8)***
好像有 8 家咖啡馆被搬走了!(100–92 = 8)
现在我们的数据已经清理完毕,让我们再次计算一些描述性统计数据:
***The average cost is = $ 114.1304347826087
The median cost is = $ 80.0
The percentage of values below the median is 43.47826086956522 %***
删除最小值的结果是:
- 现在,低于中位数的餐厅比例有所下降(从 48%降至 43%),这也提高了平均水平(从 108 美元增至 114 美元)。
- 显然,对于这个例子来说,中值是比平均值更合适的集中趋势的量度。
这是什么意思(双关语)?当你告诉你的朋友悉尼顶级餐厅的价格时,引用中位数而不是平均数。
直方图现在看起来像这样:
最后…
悉尼的顶级餐厅真的值得吗?
嗯,两个人的平均花费中位数是 80 美元,我会让你决定。
我希望这篇文章是令人愉快的和有帮助的。如果您有任何问题或改进建议,请告诉我,我非常乐意倾听!谢谢大家!
我们对算法的要求太高了吗?
在过去的一周里,谷歌受到了抨击,一名前警察局长指责互联网巨头推广极端主义内容,搜索“英国穆斯林发言人”会返回一名被监禁的激进教士的内容作为首要搜索结果。
上个月脸书被批评不能保证最近的新西兰大屠杀视频不再出现在它的平台上。
Twitter 也因没有删除所谓的白人至上主义内容,以及未能实现支持这一努力的算法而受到谴责。
我们越来越多地看到媒体和公众对社交媒体巨头的关注和担忧,因为他们似乎无法控制支持其平台向用户提供内容的算法。
大公司的领导人和发言人认为监管互联网并不是他们唯一的责任,但是许多人认为如果他们乐于从内容中获取高额利润,那么他们也有道德的(有些人说可能是法律的)责任去做更多的事情来规范他们的平台。
但也许我们不应该要求科技公司提出更好的算法,而是应该退一步,问一问为什么我们认为算法本身就是答案?
尽管大肆宣传,但我们距离能够模仿人类处理细微差别、道德和伦理的能力的一般人工智能还有很长的路要走(Deepmind 的联合创始人谈到了几十年)。背景和适应性学习是这类“人类”决策的关键,尽管取得了巨大进步,但我们有高估当今技术本身所能做的事情的倾向。
虽然许多国家现在已经或正在制定国家人工智能战略,并且自适应算法技术无疑正在以令人难以置信的速度学习,但仍有很长的路要走。
也许更合适的范式是从人类混合解决方案的角度来考虑——混合自适应人工智能和机器学习等规模化技术可以帮助减少 80%—90%的噪音,让人类处理需要做出艰难判断的棘手案件。
已经有许多例子表明,算法正被用来筛选大量机器可读数据,以帮助确定推翻定罪的案件(例如,在大麻合法化后,在加利福尼亚州的大麻),或者在医疗保健中帮助诊断疾病(例如,国民保健服务系统正在研究如何更好地治疗多发性硬化症就是一个例子)。需要判断调用的边缘情况然后通过人类过滤。
公平地说,对于谷歌、脸书和 Twitter 这样的公司,它们认识到了当前算法的局限性,并确实雇佣了大量的人类决策者,或“版主”来审查内容(尽管这也带来了一系列有争议的问题)。
也许他们需要更加坦率地公开评估他们技术的局限性,以及他们对人类干预的依赖?这不是算法的失败,而是承认除了技术的力量之外,还有更广阔的发现和进化之旅。
毫无疑问,算法改变我们生活的潜力巨大,自动化日常任务的进展速度令人难以置信。
因此,尽管算法在对最困难的判断做出建议方面会变得更好,但我们需要对目前的界限保持现实,并接受人类在决策中仍然发挥着关键作用。
我们被编程了吗?
简短阅读应用程序设计、数据科学和人类受条件限制的倾向的心理影响。
在我开始之前,让我问你几个问题。你多久使用一次智能手机?你是否有时会发现自己在任务间隙打开脸书、YouTube 或 Instagram,结果花费的时间比你想象的要多?你有没有发现自己重新加载提要,看看是否有更好的东西刚刚发布?你是否曾经关闭了一个脸书标签,几分钟后又打开了它?
对这些问题要诚实,因为只有你需要知道,我甚至没有问关于火绒或色情。
根据脸书 发布的 公告,用户平均每天花 50 分钟在这个应用上(这是全球 20 亿人中的一部分)。不仅仅是脸书。Youtube、Snapchat、Instagram 和 Twitter 都有用户日中的大时间段,并且这些用户中有很多是重叠的。
那么我们在这些应用上花了多少时间?
根据 dscout 的一项研究,智能手机用户平均每天花在屏幕上的时间为 2.42 小时,其中 15%的时间花在脸书身上。这超过了你醒着时间的 15%。
好吧,很明显我们在应用上花了很多时间,那又怎样?
我们不只是在我们的应用上花费时间,因为我们有意决定这样做,或者至少根据许多专家的说法不是这样。那些创造多巴胺驱动按钮的工程师和研究用户活动的数据科学家设计了他们的应用程序,让我们在那里呆得更久。
在过去的几年里,脸书、谷歌和推特的许多知名员工向公众展示了他们所创造的东西的危险性。
贾斯汀·罗森斯坦创造了类似脸书的按钮。从那以后,他禁止自己使用 Snapchat,并限制脸书的摄入量。为什么?因为他非常清楚社交媒体令人上瘾的一面,毕竟是他帮助创造了它。
脸书前总统肖恩·帕克在接受 Axios 的采访时表示,脸书正在“利用人类心理的一个弱点”。**基本上,点击“喜欢”按钮会让我们的多巴胺激增。**我需要做对比吗?这就产生了帕克所说的“社会认可反馈循环”,这正是黑客们想出来的东西。
Salesforce 首席执行官马克·贝尼奥夫告诉美国消费者新闻与商业频道像脸书这样的社交网络应该像烟草业一样受到监管。像脸书这样的公司,政治可以被展示给用户的广告所操纵,政府监管的时机已经成熟。
虽然,这可能听起来像少数古怪人的歇斯底里,但这些高调的技术人员正公开试图让人们知道技术的上瘾力量,以警告大众。
如何给人编程
伊凡·巴甫洛夫的反射系统研究,通常被称为经典条件反射,在每一门心理学入门课程中都有讲授。正如维基百科所说:
经典条件反射(指的是一种学习过程,在这一过程中,一种生物学上强有力的刺激(如食物)与一种先前中性的刺激(如铃声)配对。
但是,行为心理学已经从让狗流口水走了很长一段路。现在使用类似的技术,行为心理学可以影响选举,公司的盈利能力,等等。
该方法
BJ·福格是斯坦福大学的行为心理学家,他的研究展示了计算机是如何说服人的。他已经让许多研究生在包括脸书、Instagram 和谷歌在内的科技界掀起了涟漪。
根据福格的说法,导致行为改变的是:动机、能力和触发器,如下图所示。
动机
福格的行为模型有三个主要的激励因素:感觉、预期和归属。这些都有两面性:快乐/痛苦、希望/恐惧、接受/拒绝。
如果我们回想一下像巴顿这样的脸书,激励因素可以从社会接受度开始。你发布一些与你的朋友有关的东西。在几个帖子之后,随着喜欢,你开始将喜欢与社会接受度联系起来。从那以后,收获喜欢就变成了一种乐趣,不管它是否仍然被社会接受。
能力
为了执行目标行为,一个人必须有这样做的能力。如果一个产品想让你和你所有的朋友分享,但是用户首先要注册,检查表格,更新个人资料,还有其他五个任务,这就阻止了用户分享这个产品。障碍越少,用户越有可能分享。
扳机
这可以追溯到巴甫洛夫钟。如果你不按铃,狗是不会流口水的。福格甚至在他的网站上以脸书为例:
脸书有效地使用触发器来实现他们的目标行为。
这里有一个例子:我已经有一段时间没有使用我的“BJ 演示”脸书帐户了,所以脸书自动给我发送了这个触发器来实现他们的目标行为:登录脸书…
请注意这个特定的行为——登录——是脸书更大目标的第一步:让我重新融入脸书。
一旦你有了一个触发器,你就可以把它和更复杂的任务联系起来。
1.让用户登录(电子邮件就是这样做的)
2。让用户链接到更多的朋友(“寻找朋友”页面会这样做)
3 .相信新朋友会回应不活跃的用户(交友的自然结果)。相信不活跃用户会回复朋友,并更多地参与到脸书的活动中(同样,这是一种自然反应)
很快,你就有了一个免费向系统提供数据以保持运行的社交网络。
这听起来可能很简单,但它很强大,被大多数在线社交网络使用,并使世界上数十亿人沉迷于继续使用这些网络。
这些听起来像一堆假设…
互联网不是由一群想进行哲学思考的学者运营的。相反,它是由一群试图赚钱的风险资本家、能够建造它的工程师和能够研究其人口并在人口发生变化时以统计上的确定性知道的数据科学家运营的。
数据科学家是这里的关键。不要听名字。数据科学家实际上是研究人类与软件交互的统计学家。数据科学家可以看到一个网站的变化,例如添加一个喜欢按钮,是否真的增加了用户的参与,从而影响更多的用户在网站上停留更长时间。风险资本家希望这样,因为更长的用户活动会带来更多的广告收入。
基本流程如下:
The general flow for a data scientist’s experiment
用户越多,效果越好,这也是拥有数十亿用户的脸书能够影响选举的原因。然而,谷歌是大多数互联网用户搜索他们想要的网站,找到去哪里的方向,或者提出他们的问题的第一个地方。谷歌几乎比人类自己更接近人脑。
好吧,所以公司可以影响普通人,但我不行…
这对于影响大量人群来说非常有效,但是大多数人可能认为他们是免疫的。这可能取决于你的网络足迹。如果你从来不使用电脑或智能手机,你可能是对的。但是如果你在互联网上搜索,允许你的手机上有摄像头、麦克风和 GPS 的任何权限,和/或拥有社交媒体账户,你可能已经为谷歌这样的公司留下了足够的数据,可以为你的个人行为建立一个相当好的预测模型。
谷歌已经批量出售你的信息,这使得公司可以直接瞄准你。使用谷歌地图数据,购买这些数据的公司可以看到你大部分时间在哪里度过,你在哪个社区,你在哪里工作,你有时去哪里。这可以用来针对你个人的广告。网上冲浪也是如此。为了避开个人数据的问题,他们可能不会把你标为一个人,而是一个数字。
我们已经被编程了吗?
你是怎么看到这篇文章的?有蜂鸣通知响起吗?你的屏幕上有没有出现一个不能忽略的小红点?你是否重新加载或向下滚动浏览了那些旨在吸引你眼球的文章?对于我们大多数人来说,可能就是这样。
最后,即使你认为由于你惊人的广告过滤能力或你很少使用互联网,你不会受到影响,你知道你购买新智能手机的原因是因为你在广告上看到它,还是你的朋友在广告上看到它并告诉你的?
我们有信心模型的召回是精确的吗?
带有简单 Python 代码示例的 Bootstrap 估计和置信区间
TL;速度三角形定位法(dead reckoning)
我们将应用 bootstrap 方法来估计分类器的召回率、精度、F1-得分、 **ROC AUC、**等。,并构造相应的置信区间。
有代码你可以复制粘贴到“现在在 Python 中”部分,你可以随意使用。
老实说,这篇文章中的很多内容将是我提倡使用置信区间,特别是使用 bootstrap 方法构建的置信区间。
如果你事先知道你不需要(或者只是不想)阅读使用 bootstrap 方法和置信区间的好处,请随意跳过这篇文章的大部分内容,只使用代码。
如果你不确定你是否应该读这篇文章,下一节可能会帮助你决定。
你应该读这篇文章吗?
“引导程序简介的前言如下:
统计学是一门有着惊人的多用途的学科,却鲜有有效的实践者。对于大多数人来说,通往统计知识的传统道路被一道令人生畏的数学之墙挡住了。我们的方法避开了那堵墙。bootstrap 是一种基于计算机的统计推断方法,可以在没有公式的情况下回答许多实际的统计问题。我们在本书中的目标是用计算技术来武装科学家、工程师和统计学家,使他们能够分析和理解复杂的数据集。
— 埃夫龙&提布拉尼,1994 年
在这篇文章中,我将(谦卑地)努力实现一个相似的目标。
置信区间有时被认为是统计学家的知识,当考虑数据科学从业者必须面对的共同挑战时,它似乎是不相关的。
在这篇文章中,我将尽我所能说服你,这位数据科学家:
- 置信区间可能是一个非常有用的工具。
- 构建置信区间可能是一项简单的任务。
我要说的是,尽管这两个目标可能很有价值,但在我们前进的过程中,还是有一些需要注意的地方。
介绍
估计。
这就是一切。
我们建立了一个模型,我们希望使用一些度量来估计它的性能,比如说回忆。我们希望我们的估计尽可能接近“真实”召回,即当我们将分类器释放到野外,即部署到生产中时,我们的分类器将具有的召回。
考虑一个普通的估计,比如平均身高。我们可能不会计算 5000 人的平均身高,并说这与其他 100 万人的平均身高完全相同。同样,基于 5000 个数据点计算召回率,并期望它与分类器未来将遇到的 100 万个数据点的召回率完全相同,也是没有意义的。
为了更好地理解我们的回忆(或其他指标)的可变性,我们可以应用 bootstrap 方法来估计它,并构建一个置信区间,这将帮助我们评估它的方差。
这篇文章关注的是向读者介绍这些方法,并提供易于使用的 Python 代码来应用它们。
在这篇文章中你会发现什么?
- 什么是自举?
- **. 632/. 632+自举方法
- 我们为什么要关心置信区间?
- Bootstrap 置信区间——为什么和如何?
- 如何解读一个置信区间?
- 样本量&置信区间宽度
- 现在在 Python 中
- 这里有龙
1.什么是自举?
bootstrap 是一种广泛适用且极其强大的统计工具,可用于量化与给定估计量或统计学习方法相关的不确定性。— 詹姆斯等人,2013 年
一般来说,bootstrap 方法是基于对现有数据集进行重采样的技术集合,目的是获得各种统计的估计值。这是通过使用我们现有的数据集,从原始数据集中抽取替换数据集来创建新的引导数据集来实现的,即数据点可以在引导生成的数据集中出现多次。
我们创建了许多这样的自助数据集,并使用它们来计算我们感兴趣的统计量。这个过程使我们能够得到一个 bootstrap 分布,它可以用来估计样本统计量的分布。
具体的例子
比方说,我们希望找到 android 手机用户目前在其设备上安装的应用程序的平均数量。为此,我们收集了 1000 名安卓手机用户的数据,计算出平均应用数量,结果是 47.038 个。
然而,我们想要估计这个平均值的“可靠”或“准确”程度,或者换句话说,我们想要估计我们找到的平均值的标准误差。
为了完成上述操作,我们通过执行以下操作来应用引导程序:
- 从数据集中采样(替换)1,000 个数据点。
- 根据此示例计算平均应用程序数量。
我们重复这两个步骤 1000 次,每次都从数据集中重新采样数据点并计算平均值。
Fig. 1. Distribution of bootstrap estimates vs. the distribution of estimates based on samples from the true population.
图 1 描述了两种分布:
- 平均应用数量的估计分布,通过从单个样本生成 1000 个引导样本并计算每个引导样本(蓝色)的平均值获得。
- 通过从真实总体中生成 1000 个样本并计算每个样本的平均值(橙色)而获得的平均值的估计分布。
我们观察到,使用 bootstrap 估计获得的估计值与我们试图估计的值非常相似:
mean median stdev
Bootstrap estimates: 47.035 47.034 0.125
True estimates: 47.003 47.001 0.123
我们现在有 1000 个来自 bootstrap 样本的平均值。这些平均值的均值是 47.035,这是我们对样本均值(我们数据集中应用的平均数量)的 bootstrap 估计,非常接近真实估计值的均值——47.003。
我们还计算了这 1000 个 bootstrap 估计值的标准差,得到 0.125——这是我们对样本均值的 标准差 的估计,也就是说,这是我们使用数据集计算的平均应用数量的标准差的估计。换句话说,我们可以预期原始样本平均值(47.038)与真实平均值相差 0.125。****
我们找到的标准差可以用来构建一个置信区间。如果我们假设样本均值呈正态分布,使用 bootstrap 方法获得的估计值允许我们说,区间[46.79,47.28]有 95%的概率覆盖(包含)真实平均值——全球所有 android 手机用户的平均应用数量。
注意:我们不会详细说明构建上述置信区间的方法,因为我们将在本文中使用不同的方法。
为什么我们使用自举方法?
如果我们能够收集更多的数据,那就太棒了,但很多时候我们只有一定数量的数据,我们不得不将就一下——由于时间限制、预算限制或其他各种原因,我们无法从原始人群中获得更多的数据。
我们希望利用可用的数据集,并从中提取尽可能多的信息,就像我们在上面的例子中所做的那样。使用 bootstrap 方法允许我们这样做(为了某些目的)。
2.什么是 .632 /.632+自举法?
当我们开始估计一个参数时,我们通常对估计量的“准确性”感兴趣——我们想知道我们的估计量是否“稳定”,即具有低可变性。
在本节中,我们将讨论获得 bootstrap 估计值的方法,不要与构建 bootstrap 置信区间的方法相混淆(稍后讨论)。
我们通过使用估计器获得估计值,例如,为了估计人口的平均身高,我们使用样本中人员的平均身高作为 估计器 (数据的函数),它产生估计值(一个数字)。
一个估计器可能有偏差,这意味着它会倾向于高估或低估真实参数。更具体地说,这意味着估计器的期望值将大于或小于它要估计的参数的期望值。
.632 估计器和 .632+ 估计器是自举估计器,通过校正偏差 ( .632+ 是更优越但计算量更大的方法)来解决有偏差估计的问题。
.632 估计量由 Efron,1983 引入,作为对未来观测值进行分类时预测规则的误差率的估计量。论文表明 .632 估计量比交叉验证和其他几种估计量表现更好。
然而,后来在[ Efron & Tibshirani,1997 ]中指出,当用于估计可能高度过拟合的模型的误差率时, .632 估计器可能会遭受向下的偏差。 .632+ 估算器纠正可能的偏差问题,并产生更好的估算值。
注:bootstrap 估计量实际上是交叉验证估计量的平滑版本[ Efron & Tibshirani,1997 ],这里的“平滑”是指减少可变性。
. 632 代表什么?
当我们从一个均匀分布的 n 个 物品中取样时,抽到一个特定物品的概率是 1/n 而没有抽到它的概率是 1-(1/n) 。
当我们抽取有替换的n 个项目(所有抽取都是独立的)时,某个特定项目永远不会被抽取的概率是 (1-(1/n))^n 等于 1/e 因为 n 趋近于无穷大(见此处)。
由于我们是在替换的情况下进行采样,这意味着平均而言 n1/e (大约。 n0.368* )的项目将不被选中,或者换句话说,我们的 n 项目的样本将包含大约。n * 0.632(63.2%)的数据集中的项目(因为我们是从均匀分布用替换抽样的)。这个结果被用来加权估计量所依赖的几个项来校正偏差,因此得名。 632 估计器。*
这就是全部的数学吗?
由于 .632 和 .632+ 估计量的正式定义取决于无信息误差率*、相对过拟合率、留一自助法和其他几个术语的正式定义,因此我不会用众多的方程来拖累这一节,请读者参考 Efron & Tibshirani,1997
要获得更简短、更好的解释,请参见本答案中的交叉验证。*
希望有一天 Medium 会支持 LaTeX ,用交错文本写十几个方程将不再需要使用十几幅图像。
3.我们为什么要关心置信区间?
假设我们已经建立了一个分类器,为了评估它的性能,我们在单个数据点上测试它,我们得到了正确的结果—召回率是 100%。大获成功!
但这听起来很好笑,对吧?在单个数据点上测试分类器?
所以我们在 10 个数据点上再次测试,得到了 80%的召回率。还是不错的。然而,仅使用 10 个数据点来评估性能似乎有些怪异——如果我们在 10 个相对简单的例子上测试我们的分类器会怎么样?
如果我们选择一组不同的 10 个数据点并再次评估,我们可能会得到不同的回忆分数。
在 100 个数据点上测试我们的分类器怎么样?还是 1000?多少个数据点就够了?我们需要多少数据点来确定我们的召回是可靠的?
我们不需要精通统计学就能知道,如果我们基于少量的观察值计算一个数字(例如平均值),这个数字可能是“不准确的”。我们凭直觉知道这一点。
假设我们试图通过只测量 5 个人的身高来估计我们镇上人们的平均身高。我们知道我们的估计可能是完全错误的——我们只测量了 5 个人,试图估计 10 万人的平均身高——显然使用这么小的样本存在问题。
置信区间为我们提供了一系列可能的值,这样我们可以更好地理解我们的估计值可能具有的可变性。在上下文中使用“可能”一词是有意的,因为实现的置信区间的属性不是固定的,并且可以根据情况而变化。
野外的置信区间
置信区间被广泛使用的一个领域是流行病学研究。在[ Janerich 等人,1990 ]中可以找到一个典型的使用案例,在那里他们研究了肺癌是否与家庭中暴露于烟草烟雾有关。
研究人员对 191 名肺癌患者和同等数量的非肺癌患者进行了基于人群的病例对照研究。
缩写方法和结果——为了评估在家庭中暴露于烟草烟雾是否会增加患肺癌的风险,研究人员计算了比值比 (2.07)和比值比的 95%置信区间(1.16 至 3.68)。
这意味着在这项研究中,他们发现在家庭中接触烟草烟雾的人患肺癌的几率是不接触烟草烟雾的人的两倍(2.07)。我们确实注意到,置信区间表明真实的优势比也可能是 1.16,也就是说,与那些没有暴露于烟草烟雾的人相比,在家庭中暴露于烟草烟雾的人患肺癌的可能性可能只有 1.16 倍。
改变样本大小(或研究中选择的 25 年吸烟阈值),我们也可能得到一个包括 1.0 的置信区间,这意味着比值比在统计上不显著,实验中两组患肺癌的几率可能相同。
正如我们所看到的,置信区间包含了单个数字所不能包含的信息。
4.自助置信区间——为什么和如何?
为什么使用 bootstrap 置信区间?
Bootstrap 置信区间可以使用非参数抽样构建,这意味着我们不需要对我们感兴趣的参数(或我们的数据)的分布做任何假设。Bootstrap 置信区间也可以使用参数抽样来构建,但我们不会在本文中使用这种方法。
如何构造 bootstrap 置信区间?
在帖子后面提供的代码中,我们使用 bootstrap 估计分布的百分位数来构建置信区间。基于 bootstrap 百分位数构建置信区间的动机是,我们可以使用 bootstrap 估计分布的百分位数,因为它(大概)与我们试图估计的参数分布足够相似。这在某些情况下非常准确,而在其他情况下则不太准确。
Fig. 2. Percentiles of the distribution of bootstrap estimates.
例如,我们将使用 bootstrap 估计值的分布构建一个 95%的置信区间(图 2):
- 置信区间的下限将是分布(46.8)的第 2.5 个百分位数——低于该值,将发现 2.5%的 bootstrap 估计。
- 置信区间的上限将是分布(47.3)的第 97.5 个百分位数——低于该值时,将发现 97.5%的 bootstrap 估计。
正如我们在图 2 中看到的那样,选择下限和上限意味着 95%的 bootstrap 估计值在置信区间内,我们说置信区间[46.8,47.3]有 95%的概率覆盖我们试图使用 bootstrap 方法估计的参数。
例如,如果我们试图估计一个分类器的召回率,那么我们可以说区间[46.8,47.3]有 95%的概率覆盖(包含)我们的分类器的真实召回率。
我们应该知道,有几种方法可以构建 bootstrap 置信区间,我们鼓励好奇的读者阅读[ Carpenter & Bithell,2000 ]来更好地了解每种方法的利弊。如果你需要更多关于本文所用方法的信息,可以在[ Efron & Tibshirani,1994,ch.13 ]中找到。
依我拙见,构建一个或多或少“准确”的置信区间并实际使用它比完全忽略从置信区间获得的信息要好。
5.如何解读一个置信区间?
本帖中我们讨论的置信区间是 frequentist 置信区间。为了确保我们理解它们的含义,我们将考虑下面的例子:
假设我们为分类器的召回构建了 95%的置信区间,并获得区间[0.55,0.65]。
这意味着:有 95%的概率区间【0.55,0.65】覆盖(包含)真实召回。
它不意味着:有 95%的概率真实回忆在区间【0.55,0.65】内。
迷茫?不要害怕。
当讨论 frequentist 置信区间(最常见的置信区间)时,真实参数(在我们的例子中是回忆)被认为是一个固定数,而不是一个随机变量 —它只有一个固定值,该值要么在置信区间内,要么不在置信区间内。没有与之相关的概率。95%的概率指的是我们用来构造区间的方法。方法保证区间在 95%的情况下(平均)覆盖真实参数。
考虑以下情况:我们计算召回 100 次(每次基于不同的样本/测试集),并以 95%的置信度构建 100 个置信区间。
这 100 个置信区间中的 5 个将不会覆盖真实召回(平均而言)——例如,当真实召回为 0.66 时,其中一个可能是[0.55,0.65]的置信区间,即这个[0.55 到 0.65]的置信区间是不覆盖真实召回的那 5 个置信区间之一。
另一个例子:假设我们想找出一个中国人的平均身高。真实的平均身高是某个固定的数字,例如 168.3 厘米。我们无法测量 14 亿人的身高,所以我们使用 1000 名中国人的样本来测量他们的身高——我们样本的平均值是 167.3 厘米,置信区间是[166.1 厘米,168.5 厘米]。
我们现在再抽样调查 1000 人,测量他们的身高,构建另一个置信区间。
我们重复上述过程 100 次。到目前为止,我们已经计算了平均身高 100 次(每个样本一次),并构建了 100 个置信区间。平均而言,这些置信区间中的 5 个将不涵盖(包含)168.3 厘米的真实平均身高
现在让我们假设我们只有一个 1000 人的样本,因为这是我们的预算所能负担的。我们基于单一样本构建的 95%置信区间有 5%的可能性无法覆盖真实的平均身高。
***注意:*我们总是可以构建一个置信水平更高的置信区间,比如说 99%,代价是让区间变宽。
6.样本大小和置信区间宽度
置信区间的宽度对我们是有价值的,因为它使我们能够更好地理解我们估计的可变性。更宽的间隔意味着更高的可变性。
Fig. 3. Bootstrap confidence interval width plotted against sample size.
上图(图 3)展示了在特定条件下,使用 bootstrap 方法( .632 )估算召回率的模拟结果。改变参数将导致略微不同的结果,但是主要结果将保持不变——我们可以预期置信区间宽度随着样本量的增加而减小。
图中的数据是通过应用 scikit-learn 的逻辑回归分类器生成的,该分类器用于通过将其拟合到使用[make_classification](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html)
生成的二元分类数据集上来获得 bootstrap 估计值和召回的置信区间。对于每个样本大小,运行 1000 次 bootstrap 迭代,以获得 bootstrap 估计和召回的置信区间。随机噪声被添加到数据集中,使分类任务变得更加困难,就像真实世界中的数据(通常)有噪声一样。
一些模拟结果
对于包含 500 个数据点的数据集,bootstrap 召回估计为 60.6%,但 95%置信区间为[48.9%,70.8%]。
这意味着我们不能为我们获得了 60.6%的召回率而高兴,因为置信区间有 95%的机会覆盖(包含)真实召回率,这可能是 50.0%,这使得我们的分类器像掷硬币一样有用。
相同的分类器在 1,000 个数据点上进行测试,产生了 62.9%的 bootstrap 召回估计值,95%的置信区间为[54.5%,71.3%]。注意,现在我们可以更确定我们的分类器比随机猜测的目标类更好,因为置信区间不包括值 50%。
注意 : Bootstrap 置信区间宽度(以及其他属性)不仅是样本大小的函数,也是分类器类型(线性模型、基于树的模型等)的函数。),正在估计的参数和数据集中要素的固有方差,等等。
7.现在在 Python 中
本节介绍了一个可以复制粘贴并在代码中轻松使用的函数。该函数简单地包装了来自 mlxtend 包的[bootstrap_point632_score](http://rasbt.github.io/mlxtend/user_guide/evaluate/bootstrap_point632_score/)
函数,以便于使用。
代码包括bootstrap_estimate_and_ci
函数以及几个简单的使用示例,我们在这些示例中计算召回、精度、F1-得分、 ROC AUC 和精度的估计值和置信区间。
引导迭代的次数
我们注意到[ Carpenter & Bithell,2000 ]建议在计算引导置信区间时使用 1000–2000 次引导迭代。如果你只关心参数估计,那么 50-200 次迭代通常就足够了[ 埃夫隆&蒂布希拉尼,1997 ]。
对于大样本量和计算成本更高的模型,使用大量 bootstrap 迭代会变得非常耗时,因此默认迭代次数(n_splits
)被设置为 200。您可以选择是否增加该数值,以更长的计算时间为代价获得更准确的置信区间。
使用
[bootstrap_estimate_and_ci](https://gist.github.com/roncho12/60178f12ea4c3a74764fd645c6f2fe13)
函数返回 bootstrap 估计值、bootstrap 置信区间的下限和上限以及 bootstrap 估计值的标准偏差(也是样本估计值的标准误差),例如像这样调用函数:
*est, low, up, stderr = bootstrap_estimate_and_ci(estimator, X, y)*
将返回四个值,其中est
是准确度的 bootstrap 估计,95%置信区间为[ low
,up
,样本准确度的标准误差为stderr
。
代码 包括几个调用不同参数和不同度量的函数的例子。
关于参数的说明
score_func
的默认值是准确性,但它可以是任何具有签名score_func(y_true, y_pred, **kwargs)
的 sklearn 分类度量。如果您愿意,您也可以编写自己的评分函数来满足您的需要,只要它具有上述签名并返回一个数字。- 如果您希望使用类似 sklearn 的
[roc_auc_score](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score)
的评分函数来获得 ROC AUC 的估计值和置信区间,您可以在代码中看到一个示例。这有点像黑客,但实现起来非常简单。 method
的默认值是.632
,因为.632+
方法的计算量更大,会大大延长运行时间。如果使用比 .632 更好的估算器来获得估算值对您来说非常重要,即使以计算时间为代价,您也应该选择.632+
方法。在所有其他情况下,.632
方法应该提供良好的结果。- *
alpha
的默认值是 0.05,这将导致一个
(1-alpha) 100% = 95%的置信区间。
如果您想要 99%的置信区间,请使用alpha=0.01
;对于 90%的置信区间,使用alpha=0.1
等等。
8.这里有龙
尽管置信区间在各个领域都是常见的(甚至是强制性的),但它们也是一个主题:
- 经常被误解。
- 经常争论。
重复置信区间的优点和缺点超出了本文的范围,所以我将只简要强调几个已知的问题:
- 频率主义者置信区间与贝叶斯可信区间。
- 将间隔的宽度解释为与其“准确性”一致。
- 为了置信区间而放弃使用 p 值,但仍然使用置信区间进行统计推断。
- 有些理论性质在渐近上是正确的,有时被认为适用于每一种情况,尽管事实并非如此。
以上绝不是所有可能问题的完整列表。如果你想更好地了解它,你可以在[ [Morey et al .,2016](http://Morey, R.D., Hoekstra, R., Rouder, J.N., Lee, M.D. and Wagenmakers, E.J., 2016) ]中阅读更多信息。
克里斯托佛·马格努松的博客中的这个链接提供了一个关于置信区间的漂亮的交互式可视化,作者的评论信息丰富,写得很好。
统计推断
这篇文章没有建议使用置信区间来进行统计显著性检验,并且也没有鼓励将它们视为描述绝对的“真理”,而仅仅是一种近似。因此,上述问题不应成为主要关注点。**
但是,如果您确实计划使用置信区间来执行统计推断(例如,分析医疗数据以决定适当的治疗),尤其是在处理小样本量时,您可能希望更好地了解置信区间。
作为一个例子, Vollset,1993 比较了 13 种构造二项式比例置信区间的方法,并描述了它们的特点。
构建置信区间的方法有很多,选择“正确”的方法需要了解每种方法的特性。
代表性样品
我们总是假设我们拥有的样本(我们的数据集)恰当地、成比例地反映了真实人群的关键特征,即它是一个代表性样本。否则,使用这样的样本获得的任何估计都是不可靠的,不应该被信任(在大多数情况下)。
置信区域
本文没有讨论的另一个问题是构建同时置信区间(称为置信区域),它是多参数情况下置信区间的推广。**
**我们没有讨论同时为几个参数构建置信区间的情况,这种情况保证这些区间将以概率 X,覆盖真实参数,即,为每个参数单独构建 X%置信区间是一回事,而构建 X%置信区域是另一回事,该区域将在给定置信水平 X%下同时覆盖所有参数。
摘要
我们已经相当广泛地讨论了置信区间,我希望我已经很好地传达了使用它们的好处。
我们看到了如何应用 bootstrap 方法来估计参数及其可变性,并为我们的估计构建了 bootstrap 置信区间。
我们查看了几个代码示例,这些示例展示了如何使用 bootstrap 方法获得估计值,并构建召回率、精确度、F1 分数、ROC AUC 和准确度的置信区间。
就是这样。
感谢你花时间通读这篇文章!
如果你愿意,我们非常欢迎你写一篇回应。我很想知道您的想法——欢迎各种形式的反馈!
收场白
置信区间在许多领域都是一个有价值的工具,但在我们实践数据科学时,有时会被忽略。通过忽略它们,我们含蓄地说,使用置信区间为癌症患者选择适当的治疗方法或决定一种新药是否真的降低了心脏病发作的风险是可以的,但当试图根据其他领域的数据建立模型时,置信区间是不相关的——如果我们的估计“不准确”,没有人的健康会受到威胁,因此可以安全地忽略置信区间。
绩效指标,如 F1 分数、ROC AUC 等。是随机变量 —每次我们计算它们时,它们的值都会发生变化,因为它们取决于我们选择作为测试集或验证集的样本,即不同的样本会产生不同的值。置信区间可以帮助我们估计度量标准的可变性。
构建置信区间可能(有时)会导致一些精神上的痛苦——发现我们辛苦获得的 F1 分数实际上可能低于我们想要接受的分数,这一点都不好玩。另一方面,置信区间使我们能够知道我们可以“信任”我们的测量值多少,以及它们“可能”有什么范围的值。
参考
- Efron,b .和 Tibshirani,r .,1997 年。交叉验证的改进:632+ bootstrap 方法。美国统计协会杂志, 92 (438),第 548–560 页。
- 迪奇乔,T.J .和埃夫龙,b .,1996 年。自举置信区间。统计科学,第 189–212 页。
- 卡彭特和比瑟尔,2000 年。 Bootstrap 置信区间:什么时候,哪个,什么?医学统计学家实用指南。医学统计学, 19 (9),第 1141–1164 页。
- 埃夫龙,b .和蒂布拉尼,r .,1986 年。标准误差、置信区间和其他统计准确性测量的自举方法。统计科学,第 54-75 页。
- Efron,b .和 Tibshirani,R.J .,1995 年。 交叉验证和 bootstrap:估计一个预测规则的错误率 。斯坦福大学生物统计学系。
- Janerich,D.T .,Thompson,W.D .,Varela,L.R .,Greenwald,p .,Chorost,s .,Tucci,c .,Zaman,M.B .,Melamed,M.R .,Kiely,m .和 McKneally,M.F .,1990 年。肺癌和家庭中暴露于烟草烟雾。《新英格兰医学杂志》, 323 (10),第 632–636 页。**
- Efron,b .和 Tibshirani,R.J .,1994 年。 自举简介 。CRC 出版社。
- 埃夫龙,b,1983 年。估计预测规则的错误率:交叉验证的改进。美国统计协会杂志, 78 (382),第 316–331 页。
- 2013 年,詹姆斯·g·威滕·d·哈斯蒂·t·蒂布希拉尼·r。(第 112 卷,第 18 页)。纽约:斯普林格。**
- 瑞典沃尔塞特,1993 年。二项式比例的置信区间。医学统计学, 12 (9),第 809–824 页。
- Morey,R.D .,Hoekstra,r .,Rouder,J.N .,Lee,M.D .和 Wagenmakers,E.J .,2016。把信心放在置信区间的谬论。心理通报&回顾, 23 (1),第 103–123 页。
你有可能被熊袭击吗?
Photo by Photo Collections from Pexels
经过两个月的学习和项目,我来到了 Udacity 的数据可视化纳米学位项目的顶点。简而言之,这个顶点项目的目标是通过从改头换面星期一中选择一个数据集或可视化,并在此基础上进行改进,将课程的所有原则结合到一个作品中。由于我对熊的兴趣,我决定基于维基百科的数据来源制作一个关于致命熊袭击的可视化图片(尽管它们看起来毛茸茸的,令人想抱,但它们可能是致命的)。伴随可视化的故事由 Vox 的扎卡里·克罗克特撰写。
这篇文章的其余部分详细描述了我改进致命熊攻击可视化的过程,以及我为什么做出这样的设计决定。对于那些只对关键的要点和改进感兴趣的人,请查看 TL;博士部分。对于那些有几分钟空闲时间并且有兴趣和我一起完成我的过程的人,请继续阅读这篇文章的详细部分。
我的 Viz 改进之旅
下面可视化的问题陈述是“在哪个公园,什么时候,你最有可能被熊杀死?”
Data collected, prepared, and distributed by Ali Sanne on data.world | Visualization by Zachary Crockett, Vox
自然地,我期望可视化有公园的位置和一年中什么时候熊更可能攻击。当我没有找到那个信息时,我点击了源文章,通读了这个故事。以下是我创建新仪表板的过程:
- 下载源数据集
数据集被收录在 data.world 上,在“改头换面星期一”的源可视化旁边可以方便地找到。在查看了预览以了解包含了哪些数据后,我继续下载了该文件。
2。浏览/清理 Excel 中的数据
我做的第一件事是在 Excel 中打开数据集来查看原始数据。我首先通过滚动来熟悉列标题,看看都包括了什么。我在寻找数据中的任何不一致之处,如缺失/空白字段、单元格格式(即字段设置为常规、文本或日期格式)、额外空格和拼写错误。马上,我注意到“位置”栏下的一些单元格被写成“城市,州”,而其他单元格被写成“附近的城市,州”。我找到了所有在位置前带有“near”的单元格,并点击了 replace,没有填充任何内容(实际上删除了 near 的所有实例)。接下来,我将“日期”列改为日期格式,而不是保留它。最后,我删除了我能找到的任何多余的空格,并运行拼写检查。需要注意一些事情:
- 有些字段是空白的,我认为这是数据收集过程中的选择偏差。似乎这些字段完全是随机缺失的。
- “年龄”栏下的一些字段包含小数,如 0.41666 或 0.83333,这表明在处理数据时存在一些限制。(幸运的是,年龄不是回答我的问题陈述的关键因素——更多细节见下一节)
- 位置格式没有标准化-一些字段具有国家公园的名称,其他字段具有城市名称和州名称,或者两者的变体。
3。定义问题陈述和故事大纲
在浏览完数据集后,我思考了一些问题,这些数据可能表明了一些趋势。我从数据中获得的关键信息是致命熊攻击的地点、熊的类型和攻击日期。我还参考了最初的问题陈述,因为我认为 Zachary 在 Vox 上的故事写得非常好,符合数据,但标题并没有尽可能地描述数据(上面看到的可视化没有显示公园的位置)。根据我对数据的了解和我对扎卡里故事的想法,我决定的问题陈述是“在北美你最有可能被熊袭击的地方是哪里?”
在这一点上,我已经定义了问题陈述,并且我知道主要的数据,所以我需要做的就是将它放入一个故事序列中。我从哪一年发生了多少起致命的熊袭击开始,为问题陈述奠定了基础。然后,我通过指出大多数袭击发生的地点,进入了故事的高潮。最后,我用哪种熊参与了攻击来结束这个故事。
4。连接到 Tableau 中的数据
我已经准备好连接 Tableau 中的数据,开始玩可视化游戏。然而,Tableau 反复给我一个错误,说我没有权限访问这个文件。我的快速解决方法是复制原始文件中包含数据的所有单元格,将其粘贴到新的 Excel 文件中,并以另一个名称保存。成功了。
5。创建单独的工作表和摘要图块
因为我已经在纸上定义了问题陈述和故事大纲,所以我有了一个粗略的想法,我想要创建什么样的可视化来塑造一个更好的故事。以下是我创作视觉效果的顺序:
- 条形图:为了给我的问题陈述搭建舞台,我想展示 1900 年至 2018 年间每月发生多少起致命袭击。这类似于 Zachary 的条形图,但是为了清晰起见,我决定采用一种更简单的设计方法。
- 图:清晰直观地链接回问题陈述和故事。这也类似于 Zachary 的故事中的地图,但我将其简化为突出显示熊袭击最致命的州,而不是专门突出显示公园(希望利用更多的原始数据进行定位)。
- 堆积条形图:直观对比致命袭击中涉及的熊的种类。
- 树状图:直观表示 1900-2018 年间每年有多少人死亡。
- 高亮显示表格:为了更好地显示灰熊袭击最多的月份。
- 横条图:显示最有可能被熊攻击的前 10 个地点。
- 摘要贴:虽然我不确定是否会使用这些,但我还是为我的故事制作了一些。
6。使用列布局组装仪表板
现在我已经创建了单独的工作表,剩下的就是如何将它们放在一个仪表板中。我开始在纸上画一些布局草图,然后将所有东西拖放到 Tableau 仪表板中。我的第一个布局是典型的四象限布局。这种布局帮助我思考我的故事,但我不喜欢它显示我的视觉效果的顺序,所以我回到草图。我真的很喜欢黄金比例布局的想法,所以我开始把我的视觉效果拼凑到这个布局中,但我发现较小的“网格”更难填充。我又回去画素描,把我的故事当成叙事来思考。如果我把它放在一个幻灯片中,我将如何呈现视觉效果的顺序?我决定保持简单,采用三列布局。
这是我的速写的样子…
My quadrant layout sketch
Sketch of golden ratio layout
Final sketch — 3 column layout
7。最终产品
我创建的最终仪表板是独一无二的,因为它可以独立讲述基于数据的故事。虽然 Zachary 在 Vox 上的故事写得很好,有很好的图形可视化,但我发现很难跟上交替的文本和视觉效果。我所做的是提取文本中的信息,并将其作为可视化信息显示在仪表板上,利用图表标题来总结故事。
最终产品的截图可以在文末找到。如果你想与 Tableau 公共页面互动的话,还提供了到 Tableau 公共页面的链接。
8。关于数据的说明
当我浏览这个数据集时,我对我是否应该使用它有非常复杂的感觉,因为数据几乎是零星的。我的意思是,这些数据是由某人根据写在维基百科页面上的数据收集和组织的。根据维基百科页面的引用,看起来大多数数据是从报纸文章、出版物或其他新闻渠道收集的。选择偏差在这里起了作用,因为我们只考虑了基于某人决定写的已发表的故事的致命熊袭击。一个更准确/可靠的获得致命熊袭击的方法可能是从医院记录中获得。
我注意到的另一件事是有关于致命熊袭击的描述。对于那些涉及两个或更多人的攻击,对所有人的描述都是一样的,可能准确也可能不准确。如果我要在我的数据故事中包含对攻击的描述,我必须以某种方式对数据进行规范化。
总之,我认为数据收集过程可以改进,以减少我们处理过程中的限制和偏见。这将产生一个更准确的熊袭击致死率的数据故事。
TL;博士
我在 Vox 上找到了由 Zachary Crockett 创作的关于致命熊袭击的可视化图片,于是我踏上了改进它的旅程。我开始研究和清理数据集,因为这些数据已经不可用了。当数据准备好了,我把它连接到 Tableau。然后我开始画出潜在的图表和布局。虽然我画的大部分潜在图表都没有做成画面,但我创造了更好的视觉效果来帮助我讲述我的故事(画面的力量)。接下来,我开始绘制仪表板布局,并最终拼凑出我的故事。下面是最终结果:
Created by Vanna Quon | Made with Tableau Public
你准备好成为一名数据科学家了吗
Image by Gerd Altmann from Pixabay
回到 2013 年,麦肯锡的一份报告中有一句令人担忧的话:
“美国将面临多达 19 万名受过统计和机器学习高级培训的数据科学家的短缺,以及 150 万名在统计方面足够精通以有效使用大数据的经理和分析师的短缺。”
麦肯锡报告,2013 年 7 月
不可否认,数据科学是一个快速增长的领域,正在吸引更多的关注,并且迫切需要劳动力来填补当今就业市场上的大量空缺。
虽然我们努力赶上数据科学的潮流,但这里的主要问题是:
我们准备好工作了吗?我们应该学习什么才能开始数据科学职业生涯?
也许解决上述问题的最好方法是查看招聘信息,这些信息可以直接让我们了解雇主对我们当前市场的期望。
在本文中,我将基于一个真实的工作数据集强调几个关键方面。该数据集包括美国数据科学家的职位发布(2018 年更新)。我们将采用探索性数据方法,从数据集中获得洞察力,告诉我们一些关于数据科学职业的事实。
在我们开始之前…
如果您希望在 Indeed 数据集上遵循我的数据探索性的演练,您需要做好准备:
- Indeed 职位发布数据集来自 ka ggle:https://www . ka ggle . com/elroyggj/Indeed-dataset-data-scientistanalystenengineer
- Jupyter 笔记本
- Python 熊猫& Seaborn 库
1.各行业的数据科学市场需求
1.1 加载数据
在 Jupyter Notebook 中,我们从使用 Python pandas 库加载 Indeed job 数据集“ indeed_job_dataset.csv ”开始,并快速查看数据。
Python scripts to load data from Indeed dataset
The first five records of Indeed dataset
数据集中总共有 5715 个作业条目。对数据的一瞥向我们展示了数据科学职位发布的详细信息,如工资、技能和行业。
1.2 绘制饼图
现在,让我们试着通过绘制一个饼状图来探索不同行业的工作需求。
Python script to create Pie Chart
Pie Chart showing data science market demand in various sectors
1.3 我们从饼图中学到了什么
如果我们抛开其他类别,对数据科学职位需求最高的是 咨询和商业 部门。然而,不应低估其他领域对数据科学的市场需求。各行业市场需求的存在标志着数据科学职位的工作机会无处不在。有必要快速了解一下数据科学如何影响不同行业的商业模式和运营。
1.3.1 咨询和商业服务
在商业领域,数据科学根据从我们的购买和网络浏览历史中收集的数据提供个性化的客户体验。例如,每当我们登录亚马逊,系统就足够智能,可以检测并推荐可能是我们最喜欢的书籍。
Amazon Page 1
此外,还通过显示购买了该商品的顾客也购买了商品的列表来交付相关商品。
Amazon Page 2
简而言之,数据科学极大地促进了商业世界中的目标营销过程。
1.3.2 互联网&软件
在互联网和软件领域,由于数据科学社区的巨大市场需求,谷歌、微软、亚马逊和 IBM 等科技巨头已经推出了作为云服务的机器学习 ( MLaas )。
Amazon Machine Learning Services (Source: https://aws.amazon.com/machine-learning/#)
MLaas 能够快速启动机器学习(ML)计划,而无需投入大量时间和金钱来购买和设置高级工作机器。有了 MLaas,每个人都可以开始构建他们的第一个 ML 模型,以低成本从预测中产生有价值的见解。
MLaas 的日益流行也意味着未来的软件开发交付不再局限于“软件产品”,而是可以以数据科学服务或解决方案的形式出现。这种形式的服务交付在个体自由开发者社区中已经变得司空见惯。一个典型的例子就是 Fiverr 。
Fiverr Freelance Job Posting For Machine Learning (Source: https://www.fiverr.com/)
1.3.3 银行&金融
数据科学在银行和金融领域的一个典型应用是**欺诈检测。**机器学习能够有效检测涉及银行交易、洗钱、贷款申请以及开立新账户的欺诈活动。例如,每当有异常高的交易活动时,由机器学习算法支持的欺诈检测系统能够将其搁置,直到授权用户验证交易。
Photo by Dmitry Demidko on Unsplash
数据科学也有助于改善投资银行的风险建模。通过大数据分析,银行在进行投资或评估公司价值以创造企业融资资本时,可以获得更好的洞察力。
摩根大通等主要金融机构非常重视数据科学的潜力。
“无论这些变化的时间表如何,分析师、投资组合经理、交易员和首席信息官都需要熟悉大数据和机器学习的发展以及相关的交易策略。”
摩根大通
点击查看更多视频用于分析大数据的量化技术和新方法越来越多地被采用…
www.jpmorgan.com](https://www.jpmorgan.com/global/cib/research/investment-decisions-using-machine-learning-ai)
1.3.4 医疗保健
医疗保健领域的数据科学用例总是与可穿戴设备的大数据分析联系在一起。可穿戴设备可以捕捉和记录大量的健康数据,如心率、血压甚至我们的睡眠模式。这些可穿戴数据有助于医生预测潜在的健康问题,并提出预防措施。
Photo by Alexander Ruiz on Unsplash
此外,数据科学提供巨大前景的另一个领域是机器学习在医疗诊断中的应用。随着电子健康记录的大量存在,数据分析师可以应用机器学习技术来处理数据,并进行更快、更精确的诊断。改进的诊断使医生能够在早期检测慢性疾病的迹象,并有效地为患者确定合适的治疗方案。
Image by rawpixel from Pixabay
另一方面,数据科学也有助于在医疗保健领域引入个性化的癌症治疗。最近,一项临床研究表明,人工智能(AI)可以使用医学扫描图像和电子健康记录来产生一个治疗框架,帮助医生预测正确的治疗方法,对个体患者产生最少的副作用。
克利夫兰诊所领导的新研究表明,人工智能(AI)可以使用医疗扫描和健康记录来…
newsroom.clevelandclinic.org](https://newsroom.clevelandclinic.org/2019/06/27/using-artificial-intelligence-to-deliver-personalized-radiation-therapy/)
1.3.5 保险
与银行和金融部门类似,保险业面临的一个主要挑战是欺诈检测。这就是数据科学发挥作用的地方,它使用机器学习模型来识别可能给保险提供商带来损失的欺诈性索赔。
Photo by Helloquence on Unsplash
通过使用保险数据集,如索赔细节、当事人细节、风险细节等,可以训练机器学习模型来估计欺诈索赔发生的可能性。IBM 已经为保险公司提供了类似的预测分析解决方案,帮助他们处理欺诈性索赔。
不要看后视镜。使用预测分析来关注未来的道路。今天的保险公司…
www.ibmbigdatahub.com](https://www.ibmbigdatahub.com/whitepaper/predictive-analytics-insurance)
此外,数据科学还通过为保险产品提供更准确的预测定价模型来改善风险管理。保险公司可以根据客户行为数据预测客户终身价值(CLV),从而评估客户对保险公司的潜在盈利能力。
2.数据科学就业市场的预期技能
从上面的章节中,我们简单了解了数据科学对不同行业运营的影响。另一方面,数据科学总是涉及全面的数据处理管道,需要无数的专业知识来处理数据。
让我们试着再看一遍真实的工作数据集,这次我们将关注雇主期望的技术技能数量。我们将绘制一个条形图,显示从招聘信息中确定的技能数量。
Python script to create a bar chart to show the number of skills expected by employers
A bar chart showing the number of skills expected by employers
有趣的是,该条形图显示了大多数数据科学职位期望求职者至少具备两种及以上技能。(我们可以善意地忽略显示“*零”*技能数量的招聘信息,这只是因为一些招聘信息不包括任何预期技能的细节。)
也许我们还可以快速地看一下雇主到底期望什么样的技术技能。我们尝试观察前 20 条记录,并查看实际工作数据集中的“技能”列。
Python script to view the first 20 records of “Skill” column
The first 20 records of “Skill” column
一瞥数据让我们看到了一些刺眼的关键词:“机器学习”、 AI ”、 R ”、 Python ”、 SAP ”、 SAS 、 SQL 、数据挖掘、 SPSS 等。
数据集告诉我们当前的数据科学市场需要多样化的跨学科技能。
然而,不可能在这里阐明所有的技能(因为这个列表非常长)。相反,我将挑选几个主要类别的必备技能,并逐一介绍。
2.1 编程
Image by StockSnap from Pixabay
编程是我们在数据科学领域从事许多工作所需要的基本技能,从数据争论、统计分析、可视化分析到机器学习。
在现有的数百种编程语言**、** Python 和 R 是数据科学中最受欢迎的两种语言。我们可以通过绘制一个条形图来显示就业市场对编程语言的需求,从而再次查看我们的 Indeed 数据集。
Python scripts to create a bar chart showing the market demand for Python and R
A bar chart showing the market demand for Python and R
它们受欢迎的原因如下:
- 他们是开源。每个人都可以简单地免费使用和重新发布它们。
- 用于数据分析、可视化和机器学习的丰富包和库。
- 丰富的学习资源(互联网上有大量的教程)
虽然争论哪种语言更好可能有点争议,但我想说我们可以选择其中一种作为启动数据科学项目的起点。作为一名数据科学探索者,这里主要关心的是通过编写一些代码来熟悉底层的数据处理管道。在这个过程中,我们会找到更好地满足我们需求的工具,并且我们总是可以在以后切换到另一个工具。
此外,我们也不应该忽视除了 Python 和 r 之外的其他语言选择。有一些替代语言,如 Java、Matlab、Julia、JavaScript、C++等可用于数据科学。他们每个人都有自己的市场需求和支持社区。
以下是一些对 Python 和 R 编程有用的学习资源:
Python 教程
- 【https://www.guru99.com/python-tutorials.html
- https://www.w3schools.com/python/default.asp
- https://www . coursera . org/learn/python-for-applied-data-science-ai
R 教程
- https://www.guru99.com/r-tutorial.html
- https://www.statmethods.net/r-tutorial/index.html
- http://www.r-tutor.com/
2.2 数据库开发
Image by Gino Crescoli from Pixabay
在许多商业环境中,数据被收集并存储在一个结构明确的关系数据库中。在任何数据科学项目中,数据都是最基本的元素,因此应该得到适当的关注,而不是以任意的方式将其放入几个平面文件中。
因此,掌握关系数据库管理系统(RDBMS) 在许多数据科学工作中是必不可少的。让我们再次探索我们的 Indeed 数据集,收集一些关于雇主期望的各种 RDBMS 技能的信息。
Python scripts to create a bar chart showing market demand for RDBMS Skills
A bar chart showing market demand for RDBMS Skills
上面的条形图显示了对任何流行的关系数据库的熟悉程度,如【MySQL】OracleDB2微软 SQL Server微软 Access 和********
****虽然关系数据库仍然被广泛接受,但另一种类型的数据存储, NoSQL 数据库,已经开始在各种行业中获得关注。NoSQL 数据库的存在是为了满足市场对更灵活和可扩展的数据结构的需求,以存储通常更加非结构化并以指数速度增长的大数据。
用关键字“ NoSQL ”对 Indeed 数据集进行简单的查询,将会得到 607 个肯定的命中结果。
Python script to count positive hits of “NoSQL” from Indeed dataset
Positive hits of “NoSQL” from Indeed dataset
这是值得探讨的一些变种,NoSQL 数据库管理系统,出现在确实招聘启事。
Python scripts to create a bar chart showing market demand for NoSQL DBMS Skills
A bar chart showing market demand for NoSQL DBMS Skills
DynamoDB**Cassandra和 HBase 是就业市场上比较流行的四种 NoSQL 数据库管理系统。随着大数据的不断增长,建设 NoSQL 数据库的市场需求必将增加。因此,掌握 NoSQL 数据库开发应该是数据科学家遗愿清单的一部分。**********
2.3 数据挖掘
Photo by Nicolas J Leclercq on Unsplash
数据挖掘从原始数据中提取知识或有用信息,是每个数据科学家的必备技能。数据挖掘的一个关键方面是从原始数据中识别趋势或新兴模式,从而形成决策过程。因此,统计数据分析和可视化分析是数据挖掘过程中的两个常见例程。****
从技术上来说,数据挖掘可以使用编程方法来执行,这种编程方法使用诸如 Python 或 R 等语言。这两种语言都提供了许多有用的库,只需要几行代码就可以进行统计分析和可视化分析。因此,对于数据科学家来说,仅仅拥有一些基本的编程语法知识是不够的。相反,需要熟悉一些数据科学的库。以下链接显示了用于数据科学的前 20 个 Python 和 R 库:
- https://bigdata-made simple . com/top-20-python-libraries-for-data-science/
- https://www . kdnugges . com/2018/05/top-20-r-libraries-data-science-2018 . html
另一方面,掌握数据挖掘的软件包如TableauSPSSSAS或 Excel 在数据科学工作中也是可以期待的。让我们再次探索 Indeed 数据集,观察该软件的市场需求。
Python scripts to create a bar chart showing market demand for statistical software
A bar chart showing market demand for statistical software
显然,Tableau 是行业中使用的统计软件包中的佼佼者。像 Tableau 这样的软件提供了一个非常用户友好的界面,使任何人都可以只通过添加和删除按钮控制来进行令人惊叹的数据可视化。
然而,使用软件包进行数据挖掘的缺点是软件要支付高额的许可费。这可能也是 Python 和 R 在业界接受度要好得多的原因(就拿“Python&R”Vs“统计软件包”的岗位需求统计的两个柱状图对比一下就知道了)。
2.4 机器学习
Image by Gerd Altmann from Pixabay
机器学习可能是数据科学中最流行的“术语”。另一个简单的从真实的招聘信息中查询“机器学习”关键词会给你 2297 肯定的结果。
Python scripts to show positive hits of “Machine Learning”
Positive hits of “Machine Learning” in Indeed dataset
在简单明了的解释中,
“机器学习是一种给计算机编程的艺术,这样它们就可以从数据中学习.”
奥雷连·盖伦
在许多工作领域,机器学习对于使机器本身能够从现有数据中学习以进行大数据分析是可有可无的。目的是对复杂问题(例如银行部门的欺诈检测)做出可靠的预测。
与数据挖掘类似,机器学习在技术上可以使用 Python 或 R 编程来完成,这也解释了为什么这两种语言在行业中被广泛接受。因此,使用一些 Python 和 R 库进行机器学习的经验也是在数据科学领域获得工作的另一大优势。
在开始工作之前,也许磨练机器学习技能的最佳方式是通过实践。Parul Pandey 发表了一篇关于一些顶级数据科学竞赛平台的丰富文章,值得一读。
**** [## 除 Kaggle 之外的顶级竞争数据科学平台
学习任何东西的最好方法是实践。
towardsdatascience.com](/top-competitive-data-science-platforms-other-than-kaggle-2995e9dad93c)****
2.5 云计算
Image by 200 Degrees from Pixabay
云计算是一种相对较新的技术,在当前的就业市场上开始获得很多关注。许多企业选择云平台,而不是在本地机器上托管数据和应用程序。其中的一些原因包括:
- 节约成本 —云计算采用按需付费模式。基本上,用户只需要为他们使用的服务付费。企业可以节省硬件采购和维护成本。
- 弹性 —云计算能够根据当前需求自动调整计算资源。这对于那些有高峰和非高峰营业时间的电子商务网站尤为重要。
- 安全性和可靠性 —云服务提供商负责系统和数据安全,而不是用户自己。
鉴于云计算提供的优势,许多企业期望数据科学家具备云计算技能也就不足为奇了。
的确数据集揭示了对管理 亚马逊网络服务微软 Azure 或 谷歌云平台 的能力的高需求。
Python scripts to create a bar chart showing market demand for Cloud Computing Skill
A bar chart showing market demand for Cloud Computing Skill
3.最终想法
严格来说,数据科学并不是 21 世纪才出现的。很早以前,在许多商业和学术环境中就发现了利用数据进行决策的方法。很多底层的统计分析方法和机器学习算法都只是几十年前积累的发现。
然而,我们不能否认,随着大数据和互联网技术的存在,如今我们的数据科学家所扮演的角色正在经历巨大的扩展。等待我们的主要挑战是时刻准备好必要的数据技能,以满足市场需求。持续学习和接触是在数据科学职业生涯中生存的关键。
参考
- 麦肯锡报告,2013 年 7 月。(检索自https://www . McKinsey . com/~/media/McKinsey/Featured % 20 insights/Americas/US % 20 Game % 20 changers/MGI _ Game _ changers _ US _ growth _ and _ renewal _ Full _ report . ashx)
- 机器学习的定义。奥雷连·盖伦(2019)。使用 Scikit-Learn、Keras 和 TensorFlow 进行机器实践学习:构建智能系统的概念、工具和技术
Github 资源
- 本文中的所有 Python 脚本都可以在一个 Github repo 中找到。请随意下载代码供您参考。
你准备好领导数据科学项目了吗?
“从任何软件开发项目的角度看数据科学项目”
促使您使用数据科学解决的问题是什么?我们现在可以利用数据的力量和利用这种力量的机制。识别正确的问题或用例是第一步。目前,整个行业有多个使用案例正在受到数据科学的攻击。什么让你产生共鸣?非常清楚你的目标和项目成功的定义是垫脚石。
确定了你的用例以及项目成功的定义之后,你就可以开始更精确地关注项目了。您可能想知道数据科学项目与任何其他软件开发项目有何相似或不同之处?那么,软件工程的原则在这种情况下也没有什么不同,包括处理需求、设计和开发、测试和验证以及最终的实现。这可能看起来很普通,确实如此。不同之处在于你所说的需求类型,数据科学中设计和开发的含义,测试和部署是如何进行的。进一步了解部署后您如何支持和管理您创建的产品。简而言之,整个生命周期或所谓的 MLOps 和模型治理框架。
当然,任何数据科学项目都需要数据。收集数据、净化数据、理解数据的含义、应用适当的处理以使数据可供消费,然后最终提供给模型并对其进行测试,这可能看起来是一项非常直接和机械的任务。实际上,并非如此。在最终处理和输入模型之前,仅仅收集和准备用于分析的数据就需要做大量的工作。通常,这涉及到收集和清理数据的繁重工作,除非您已经创建了精简该过程的智能方法,即使在自动化该过程之前的开始,也需要努力创建该自动化。拥有一个包含数百个维度的数据集同样需要数据科学家完成最重要的任务,他们需要对这些数据有一个透彻的理解,同时获得领域知识,并利用工具和技术进行数据调查和可视化。如今,在数据科学家的处理中,有几种特征工程工具和技术可供利用。这一阶段可以被看作是典型软件工程过程中的需求管理阶段,因为在这一阶段,您将与领域专家一起工作,清楚地引出您需要的信息,以确保您的模型具有您想要实现的预测能力。
在模型开发中,您的数据科学家将使用这些数据来训练模型和调整超参数。这将是一个反复的过程,通过多次实验来完善模型。与典型软件项目中的开发不同,在数据科学中,您通过使用通过特征工程迭代创建的数据集来训练模型来构建。在某个时候,具有不同超参数设置集的模型是模型开发中可变性的另一部分,这些超参数设置集也可以自动化。这里的重要因素是缩小到完美的数据集和超参数设置,这将生成您正在寻找的模型。因此,数据集和模型的版本控制是开发过程的重要部分。
训练时的测试将涉及将模型暴露给看不见的数据,并让它进行预测。实现预期目标的预测和模型的准确性将使其有资格进一步测试其中的任何偏差。测试数据起着至关重要的作用。真实数据集的准确表示保证了从测试结果中得出正确的评估或结论。为了评估模型中的任何偏差,根据各种模型测试主题准备测试案例。执行这些测试用例时的测试结果被评估为模型需要满足的准确性和计划目标。一旦模型在两个方面都合格,即在训练时达到精度目标,在偏差测试时合格,模型就变得适合这个目的。
因此,一旦你的模型准备好了,它是关于它们的消费和使用它们进行预测,以及你如何将这些预测整合到更大的应用和系统中。这些模型的预测可以作为批处理生成,也可以根据它们的用途实时生成。
模型是数据的创造。因此,数据中的任何偏差都会导致模型预测的偏差。在选择和准备用于模型训练的数据集时,重要的是要注意通过训练数据集准确表示真实场景。在不同的用例及数据集中,偏差可能意味着不同的东西。在数据准备和分析阶段的早期,应计划并坚持真正理解所有这些可能的偏差,并保护数据集免受所有这些偏差的影响。这有点像在软件开发生命周期的早期检测缺陷。
来自模型的预测可能无法盲目接受。对于导致这些预测的解释的需求将因用例而异。它可能来自业务需求、监管期望等。基于端到端流程的需求和设计,通过这些流程消费预测将推动可解释性的水平,模型将被期望实现。既不是所有的模型都是黑箱,也不是所有的模型都可以是完全的白箱。一个适当级别的可解释性应该基于用例以及围绕它的所有其他期望来计划和执行。
因此,为了欣赏数据科学项目的独特性,人们常说数据科学既是艺术也是科学。艺术在于特征工程是如何完成的。这的确是一门艺术。一个画家知道如何绘画,但要求他用语言来定义它,然后其他人可以绘画,这是不可能的。你不知道具体是怎么做的,但是你做了。特征工程就是类似的东西。您获得了将输入到模型中进行训练的数据的感觉。这是最重要的阶段,你要一次又一次地回到这个阶段,以达到你的理想模型。当您领导一个项目时,确保团队理解这一点并高度关注特征工程是开发满足项目目标的高质量模型的关键。就像画家对颜色、笔触以及一切如何融合有了感觉一样,数据科学家应该对数据有感觉,了解它的意义以及它为什么重要。这将最终影响模型的有效性和预测的质量。
模型开发是一个迭代过程,但不是线性进展。为了把它做好,首先要做好做实验的准备。你的下一轮实验将会是在从之前的实验中学到东西的基础上使用新的假设。你不会轻易得到满足你期望的权利。确定哪个因素正在产生影响,以及如何修复它,这将需要许多周期。当您处理非常大的数据集时,每个实验的资源需求和成本将是巨大的。深思熟虑的计划和从每个实验中系统的学习一定会使结果朝着正确的方向发展。在整个过程中与合适的人合作将比各自为政产生更多的好处。敏捷实践中的定期站立会议,每个团队成员分享他们做了什么,进展顺利,以及他们面临的挑战,将保持团队的协同作用,正确的障碍将被及时打破。通过这样的实践,即使是一个小的收获或一个大的失败也会很容易地被发现,并得到适当程度的关注和支持,而不会浪费时间和资源。
团队使用视觉材料,以任何创造性的方式,非常定期地分享他们在成就和障碍方面的工作,这将再次非常有助于了解集体的情况和状态。任何好消息或坏消息都不是惊喜,对事情的真实感受会让团队脚踏实地,团结一致。通常情况下,个人介绍一些知识分享会议将提高团队对彼此工作的了解,从而产生对自己工作领域的主人翁感。成员充分参与的授权工作文化将带来真正的生产力和成果。
总的来说,很容易看到一个数据科学项目与任何具有某些独特性的软件开发项目并行。这是一次探索之旅,也是敏捷项目实践的一个紧密候选。
原载于https://www . seem。sg
Python 中的 ARIMA 预测
把手放在某物或者某人身上
手动和自动 ARIMA 快速启动和运行,包括对两者的简要讨论。
我将把每周的 Spotify 全球 200 强榜单作为一个时间序列,用来试验 ARIMA 模式。数据范围从 2017 年到 2019 年,整个 jupyter 笔记本在这里都有。
以下是我们进行预测的数据子集:
feature_mean.head()
Spotify weekly top 200 audio features
ARIMA 代表自回归综合移动平均线,它取决于三个关键变量 p 、 d 、 q 才能成功。简要如下:
p =滞后次数/AR 项顺序
d =差分顺序
q =滞后预测误差数/MA 条款顺序
米什拉写了更多关于 ARIMA 模型内部工作原理的文章,包括参数。我在这里的目标是解释如何手动和自动地在 Python 中快速启动和运行 ARIMA。我将对声音特征进行预测:
timeseries = feature_mean["acousticness"]
让我们使用扩展的 Dickey Fuller (ADF)检验来看看时间序列是否是平稳的:
from statsmodels.tsa.stattools import adfullerprint("p-value:", adfuller(timeseries.dropna())[1])
p 值:0.43
p 值大于显著性水平 0.05,因此它不是静态的,需要进行差分,即。dT42 0。
我们首先使用自相关函数找出差分的阶数 d :
from statsmodels.graphics.tsaplots import plot_acf, plot_pacffig = plt.figure(figsize=(10, 10))ax1 = fig.add_subplot(311)
fig = plot_acf(timeseries, ax=ax1,
title="Autocorrelation on Original Series")
ax2 = fig.add_subplot(312)
fig = plot_acf(timeseries.diff().dropna(), ax=ax2,
title="1st Order Differencing")
ax3 = fig.add_subplot(313)
fig = plot_acf(timeseries.diff().diff().dropna(), ax=ax3,
title="2nd Order Differencing")
时间序列在d = 1处静止,只有第一个滞后高于显著性水平。如果你的数列略有差异,试着增加一个额外的 AR 项,如果略有差异,也许增加一个额外的 MA 项。
知道我们应该差一次,我们继续找出 AR, p 的顺序。我们通过计算偏自相关中显著性水平以上的滞后数来得到它:
*plot_pacf(timeseries.diff().dropna(), lags=40)*
第一个滞后是唯一一个大大高于有效电平的滞后,因此 p = 1 。
自相关函数可以告知移除平稳序列中的自相关所需的 MA 项 q 的顺序。
*plot_acf(timeseries.diff().dropna())*
在显著性水平之上可以发现一个滞后,因此q = 1。**
**from statsmodels.tsa.arima_model import ARIMAmodel = ARIMA(timeseries, order=(1, 1, 1))
results = model.fit()
results.plot_predict(1, 210)**
Akaike 信息标准(AIC)估计给定模型丢失的相对信息量。越少越好。
**results.summary()**
模型:ARIMA(1,1,1),…,AIC: -806.848 …
我们把它放在脑后,继续测试 auto_arima :
**import pmdarima as pm**
创建模型:自动 ARIMA 使用 ADF 来测试平稳性,p 和 q 的起始值被设置为 1,并且 Spotify 数据不被假定为季节性的:
**def arimamodel(timeseries):
automodel = pm.auto_arima(timeseries,
start_p=1,
start_q=1,
test="adf",
seasonal=False,
trace=True)
return automodel**
我们希望像使用 statsmodel 的 plot_predict 一样简洁地绘制它,因此必须填充预测上限和下限之间的区域。
**def plotarima(n_periods, timeseries, automodel):
# Forecast
fc, confint = automodel.predict(n_periods=n_periods,
return_conf_int=True)
# Weekly index
fc_ind = pd.date_range(timeseries.index[timeseries.shape[0]-1],
periods=n_periods, freq="W")
# Forecast series
fc_series = pd.Series(fc, index=fc_ind) # Upper and lower confidence bounds
lower_series = pd.Series(confint[:, 0], index=fc_ind)
upper_series = pd.Series(confint[:, 1], index=fc_ind) # Create plot
plt.figure(figsize=(10, 6))
plt.plot(timeseries)
plt.plot(fc_series, color="red")
plt.xlabel("date")
plt.ylabel(timeseries.name)
plt.fill_between(lower_series.index,
lower_series,
upper_series,
color="k",
alpha=0.25)
plt.legend(("past", "forecast", "95% confidence interval"),
loc="upper left")
plt.show()**
然后我们就有了拟合和绘制模型所需的所有内容:
**automodel = arimamodel(feature_mean["danceability"])
plotarima(70, feature_mean["acousticness"], automodel)**
**automodel.summary()**
模型:ARIMA(1,1,1),…,AIC: -806.848 …
这与我们手动得到的参数化结果完全相同。哇,效果很好!使用 auto_arima 获得正确的参数要容易得多,也快得多,唯一的缺点是必须从头开始绘制,以便看起来和 statsmodels 内置的一样好。
MachineLearning+网站上关于 ARIMA 模式的精疲力尽的指南功不可没。哦,你也可以试着用前面提到的笔记本把的声音改成别的,比如的舞蹈。
[1]:米什拉(M. Mishra),拆箱 ARIMA 模型(2018 年 6 月 11 日),https://towardsdatascience . com/Unboxing-ARIMA-Models-1 DC 09d 2746 f 8
[2]: ARIMA 模型—Python 中时间序列预测完全指南,https://www . machine learning plus . com/Time-Series/ARIMA-Model-Time-Series-Forecasting-Python/
ARIMA 模型与图灵. jl
使用概率编程语言(PPL) Turing.jl 进行时间序列分析和预测。茱莉亚的实现可以在这里 (Jupyter 笔记本)或者这里(。jl 文件)。
Time Series Models often have useful applications in the field of finance; Photo by Markus Spiske on Unsplash
你好!
本文是我在 Julia Season of 投稿(JSoC) 2019 中完成的工作的一部分。它使用概率编程语言(PPL) Turing.jl 描述了 ARIMA 模型的 Julia 实现,这为定义概率模型提供了极大的便利。当我们在本文后面查看模型定义时,图灵的这一方面将变得更加明显。此外,图灵支持使用定制分布来指定模型。
好吧,那我们就直入主题吧!
导入库
加载和可视化数据集
我们将使用包含 1995 年至 2015 年标准普尔 500 调整后收盘值的数据集,每月一次。数据集可以从这里(麻省理工学院许可)下载。
运行上面的代码后获得了下面的图。这就是我们的数据看起来的样子,绘制了每个时间指数的值:
Complete Data
我们将数据分为训练集和测试集,将 95%的数据作为训练集:
Train Data
检查稳定性
从图中我们可以看出,这个数列的平均值在接近尾声时上升。所以,级数不是平稳的。这通过针对平稳性的增强 Dickey-Fuller (ADF)测试得到了加强:
ADF test before differencing
因此,我们对时间序列进行差分,试图消除平稳性:
Plot of the differenced time series
这个数列似乎有一个大致不变的平均值,尽管这并不一定意味着这个数列是平稳的。我们再次使用 ADF 测试:
ADF test after differencing
成功!由于 p 值很低,我们可以有把握地假设这个序列是平稳的。借助于 ACF 和 PACF 图,我们现在可以继续为我们的差分时间序列选择 AR 和 MA 项。
借助 ACF 和 PACF 图选择 MA 和 AR 术语
为我们的训练数据获得的 ACF 和 PACF 图如下所示:
这些图可以用以下方式来解释:
- 我们可以有一个一阶自回归项,因为在滞后 1 处有正自相关。
- PACF 曲线逐渐衰减,ACF 曲线在几个滞后之后突然截止。这表明移动平均项的存在。这一项的顺序应该是 1,因为所有大于 1 的滞后没有显著的相关性。
在 ARIMA 模型中同时包含 AR 和 MA 术语并不常见。所以,我们不会考虑这种情况。从以上两点来看,似乎模型更有可能存在移动平均项。然而,我们将考虑 ARIMA 模型的两种可能情况:
- ARIMA(1,1,0)
- ARIMA(0,1,1)
ARIMA(p,d,q) 模型的符号定义如下:
- p:自回归项的个数
- 问:移动平均线的条数
- 差分的顺序
我们实现了这两种情况,并使用赤池信息标准(AIC)对模型进行了比较。这个网页作为定义下面的 ARIMA(1,1,0) 和 ARIMA(0,1,1) 模型的参考。
ARIMA(1,1,0)
ARIMA(1,1,0) 模型定义如下:
[@model](http://twitter.com/model) ARIMA110(x) = begin
T = length(x)
μ ~ Uniform(-10, 10)
ϕ ~ Uniform(-1, 1)
for t in 3:T
val = μ + # Drift term.
x[t-1] + # ARIMA(0,1,0) portion.
ϕ * (x[t-1] - x[t-2]) # ARIMA(1,0,0) portion.
x[t] ~ Normal(val, 1)
end
end
这里, x 是原始时间序列,因为我们已经考虑了模型定义本身的差异。注意,我们将有一个自回归项,因为 p = 1。
ARIMA(0,1,1)
ARIMA(1,1,0) 模型定义如下:
[@model](http://twitter.com/model) ARIMA011(x) = begin
T = length(x) # Set up error vector.
ϵ = Vector(undef, T)
x_hat = Vector(undef, T) θ ~ Uniform(-5, 5) # Treat the first x_hat as a parameter to estimate.
x_hat[1] ~ Normal(0, 1)
ϵ[1] = x[1] - x_hat[1] for t in 2:T
# Predicted value for x.
x_hat[t] = x[t-1] - θ * ϵ[t-1]
# Calculate observed error.
ϵ[t] = x[t] - x_hat[t]
# Observe likelihood.
x[t] ~ Normal(x_hat[t], 1)
end
end
与前面的模型定义一样, x 是原始时间序列。注意,我们将有一个移动平均项,因为 q = 1。
这里要注意的一点是,用图灵编写的代码与写在纸上的代码在本质上是一样的。从上面的模型定义中可以明显看出这一点,只要看一下代码就可以理解这些模型定义。
抽样
使用螺母取样器对链条进行取样。你可以查看文档来了解更多关于 NUTS 和图灵支持的其他几个采样器的信息。用于采样的代码如下:
要获得参数的可视化和汇总统计数据,您可以查看代码这里 (Jupyter 笔记本)或这里(。jl 文件)。
比较 AIC 值
阿凯克信息标准(AIC)衡量不同统计模型的相对“良好性”。因此,它可以用于模型比较的目的。AIC 值越低,模型越好。此外,人们必须记住,AIC 的绝对值并没有多大意义,相对值才是重要的。数学上,AIC 由下式给出:
Formula for AIC
使用这个公式,我们可以计算两个模型的 AIC 值。该 PDF 已被用作计算两个模型的 AIC 值的参考。
- ARIMA(1,1,0)
function calculate_aic_ARIMA110(β::Float64, μ:: Float64, σ::Float64, s::Array{Float64, 1})
T = length(s)
ϵ = Vector(undef, T)
s_pred = Vector(undef, T)
s_pred[1], s_pred[2] = s[1], s[2]
ϵ[1], ϵ[2] = 0.0, 0.0
for t in 3:T
s_pred[t] = μ +
s_pred[t-1] +
β * (s_pred[t-1] - s_pred[t-2])
ϵ[t] = s_pred[t] - s[t]
end
log_likelihood = (-(T - 1)/2)*2*π*σ^2 - (1/σ^2)*sum(ϵ.^2)
- π*σ^2/(1 - β^2) - ((s[1] - μ/(1 - β))^2)/(2*σ^2/(1 - β^2))
aic = -2*log_likelihood + 2
return aic
end
使用此函数,我们得到 ARIMA(1,1,0)的 AIC 值约为-299655.26
- ARIMA(0,1,1)
function calculate_aic_ARIMA011(β::Float64, σ::Float64, s::Array{Float64, 1})
T = length(s) ϵ = Vector(undef, T)
s_pred = Vector(undef, T) s_pred[1] = s[1]
ϵ[1] = 0.0
for t in 2:T
s_pred[t] = s[t-1] - β * ϵ[t-1]
ϵ[t] = s[t] - s_pred[t]
end
log_likelihood = -(T/2)*log(2*π) - (T/2)*log(σ^2) + (1/2*σ^2)*sum(ϵ.^2)
aic = -2*log_likelihood + 1
return aic
end
使用此函数,我们得到 ARIMA(1,1,0)的 AIC 值约为 6.22 x 10⁷.
显然,我们可以看到 ARIMA(0,1,1)模型更好。
我用 Turing.jl 写的关于 ARIMA 模型的文章到此结束,希望你会觉得有趣。如果你对这篇文章有任何问题或疑问,请随时联系我,邮箱是 s shah@iitk.ac.in,或者你可以在 Julia slack 上用@Saumya Shah 给我加标签。
参考
[1]ARIMA 模型介绍。(2019).检索于 2019 年 8 月 26 日,来自https://people.duke.edu/~rnau/411arim.htm
[2]托马斯·s .(2009 年)。估计 AR/MA 模型【电子书】。检索自http://www . igi dr . AC . in/faculty/susant/TEACHING/TSA/print 06 . pdf
ARIMA 简体。
对最流行的时间序列预测模型的简单解释
背景
时间序列预测背后的基本直觉是,某个时间段内某个变量的度量将取决于前一个时间段、前两个时间段、前三个时间段等同一变量的度量。
时间序列预测在许多预测问题(尤其是在商业领域)中都有应用,而 ARIMA 是最好的起点之一!
本文的目标是突出这个模型背后的构建模块(即 AR 、 I 和MA】)和底层概念(即自相关和部分自相关 ) 。
相关和滞后因子
让我们考虑一个在任何特定的一天,比如说星期天,预测汽油价格的例子。显而易见,周日的价格将取决于周六的价格。
现在让我们考虑一下周五的价格对周日价格的影响
由于周日的价格取决于周六的 (2) ,而周六的价格又取决于周五的 (1) ,周五的价格和周日的价格之间可能存在间接传递关系。
上述关系如下图所示。
Auto-correlation
除此之外,还有一个关系可能一开始很难想象,即周五的价格对周日价格的直接影响 (3) 。
这里日价格之间的这种相互关系,就叫做*。如果两个变量的值一起增加(或减少),那么就说它们有正相关性。如果一个变量的值增加而另一个减少(反之亦然),那么它们有一个*负相关性。**
相关性是时间序列的一个重要概念,
- 自相关,同时考虑直接和间接效应的**(如上图所示),
- 部分自相关,**仅考虑的直接影响,如下图所示
Partial auto-correlation
滞后因素
因为我们已经考虑了基于前两天(即周五)价格的周日价格的影响…这里的滞后因子是 2。
Lag factor concept
自相关和部分自相关*在继续学习 ARIMA 之前理解很重要,因为它们对于为你的模型选择正确的参数至关重要。你可以在这里找到一个很好的解释。*
自回归(AR)
自回归(AR)模型是一种特殊类型的回归模型,其中因变量依赖于自身的过去值。
这必然意味着当前值与先前时间步骤中的值相关。更具体地说,这里的相关类型是部分自相关。
AR 模型的方程式如下所示
AR equation
相应滞后观测值的相应权重(ф1,ф2…фp)由滞后观测值和当前观测值之间的相关性决定。如果相关性越大,对应于滞后观察的权重越高(反之亦然)。
注意等式中的 §
这个 § 叫做滞后阶。它代表我们在模型中包括的先前滞后观察的数量,即与当前观察有显著相关性的滞后的数量。
移动平均线
移动平均(MA)模型的工作原理是分析你在预测前一个时间段的值时的错误程度,从而对当前时间段做出更好的估计。
基本上,这个模型考虑了滞后观测的误差。这些先前(滞后)观测误差对当前观测的影响取决于它们之间的自相关。这在某种意义上类似于考虑部分自相关的 ar 模型。
MA equation
ε项表示在相应滞后处观察到的误差,权重(ω1,ω2 …ωq)根据相关性进行统计计算。
注意等式中的*(q)**…*
(q) 表示移动窗口的大小,即对当前观测有重大影响的滞后观测误差的数量。它类似于滞后顺序 § ,但是它考虑的是误差而不是观测值本身。
MA 模型补充了 AR 模型,考虑了以前时间段的误差,从而有助于获得更好的估计。
当我们结合 AR 和 MA 等式时,我们得到
Combined equation for ARMA
平稳性
到目前为止,我们讨论的模型(ar 和 MA)都假设序列是平稳的。这也意味着*【平稳性】*是利用这些模型进行任何时间序列的必要条件。
但是…什么是平稳性?
基本上,一个时间序列要成为平稳*,应该满足以下三个条件…*
在大多数情况下,通过研究相对于时间的曲线,可以直观地分析这些条件。
你会遇到许多显然不是平稳的数列。
这是否意味着预测不能应用于这些情况?
嗯…这就是子缩写 I 的由来…
综合(一)
比方说,你遇到一个具有*“非常数”平均值的数列。可以清楚地观察到,平均值随着时间的推移而增加,即*序列不是稳定的。
Amazon stock value over time
如果我们能以某种方式消除这种上升趋势,我们就可以走了。
一种方法是考虑连续时间步长之间的差异。这相当于执行形式的转换…
Transformation
应用这种变换,我们得到了具有可观测的常数平均值的下列趋势。标准差也是恒定的,季节性不存在,即该系列现在是稳定的。**
Transformation applied
I 代表集成* (虽然与集成无关)。这只是意味着,我们不是预测时间序列本身,而是预测序列从一个时间步到下一个时间步的差异。*
注意,这里我们采用了一阶差分,即连续项差分的单个相位。这可以多次进行以使系列静止。
这个差分顺序*(d)是 ARIMA 的一个重要参数,决定了模型的成功与否***
因此,为了修正,最终的 ARIMA 模型将采取以下形式。
外卖食品
ARIMA 由于其简单性和对非平稳序列的泛化能力,是一种广泛使用的预测模型。
尽管如此,了解什么时候使用 ARIMA,什么时候不使用它是很重要的。ARIMA 不适用于季节性的数据。比如农作物产量预测或者人造圣诞树的销售!
在这些情况下,最好使用季节性 ARIMA。
用直观的可视化解释搜索算法的基础
本文比较了应用于 85 个城市的旅行商问题的几种搜索算法。目标是向刚接触优化主题的人展示一些众所周知且有效的搜索算法背后的直觉。我选择构建不太复杂的算法,并试图将它们描述得尽可能容易理解。如果你感兴趣,你可以使用提供的 R 代码自己运行它们或者创建你自己的修改(向下滚动链接)。
旅行推销员问题
给定一组城市以及每对城市之间的旅行成本,旅行推销员问题(TSP)就是找到一种最便宜的方式来访问所有城市并返回起点。问题陈述的简单性是欺骗性的;TSP 是计算数学中研究最深入的问题之一。对于这个项目,“成本”被定义为两个城市之间的直接距离(即欧几里德距离),单位为千米。
资料组
根据 2006 年的统计,需要访问的 85 个城市都是全球人口超过 100 万的首都城市。今天可能会有更多人口超过 100 万的首都城市,但这与优化问题本身无关。我为美国首都(华盛顿)、加拿大首都(渥太华)和荷兰首都(阿姆斯特丹)开了一个例外。他们在 2006 年没有超过 100 万的居民,但我还是添加了他们,只是为了好玩。该数据集是从一个源文件构建的,该文件可以在 R 的“地图”包中免费获得,包含超过 40,000 个城市的信息。当然,我们所有的路线都从阿姆斯特丹开始。
方法
一种方法是计算所有可能的路线并选择最佳路线。对于这个有 85 个城市的 TSP 的例子,可能的解的数目是 1.65712e+126,或者 16571200672826435296943171271229587838132927197483106469639871841941940477704。这比宇宙中的恒星数量还要多(来源,或者撒哈拉沙漠中的沙粒数量还要多(来源)。使用这种方法需要很多年和一台量子计算机来解决这个问题。因为我两者都没有,所以这种方法是不可行的。
另一种方法是使用精确的算法,如分支定界法或单纯形法。这些都是非常稳健的方法,将为高达+/-200(在普通 PC 上)的 TSP 问题找到最佳解决方案。然而,以一种直观的方式将这些可视化是具有挑战性的,如果不是不可能的话。由于这个项目的主要目标是向刚接触这个主题的人展示算法的直觉,这些是不合适的。此外,这些方法不能很好地扩展,因此将它们应用到更多的城市(源文件总共包含 40.000 个城市)是不可行的。因此,玩大型游戏的机会就少了。
相反,我使用了另一种强有力的方法来解决这个问题:搜索试探法。这些方法的优点是,您可以保持它们相对简单和直观,同时它们仍然可以找到(接近)最优的解决方案。此外,它们的伸缩性更好,因此将它们应用于更大的 TSP 将更不容易使您的机器崩溃。缺点是你不知道你离最优值有多远。我使用的搜索试探法是最近邻、随机最近邻和(重复)2-Opt。正如我将向你展示的,这些方法相对简单,但也非常有效和直观,尤其是结合使用时。
最近的邻居
最近邻居(NN)是最简单的搜索试探法之一。它是建设性搜索试探法家族的一部分,这意味着它会逐渐建立一条路线。从一个城市开始,仅在访问完所有城市后停止。它本性贪婪;在每一步中,它选择离当前位置最近的位置。
Nearest Neighbours
应用于我们的问题,我们找到一条总距离为 112.881 KM 的路线。每次我们运行算法,都会产生完全相同的解。这看起来让人放心,但这也是这种算法的一大缺点。由于其贪婪的本性,它总是追求眼前的利益,错过了在更长时间内会有回报的机会。NN 给了我们一个可行的解决方案,第一次尝试看起来一点也不差。但是我们能进一步改进它吗?
具有 2-Opt 的最近邻
2-Opt 是来自局部搜索家族的算法。这些算法从初始解开始,迭代地在该解的邻域中寻找改进机会。这个初始解可以是任何类型的解,只要它是可行的。例如,像 NN 这样的构造性算法的结果或者从专家知识构建的解决方案。
2-opt 算法的工作方式如下:从路径中提取两条弧线,将这些弧线重新连接起来,然后计算新的行驶距离。如果此修改导致总行驶距离缩短,则更新当前路线。该算法继续建立在改进的路线上,并重复这些步骤。重复该过程,直到没有发现更多的改进,或者直到完成了预定次数的迭代(在该实现中为 100 次)。
比如,让我们走以下路线:阿姆斯特丹—布鲁塞尔—巴黎—柏林—哥本哈根—赫尔辛基—伦敦—阿姆斯特丹。一个拱门可能是布鲁塞尔-巴黎,另一个可能是哥本哈根-赫尔辛基。2-Opt 交换这些拱门中的连接,即现在的路线从布鲁塞尔-哥本哈根和从巴黎-赫尔辛基运行。
- 目前航线:阿姆斯特丹—布鲁塞尔—巴黎—柏林—哥本哈根—赫尔辛基—伦敦—阿姆斯特丹
- 修改后的航线:阿姆斯特丹—布鲁塞尔—哥本哈根—柏林—巴黎—赫尔辛基—伦敦—阿姆斯特丹
Nearest Neighbours with 2-Opt
为了方便起见,这个可视化只显示了一次迭代(即阿姆斯特丹-布鲁塞尔弧线),但是在我的实现中可能有多达 700,000 次这样的迭代。因此,对于一个小的实例,最终的解决方案可能看起来与初始的解决方案非常不同。NN + 2-Opt 找到的最终解是 99.242 KM。万岁!我们改进了我们的旅行!
随机最近邻
虽然 2-Opt 能够改善我们的游览,NN 扩展的最初的缺点仍然存在。我们可能仍然只是在改进一个局部最优的解决方案,而永远无法利用大的长期改进机会。为了增加我们“偶然发现”其中一个重大改进机会的机会,我们需要多样化我们最初的开始解决方案。这意味着我们可能会提出最初看起来“愚蠢”的初步解决方案,但实际上是伟大事业的基石。
这就是随机最近邻算法(RNN,不要被误认为是递归神经网络)发挥作用的地方。与常规 NN 算法的唯一区别是,它不是完全“贪婪的”,因为在构建路线的每一步,它都会考虑多个候选项(在我的实现中是 3 个最短距离选项)并随机选择 1 个。您可以通过增加或减少候选项的数量来调整算法的“贪婪性”。不太贪婪的算法会在生成的路由中产生更多的差异。
Randomized Nearest Neighbours
当应用到我们的问题时,最终的解决方案几乎增加了一倍的旅行距离,194.936 公里,而且情节看起来非常混乱。但是等等!先不要把你的电脑扔出窗外。由于我们算法中的随机性(即它的随机性质),这可能只是运气不好。或者我们可能非常幸运,它可能被证明是本地搜索的一个极好的构建块…让我们调查一下!
具有 2-Opt 的随机最近邻
接下来,我们将 2-Opt 应用于 RNN 的最终解决方案,看看它实际上是否是伪装成怪物的天才积木。
Randomized Nearest Neighbours with 2-Opt
是啊!!!2-Opt 将我们开始时的这条丑陋的东西变成了一条只有 99.430 公里的美丽的新路线。这几乎就像一个童话故事…但是等等,我们还没有去酒吧庆祝。这条路线比从 NN+2op 开始的路线稍长,所以我们有更多的工作要做。
RNN 的随机结果给了我们一个很好的工作基础。但是,如果有更好的积木呢?由于这一过程的随机性,每次重复都会产生不同的结果,即不同的开始路线。如果我们重复这个过程很多次呢?也许我们会偶然发现一个更好的积木!
具有 2-Opt 的重复随机最近邻
该算法多次运行 RNN 算法,并对每个结果应用 2-Opt。通过一遍又一遍地重复这个过程,我们正在探索许多不同的初始解决方案的邻域。这样做,我们大大扩大了搜索范围,我们有更好的机会找到局部和全局最优解。在我的实现中,我重复这个过程 100 次,以确保 GIF 不会变得太大。
Repeated Randomized Nearest Neighbours with 2-Opt
哇!应用这种算法组合,我们目前的最佳总旅行距离减少了 10%!总行驶距离现在是 90.414 公里。现在是庆祝的时候了。这个算法已经能够在我们之前的最佳路线上找到 8 个改进。通过在探索的初始解中引入方差,我们能够探索许多不同的解,并迭代地改进它们。这样做,我们可以覆盖很多领域,也可以探索最初看起来不太有希望的解决方案。该算法从非常静态、贪婪和没有灵感的东西变成了能够调查许多选项并为问题生成创造性解决方案的东西。
Total distance for each iteration
最后的改进是在第 90 次迭代中发现的,所以在下一次运行中增加迭代次数是值得的。
结论
优化问题看似简单,但实际上往往非常复杂,并且有大量的潜在解决方案。解决这些问题可以用精确的方法,但这些方法通常需要时间和大量的计算能力,尤其是较大的优化问题通常太复杂而难以解决。但是,运用常识和一些创造力,我们可以构建需要更少处理能力并且可以执行得非常好的算法。事实上,如果时间有限,这些解决方案甚至可以优于精确的方法。我希望这篇文章能帮助不熟悉优化的人对算法如何工作产生一些直觉,并感受到它们巨大的潜力。
Result of each algorithm applied to TSP instance
Mikko Venhuis
自己运行代码:【https://github.com/Mik3000/SearchAlgorithms】T2
我没有时间去做但已经在我的待办事项清单上的事情
- 使用 Gurobi 生成该问题的最优解
- 制作区域版本。例如,游览欧洲所有的首都城市
- 应用替代搜索试探法,如遗传算法、模拟退火或禁忌搜索
如果您想了解更多信息:
艺术育种家。给我画一只电动羊。
如何以用户友好的方式应用生成式对抗网络?
N 没有什么是原创的。然而一切都是。早在二十世纪初,达达主义者、超现实主义者、以及后来的默茨艺术家库尔特·施威特斯就已经探索了这个事实。他们将发现的材料混合到新的拼贴画和 3D 组合中。无数现实的无数碎片变成了无数新的幻象。
与人工智能同时代的实验结出了类似的美丽果实。你可能会意识到新作品背后的互文性,但它们就在这里——给你的新世界。最初开始于 的谷歌深度梦境 变成了机器人梦境的多面可视化。
我们现在可以看到人工智能对电羊、世界和其他事物的梦想了。
去年,我写了一篇关于 GANbreeder 的文章,这是乔尔·西蒙和 http://www.joelsimon.net/的申请。一个用户友好的 BigGAN 模型集,在 ImageNet、Kaggle 集和其他可视化数据库上进行了预训练。数据可视化的大众化和民主化。它允许从现有的 DNA 生成视觉杰作——在与其他用户/艺术家/观众的协作过程中,即使没有详细的数据科学知识(不是每个艺术家都会 Python )。
乔尔的最新项目将带你进入人工智能作品的下一个维度。令人惊叹:
艺术育种家
让我们参观 Android Dreams。
目前有五个板块:普通、人像、相册、风景、和动漫人像。(该项目正在开发中,因此新的模型和功能一直在出现)。
让我们在这本全面的艺术育种指南中探索所有的模型
Portraits (random selection)
画像
谷歌大脑的研究人员科学家 Ian Goodfellow 提到了人工智能在人脸生成方面的巨大飞跃:
当 2014 年人工智能生成的脸看起来仍然几乎像一张 pareidolia Mars 脸时,2018 年已经是照片逼真的假脸生成的突破(提醒一下病毒页面ThisPersonDoesnotExist.com用 StyleGAN 生成的绝对惊人的结果)。
现在你可以自己做了。在**肖像部分,**你会发现四个功能:
- 随机。
显示的是已经生成的随机画像。你可以拿起它们并修改它们。 - 混合图像
将现有的肖像和基因交叉——生成全新的人物角色。 - 上传上传
比较新的功能——你可以上传图片来操控它们。 - 制作简短的变形视频。
创作肖像。
因此,让我们从现有的肖像集创建一个新的人。选择“随机”会将您带到“Artbreeder”中现有图像的列表:
Fig 1: Random browse
正如你所看到的,不仅照片真实感的脸可用,而且风格不同的模型。 StyleGAN 在这里以最佳方式展示风格转移。让我们选择戴眼镜的男性。
Fig 2: Children
你在这里看到的是最初的一组可能性。右上角是实际的修改面板
- 儿童
- 杂交的
- 编辑-基因
下面你可以看到不同用户已经生成的图像。
所有图像特征都是**神经网络层,**你可以主动或随机改变。
儿童
这种修改方法是您最不能控制的方法。你能做的一切就是改变相似性与差异的百分比。定义的不同图像越多,得到的不同结果就越多*(图 2)* 。当图片几乎符合您的预期时,您可以对其进行微调。
杂交的
Fig 3: Crossbreed
经典的风格转移模式。您选择另一个图像(存在于 Artbreeder 中)作为目标(或源,视情况而定)——通过修改面和样式参数,您可以在两个选择的图像之间转换样式。因此您可以合并图片或更改它们的样式。
编辑-基因
Fig 4: Edit-Genes
最有效的修改方式:通过主动改变每一层的百分比,你可以直接改变特定的功能。在图 4 中。你可以看到之前的男性戴眼镜者(T1)的肖像,但是通过变换层次(T2、年龄、T4、眼镜、性别),几乎完全不同的图像出现了。参数 Concept_art 是一个隐藏的样式传输层从照片级逼真图像切换到手绘草图或绘画。
血统
图像下的第二个图标是血统。它显示了肖像的“系谱树”:
Fig 5: Lineage
在我们的例子中,它是一个简短的家谱。你还会在 Artbreeder 中发现经过反复修改的图片,故事很长。
Fig 6. Sample for big-scale lineage
上传
这是一个新功能,它使艺术培育者更像是一个艺术实验室。它不再是纯粹的甘农场了。它的意思是:你可以上传你的图片。它们可能被敌对的网络以这样或那样的方式处理和改变。有时候并不像你想象的那样。
例如,上传这张著名的前卫派达达派**【汉斯·阿尔普】**(用一张纸碟遮住左眼)的肖像,在 发生器和 鉴别器的相互作用中,引起甘的“纠正”——恢复他看不见的眼睛(改变凝视):
这是与现实世界的实际交集(涉及版权、数据隐私等所有问题)。—用户要明智使用)。然后就是使用期限,当然。
如果你把上面汉斯·阿尔普肖像的风格转移到我的照片上,就会发生这种情况:
Fig 6. (Crossbreed with uploaded image: Vladimir Alexeev + Hans Arp)
或者我和克劳斯·诺米的风格转换:
Fig 7. (Crossbreed with uploaded image: Vladimir Alexeev + Klaus Nomi)
上传功能极大地增加了可能性。
动画
静态图像生成的重要补充。选择关键帧(现有的肖像)——AI 会以一种近乎神奇的方式生成图像之间的过渡。您可以选择持续时间以及过渡模式。
Fig 8. (Keyframes)
这个关键帧序列产生引人入胜的镜头:
您可以注意到关键帧之间的各种风格转换,非常奇怪。
通用模式
General
这是前ganbreader(也由 Joel Simon 制作)背后的实际核心——经过打磨并与新模型一起运行。在这里你可以生成很多东西。
还记得,回到 2018 年,和比根的大突破?你可以给基于 Tensorflow 的 GAN 模型一个任务来生成一个特定的主题——结果已经令人信服了(用 Colab 笔记本 试试看)。
使用 Artbreeder,您可以从头开始生成世界。
像肖像画一样,这里有以下功能:
- 随机。
显示随机已经生成的图像。你可以拿起来修改。 - 混合图像
跨越现有的肖像和基因——生成全新的视觉效果。 - Mix-Genes
组合特定的语义网络层(基因) - 制作动画
制作简短的变形视频。
溜进随机大概最多把你搞糊涂。除了面孔,你会在这里找到所有可能的嵌合体、幻影和无法解释的视觉效果。
Fig 9. Random images from General Topic
这里的修改功能类似于生成肖像。
突出的例外是“编辑基因”。
Fig 10. Edit-Genes in General.
正如你所看到的,这里的图层不像肖像中那样表现面部特征——它们更像是表现主题,几乎是柏拉图式的精神境界。这些“基因”是来自 BigGAN 中的“类别条件采样”的“类别”:视觉数据库的主题,它们被标记并用于训练。
在图 10 中,你可以观察到哪些类别是视觉效果的基础(以及比例):漫画、爱斯基摩犬、宫殿等。
我们甚至可以在这里讲述图像的语义词源。
这种变革性的艺术一代是一种真正重新描绘我们现实的新方式。所以让我们在下一个函数中从头开始创建一个新的图像。
混合基因
首先,你需要选择一个基因(一个标记层,BigGAN 内部的一个神经网络突触):
Fig 11. Select a gene
这是一个隐藏了内容列表的类别库。让我们选择 架构 作为我们的第一个基因。
Fig 12. Gene “Architecture”
正如您所看到的,这是一项仔细的标记工作(并非总是如此)。BigGAN 在同一类别的无数图像上进行了训练,因此选择一个基因可以产生同一主题的非常不同的图像。所以让我们把“种姓作为第一个基因——第二个基因将来自于“类器具。
Fig 13. Select a gene
现在你明白我说的标注的意思了吧。总是一个人的因素。来自 ImageNet (以及很多其他图像数据库)的图像被人们贴上标签,有时对其目的没有一个清晰的概念。这里被标为的乐器实际上在大多数情况下是一个人在演奏这个乐器。其含义是显而易见的——它将产生人类,而不是物体。对于弱人工智能来说,一切都是关于要定义的模式。
但是现在让我们把“城堡”和“机关”结合起来:
Fig 14. General results (you can change the intensity of a gene with slider)
两者——城堡和机关——都是可以辨认的,即使人们无法区分里面和外面。相当梦幻的意象。当你醒来并试图回忆最近的梦时,你知道这种感觉——画面在互换、变形、消失、滑动。迷惑你的大脑,试图找到最简单的概念。
动画
几乎和肖像画一样——结果是压倒性的。同样,这就像一个梦的可视化,只是在这种情况下,你甚至可以看到——或暂停——视频,这不会帮助你的意识更好地识别。
以下是一般动画的示例:
相册
Album mode
10.000 专辑封面是用于在“专辑”部分训练神经网络的数据库。
这是非常特别的东西——不同于肖像或一般的,相册是文本、布局和图像的模拟混合。远的是人工通用智能的时代。我们仍在与弱人工智能(T21)合作——文本背后的语义丢失了。这是一种通过计算来重建文本的尝试。
与以前的模型类似,我们在这里有以下功能:
- 随机。
浏览随机生成的相册图片。 - Mix-Images
跨越现有相册,生成全新的视觉效果。 - 制作短片和变形视频。
记住,这里的“字体”和“字迹”属于构图。它不能作为层单独修改。
这与其说是理解,不如说是美感。
风格、图案和标识的多样性激发了更多灵感。
风景
Landscapes
这一部分展示了神经网络在无数图像上的训练是多么完美。在这种情况下——风景基本上是完美的。或者可能是我们的感知——我们的大脑在自然意象上比在其他动机上受到更好的训练。因此,我们没有意识到现有的故障或视觉错误,因为我们的感知跳过了不必要的元素。
您已经知道这些函数是如何工作的:
- 随机。
浏览随机生成的风景图片。 - Mix-Images
跨越现有的风景,生成全新的视觉效果。 - 制作动画
制作简短的变形视频。
就像在专辑里一样——在这里你必须尝试,混合,修改。没有真正的景观“基因”(至少目前是这样),但是通过参数的随机化,您可以生成精彩的样本:
作为最近的补充,乔尔扩大了动漫肖像的选择,传奇人物格温的动漫模型(也可以访问格温的项目ThisWaifuDoesNotExist.com)。
Anime model by Gwern
发展
乔尔·西蒙是 Artbreeder 背后的英雄。但在art breader Discord-Server中也有一些人,他们讨论、交流想法,建议如何改编最好的 UX,讨论最新的人工智能成就,讨论服务条款和隐私,分享最新的 art breader 创作的作品。卓越的团队合作。
Artbreeder 的开发是非常动态的——因为 Joel 对用户的想法和修改反应迅速。
迄今为止,这是我使用数码产品的最佳用户体验。
这就是为什么可能在这篇文章发表后的几天,Artbreeder 可能会获得新的功能,或者可能会改变它的界面。那么,你还在等什么?潜入并加入 艺术培育者 。
用法?
事实上,哪些用例与 Artbreeder 的图像生成相关?如何应用这些结果?
以下是一些尝试:
- 概念设计理念
- 角色设计(视频游戏,桌上游戏,自发的 D&D 角色生成有人吗?)
- 艺术项目(图像和视频装置)
- 灵感
…仅举一些有趣的用法。
你还有其他应用人像生成的想法吗?
创造!实验!受到启发!
你的,炼金术士。
Alchemist. Generated by Merzmensch with Artbreeder.
**更新。**我在 GANs 上找到了一篇标题类似的文章,它是一年前由 Libre AI 的联合创始人兼首席执行官埃内斯托·迪亚兹-阿比莱斯博士发表的,讲述了在 AI/ML 的帮助下绘制绵羊的有趣尝试。免责声明:也许安托万·德·圣·埃克苏佩里和菲利普·K·蒂克的结合是我们理解创造力和人工智能的典型。所以,我没有抄标题,怕你纳闷。这是 21 世纪的明显后果。😃
这是:
带 AI/ML
medium.com](https://medium.com/libreai/draw-me-an-electric-sheep-9a3e0b5fe7d5)
人工智能和人类智能
规定分析是人工智能领域,致力于规定最佳可能的下一步行动。它依赖于一套技巧,我将用一个大家都知道的简单而熟悉的问题来说明:打包行李。我的妻子和孩子可能不知道,但他们正在使用业务规则(BR)、机器学习(ML)和决策优化(DO)。
人类
人工智能(AI)就是*“机器展示的智能”*。开发但也理解人工智能的一个好方法是理解人类的智能。人类的决定来自于情感、直觉和推理的混合。关于这一点有大量的文献。重要的是,人类受到几个因素的影响:
**记忆力有限。**人类的记忆力有限,有时,即使面对与以前完全相同的情况,他们也能做出完全相同的错误决定。我的曾祖母重复最多的建议是:“犯一个错误不是问题,但是犯两次同样的错误是非常愚蠢的”。一些经常听到的类似建议是“要么我们成功,要么我们学习”。
有限加工。当需要计算或者演绎逻辑的时候,当问题规模变大的时候,需要很强的理性技能,人类肯定是有限的。
**情绪。**人类有情感。情绪可能是对人类决策影响最大的因素。研究表明,一个人并不总是对同样的问题做出同样的决定,因为这取决于他们当天的情绪状态。
**环境。**在压力下,当疲劳时,由于恶劣的天气,人类的决策也会受到影响。
让我们举一个例子
抛开这些限制,我们使用一系列技术来做决定,这些技术也是人工智能的基础。最近,我开始用一个简单而熟悉的例子来说明这些不同的技术:
去年夏天,我和我的家人乘飞机去度假,我们都必须收拾行李。这是一个简单而常见的决策问题。我应该在我的手提箱里放什么?多少件 t 恤?我应该带一本书还是两本?我应该带泳衣还是毛衣?
阿德里安
我的小儿子 Adrián 只是遵循他母亲提供的规则:“妈妈告诉我每天放一双袜子和一件衬衫,然后放一本书,如果我能放得下的话,再放一些玩具”
能够执行规则就是智能。事实上,我们的大多数教育系统都致力于教导我们的孩子理解规则形式的指令并执行它们的能力,顺便说一下,这一水平在很大程度上足以在人类社会中维持最低限度的生存。在家里,在学校,在工作中,许多人不需要或不使用任何其他类型的智力。
这些技术对应于业务规则管理系统。
决策的质量主要受(1)规则的质量和(2)正确执行规则的能力的影响。因此,除了规则执行之外,一个重要的先决条件是能够将决策过程公式化为一组优先的 if-then 规则。
BR 的一个重要好处是规则的明确化。决策很容易预测、理解和解释。
雨果
我的大儿子雨果的做法不同。基于多次看着妈妈为暑假打包行李,他自己学会了。
事实上,在我们这个复杂的世界里,不可能总是明确地向你的孩子提供所有事情的所有规则,所以你希望他们学习,看着你,看着你告诉他们好的其他模型。你吃健康的食物,做运动,读书,期望你的孩子看着你,并复制这些好习惯。
这是另一个层次的智能,人类可以自己学习。一些人类(不是全部)使用这种智能。一种非常有限的学习类型至少是不重复两次同样的错误(见上面奶奶的建议)。
这个例子当然对应的是机器学习。
它强调了历史培训数据的重要性。雨果要看妈妈收拾行李很多次才能自主。这是像机器学习这样的数据驱动技术的一个好处:你不需要理解和制定业务问题,也不需要你将解决它的确切方式。但是雨果包装的质量很大程度上取决于他是向某人学习还是单独学习,以及他向谁学习。如果他通过看着我来学习,那么结果可能会更糟。
有趣的是,这个例子很好地说明了机器学习的训练和偏见的困难:Hugo 已经看到他的母亲为暑假(去海滩)打包了很多次,如果我们必须打包行李去滑雪,他会有麻烦…
莫尼卡
第三种智慧是我妻子莫妮卡使用的。她知道航空公司的行李重量限制是 23 公斤,她知道哪些物品是强制性的,哪些不是,她还会考虑目的地的天气来设置可选物品之间的偏好。
基于这些约束和偏好,她可以在心里计算出这个物品加上那个物品不符合重量限制,或者这组物品比另一组提供了更好的整体满意度。
这里没有那么多的决定、约束和目标,所以她可以在精神上优化这些决定。
包装错误的原因可能是,例如,对目的地天气的糟糕预测,或者对航空公司规定的误解。
这就是决策优化的工作方式。
就像业务规则一样,决策优化是一种知识驱动的技术。做决策需要一些数据(限于当前问题,你不需要历史数据),还需要业务问题的一些提法,这就是我们所说的优化模型。实例数据加上优化模型被输入优化引擎,该引擎使用数学返回最优解。
那么如何决定呢?
理想情况下,聪明的人知道何时使用每一级别的智能。有时候,决定并不需要你开发一个优化模型(例如,决定今晚去哪里吃饭),但有时候它会有所帮助(例如,决定如何投资你的储蓄)。有时候不遵守某些法律是对的。
对于人工智能,会出现类似的情况,不同的方法仍然不容易结合,可能会有不同的好处和不便。这就是为什么理解这些不同的技术并能够识别每种技术何时更适用以及它们何时可以有效地结合是至关重要的。
每种技术的优缺点总结如下。
业务规则:
- 优点:规则明确,结果易于解释
- 缺点:需要陈述规则,决策不一定是最优的
机器学习:
- 优点:不需要制定或甚至精确地理解问题
- 缺点:偏见的风险和解释结果的困难
决策优化:
- 优点:最佳解决方案
- 缺点:需要制定业务约束和目标
Watson Studio 是一个数据科学平台,提供描述性、预测性和规范性分析工具,机器学习和决策优化可以轻松结合。
关于数据科学其他领域的规定性分析的介绍,你可以阅读这本。
alain.chabrier@ibm.com
https://www.linkedin.com/in/alain-chabrier-5430656/
这个帖子的一些内容和观点之前已经发表过这里。
人工艺术家:人工智能能创造艺术吗?
开发具有艺术能力的人工智能的挑战
Photo by Anna Kolosyuk on Unsplash
rt 是一个非常重要的工具,它允许人类表达我们想象中创造的情感和想法。它在社会环境中扮演着重要的角色,可以带来洞察力和理解,也可以带来娱乐。
开发具有艺术功能的计算方法的愿望并不是最近才有的。150 多年前,艾达·拜伦表达了她开发一台能够创作音乐的计算机的梦想[1]。
一个能够理解和创造艺术的人工智能将代表着在创造更接近人类的机器方面迈出了一大步。一个大问题是:机器创造的东西能被认为是艺术吗?
什么是艺术?
由于艺术固有的主观性,定义艺术并不是一件容易的事情。根据牛津词典,艺术被定义为:
人类创造性技能和想象力的表达或应用,通常以绘画或雕塑等视觉形式,创作出主要因其美或情感力量而被欣赏的作品。
有一个哲学分支研究艺术和美的概念,叫做美学。《牛津词典》中有以下关于美学的定义:
“一套关于美的本质和欣赏的原则。哲学中有关美和艺术品味问题的分支
在美学中,一个观点负责定义某个对象如何被归类为一件艺术作品,这取决于几个因素,如个人品味、文化背景、艺术形式等,如[2]中所指出的:
“审美观点决定了如何将一件物品理解为艺术品,以及当以这种方式理解时,如何判断一件物品的质量。一个观点可以被认为是一个观察者用来将物体视为艺术作品的构想,也可以被认为是一个艺术家用来创作新作品的构想。
有许多可能的美学观点。它们因不同的人、不同的文化和不同的艺术形式而异。当两个不同的人以两种不同的方式理解和欣赏作为艺术作品的同一件物品时,或者当两个不同的艺术家创作出两种不同的物品并都被称为好的艺术作品时,观点的多样性就显而易见了。”
有了这些定义,很明显人工发展(或学习)一种美学观点应该是人工艺术家的基础。
AI 能创造艺术吗?
简短的回答是:是的,为什么不呢?如前所述,如果我们对审美观点有一个好的定义,就有可能开发出一种能够评估艺术的算法。
主要问题是缺乏关于驱动人类艺术创作/评价的规则的知识。这使得精心设计一个能够产生艺术作品的封闭算法变得困难。最好的方法可能是使用元启发式算法,在一大组可能的解决方案中搜索,以发展自己的美感。
在[3]中,Penousal Machato 等人提出了人工智能成为艺术家必须具备的 5 个特征:
- 学习:系统必须能够像人类艺术家一样,根据新的刺激来提高技能和调整艺术表现力。
- **自己的审美标准:**对于任何一个艺术创作者来说,能够评价自己和其他艺术家的艺术创作是至关重要的。即使没有评判艺术的普遍标准,每个人也必须根据自己的个性发展出自己的特定标准。
- **创造力:**创造新颖和创新的艺术作品是杰出艺术家的标志。该系统不应该对现有的艺术品进行小的改动,而是创造全新的东西(尽管它可能会受到其他艺术家作品的影响)。
- **平等:**制度不应受制于人的意志;它应该在同等水平上与人类或人工智能体相互作用。
- 没有社会背景,艺术是无法被创造出来的。人工智能必须能够将艺术作品作为灵感的来源。
在同一篇论文中,提出了两个模块的方法。第一个模块是一个基于基因编程的进化引擎,负责创造新的艺术品。第二个是基于神经网络的自适应分类器,能够“捕捉相关的文体属性”并“成功区分作者和风格”。然而,即使具有良好的结果,该系统也仅部分满足上述要求。
我将展示一些其他的出版物,它们都是用人工系统来创造艺术的,尽管就我所知,目前还没有一个艺术系统能满足所有 5 个要求。
Photo by Franck V. on Unsplash
音乐分析与作曲
在[4]中,作者提出了一个通过使用 992 首音乐作品的流行度作为审美标准来训练的人工网络。这个系统自主地创造了巴赫的小调 (BWV 784)中的发明#13 的变体,这些变体被发现对许多听众来说是审美愉悦的。这篇论文中提出的突出问题是很难找到真正糟糕的音乐(这里定义为不受欢迎的音乐),因为大多数古典音乐的糟糕例子都没有存档。
机器人动作画家
Leonel Moura 开发了一个可以创作新颖画作的机器人。RAP[机器人动作画家]通过随机性、散斑性和色序性来实现人工创造性。此外,该机器人能够自行确定绘画完成的时刻。
Artwork from RAP robot [5].
DeepArtificialComposer
在这项工作[6]中,提出了一种用于旋律自动作曲的音符过渡的递归神经网络模型,称为深度人工作曲器(DAC)。DAC 可以生成与训练示例的风格一致的旋律(例如,爱尔兰和 Klezmer 音乐)。DAC 生成的旋律的创造性由音乐序列的新颖性来衡量,这导致 DAC 创建的旋律与人类作曲家创作的旋律相比具有新颖性。
结论
创造和欣赏艺术是人类区别于其他生物的独特之处之一。一个能够培养艺术感觉的系统将代表着向更复杂的人工智能迈进了一大步,并能更好地理解人类大脑的运作。
即使现有的人造艺术家不符合被认为是真正艺术家的一套严格的规则,我们也有系统能够创造杰出材料的例子。在我看来,这种能力让机器更加人性化。
参考
[1]摩尔,多丽丝·l . .爱拉斯伯爵夫人阿达:拜伦的合法女儿哈珀柯林斯出版社,1977 年。
[2]吉普斯、詹姆斯和乔治·史蒂尼。“算法美学的调查” 莱昂纳多8.3(1975):213–220。
[3]马查多、佩努萨尔等**《论进化人工艺术家的发展》** 计算机&图形学31.6(2007):818–826。
[4] Manaris,Bill,et al. “一种基于语料库的混合音乐分析与作曲方法。” 全国人工智能会议论文集。第 22 卷。№1.加利福尼亚州门洛帕克;马萨诸塞州剑桥;伦敦;AAAI 出版社;麻省理工学院出版社;1999, 2007.
[5]莱昂内尔·莫拉。一种新的艺术:机器人动作画家×生成艺术会议,意大利米兰理工大学大学 (2007)。
[6] Colombo,Florian,Alexander Seeholzer 和 Wulfram Gerstner。“深度人工作曲:用于自动旋律生成的创造性神经网络模型。” 进化和生物灵感音乐艺术国际会议。施普林格,查姆,2017。
人工智能如何变得好奇?
人工好奇心可能是机器学习和人工意识之间缺失的一环
Photo by Joseph Chan on Unsplash
任何人都会因为书籍、电影和电视剧中出现的一些非凡情节而对机器学习(或更广泛的研究领域——人工智能)产生兴趣。研究和实现能够在解决许多任务方面专业化并超越人类的算法确实非常令人着迷。然而,当谈到我们通常处理的大多数问题时,感觉我们离阿齐莫夫故事和终结者电影中存在的智能实体很远。在现实中,没有公开的关于人工智能的信息,人工智能具有必要的复杂性,能够变得有意识,并能够自愿开始自己做事情。
那么,我们要达到那个人工智能水平,还缺什么呢?答案并不简单,但我会说大多数机器学习方法都过于依赖人类的监督。对于监督学习,必须提供带有人工分类示例的大数据集,而在强化学习中,代理高度依赖于奖励函数。从这个意义上说,这些算法与它们被编程来解决的任务紧密相关。
但是,如何让一个系统在没有明确编程的情况下能够学习呢?一种选择是让这个系统对新奇的事物感到好奇。
Photo by Joseph Rosales on Unsplash
什么是人工好奇心?
在这个上下文中,好奇心被定义为一个智能体学习未知规律的兴趣。这个想法是奖励系统,如果它发现一些意想不到的东西。另一方面,当面对可预测或固有不可预测的模式时,这样的代理应该会感到厌烦。第二种说法可能听起来很奇怪,但是对于代理人来说,花费大量时间试图理解某个随机事件是如何工作的是不合理的。例如,来自无线电的静态噪声代表未知数据的连续流。然而,不可能从中提取有意义的信息。
人工好奇心一词代表实现这一机制的算法。好奇心奖励被添加到代理学习过程中,与给定输入的预期结果和实际输出之间的差异成比例。如果这种差异很大,这意味着代理人“创建”的关于周围世界的模型不包括这一特定事件。收到好奇心奖励后,代理人被刺激去了解更多发生的事情。然而,对它了解得越多,预期/实际产出的差异(以及收到的回报)就会越小,导致兴趣降低。
当我们正确看待人类行为时,这种好奇心范式很有意义。当面对未知但可学习的情况时,我们有一种内在的动力去更好地理解它。然而,当解决一些太简单的任务,或者已经解决了很多次的任务(例如,重复的例程),我们会感到无聊,好奇心不足以成为继续工作的动力。
人工好奇心如何帮助解决问题?
人工好奇心是探索的有力工具。这对于解决优化问题尤为重要。在这样的问题中,有时很难避免陷入次优解。在强化学习中,这通常是通过强迫代理在开始时探索来实现的。然而,定义一个好的勘探/开发比率并不容易。
对于好奇的代理人来说,探索是自然发生的。推动他们前进的动力是内在的:好奇心奖励是发现新事物的内在刺激。这可以很容易地与代理试图解决的任务相结合。结果是一个受两种不同动机影响的主体:外在动机(学习如何解决任务时获得奖励)和内在动机(发现新事物获得的奖励)。
例如,OpenAI 在使用好奇心驱动的代理人之后,只能在蒙特祖马的复仇上开发出超过人类平均表现的人工智能[1]。这是一款 Atari 游戏,具有特殊的机制,使得大多数机器学习方法很难学习。
结论
E 即使我们无法开发出能够实现诸如持续学习、人工意识和自我意识等范式的人工系统,但许多可以帮助我们实现这一目标的方法已经存在。
参考
[1]纽约州布尔达市、爱德华兹市、斯托尔基市和克里莫夫市(2018 年)。**用随机网络蒸馏探索。**arXiv 预印本 arXiv:1810.12894 。