每个数据科学团队需要雇佣的 3 个缺失角色
在疯狂招聘数据科学家的过程中,大多数公司忽略了三个关键角色,这往往会导致项目失败
许多公司错误地认为增加分析就是雇佣足够多的数据科学家。也许这就是为什么自 2013 年以来,这个职位的招聘信息增加了 250%。
麦肯锡引用了一家大型金融服务公司的例子,该公司的首席执行官是高级分析的热情支持者。他特别自豪的是,他的公司雇佣了 1000 名数据科学家,每人每年的平均成本为 25 万美元。
后来,当新员工的表现明显不如预期时,人们发现严格来说,他们根本不是数据科学家。
你不能跳过的数据科学角色
Photo by Daniel Cheung on Unsplash
行业中的一个常见问题是,对数据科学家角色以及数据科学团队中的其他关键角色没有清晰的理解。这是许多分析项目失败的关键原因。
像数据工程师、机器学习工程师、可视化设计师这样的角色越来越普遍。但是,除非高管优先考虑招聘其他三项重要技能,否则他们可能会失去数据科学机会,失败的计划或项目不会被大规模采用。
让我们来探索这些特定的技能和角色:
1.数据科学翻译
Photo by Hello I’m Nik 🇬🇧 on Unsplash
您必须通过选择正确的业务问题来启动数据科学计划。翻译人员帮助您识别最有影响力的项目。他们将业务挑战塑造成可以通过数据解决的形状。
翻译对领域有很强的理解,数据流畅,是有效的沟通者。翻译人员在业务用户、数据工程师、数据科学家和视觉专家之间充当桥梁。
数据科学翻译充当粘合剂,将团队中的所有角色结合在一起。
他们将灵魂注入到解决方案中,并充当将团队中所有角色结合在一起的粘合剂。他们的角色在项目交付后继续很好地帮助用户采用解决方案和跨团队扩展。
“雇佣尽可能多的数据科学家——如果没有翻译人员将分析与真正的商业价值联系起来,你仍然会迷失方向。”——麦肯锡
你在组织中缺少这个角色的迹象:
如果你的分析项目没有交付价值,你可能选择了错误的计划。如果您的业务和数据团队各自为政,信息可能会在翻译过程中丢失。如果你的项目慢慢死去,你可能在内部宣传上做得不够。
所有这些都是你正在错过这些内部冠军的迹象。通过雇佣或培训数据科学翻译来解决这个问题。有商业分析背景的人最适合这个角色。麦肯锡预计,到 2026 年,美国对这一职位的需求将达到 200 万至 400 万。
鉴于行业中的技能差距,你可能会更成功地培训具有正确商业头脑的内部候选人。
2.行为心理学家
Photo by James Pond on Unsplash
机器学习模型擅长从数据中识别模式。但是,您仍然需要人类来解释大数据足迹通常导致的许多模式,并挑选出那些能够提供商业价值的隐藏宝石。今天,大多数数据科学应用旨在理解人类行为。你需要了解人们行为方式的专家。
人文和人类学专家在数据科学团队中的角色日益重要。
行为心理学家可以帮助理解购买决策或客户流失的原因。他们可以验证促进用户参与或影响生活方式改变的行动。随着人工智能进入我们生活的更多领域,人文和人类学专家在数据科学团队中的作用越来越大。
您在组织中缺少该角色的迹象:
你对人类行为的预测和见解是否没有击中要害?你的团队是否在努力解释他们决策中人的因素?这些都是你的产品还没有上市的迹象。如果你的团队没有进行这些对话,那就是一个更大的危险信号。
在您的数据科学团队中为具有心理学和社会科学背景的人划分角色。让他们参与讨论,以定义您的人工智能解决方案和产品功能。让他们验证关于人类行为的见解,并确定决策对用户意味着什么。
3.数据说书人
Photo by Daniel Cheung on Unsplash
一些领导者天真地认为,将分析师和工程师放入数据可视化训练营会让他们变成故事讲述者。但是数据说书人并不等同于可视化专家。数据故事不仅仅是可视化的;它们还向用户提供了到目前为止所发生的事情的背景。
然后,他们添加一段叙述来总结见解并推动业务行动。Gartner 表示数据故事需要具备所有三个要素:数据可视化、叙述和背景。
您需要团队中的数据故事讲述者为您的数据洞察力注入活力。
正如心理学家丹尼尔·卡内曼的名言,“没有人会因为一个数字而做出决定。他们需要一个故事。“你需要团队中的数据故事讲述者为你的数据洞察力注入活力。
你在组织中缺少这个角色的迹象:
Gartner 报告称,50%的数据科学项目因糟糕的故事讲述而失败。如果用户很难理解数据科学家产生的见解,那么你就面临着一个数据消费问题。如果决策与仪表盘脱节,讲故事可能就是缺失的一环。
帮助您的数据可视化专家更好地了解业务。提高数据翻译人员的技能,以便更有效地交流信息。训练他们用数据讲故事的技巧。验证数据科学计划的可操作性,并衡量投资回报。
完整的数据科学团队
Photo by freestocks.org on Unsplash
数据科学是一项团队运动。团队需要精通技术、业务、视觉和软技能。这里涵盖的三个缺失的角色需要重叠领域的专业知识,并且经常被忽略。
翻译的角色对于帮助定义业务问题和形成解决问题的方法至关重要。在解释机器学习算法揭示的人类模式方面,行为心理学家的作用至关重要。
最后,数据故事讲述者将这些见解编织成一个有趣的故事,可以在整个组织中传播和促进行动。缺少其中任何一项,您的数据科学工作都可能失败。
想了解更多关于如何在数据科学领域取得成功的信息吗?下面是 5 个核心&关键技能 每一个数据科学团队都必须要规划的。想要在公共场合展示你对数据的热情?这篇文章告诉你从哪里开始。
本文最初是在企业家项目上 发表的 。增加了插图。
每个数据科学家都需要了解的 4 个最常见的分类指标
Photo by Clay Banks on Unsplash
还要弄清楚,何时以及如何使用它们?
分类是将连续/离散输入分离成指定数量的离散输出的过程。虽然图像分类已经成为 21 世纪深度学习的最佳应用之一,但用于计算算法性能的指标总是令人质疑。所使用的度量通常是特定于应用的。有时,你试图解决一个股票预测问题,或者如果有一个病理 X 射线或没有或任何其他多类标签。我们将通过使用最普通的狗与猫分类器的例子来深入研究度量的细节。
所以,假设你已经建立了一个二元分类器来预测一个给定的图像是一只猫还是一只狗。让我们假设您的测试集中有 100 只猫和 100 只狗,下面是从模型预测中得到的混淆矩阵。
正如杰瑞米·霍华德所说,
在解决数据科学中的问题时,始终使用适当的术语或大词,否则每个人都会认为这是一件微不足道的事情
因此,让我们从使用真实世界的示例为上述混淆矩阵定义数据科学术语开始
真实世界示例
想象一下,一项研究正在评估一种筛查疾病的新测试。每个参加测试的人要么有要么没有这种疾病。测试结果可以是阳性(将人分类为患有疾病)或阴性(将人分类为没有疾病)。每个受试者的测试结果可能与受试者的实际状况相符,也可能不相符。在这种情况下:
真阳性:患病人群被正确识别为患病
假阳性:健康人群被错误识别为患病
真阴性:健康人群被正确识别为健康
假阴性:患病人群被错误识别为健康
总的来说,
阳性=确定,阴性=拒绝。因此:
真阳性=正确识别
假阳性=错误识别
真阴性=正确剔除
假阴性=错误剔除
简而言之,
现在我们已经熟悉了术语,让我们从指标开始:
1。精确度
这是机器学习中最老套的指标之一。此指标根据样本总数评估所有正确分类的样本。
公式:准确度= (TP+TN)/(TP+FP+FN+TN)
在我们的示例中,将猫视为阳性类,我们得到
TP: 80,TN:50,FP: 50,FN:20
上面的猫和狗的例子给我们的精度是(80+50)/(80+50+50+20)=0.65(65%)
sklearn 库有如下的内置函数
**From sklearn.metrics import accuracy_score****Accuracy = accuracy_score(y_true, y_pred, *average=’weighted’*)**
2。精度
《牛津词典》将精确度定义为“精确和准确的品质、条件或事实”。该指标主要计算预测类别的正确性或准确性,其方法是将较少数量的负样本预测为正类别。它基本上计算所有样本中预测样本的相关性,因此称为正预测值(PPV)。
这种度量主要应用于医学领域。当您构建一个二元分类器时,无论 X 射线是有病变还是健康的,您都需要准确地进行预测,这反过来有助于减少放射科医生的工作量。
公式:TP/(TP+FP)
考虑到我们的例子,猫类的精度是 80/(80+50)=0.615(61.5%)
类似地,狗类的精度将是 50/(50+20)=0.714(71.4%)
现在,为了计算模型的平均精度,可以取加权平均 w.r.t 个样本数。
**From sklearn.metrics import precision_score****Precision= precision_score(y_true, y_pred, * average=’weighted’*)**
3。召回
维基百科将召回定义为“已被检索的相关实例占相关实例总数的比例”。因此,它基本上是实际阳性样本中的预测阳性样本。这也被称为灵敏度或真阳性率。因此,当所有阳性样本都被正确预测时,召回率为 1。
公式:TP/(TP+FN)
在我们的猫和狗的分类中,猫类的召回率是:80/(80+20)=0.8(80%)
**From sklearn.metrics import recall_score****Recall = recall_score(y_true, y_pred, * average=’weighted’*)**
4。特异性
特异性是真阴性率。它测量被正确识别的实际否定的比例。使用具有病理或健康的患者的上述用例,高特异性意味着将实际健康的人称为健康的模型是高的。
公式:TN/(TN+FP)
模型的特异性为 50/(50+50)=0.5 (50%)。
一般来说,这些是评估类和整个模型性能的最常见的度量标准。现在,这些指标的使用已经被证明是特定于应用的。都是在解决一个问题的同时,你最关心什么。在我即将发布的博客中,我将更进一步,写一些不太常见但很重要的分类标准,这些标准在参加 Kaggle 和其他平台的比赛以及评估你的模型的总体性能时很有用。
参考文献
- https://www.wikihow.com/Calculate-Weighted-Average
- https://towards data science . com/the-5-classification-evaluation-metrics-you-must-know-aa 97784 ff 226
- https://en.wikipedia.org/wiki/Sensitivity_and_specificity
- 【https://www.oxfordlearnersdictionaries.com/
约翰尼·德普电影的四种类型
538 的这篇文章详细描述了尼古拉斯·凯奇电影的五种不同类型,受到这篇文章的启发,我想自己尝试一下这个主题。这种类型的分析是将数据科学与娱乐行业等有趣主题结合起来的绝佳机会。为了成功地为某个男演员或女演员找到不同类型的电影,你需要一个在票房成功和评论界都有一定知名度的人。经过一番思考和考察,约翰尼·德普似乎完全符合这一模式。德普已经出演了 80 多部电影,有一些高潮(加勒比海盗,查理和巧克力工厂),也有一些低谷(莫特凯,私人度假村)。随着演员的关注,我开始收集约翰尼·德普在其演艺生涯中获得表演奖的每部国产电影的票房收入和元评论分数。一旦收集了所有必要的数据,我就用 Python 将电影分成不同的组,用 R 创建最终的视觉效果。我将首先深入约翰尼德普电影的四种类型,然后我将解释将电影分组的过程和推理。事不宜迟,这里是约翰尼德普电影的四种类型。
电影类型分类
海盗/奇幻大片
电影 : 《加勒比海盗:黑珍珠的诅咒》(2003)、《查理和巧克力工厂》(2005)、《加勒比海盗:死人的箱子》(2006)、《加勒比海盗:在世界的尽头》(2007)、《爱丽丝梦游仙境》(2010)、《加勒比海盗:在陌生人的潮汐上》(2011)、《神奇动物在哪里》(2016)
这些电影都在票房上取得了巨大成功,典型的是约翰尼·德普扮演一个“有趣”的角色,如杰克·斯派洛船长或威利·旺卡。票房最成功的电影都是在 2000 年后发行的,约翰尼·德普在这个群体中取得的每一次重大成功都是在幻想类型中。
夏洛克地精的领地
电影:《私人度假村》(1985)、《本尼&俊》(1993)、《时间的尼克》(1995)、《拉斯维加斯的恐惧与厌恶》(1998)、《第九扇门》(1999)、《宇航员的妻子》(1999)、《哭泣的男人》(2000)、《打击》(2001)、《来自地狱》(2001)、《墨西哥往事》(2003)、《秘密之窗》(2004)。 《加勒比海盗:死无对证》(2017)、《东方快车谋杀案》(2017)、《神探夏洛克·侏儒》(2018)、《神奇动物:格林德沃的罪行》(2018)
《神探夏洛克·地精》是约翰尼·德普最大的一个领域,并且在最近几年有了很大的增长。约翰尼·德普的最低谷到处都是。有些是过去电影的平庸延续,如《爱丽丝镜中奇遇记》或《加勒比海盗:死无对证》。其他的,像《私人度假村》和《神探夏洛克·侏儒》,让你想知道当初为什么要拍它们。在德普的职业生涯之初,并没有很多表现不佳的电影,但自 2010 年以来,他已经经历了相当长的时间。
独树一帜,广受好评
电影:《榆树街的噩梦》(1984),《哭泣的婴儿》(1990),《剪刀手爱德华》(1990),《亚利桑那之梦》(1993),《什么在吃吉尔伯特葡萄》(1993),《埃德·伍德》(1994),《唐璜·德马科》(1994),《死人》(1995),《唐尼·布拉斯科》(1997),《断头谷》(1999),《夜幕降临之前》(2000),《巧克力》(2000)
这群人构成了德普电影史上相当大的一部分。这组中的许多电影都是原创的,它们展示了德普在整个职业生涯中各种各样的表演。从经典恐怖片《榆树街的噩梦》到话剧《什么在吃吉尔伯特葡萄》,再到动画喜剧《兰戈》。虽然近年来它们已经不那么流行了,但德普在他 35 年多的职业生涯中一直在推出原创和广受欢迎的电影。
排
电影:《排》(1986)
最后一个组简单来说就是“排”。《野战排》在德普电影史上是个异数。这是他参演的第三部电影,也是德普参演的唯一一部战争片。这是一个巨大的票房成功,在只有 600 万美元的预算下获得了 1.385 亿美元的收入。随着票房的成功,《野战排》还获得了第 59 届奥斯卡最佳影片奖。
电影聚类过程
在从 IMDb 收集了电影数据、从 Box Office Mojo 收集了票房收入数据、从 Metacritic 收集了影评人评级数据之后,是时候准备一种算法来将电影适当地分成不同的组了。为了有效地将电影分成不同的组,我实现了一种叫做高斯混合模型的聚类算法。
为什么我选择了高斯混合模型?当只有两个维度需要评估时(revenue & critic score ),该算法非常有效,并且与其他聚类算法相比,该算法的结果对于这种类型的分析可能更“令人兴奋”,因为高斯混合建模并不假设不同的组将与几何形状或结构对齐。
Example of a Gaussian Mixture Model
在实现混合模型之前,我们如何知道算法应该搜索多少个聚类?找到正确的集群数量可能很棘手,而且非常主观,所以我将使用所谓的肘图来确定适当的集群数量。在 Python Scikit-Learn 库的帮助下,我实现了一个类似高斯混合模型的算法,称为“期望最大化”风格的 K 均值聚类。同时瞄准 1 到 10 个集群的数据,以查看哪个数字可能工作得最好。要使用的“最佳”聚类数通常是误差平方和(SSE)停止快速下降的点。
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture
from sklearn.preprocessing import StandardScaler
import pandas as pd
import matplotlib.pyplot as plt# Reading in the data
movies = pd.read_csv('Johnny Depp Movies.csv')# Using the Sci-kit Learn Standard Scaler for z-score transformation of
# numerical variables.
scaler = StandardScaler()
movies['scores_scaled'] = scaler.fit_transform(movies[['Metacritic Score']])
movies['box_office_scaled'] = scaler.fit_transform(movies[['Box Office']])# Running an Expectation-Maximization K-Means algorithm at increasing
# amounts of clusters to find an appropriate target amount for
# the Gaussian Mixture Model
SSE = []
i = 1
while i < 10:
kmean = KMeans(n_clusters = i, max_iter = 1000, algorithm = 'full')
kmean_fit = kmean.fit(movies[['scores_scaled', 'box_office_scaled']])
SSE.append(kmean_fit.inertia_)
i += 1# Plotting the results of the Expectation-Maximization K-Means
plt.style.use('default')
plt.suptitle('K-Means Sum of Squared Errors', fontsize = 15)
plt.xlabel('# of Clusters', fontsize = 12)
plt.ylabel('Sum of Squared Errors', fontsize = 12)
plt.plot(SSE)
虽然在这种情况下没有一个明确的点可供选择,但我决定选择 4 个集群,因为这似乎是上证指数停止高速下跌的第一个点。在选择 4 作为集群的集合数之后,我使用了高斯混合模型。
# Setting up a Gaussian Mixture Model with 4 clusters and 1000 iterations
gmm = GaussianMixture(n_components=4, covariance_type = 'full', max_iter=1000, n_init = 10)# Fitting the model to the data
gmm_fit = gmm.fit(movies[['scores_scaled', 'box_office_scaled']])# Finally assigning labels to the movies
movies['Cluster'] = gmm_fit.predict(movies[['scores_scaled', 'box_office_scaled']])
现在为每部电影分配了集群标签,我用 ggplot2 包在 R 中绘制了数据,并突出显示了一些更有趣的数据点。一些最后的润色是用微软 Word 完成的。
# Loading the ggplot2 package and reading in the data
library(ggplot2)# Plotting out the data
ggplot(df2, aes(x=Metacritic.Score, y=box.millions, color = Cluster)) +
geom_point(size = 2.5, alpha = .5) +
# Highlighting some points of interest
geom_point(data=df2[3, ], colour="magenta4", size=2.5) +
geom_point(data=df2[30, ], colour="red", size=2.5) +
geom_point(data=df2[35, ], colour="red", size=2.5) +
geom_point(data=df2[28, ], colour="red", size=2.5) +
geom_point(data=df2[29, ], colour="green4", size=2.5) +
geom_point(data=df2[5, ], colour="green4", size=2.5) +
geom_point(data=df2[44, ], colour="blue", size=2.5) +
geom_point(data=df2[50, ], colour="blue", size=2.5) +
# Finishing touches to the plot
labs(title = "Types of Johnny Depp Movies") +
xlab('Metacritic Score') +
ylab('Domestic Box Office (Millions)') +
scale_color_manual(values = c('magenta4','blue', 'red', 'green4')) +
ylim(0, 600) +
xlim(0, 100) +
theme_classic() +
theme(legend.position="none") +
theme(plot.title = element_text(face = 'bold', size = 20, hjust=0.5),
axis.title.x = element_text(face = 'bold', size = 15),
axis.title.y = element_text(face = 'bold', size = 15))
这就结束了收集数据、实现聚类算法和可视化发现的过程。我希望你们都喜欢这篇关于约翰尼·德普从影记录的文章,同时了解高斯混合模型是如何被用来做出一些有趣的发现的。
票房收入通过票房 Mojo 换算成 2019 美元。
烂番茄平均评论家评分被用来替代 Metacritic 上没有列出的一些电影。
z 分数缩放用于票房收入和电影分数数据,以构建 K 均值聚类的数据。
每个数据科学家都必须知道的 5 个分类评估指标
Photo by K. Mitch Hodge on Unsplash
以及具体什么时候使用它们?
我们要优化什么?大多数商家都没有回答这个简单的问题。
每一个业务问题都有一点不同,要有不同的优化。
我们都创建了分类模型。很多时候,我们试图提高评估模型的准确性。 但是,我们真的想要准确性作为模型性能的度量标准吗?
如果我们在预测将要撞击地球的小行星数量会怎么样。
一直说零就行了。你会有 99%的准确率。我的模型可能相当准确,但一点价值都没有。在这种情况下我们应该怎么做?
设计数据科学项目比建模本身重要得多。
这篇文章是关于各种评估指标以及如何和何时使用它们。
1.准确度、精确度和召回率:
A.准确(性)
准确性是最重要的分类标准。这很容易理解。并且容易适用于二元以及多类分类问题。
Accuracy = (TP+TN)/(TP+FP+FN+TN)
准确性是真实结果在检查的案例总数中所占的比例。
什么时候使用?
准确度是对分类问题进行评估的有效选择,这些问题是平衡的,没有偏斜或没有类别不平衡。
告诫
假设我们的目标类非常稀疏。我们需要准确性作为模型性能的度量吗? 如果我们在预测小行星会不会撞上地球呢? 一直只说No
。你会有 99%的准确率。我的模型可能相当准确,但一点价值都没有。
B.精确
先说精度,它回答了下面这个问题:预测阳性真正阳性的比例是多少?
Precision = (TP)/(TP+FP)
在小行星预测问题中,我们从来没有预测到一个真正的肯定。
因此精度=0
什么时候使用?
当我们想要非常确定我们的预测时,精度是评估度量的有效选择。例如:如果我们正在构建一个系统来预测我们是否应该降低特定帐户的信用限额,我们希望对我们的预测非常确定,否则它可能会导致客户不满。
注意事项
非常精确意味着我们的模型会让许多信用违约者毫发无损,从而蒙受损失。
C.回忆
另一个非常有用的方法是召回,它回答了一个不同的问题:有多少比例的实际阳性被正确分类?
Recall = (TP)/(TP+FN)
在小行星预测问题中,我们从来没有预测到一个真正的肯定。
因此召回也等于 0。
什么时候使用?
当我们想要捕捉尽可能多的正面信息时,召回是评估指标的有效选择。例如:如果我们正在建立一个系统来预测一个人是否患有癌症,即使我们不是很确定,我们也希望捕捉到疾病。
注意事项
如果我们对所有的例子都预测 1,那么召回就是 1。
由此产生了利用精确度与召回率的折衷的想法— F1 分数 。
2.F1 分数:
这是我最喜欢的 评估指标 ,我倾向于在我的分类项目中大量使用它。
F1 分数是一个介于 0 和 1 之间的数字,是精确度和召回率的调和平均值。
让我们从一个二元预测问题开始。我们正在预测一颗小行星是否会撞击地球。
所以如果我们对整个训练集说“不”。我们这里的精度是 0。我们正课的回忆是什么?它是零。准确度如何?是 99%以上。
因此 F1 分数也是 0。因此我们知道,准确率为 99%的分类器对我们的情况来说基本上是没有价值的。因此它解决了我们的问题。
什么时候使用?
我们希望有一个同时具有良好精度和召回率的模型。
Precision-Recall Tradeoff
简单来说, F1 分数在分类器 的精确度和召回率之间保持了平衡。如果你的准确率低,F1 就低,如果召回率又低,你的 F1 分数就低。
如果你是一名警督,你想抓罪犯,你想确定你抓的人是罪犯(精确),你也想尽可能多地抓到罪犯(回忆)。F1 分数管理这种权衡。
怎么用?
您可以使用以下公式计算二元预测问题的 F1 分数:
**from** **sklearn.metrics** **import** f1_score
y_true = [0, 1, 1, 0, 1, 1]
y_pred = [0, 0, 1, 0, 0, 1]***f1_score(y_true, y_pred)***
这是我的一个函数,我用它来获得最佳阈值,使二元预测的 F1 值最大化。below 函数遍历可能的阈值,以找到给出最佳 F1 分数的阈值。
# y_pred is an array of predictions
def bestThresshold(y_true,y_pred):
best_thresh = None
best_score = 0
for thresh **in** np.arange(0.1, 0.501, 0.01):
score = f1_score(y_true, np.array(y_pred)>thresh)
if score > best_score:
best_thresh = thresh
best_score = score
return best_score , best_thresh
警告
F1 分数的主要问题在于它对精确度和召回率给予了同等的重视。我们有时可能需要在我们的评估中包括领域知识,我们希望有更多的回忆或更精确。
为了解决这个问题,我们可以通过创建一个加权 F1 指标来实现,如下所示,其中 beta 管理精确度和召回率之间的权衡。
这里我们给β倍于精度的重要性来回忆。
**from** **sklearn.metrics** **import** fbeta_scorey_true = [0, 1, 1, 0, 1, 1]
y_pred = [0, 0, 1, 0, 0, 1]fbeta_score***(y_true, y_pred,beta=0.5)***
F1 分数也可以用于多类问题。详情见Boaz shmu Eli的这篇精彩博文。
3.对数损失/二元交叉熵
对数损失对于二元分类器来说是一个非常好的评估度量,并且在逻辑回归和神经网络的情况下,它有时也是优化目标。
一个例子的二进制对数损失由下面的公式给出,其中 p 是预测 1 的概率。
As you can see the log loss decreases as we are fairly certain in our prediction of 1 and the true label is 1.
什么时候用?
当分类器的输出是预测概率时。 Log Loss 根据其与实际标签的差异程度,将您预测的不确定性考虑在内。 这让我们对模型的性能有了更细致的了解。一般来说,最小化日志损失为分类器提供了更高的准确性。
怎么用?
**from** **sklearn.metrics** **import** log_loss # where y_pred are probabilities and y_true are binary class labels
log_loss(y_true, y_pred, eps=1e-15)
警告
在不平衡数据集的情况下易受影响。您可能需要引入类权重来更多地惩罚少数错误,或者您可以在平衡数据集后使用它。
4.范畴交叉熵
日志丢失也适用于多类问题。多类设置中的分类器必须为所有示例的每个类分配一个概率。如果有 N 个样本属于 M 个类别,那么分类交叉熵是- ylogp
值的总和:
如果样本i
属于类别j
则y_ij
为 1,否则为 0
p_ij
是我们的分类器预测样本i
属于类别j
的概率。
什么时候用?
*当一个分类器的输出是多类预测概率时。在神经网络的情况下,我们通常使用分类交叉熵。*一般来说,最小化分类交叉熵为分类器提供了更高的准确性。
怎么用?
**from** **sklearn.metrics** **import** log_loss # Where y_pred is a matrix of probabilities with shape ***= (n_samples, n_classes)*** and y_true is an array of class labelslog_loss(y_true, y_pred, eps=1e-15)
警告:
在不平衡数据集的情况下易受影响。
5.罗马纪元
AUC 是 ROC 曲线下的面积。
AUC ROC 表示阳性类别的概率与阴性类别的概率的分离程度
什么是 ROC 曲线?
我们已经从分类器中得到概率。我们可以使用不同的阈值来绘制曲线上的灵敏度(TPR)和(1-特异性)(FPR ),我们将得到一条 ROC 曲线。
其中真正的肯定率或 TPR 只是我们使用我们的算法捕获的真实的比例。
Sensitivty = TPR(True Positive Rate)= Recall = TP/(TP+FN)
假阳性率或 FPR 就是我们用算法捕捉到的假阳性的比例。
1- Specificity = FPR(False Positive Rate)= FP/(TN+FP)
ROC Curve
这里我们可以使用 ROC 曲线来决定阈值。
阈值的选择也将取决于分类器的用途。
如果这是一个癌症分类应用程序,你不希望你的阈值大到 0.5。即使一个病人患癌症的概率是 0.3,你也会把他归类为 1。
否则,在降低信用卡限额的应用程序中,您不希望您的阈值低至 0.5。您在这里有点担心降低限制对客户满意度的负面影响。
什么时候用?
AUC 是比例不变的。它衡量预测的排名,而不是它们的绝对值。因此,举例来说,如果你作为一个营销人员想要找到一个用户列表,他们将响应营销活动。AUC 是一个很好的指标,因为按概率排列的预测是您创建用户列表以发送营销活动的顺序。
使用 AUC 的另一个好处是它像对数损失一样分类阈值不变。它测量模型预测的质量,而不考虑选择什么分类阈值,不像 F1 分数或准确性取决于阈值的选择。
怎么用?
import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])***print(roc_auc_score(y_true, y_scores))***
警告
有时,我们需要从模型中得到精确校准的概率输出,而 AUC 对此没有帮助。
结论
创建我们的机器学习管道的一个重要步骤是相互评估我们不同的模型。评估指标的错误选择可能会对您的整个系统造成严重破坏。
因此,要时刻注意你的预测,以及评估指标的选择会如何影响/改变你的最终预测。
此外,评估指标的选择应该与业务目标保持一致,因此有点主观。您也可以提出自己的评估标准。
继续学习
如果你想了解更多关于如何构建机器学习项目和最佳实践,我想调出他在 Coursera 深度学习专业化中的第三门课程,名为构建机器学习项目。一定要去看看。它谈到了陷阱和许多改进模型的基本想法。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 中 关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系到我
此外,一个小小的免责声明——在这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。
每个数据科学家都应该知道的 5 种特征选择算法
Source: Pixabay
DS 算法
额外收获:是什么让一个优秀的足球运动员变得伟大?
数据科学是对算法的研究。
我每天都在努力学习许多算法,所以我想列出一些最常见和最常用的算法,这些算法将在这个新的 DS 算法系列中使用。
当你创建了大量的特性,然后你需要想办法减少特性的数量,这种情况已经发生了多少次了。
我们有时最终会使用相关性或基于树的方法来找出重要的特征。
我们能给它增加一些结构吗?
这篇文章是关于在处理数据时可以使用的一些最常见的特征选择技术。
为什么选择功能?
在我们继续之前,我们需要回答这个问题。为什么不把所有的特征都交给 ML 算法,让它来决定哪个特征重要?
所以我们有三个理由不这么做:
1.维数灾难——过度拟合
如果数据中的列数多于行数,我们将能够完美地拟合我们的训练数据,但这不会推广到新的样本。因此我们什么也没学到。
2.奥卡姆剃刀:
我们希望我们的 模型是简单的 和可解释的。当我们有很多特征时,我们就失去了可解释性。
3.垃圾输入垃圾输出:
大多数时候,我们会有许多非信息性的特征。例如,名称或 ID 变量。 低质量的输入会产生低质量的输出。
此外,大量的特征使得模型庞大、耗时,并且在生产中更难实现。
那我们该怎么办?
我们只选择有用的特征。
幸运的是,Scikit-learn 让我们选择特性变得非常容易。我们可以有很多方式来考虑特征选择,但是大多数特征选择方法可以分为三大类
- 基于过滤: 我们指定一些度量并基于这些过滤特征。这种度量的一个例子可以是相关/卡方。
- 基于包装器: 包装器方法将一组特征的选择视为一个搜索问题。示例:递归特征消除
- 嵌入式: 嵌入式方法使用具有内置特征选择方法的算法。例如,套索和射频有自己的特征选择方法。
理论讲得够多了,让我们从五种特征选择方法开始。
我们将尝试使用数据集来更好地理解它。
我将使用一个足球运动员数据集来找出 是什么让一个好球员变得伟大?
不懂足球术语也不用担心。我会尽量把它保持在最低限度。
下面是 Kaggle 内核的代码,您可以自己尝试一下。
一些简单的数据预处理
我们已经做了一些基本的预处理,如删除空值和一个热编码。并且使用以下方式将该问题转换成分类问题:
y = traindf['Overall']>=87
在这里,我们用高总体来代表一个伟大的球员。
我们的数据集(X)如下所示,有 223 列。
train Data X
1.皮尔逊相关
这是一种基于过滤器的方法。
我们检查数据集中目标和数字特征之间的皮尔逊相关性的绝对值。我们根据这个标准保留前 n 个特征。
2.卡方检验
这是另一种基于过滤器的方法。
在该方法中,我们计算目标和数值变量之间的卡方度量,并且仅选择具有最大卡方值的变量。
让我们创建一个小例子来说明如何计算样本的卡方统计量。
假设我们的数据集中有 75 个右前锋和 25 个非右前锋。我们观察到 40 个右前锋是好的,35 个不好。这是否意味着球员在右前卫会影响整体表现?
Observed and Expected Counts
我们计算卡方值:
为了做到这一点,我们首先找出如果两个分类变量之间确实存在独立性,我们期望落在每个桶中的值。
这很简单。我们将每个单元格的行和与列和相乘,然后除以总观察值。
so Good and NotRightforward 时段期望值= 25(行总和)*60(列总和)/100(总观察值)
为什么会这样?由于数据中有 25%的非右前锋,我们预计我们在该单元观察到的 60 名优秀球员中有 25%是右前锋。因此 15 个玩家。
然后我们可以使用下面的公式对所有 4 个单元格求和:
我不会在这里展示它,但卡方统计也以手动方式处理非负数字和分类特征。
我们可以从数据集获得卡方特征,如下所示:
3.递归特征消除
这是一个基于包装的方法。如前所述,包装器方法将一组特性的选择视为一个搜索问题。
来自sklearn
文档:
递归特征消除(RFE)的目标是通过递归地考虑越来越小的特征集来选择特征。首先,在初始特征集上训练估计器,并且通过
*coef_*
属性或通过*feature_importances_*
属性获得每个特征的重要性。然后,从当前特征集中删除最不重要的特征。该过程在删减集上递归重复,直到最终达到要选择的特征的期望数量。
正如你已经猜到的,我们可以使用任何估计方法。在这种情况下,我们使用LogisticRegression
,RFE 观察LogisticRegression
对象的*coef_*
属性
4.套索:从模型中选择
这是一种嵌入式方法。如前所述,嵌入式方法使用具有内置特征选择方法的算法。
比如 Lasso 和 RF 都有自己的特征选择方法。套索正则化强制许多要素权重为零。
这里我们用套索来选择变量。
5.基于树:SelectFromModel
这是一种嵌入式方法。如前所述,嵌入式方法使用具有内置特征选择方法的算法。
我们还可以使用 RandomForest 根据特性的重要性来选择特性。
我们使用每个决策树中的节点杂质来计算特征重要性。在随机森林中,最终特征重要性是所有决策树特征重要性的平均值。
我们也可以使用 LightGBM。或者 XGBoost 对象,只要它有一个feature_importances_
属性。
奖金
当我们可以拥有一切的时候,为什么要用一个?
答案是,在大量数据和时间紧迫的情况下,有时这是不可能的。
但是只要有可能,为什么不这样做呢?
我们检查是否得到了基于所有方法的特征。在这种情况下,正如我们所看到的,Reactions
和LongPassing
是一个高评价玩家的优秀属性。不出所料Ballcontrol
和Finishing
也占据了榜首。
结论
特征工程和特征选择是任何机器学习管道的关键部分。
我们力求模型的准确性,如果不一次又一次地重温这些作品,就不可能达到良好的准确性。
在本文中,我试图解释一些最常用的特性选择技术,以及我在特性选择方面的工作流程。
我也试图为这些方法提供一些直觉,但是你可能应该尝试更多地了解它,并尝试将这些方法融入到你的工作中。
如果你感兴趣的话,也请阅读我在特征工程上的帖子。
如果你想学习更多的数据科学知识,我想调出吴恩达的这个 精品课程 。这是我开始的原因。一定要去看看。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 媒体 关注我,或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。
应用程序应该写的 5 个最重要的日志
用于推动智能业务的数据类型分类
日志的用处经常被低估。大多数企业仅仅依靠日志来解决操作和可用性问题。
许多人没有意识到的是,主动日志记录也可以改进业务决策。商业智能直接由数据驱动——这为实现更好的业务绩效创造了可能性。
一些组织完全依赖网络防火墙和服务器操作系统日志等基础设施日志,而忽略了应用程序日志的使用。这可能是一个很大的错误,因为应用程序可以访问大量的信息,而这些信息对于应用程序外部的资源是不可用的。应该收集这些信息,因为主要的事件数据源来自应用程序本身。与仅仅依靠基础设施日志记录相比,应用程序日志记录可以为业务提供更好的洞察力。
为什么是应用程序日志?
应用程序日志不仅用于避免操作问题,还通过数据挖掘提供商业智能。对客户行为有深入的了解可以揭示出其他方式难以确定的洞察力。
在一些在线平台中,应用程序事件日志用于执行机器学习等操作,以改善用户搜索结果并提供准确的推荐,为购物网站的产品排名算法提供支持,以及为新闻门户网站显示趋势文章。这些活动最终会提高客户满意度,增加销售额。
应用程序可以访问广泛的信息,这些信息对于应用程序外部的源是不可用的。
以下是你的应用程序应该写入日志的 5 件最重要的事情:
- 要求
- 审查跟踪
- 有效性
- 威胁
- 事件
要求
顾名思义,请求日志记录应用程序中的每个请求或服务调用。这包括服务或 API 访问、系统和进程启动、应用程序访问、身份验证和授权。
这些日志通常包含以下信息:日期和时间、请求者身份(如用户 ID 和 IP 地址或推荐 URL)以及实际的请求数据。在 Web 应用程序或 API 的情况下,会记录请求的端点 URL、上下文头和正文。
请求日志揭示了应用程序使用的详细信息,如谁在使用它、何时使用以及应用程序的哪一部分被使用。
审计追踪
审计跟踪记录了对您的数据所做的更改。必须记录对数据的任何更改,包括创建新数据、更新或删除数据,以及在某些情况下导出数据。
对此类记录的需求与安全性、公司政策和合规性有很大关系。审计跟踪是某些行业(如金融行业)的必要要求。
审计跟踪日志通常包括更改数据的用户或系统的身份、日期和时间、更改的数据。如果是一个人进行了更改,那么这个人用来更改数据的系统也会被记录下来。
拥有这些信息有助于调查系统中的数据受损情况,并通过提供撤消损坏数据的方法来支持恢复。
有效性
可用性日志由可能影响系统可用性和稳定性的故障和异常组成。这些问题包括超出容量限制或资源使用量、系统错误或缺陷、连接问题以及响应速度慢。
这些日志中的一部分可以通过基础设施日志记录(如网络或防火墙日志和操作系统事件)在应用程序外部捕获。但是,源自应用程序本身的某些事件(如错误)只能由应用程序记录。
附注:让错误日志足够详细以支持快速故障排除和恢复是很重要的。本质上,错误日志应该揭示重现错误所需的步骤。在许多情况下,日志将包括关于完整堆栈跟踪或程序函数调用的信息,以及错误进程的输入参数。
威胁
威胁日志跟踪可疑活动或破坏应用程序安全性的企图。一些常见的威胁日志包括对受限进程或数据的未授权访问、无效的参数或输入、失败的身份验证、失败的安全验证(如无效的 API 密钥)以及由应用程序的安全机制触发的其他警告。
关于 API 安全性的更多信息——参见我以前的文章 Web API 安全技术 。
事件
事件是用户可以在应用程序上进行的任何活动。事件活动是收集最少的信息,但可以说是企业拥有的最有价值的数据之一。
由于事件日志的类型因业务而异,因此对于确切记录什么没有固定的定义。记录什么事件完全取决于企业的想象力和需求。
一些例子是搜索查询、产品视图、喜欢和喜爱、共享、下订单或取消订单、查看页面、一个人看图像花了多长时间,以及他们是否滚动到长页面的底部,等等。
即使你今天可能用不到这些数据中的大部分,它们在未来可能会被证明是一座金矿。你永远不知道你现在能收集到什么数据,明天会对你有用。因此,最理想的是以原始形式存储事件——拥有事件活动的最详细信息。一个例子是存储用户位置的实际 GPS 坐标,而不是城市或国家。
你永远不知道今天能收集到什么数据,明天会对你有用。
结论
P 活动日志记录有助于改进业务决策,推动更好的业务绩效。应用程序日志包含广泛的信息,这些信息不仅有助于避免操作问题,还可以提高应用程序的整体安全性,并通过战略数据分析促进商业智能。
正是这种信息导致了著名的“沃尔玛啤酒和尿布的故事的发现。这个故事是否真实还存在争议,但它说明了拥有你的商业活动详细记录的潜在机会。
处理不平衡数据集的 5 种最有用的技术
Image by thatsphotography from Pixabay
如果您还没有遇到不平衡的数据集,您将会
您是否遇到过这样的问题:数据集中的正类样本如此之少,以至于模型无法学习?
在这种情况下,你仅仅通过预测多数类就能获得相当高的准确度,但是你无法捕捉到少数类,这通常是首先创建模型的目的。
这种数据集非常常见,被称为不平衡数据集。
不平衡数据集是分类问题的一种特殊情况,其中类之间的分布不均匀。通常,它们由两类组成:多数(消极)类和少数(积极)类
对于不同领域的不同用例,可能会发现不平衡的数据集:
- 金融:欺诈检测数据集的欺诈率通常约为 1–2%
- 广告投放:点击预测数据集也没有很高的点击率。
- 交通 / 航空公司:飞机会发生故障吗?
- 医学:患者是否有癌症?
- 内容审核:一个帖子包含 NSFW 内容吗?
那么我们如何解决这样的问题呢?
这篇文章是关于解释你可以用来处理不平衡数据集的各种技术。
1.随机欠采样和过采样
一种被广泛采用并且可能是最直接的处理高度不平衡数据集的方法叫做重采样。它包括从多数类中移除样本(欠采样)和/或从少数类中添加更多样本(过采样)。
让我们首先创建一些不平衡数据的例子。
from sklearn.datasets import make_classificationX, y = make_classification(
n_classes=2, class_sep=1.5, weights=[0.9, 0.1],
n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1,
n_samples=100, random_state=10
)X = pd.DataFrame(X)
X['target'] = y
我们现在可以使用以下工具进行随机过采样和欠采样:
num_0 = len(X[X['target']==0])
num_1 = len(X[X['target']==1])
print(num_0,num_1)# random undersampleundersampled_data = pd.concat([ X[X['target']==0].sample(num_1) , X[X['target']==1] ])
print(len(undersampled_data))# random oversampleoversampled_data = pd.concat([ X[X['target']==0] , X[X['target']==1].sample(num_0, replace=True) ])
print(len(oversampled_data))------------------------------------------------------------
OUTPUT:
90 10
20
180
2.使用不平衡学习的欠采样和过采样
不平衡学习(imblearn
)是一个 Python 包,用来解决不平衡数据集的问题。
它提供了多种欠采样和过采样方法。
a.使用 Tomek 链接的欠采样:
它提供的一种方法叫做 Tomek 链接。托梅克链是相邻的相反类的成对例子。
在该算法中,我们最终从 Tomek 链接中移除多数元素,这为分类器提供了更好的决策边界。
from imblearn.under_sampling import TomekLinkstl = TomekLinks(return_indices=True, ratio='majority')X_tl, y_tl, id_tl = tl.fit_sample(X, y)
b.使用 SMOTE 进行过采样:
在 SMOTE(合成少数过采样技术)中,我们在已经存在的元素附近合成少数类的元素。
from imblearn.over_sampling import SMOTEsmote = SMOTE(ratio='minority')X_sm, y_sm = smote.fit_sample(X, y)
在[imblearn](https://github.com/scikit-learn-contrib/imbalanced-learn#id3)
包中有各种各样的其他方法用于欠采样(聚类质心、近似缺失等)。)和过采样(ADASYN 和 bSMOTE),您可以查看一下。
3.模型中的类权重
大多数机器学习模型都提供了一个叫做class_weights
的参数。例如,在使用class_weights
的随机森林分类器中,我们可以使用字典为少数类指定更高的权重。
from sklearn.linear_model import **LogisticRegression***clf =* **LogisticRegression**(***class_weight={0:1,1:10}***)
但是后台到底发生了什么?
在逻辑回归中,我们使用二元交叉熵计算每个示例的损失:
Loss = −*y*log(*p)* −(1−*y*)log(1−*p*)
在这种特殊的形式下,我们对积极的和消极的两类都给予同等的重视。当我们将 class_weight 设置为class_weight = {0:1,1:20}
时,后台的分类器试图最小化:
NewLoss = −20**y*log(*p)* − *1**(1−*y*)log(1−*p*)
那么这里到底发生了什么?
- 如果我们的模型给出的概率为 0.3,并且我们错误地对一个正例进行了分类,则新损失的值为-20log(0.3) = 10.45
- 如果我们的模型给出的概率为 0.7,并且我们对一个负面的例子进行了错误分类,那么新的损失值将为-log(0.3) = 0.52
这意味着,在这种情况下,当我们的模型错误地分类了一个积极的少数群体的例子时,我们会惩罚它大约 20 倍以上。
如何计算 class_weights?
没有一种方法可以做到这一点,这应该被构建为针对您的特定问题的超参数搜索问题。
但是如果你想使用 y 变量的分布来获得 class_weights,你可以使用下面这个来自sklearn
的实用程序。
**from** sklearn.utils.class_weight **import** compute_class_weightclass_weights = compute_class_weight('balanced', np.unique(y), y)
4.更改您的评估标准
每当我们处理不平衡的数据集时,选择正确的评估指标是非常重要的。一般来说,在这样的情况下,F1 的分数就是我想要的作为我的 评价指标的 。
F1 分数是一个介于 0 和 1 之间的数字,是精确度和召回率的调和平均值。
那么它有什么帮助呢?
让我们从一个二元预测问题开始。我们正在预测一颗小行星是否会撞击地球。
因此,我们创建了一个模型,对整个训练集预测“否”。
什么是准确度(通常是最常用的评估指标)?
它超过了 99%,所以根据精确度,这个模型相当不错,但是毫无价值。
现在 F1 的成绩是多少?
我们这里的精度是 0。我们正课的回忆是什么?它是零。因此 F1 分数也是 0。
因此,我们知道准确率为 99%的分类器对我们的情况毫无价值。因此它解决了我们的问题。
Precision-Recall Tradeoff
简单来说, F1 分数在某种程度上维持了你的分类器 的精确度和召回率之间的平衡。如果你的准确率低,F1 就低,如果召回率再低,你的 F1 分数就低。
如果你是一名警督,你想抓罪犯,你想确定你抓的人是罪犯(精确),你也想尽可能多地抓到罪犯(回忆)。F1 分数管理这种权衡。
怎么用?
您可以使用以下公式计算二元预测问题的 F1 分数:
**from** **sklearn.metrics** **import** f1_score
y_true = [0, 1, 1, 0, 1, 1]
y_pred = [0, 0, 1, 0, 0, 1]
***f1_score(y_true, y_pred)***
这是我的一个函数,我用它来获得最佳阈值,使二元预测的 F1 值最大化。below 函数遍历可能的阈值,以找到给出最佳 F1 分数的阈值。
# y_pred is an array of predictions
def bestThresshold(y_true,y_pred):
best_thresh = None
best_score = 0
for thresh **in** np.arange(0.1, 0.501, 0.01):
score = f1_score(y_true, np.array(y_pred)>thresh)
if score > best_score:
best_thresh = thresh
best_score = score
return best_score , best_thresh
5.多方面的
Try new things and explore new places
根据您的用例以及您试图解决的问题,各种其他方法也可能有效:
a)收集更多数据
如果可以的话,这绝对是你应该尝试的事情。通过更多正面的例子获得更多的数据将有助于您的模型从更多样的角度来看待多数群体和少数群体。
b)将问题视为异常检测
您可能希望将您的分类问题视为异常检测问题。
异常检测是对罕见项目、事件或观察结果的识别,这些项目、事件或观察结果通过与大多数数据的显著不同而引起怀疑
您可以使用隔离林或自动编码器进行异常检测。
c)基于模型
有些模型特别适合不平衡的数据集。
例如,在 boosting 模型中,我们给在每次树迭代中被错误分类的案例更多的权重。
结论
在处理不平衡的数据集时,不存在放之四海而皆准的方法。你必须根据你的问题尝试多种方法。
在这篇文章中,我谈到了每当我面临这样的问题时,我脑海中通常会出现的怀疑。
一个建议是尝试使用以上所有的方法,看看哪个最适合你的用例。
如果你想了解更多关于不平衡数据集及其带来的问题,我想推荐吴恩达的这个 精品课程 。这是我开始的原因。一定要去看看。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。
此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。
每个数据科学家都需要知道的 5 种采样算法
DS 算法
或者至少应该听说过
数据科学是对算法的研究。
我每天都在努力学习许多算法,所以我想列出一些最常见和最常用的算法,这些算法将会在这个新的 DS 算法系列中使用。
这篇文章是关于在处理数据时可以使用的一些最常见的采样技术。
简单随机抽样
假设您想要选择一个群体的子集,其中该子集的每个成员被选中的概率相等。
下面我们从数据集中选择 100 个样本点。
sample_df = df.sample(100)
分层抽样
假设我们需要估计选举中每个候选人的平均票数。假设这个国家有 3 个城镇:
A 镇有一百万工厂工人,
B 镇有 200 万工人
C 镇有 300 万退休人员。
我们可以选择在整个人口中随机抽取 60 个样本,但是随机样本有可能在这些城镇中不平衡,因此有偏差,导致估计中的重大误差。
相反,如果我们选择从城镇 A、B 和 C 分别随机抽取 10、20 和 30 个样本,那么对于相同的样本总量,我们可以产生较小的估计误差。
使用 Python 可以很容易地完成这样的事情:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
stratify=y,
test_size=0.25)
油藏取样
我喜欢这个问题陈述:
假设您有一个长度未知的大型项目流,我们只能迭代一次。
创建一个算法,从这个流中随机选择一个项目,这样每个项目都有同等的可能性被选中。
我们如何做到这一点?
让我们假设我们必须从一个无限的流中抽取 5 个对象,这样每个元素被选中的概率是相等的。
import randomdef generator(max):
number = 1
while number < max:
number += 1
yield number# Create as stream generator
stream = generator(10000)# Doing Reservoir Sampling from the stream
k=5
reservoir = []
for i, element in enumerate(stream):
if i+1<= k:
reservoir.append(element)
else:
probability = k/(i+1)
if random.random() < probability:
# Select item in stream and remove one of the k items already selected
reservoir[random.choice(range(0,k))] = elementprint(reservoir)
------------------------------------
[1369, 4108, 9986, 828, 5589]
可以从数学上证明,在样本中,每个元素从流中被选择的概率是相同的。
怎么会?
当涉及到数学时,想一个更小的问题总是有帮助的。
因此,让我们考虑一个只有 3 项的流,我们必须保留其中的 2 项。
我们看到第一项,我们把它放在列表中,因为我们的容器有空间。我们看到第二个项目,我们把它放在列表中,因为我们的容器有空间。
我们看到第三项。这就是事情变得有趣的地方。我们以 2/3 的概率选择列表中的第三个项目。
现在让我们看看第一项被选中的概率:
移除第一项的概率是元素 3 被选择的概率乘以元素 1 被从库中的 2 个元素中随机选择作为替换候选的概率。这个概率是:
2/3*1/2 = 1/3
因此 1 被选中的概率是:
1–1/3 = 2/3
对于第二个元素,我们可以有完全相同的论点,我们可以扩展到许多元素。
因此每个项目都有相同的概率被选中:2/3
或者一般来说k/n
随机欠采样和过采样
我们经常会遇到不平衡的数据集。
一种广泛采用的处理高度不平衡数据集的技术被称为重采样。它包括从多数类中移除样本(欠采样)和/或从少数类中添加更多样本(过采样)。
让我们首先创建一些不平衡数据的例子。
from sklearn.datasets import make_classificationX, y = make_classification(
n_classes=2, class_sep=1.5, weights=[0.9, 0.1],
n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1,
n_samples=100, random_state=10
)X = pd.DataFrame(X)
X['target'] = y
我们现在可以使用以下工具进行随机过采样和欠采样:
num_0 = len(X[X['target']==0])
num_1 = len(X[X['target']==1])
print(num_0,num_1)# random undersampleundersampled_data = pd.concat([ X[X['target']==0].sample(num_1) , X[X['target']==1] ])
print(len(undersampled_data))# random oversampleoversampled_data = pd.concat([ X[X['target']==0] , X[X['target']==1].sample(num_0, replace=True) ])
print(len(oversampled_data))------------------------------------------------------------
OUTPUT:
90 10
20
180
使用不平衡学习的欠采样和过采样
不平衡学习(imblearn)是一个 Python 包,用来解决不平衡数据集的问题。
它提供了多种欠采样和过采样方法。
a.使用 Tomek 链接的欠采样:
它提供的一种方法叫做 Tomek 链接。托梅克链是相邻的相反类的成对例子。
在该算法中,我们最终从 Tomek 链接中移除多数元素,这为分类器提供了更好的决策边界。
from imblearn.under_sampling import TomekLinks
tl = TomekLinks(return_indices=True, ratio='majority')
X_tl, y_tl, id_tl = tl.fit_sample(X, y)
b.使用 SMOTE 进行过采样:
在 SMOTE(合成少数过采样技术)中,我们在已经存在的元素附近合成少数类的元素。
from imblearn.over_sampling import SMOTE
smote = SMOTE(ratio='minority')
X_sm, y_sm = smote.fit_sample(X, y)
在 imblearn 包中有各种各样的其他方法用于欠采样(聚类质心、近似缺失等)。)和过采样(ADASYN 和 bSMOTE),您可以查看一下。
结论
算法是数据科学的命脉。
采样是数据科学中的一个重要话题,我们实际上并没有尽可能多地谈论它。
一个好的抽样策略有时可以推动整个项目向前发展。糟糕的采样策略可能会给我们错误的结果。因此,在选择采样策略时应该小心谨慎。
所以,无论是在工作场所还是在酒吧,都要进行抽样调查。
如果你想了解更多关于数据科学的知识,我想调出吴恩达的这个 精品课程 。这是我开始的原因。一定要去看看。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 中 跟踪我或订阅我的 博客 了解他们。和往常一样,我欢迎反馈和建设性的批评,可以在推特@ mlwish it上找到。
优化机器学习性能所需的 6 个指标
有许多衡量模型性能的指标,这取决于你想要进行的机器学习的类型。在本文中,我们来看看分类和回归模型的性能度量,并讨论哪一个更好地优化。有时,要查看的指标会根据最初解决的问题而有所不同。
机器学习中的度量示例
分类问题的优化
分类图表示例
1.真阳性(回忆)
真实肯定率也称为召回率,是二进制/非二进制分类问题中的最佳性能指标。大多数情况下,我们只对正确预测一个类感兴趣。例如,如果你预测糖尿病,你会更关心预测这个人是否有糖尿病,而不是预测这个人没有糖尿病。在这种情况下,正类是“此人患有糖尿病”,负类是“此人没有糖尿病”。这仅仅是预测正类的准确性()这不是准确性性能度量。更多详情见下面的数字 4)
2.ROC 曲线(受试者工作特性曲线)
ROC 曲线显示了您的分类模型在不同阈值(分类到某个类别的概率)下的性能。它绘制了真阳性率和假阳性率的对比图。降低阈值会增加你的真阳性率,但会牺牲你的假阳性率,反之亦然。
3.曲线下面积
AUC 也称为“ROC 曲线下面积”。简单地说,AUC 会告诉你正确分类的概率。更高的 AUC 代表更好的模型。
4.准确(性)
默认情况下,准确性是首先要考虑的。然而一个真正的数据科学家知道准确性太容易误导人。更好的说法是预测所有类别的平均准确度。就像我提到的真阳性率,这是最理想的优化指标。准确度取真阳性和真阴性之和的平均值。大多数情况下,在不平衡的分类问题中,负类比正类更具代表性,所以你更有可能拥有非常高的真负率。准确性将偏向于可能没有人感兴趣的负类的准确预测。
机器学习中的回归优化
回归图示例
5.错误
误差通常被忽略在 R 旁边,它告诉我们更多关于回归直线拟合值的精度(即拟合值和最佳拟合直线之间的平均距离)。这在计算模型的置信度和预测区间时更为重要。由于使用了响应变量的自然单位,它更容易解释,而 R 没有单位,仅在 0 和 1 之间。
有不同类型的误差,如“平均绝对误差”和“均方根误差”每一种都有自己的优点和缺点,必须独立对待来评估一个模型。
6.R2
虽然标准误差很重要,但是 R 已经成为一个好的回归模型的事实上的度量。它告诉我们因变量和自变量之间的变化在多大程度上被模型所解释。较高的 R 给出了更好的模型,但是,如果接近 99%的过高 R 有时会导致过度拟合的风险。由于相关性和因果性的争论,r 可能会产生误导,从而给出不合逻辑的高 r。
用户的目标会影响模型的性能,所以要谨慎选择
在分类问题中,精确度并不总是最好的度量,R 也不一定是回归的最佳度量。它们都是最容易理解的,尤其是非技术的涉众(这可能是首先构建模型的最大原因)。最好的方法可能是考虑各种性能指标,并考虑您的初始目标。一个模型的性能总是受制于用户的目标。从一个人的角度来看,糟糕的表现可能不适合另一个人。
原载于 2019 年 11 月 5 日【https://blog.exxactcorp.com】。
机器学习的 7 步程序
对于数据收集、机器学习(ML)模型开发、模型评估和模型部署,需要一个系统化的程序。图 1 示出了开发和部署数据驱动的机器学习模型的 7 步程序。
Fig. 1 7-steps ML Procedure | Credit: Alaa Khamis
这些步骤将在下面的小节中解释。
步骤 1:问题描述
创建成功的 ML 模型的第一步是理解手头的问题,描述它的特征,并从领域专家那里获得所有需要的知识,以帮助收集相关的数据和理解目标需求。需要理解问题的重要性及其具有挑战性的方面。不同的相关自变量和因变量需要由领域专家清楚地识别。自变量包括信号、控制因子和噪声因子,而因变量代表模型响应。信号是实现模型功能所需的刺激。例如,如图 2 的参数或 P 图所示,在基于视觉的分心驾驶员检测模型中,信号主要是由汽车中预先校准的摄像机拍摄的驾驶员照片。控制因素是可以在数据收集过程中和部署模型之后控制的设计参数。受控因素可以包括相机分辨率、摇摄、变焦、聚焦、采样率、颜色模式等。
Fig. 2 Visual Feature-based Distracted Driver Detection Model | Credit: Alaa Khamis
噪声因素影响设计,但仅在数据收集过程中可控,在部署模型后不可控。噪声因素可以包括但不限于比例变化、闪电条件(照明、阴影和反射)、道路条件、天气条件等。响应是模型的主要预期功能输出。在这个例子中,输出是驾驶员正在做的事情的可能性(安全驾驶、发短信—右、打电话—右、发短信—左、打电话—左、操作收音机、喝酒、伸手、头发和化妆或与乘客交谈)。最后,错误状态表示最终用户在使用预测模型时定义的故障模式或故障影响。在这种情况下,错误状态可能是假警报或假阴性。
步骤 2:数据收集
ML 模型开发周期的第二步是收集相关和全面的数据。没有给出所需数据量的神奇公式。这个量取决于许多因素,例如问题的复杂性和学习算法的复杂性,并且直接影响算法的可学习性和性能。应该结合不同的相关信号、控制因素和噪声因素。根据数据分析的类型,可以收集批量、近实时或实时数据。为了提高模型的稳健性,还强烈建议将敌对数据作为噪声因子。由于没有人有无限的资源和无限的时间来收集全面的数据,因此应该收集最相关的代表性数据。
第 3 步:数据准备—整理您的数据
数据准备是为模型开发准备数据的关键过程。该准备包括但不限于数据清理、标记数据、处理缺失数据、处理不一致数据、标准化、分段、数据平坦化、数据不平衡等。如果所选的 ML 方法不支持从数据进行表示学习,如在端到端学习方法的情况下,手工制作的区别特征也可以在该步骤中生成。特征提取是数据科学的黑色艺术。提取不同类别之间的区别特征或尽管同一类别的原始数据存在一些差异但保持不变的特征仍然是 ML 中未解决的问题。特征向量可以存储为 SQL/NOSQL 数据库,或者存储为本地或云服务器上的电子表格,以进一步用于模型训练、验证和测试。数据收集和准备是一个耗时的过程,约占基于 ML 的问题求解时间的 80%。
步骤 4:数据探索——更好地了解你的敌人
应进行单变量和多变量分析,以了解数据的可分性、线性和单调性。这些见解有助于选择正确的最大似然算法,因为根据机器学习中没有免费的午餐定理,不存在普遍优越的最大似然算法。统计机器学习算法在不同的下划线假设下工作,如数据是可分离的,或者数据具有特定的分布,或者数据是平衡的,或者数据之间没有空间和/或时间依赖性,等等。
第五步:建模——折磨你的数据,直到它承认
在建模步骤中,选择、训练、验证和测试 ML 模型。建立一个好模型的通常方法是尝试不同的算法并比较它们的性能。例如,理想的分类器能够很好地拟合历史数据(低偏差),同时能够很好地推广到看不见的例子(低方差)。偏差-方差权衡分析有助于建立成功的 ML 模型。正如吴恩达在第三十届神经信息处理系统年会(NIPS 2016)上的讲话中所建议的,在建模期间应该分析四种类型的错误,即训练集错误、测试集错误、验证集错误和训练集错误。均方根误差(RMSE)可以说是用来评估预测模型性能的最重要的标准之一。RMSE 包括模型的可变性(精度)和它的偏差(准确性)。这两个分量可以与模型的精度(小方差)和准确度(小偏差)相关联。计算训练和测试期间的 RMSE,以便找出欠拟合或过拟合的发生。
第六步:评估——评估供词
应使用不同的定量和/或定性评估指标来证明训练模型的有效性。从广义上讲,评估指标可以分为与问题无关的指标和特定于问题的指标。前者的例子包括模型的实时性能、模型的内存占用、准确性、假阳性率、假阴性率、对数损失等。特定于问题的度量反映了解决问题的模型的质量。例如,在预测性维护系统中,常用的评估指标是故障时间(TTF)预测、剩余使用寿命(RUL)估计、设备的随机故障次数、设备的风险评分和磨损率。模型评估提供了量化的反馈来优化模型参数。可以手动优化参数,或者使用网格/随机搜索的自动调整,或者使用进化算法或强化学习算法,如 Google 最近提出的 autoML。
步骤 7:模型部署
一旦开发并优化了模型,就可以将其部署到系统/流程中。可以使用不同的方法来部署模型,例如针对 H2O 模型的 pickle 可序列化对象、本地语言、POJO(普通旧 Java 对象)或 MOJO(模型对象,优化)或使用 PMML(预测模型标记语言)。项目所有者应该参与评估模型的性能。部署模型的性能应该与基线或目标值进行比较,而不是与完美性进行比较。
8 分钟指南,告诉你的企业如何用人工智能和机器学习解决问题
Photo by the author, National Electronics Museum
机器学习和人工智能增强产品的广告无处不在——如果你在过去两年里参加过商业会议或与技术供应商交谈,你几乎肯定听说过它。到处都有这样的承诺:机器学习和人工智能将简化你的业务,为你公司的现有数据提供有价值的见解,并改善运营。这些承诺在细节上显得有些单薄——它到底能做什么?
我也问过同样的问题。我现在在这里简要介绍机器学习和人工智能可以做什么。我们不会在数学或编程技术上陷入困境,我们的目标是帮助您了解可以做些什么,以便您可以了解如何将其应用到您的业务中。让我们开始吧。
首先,一点术语。机器学习和深度学习是不同的问题解决方法,属于“人工智能(AI) ”的大旗下。这些的使用方式并不特别一致,尤其是在营销文献中。就本文的目的而言,商业人士的关键要点是,深度学习允许解决不同类型的问题,而不是传统的机器学习算法,但通常实施起来更昂贵和耗时。它也在更积极的开发中,并处于可能的前沿,但你可以用传统的方法以更低的成本做很多事情。
- 如果你知道某样东西的类别,机器学习可以将这些东西分类。
这就叫分类。你可以根据访问者的点击模式将他们分类,从而了解他们可能会购买什么或对什么感兴趣。给定一个人的一些数据,机器学习算法可以将他们分类为可能生病或没有生病。网络流量可以分为恶意流量和非恶意流量。电子邮件可以分类为垃圾邮件,也可以不分类为垃圾邮件。基于振动、电流消耗或其他测量,可以识别可能很快发生故障的机器,并在故障之前执行维护。
要做到这一点,需要一堆已经分类的例子,很可能是由人类专家分类的。这是困难且可能昂贵的部分,这意味着现在应该考虑收集数据以供将来在类似这样的问题上使用,即使现在还不清楚以后如何使用它。如果你没有健康和不健康机器的例子,你就不能训练一个算法来识别一台故障机器,而且你可能直到一台机器发生故障后才知道。
从一组仔细标记的例子中学习的算法被广泛归类为监督学习算法。
2。如果你有一堆关于价值的例子,比如某样东西的价格,机器学习算法可以学习预测类似东西的价值。
一个很好的例子是 Zillow 对你今天要卖掉的房子的估价。给定房间数量、平方英尺、位置、浴室数量和其他变量,该算法根据类似房屋的售价进行预测。这叫做回归问题。
回归问题可能对企业有用的方式有很多。给定一年中的某一天和过去几天的负载,我们今天可能会在服务器上看到什么负载?我们可能卖出多少防晒霜?给定经验和一系列技能,一个人的合理工资是多少?回归也可以用来做财务预测。
与分类一样,回归是一种受监督的学习技术,依赖于算法可以从中学习的一组重要的标记示例。我认为回归是一个“目测”值——一个人可以合理地尝试一下,并且非常接近。机器学习回归的力量在于规模——一个人很容易做出几十个这样的估计,但机器每天可以做出数万个这样的预测。它可以在几分钟到几小时内,而不是几年内,根据新的数据样本进行训练。
3。机器学习可以帮助你在数据中找到你不知道的潜在模式。
监督学习功能强大,但它有一个主要限制——你必须清楚自己在寻找什么,并能够生成一系列仔细标记的示例,供算法学习。
算法也可以用来查看数据和识别相似条目的集群。这是一种无监督学习,因为它不使用标记的例子。经典的例子是通过人口统计和消费模式来识别不同类别的访问者。
4。深度学习可以通过试错学会做事。
一种被称为强化学习的方法可以被用来让计算机通过尝试不同的方法并看看什么有效来找出如何完成特定的任务。一个主管程序根据每项表现的好坏给它打分,学习算法不断改进,直到达到目标。当即使是人类专家也不确定什么是理想的方法,或者很难编纂规则时,这种方法是有用的。这种方法已经被用于让多足机器人知道如何有效地行走和玩视频游戏。比如我写了一个程序让一台电脑学习如何登陆月球。
5。深度学习可以在图片中找到东西,并以极佳的准确度进行识别。它还可以生成场景的文本描述。
深度学习对图像识别产生了巨大的影响。在过去的几年里,训练一台计算机在图像中寻找并标记物体已经变得相当容易。给定一大组标记的示例图像,训练算法,这需要大量的计算能力。结果存储为模型,可以在低功耗的计算机上运行。这些模型可供下载或作为软件服务提供——除非您的图像包含一些专门的东西,否则您不需要训练自己的模型。这些模型一旦经过训练,就可以在非常普通的计算设备上运行——它们甚至可以直接嵌入到相机中。
一旦在视频流中识别出对象,就可以跟踪该对象的运动。这使得计算机能够计算通过一扇门的人数,跟踪停车场的汽车,或者完成其他类似的任务。模型可用于隔离和读取图像中的牌照。
深度学习模型也已经被训练成在没有人类输入的情况下生成图片中整体场景的描述。模型也正在开发中,以帮助放射科医生阅读医学图像,并越来越擅长做像在 CT 或 MRI 扫描中发现肿瘤这样的任务。
6。深度学习可以生成新的图像或视频。
深度学习模型可以被训练来拍摄图像或视频,并输出输入的修改版本。例子包括黑白图像或视频帧的自动着色和艺术生成。在基于示例视频生成假视频流方面也取得了很大进展。所谓的“深度伪造”视频可以生成令人惊讶的令人信服的视频,显示一位政治家或名人发表了他们从未发表过的演讲。该技术还可以生成修改后的视频,其中不同的人的脸覆盖在视频中原始场景的男演员或女演员上。
深度学习算法也正在接受训练,以检测视频或照片何时以这种方式生成,作为对该技术潜在敌意使用的对策。
7。机器学习可以从书面文本中提取有用的信息。
执行文本分析(也称为)的机器学习模型可以被输入文本块,并确定情绪主要是积极还是消极。它可以用于监控社交媒体或其他关于您的品牌、产品和服务的评论,或者分析其他文本数据以获得有用的商业情报。
像其他机器学习应用一样,用机器做这件事的重要优势是规模、速度和成本。检查大量的文本数据并提取有用的信息变得可能,这比人工团队要快得多。
8。深度学习可以生成相当不错的书面文本。
OpenAI 团队最近发布了深度学习文本生成模型 GPT2 。给定几个句子,这个模型和其他类似的模型可以生成相当连贯的文本段落,看起来像是人类写的。GPT2 可以在线使用来感受一下它能做什么。从新闻网站粘贴一篇文章的前几行会自动返回一段看起来很像有效新闻文章的文本。事实并不可靠正确,但它是以一种相当可信的方式写的。OpenAI 团队推迟了 GPT2 的发布,因为内部担心它可能被用来自动生成误导性的新闻文章。
在不久的将来,像 GPT2 这样的模型很有可能被用于生成小说或其他书籍的草稿,甚至可能模拟知名作者的风格。目前还不清楚这些作品的版权状况如何。
需要记住的要点
当你考虑机器学习和深度学习可以在你的业务中使用的潜在方式时,记住几点是有用的。
首先,这些技术现在对于非数据科学家的人来说很容易获得。你不需要一大群专业软件工程师来使用它们或者从头开始编写它们——你可以相对容易地使用云 软件 供应商。如果你确实想在内部运行它或者做定制工作,有很好的库可以帮你完成繁重的工作。
相反,应该努力确保数据的质量,并确定应用可用技术的最佳方式。想一想,在哪些地方做对人类来说很简单的任务,但以一种更快、范围更大的方式做,可能会给你的企业带来好处。
最后,考虑这些技术的目标不一定是取代劳动力中的人类。它可以用来减少繁重的工作,提高准确性和速度,并使他们能够从事更有创造性的工作。未来最成功的组织可能是那些最能适应机器的新能力,并将它们与企业中人类独有的部分相融合的组织。
80/20 挑战:从经典到创新的数据科学项目
有时当你和数据科学家交谈时,你会有这种感觉,好像你在和一个古老宗教的牧师交谈。晦涩的公式,复杂的算法,对初学者的俚语,最重要的是,需要一些新的脚本。如果你对所有的项目都有这种感觉,你可能和错误的数据科学家交谈。
经典数据科学项目
相对较大数量(我认为大约 80%)的数据科学项目实际上非常标准,一步一步地紧密遵循 CRISP-DM 过程。这些就是我所说的经典项目。
流失预测
训练机器学习模型来预测客户流失是数据分析中最古老的任务之一。它已经在许多不同类型的数据上实现了很多次,而且它是相对简单的。
我们首先读取数据(一如既往),然后是一些数据转换操作,由图 1 中的黄色节点处理。在提取用于训练的数据子集后,我们然后训练一个机器学习模型,以将流失概率与每个客户描述相关联。在图 1 中,我们使用了决策树,但是当然,它可以是能够处理分类问题的任何机器学习模型。然后,在不同的数据子集上测试该模型,如果准确性指标令人满意,则将其存储在文件中。然后,将相同的模型应用于部署工作流中的生产数据(图 2)。
图 1:训练和评估决策树以预测客户流失概率
图 2:将之前训练好的决策树部署到生产性客户数据中
需求预测
需求预测是另一项经典任务,这次涉及时间序列分析技术。无论我们谈论的是客户、出租车还是千瓦,预测某个时间点的需求量是一项经常需要完成的任务。对此有许多经典的标准解决方案。
在需求预测问题的解决方案中,在读取和预处理数据之后,为每个数据样本创建过去 N 个值的向量。使用过去的 N 个值作为输入向量,训练机器学习模型以从过去的 N 个数值预测当前数值。在测试集上计算机器学习模型在数值预测上的误差,如果可接受,则将模型保存在文件中。
这种解决方案的一个例子如图 3 所示。这里,回归树的随机森林在出租车需求预测问题上被训练。它遵循的步骤与用于培训客户流失预测模型的工作流程非常相似(图 1)。唯一的区别是过去样本的向量、数值预测和在 Spark 平台上的完全执行。在部署工作流中,模型被读取并应用于纽约市过去 N 小时内使用的出租车数量,以预测特定时间所需的出租车数量(图 4)。
图 3:训练和评估回归树的随机森林,以根据时间序列中过去的 N 个数字来预测当前需要的出租车数量
图 4:将先前训练的随机回归树森林应用于过去 N 小时的出租车数量向量,以预测下一小时需要的出租车数量
大多数经典的数据科学项目都遵循类似的过程,要么使用监督算法解决分类问题,要么使用时间序列分析技术解决数值预测问题。根据应用领域的不同,这些经典项目占据了数据科学家工作的很大一部分。
经典数据科学项目的自动化模型训练
现在,如果我工作的项目中有很大一部分是如此经典和标准,我真的需要从头开始重新实现它们吗?我不应该。只要有可能,我应该依靠可用的示例,或者更好的是,蓝图工作流来启动我的新数据分析项目。例如,工作流中心就是一个很好的来源。
假设我们被分配了一个关于欺诈检测的项目。那么,要做的第一件事就是去工作流中心搜索一个关于“欺诈检测”的例子搜索的前两个结果显示了解决这个问题的两种不同方法。第一种解决方案在覆盖两类的标记数据集上操作:合法交易和欺诈交易。第二种解决方案只在合法交易的数据集上训练一个神经自动编码器,随后在距离度量上应用一个阈值来识别可能的欺诈案例。
根据我们现有的数据,这两个例子中的一个将是最合适的。因此,我们可以下载它,并根据我们特定的数据和业务案例进行定制。这比从头开始一个新的工作流要容易得多。
图 5。搜索“欺诈检测”后,工作流中心的前两个结果
同样,如果这些应用程序如此经典,步骤总是相同的,难道我不能使用一个框架(总是相同的)来自动运行它们吗?这是可能的!对于最简单的数据分析解决方案尤其如此。有很多工具可以用来指导自动化。让我们再次搜索工作流中心。我们发现了一个名为“引导自动化”的工作流,这似乎是一个基于网络的自动化应用程序的蓝图,用于为简单的数据分析问题训练机器学习模型。
实际上,这种“引导自动化”的蓝图工作流也包括少量的人工交互。虽然对于简单的标准问题,完全自动化的解决方案可能是可行的,但对于更复杂的问题,需要一些人工交互来引导解决方案朝着正确的方向发展。
图 6。引导式自动化解决方案中的网页序列:1。上传数据集 2。选择目标变量 3。过滤掉无信息列 4。选择要训练的机器学习模型 5。选择执行平台 6。显示精度和速度结果(此处未显示)
更多创新数据科学项目
现在谈谈数据科学家项目的剩余部分——根据我的经验,这大约占我所参与项目的 20%。虽然大多数数据分析项目都有些标准,但也有相对大量的新的、更具创新性的项目。那些通常是特殊的项目,既不是经典的也不是标准的,包括一项新任务的调查,一种新类型数据的探索,或者一种新技术的实现。对于这种项目,你通常需要开放地定义任务,了解最新的技术,并在提出的解决方案中具有创造性。有如此多的新材料,不可能在某个知识库中找到范例或蓝图。真的没有足够的历史来支持他们。
创造性的机器学习
我最近参与的一个项目旨在以某种特定的风格和语言生成自由文本。这个想法是使用机器学习来完成比通常的分类或预测问题更具创造性的任务。在这种情况下,我们的目标是为一个新的户外服装产品系列创造新的名字。传统上,这是一项营销任务,需要召开许多长时间的头脑风暴会议,以提出 10 个,也许 20 个可能的候选人名单。既然我们在谈论户外服装,我们决定这些名字应该让人联想到山。当时,我们不知道任何有针对性的解决方案。最接近的似乎是基于 LSTM 单位的自由文本生成神经网络。
我们收集了世界上所有山的名字。我们使用这些名字来训练一个基于 LSTM 的神经网络,以生成一个字符序列,其中下一个字符是基于当前字符预测的。结果是一个人造名字的列表,隐约让人想起真正的山,而且没有版权。事实上,人工生成保证了版权不受侵犯,对真实山脉名称的模糊回忆吸引了户外生活的爱好者。此外,有了这个神经网络,我们可以在几分钟内生成数百个这样的名字。我们只需要一个初始的任意字符来触发序列生成。
图 7。用于自由文本生成的具有 LSTM 单元隐藏层的神经网络
这个网络很容易扩展。如果我们将输入向量的序列从一个过去的字符扩展到许多过去的字符,我们可以生成比名字更复杂的文本。如果我们将训练集从山脉名称更改为说唱歌曲、莎士比亚悲剧或外语文本,网络将分别以说唱歌曲、莎士比亚诗歌或所选外语文本的形式生成免费文本。
经典和创新的数据科学项目
当您与数据科学家交谈时,请记住,并非所有的数据科学项目都是平等创建的。
一些数据科学项目需要标准和经典的解决方案。这种解决方案的例子和蓝图可以在许多免费的存储库中找到,例如 Workflow Hub。简单的解决方案甚至可以完全自动化,而更复杂的解决方案可以部分自动化,只需在需要的地方添加一些人工干预。
然而,数据科学家工作的一个较小但重要的部分是实施更具创新性的解决方案,需要大量的创造力和关于最新算法的最新知识。这些解决方案不能真正完全或者甚至部分自动化,因为问题是新的,并且在达到最终状态之前需要一些试运行。由于其新颖性,可能没有几个以前开发的解决方案可以用作蓝图。因此,最好的方法是从另一个应用领域重新采用类似的解决方案。
所有图片来源于 KNIME
如首次发表于data versity。
数据科学新手的绝对入门指南
如何潜入数据海洋而不被淹没
Photo by Kevin Fitzgerald on Unsplash
因此,你可能在咖啡馆的随意交谈中听说过"数据科学",或者在凌晨 3 点滚动你最喜欢的社交网络时看到的一篇文章中读到过"数据驱动型公司",然后心想"这有什么大惊小怪的,嗯?!"。经过一些调查后,你最终会看到夸张的引用,如“ 数据是新的石油 ”或“ 人工智能是新的电力 ”,并开始理解为什么数据科学如此性感,现在学习它似乎是唯一合理的选择。
对你来说幸运的是,成为一名数据科学家不需要一个花哨的学位,你可以在家里舒适地学习任何东西。此外,21 世纪已经将在线学习确立为获取各种专业知识的可靠方式。最后,数据科学现在如此流行,以至于有无限的和不断增长的资源来学习它,这将玉米饼翻过来。拥有所有这些可能性,我应该选择哪一个?我的朋友,我希望我过去几个月的经历能帮助你消除疑虑。我们开始吧,好吗?
1.学什么?
数据科学家是这样一种球员,他可以从自己的球门开始比赛,运球越过几名防守队员,精确地传到点球点,然后在网内头球攻门,取得漂亮的进球。很抱歉提到足球,没办法,只是想想象一下你将如何掌握一套多样化的技能,这将使你在几乎任何与数据相关的问题上都非常有用。
现在,我将这些需求分为两种方法。首先,从技术角度来看,我们将回顾基础,这意味着数据科学以某种方式依赖的科学领域。其次,从一个更实际的角度来看,我将向您展示您应该关注哪些编程库,以便将您的手放在真正的数据项目上。
1.1 数据科学基础
- 编程💻 : 你的第一个任务将是选择是使用 Python 还是 R (我会给你留下一些帮助这里,这里这里和这里),然后埋头于编码。
- 线性代数📐 : 当您处理数据时,您会想知道如何将数据集表示为矩阵,并理解矢量化和正交性等概念。
- 微积分🔗 : 你将要编写和使用的许多模型将会使用诸如导数、积分和最优化等工具来计算并更快地找到问题的解决方案。
- 概率🎲 : 当你使用数据科学时,很多时候你会致力于预测未来的一些事情,所以你会想知道一些事情发生的可能性有多大,或者为什么两个事件是相关的。
- 统计数据📊为了描述你将要分析的信息,像平均值或百分位数这样的东西会派上用场,同时检验你的假设的测试也会出现。
- **机器学习🤖:**也许是数据科学的核心,在你的项目中的某个时候,你会想要预测一些事情,这就是机器学习开始发挥作用的时候。
1.2 数据科学库
在自己编写了一段时间的代码后,您会发现每种编程语言都有一系列的包或库,它们提供了不同的函数和方法来更轻松地执行不同的任务。
在这里,您可以找到一个包含 Python 中最流行和最有用的数据科学库的表格,下面是一些简短的指南。如果你已经走了 R 的路,不要担心,我也会给你留下一篇非常好的文章,这里有一个类似 R 库的表。
Top Python Libraries for Data Science
开始做数据科学所需要的是入门套件,Numpy 提供了处理数据的基础,但是你可以更容易地处理熊猫。Scipy 提供了一些奇特的函数和方法来在 Numpy 框架之上执行高级计算,Matplotlib 将允许您可视化地绘制您的发现。最后,Scikit-learn 是机器学习的起点,它包含了应用所有经典回归、分类和聚类方法所需的一切。
另一方面,深度学习框架将帮助你建立人工神经网络来执行更复杂的机器学习任务,如图像识别。此外,还有其他的数据可视化选择,允许创建更加风格化和互动的情节,甚至在网络应用程序上。自然语言处理( NLP )是数据科学中非常受欢迎的领域,例如,它可以让 Alexa 或 Siri 理解你在说什么。当你寻找数据进行分析时,互联网是一个无限的来源,所以网络搜集工具可以方便地频繁收集和检索这些数据。最后但同样重要的是,Statsmodels(统计分析)和 XGBoost(梯度增强)将在一些更具体的任务中帮助你。
1.x 数据科学(不是这样的)加分项
到目前为止,我们已经讨论了使用数据,但是什么类型的数据呢?它可以是非常漂亮、干净和结构化的 csv 文件,也可以是包含数百万非结构化数据示例的庞大数据集,是的,伙计,我们已经不在堪萨斯了。
根据您最终的工作地点,您的公司可能会以不同的方式处理数据,但最肯定的是,他们将处理非常大的数据集,所以接下来的这两个工具是每个数据科学家的必备工具。
- **数据库:**大公司把他们的数据储存在数据库里。为什么不是电子表格?嗯,基本上数据库是处理大块数据的合适方式,同时确保数据的完整性和安全性,并允许方便的查询和更新。现在,事情是有两种类型的数据库,关系数据库(SQL)和非关系数据库(NoSQL),你可能想知道它们的区别(这篇文章可能会帮助你),并希望学会使用这两种数据库。
- **大数据:**在处理大量数据时,你还必须考虑如何处理和提炼这些信息。当有数千行时,执行简单的任务可能只需要几秒钟,但当需要对数百万条记录运行高度复杂的模型时,可能需要几天。为此,您使用并行和分布式计算模型,以便在不同的内核或 CPU 中同时执行多个任务。两个最流行的框架是 Hadoop MapReduce 和 Spark (在这里阅读它们的区别)。
2.去哪里学?
2.1 训练营
训练营是学习数据科学最容易的选择,它们是几个模块的一体化捆绑包,为您提供数据分析所需的几乎所有知识。人们可能会争论这些主题所涵盖的深度,但事实是,他们擅长在数据相关的主题中提供良好的介绍和中级水平的专业知识,当你开始做自己的项目或工作时,更高级的水平肯定会到来,所以不要担心。
现在,似乎有许多选择,但最受欢迎和真正在线的两个训练营是 Dataquest 和 Datacamp ,这两个训练营引起了关于哪一个更好的激烈辩论,我个人认为这并不容易,但我会尝试展示它们的优缺点以及它们的主要差异,以便您可以更容易地做出选择。你也可以查看这个有趣的 Reddit 线程。
- Datacamp (DC) ⚙: 成立于 2013 年,他们可以被称为数据科学训练营的创造者,在当今享有盛誉。他们从基于 R 的课程开始,但在过去几年中增加了 Python 内容。他们的课程是基于短视频,然后是问题和编程练习的混合,后者基本上包括完成已经存在的代码。除了编程练习之外,他们还提供了几个项目,在这些项目中,你可以运用你以前学过的多种能力。有几门课程是免费的,但要获取所有内容,你必须每月支付 29 美元。它还有一个基于 XP 的进度系统,可以帮助你保持节奏。
- 数据探索(DQ)🚀:在 Datacamp 成立两年后,他们可能不如第一家有名,但肯定一样好。与 DC 类似,他们从 Python 课程开始,但在途中增加了 R 课程。他们提供基于文本的课程,在这些课程中,在你学到每一点信息后,你都必须进行编码,以便将一切付诸实践,所以这是非常面向应用的。每个模块结束后,你必须在 Jupyter Notebook 中从头开始做一个现实生活中的项目(我们稍后会谈到这一点),这样你就可以建立一个作品集来展示你的技能。Python 的第一个编码课程是完全免费的,但如果你想学习其中的一门课程,你就必须付费,Data Analyst 课程 29 美元,其他课程 49 美元。他们还指望一个活跃的 Slack 社区来解决你的疑惑或分享你的成就。
Data Science Bootcamps Comparison
总结一下。Datacamp 可能比 DQ 历史更悠久,提供的课程也更广泛,除了数据科学的核心知识之外,它还允许您深化其他学科。另一方面,Dataquest 更专注于通过高要求的练习和项目来建立一些强大的数据科学基础。
2.2 MOOCs
正如我在开头所说,在线学习正处于高峰期,越来越多的学生注册以扩展他们的知识,全球超过 1 亿名学生,约有 11.4k 门课程可用,MOOCs 是王道。现在,魔力在哪里?他们提供自定进度的课程,通常可以免费旁听,课程内容广泛。如果你想学习,你可以每天花 1-2 个小时,并且尽可能地进步,因为教育从来不是每个人都能获得的。
下面你会发现一个非常简短的数据科学 MOOC 平台排名前四(imo)的对比图。如果你想更深入地了解它们之间的差异和利弊,我推荐你阅读这篇的帖子,他们从几个方面对它们进行了非常详细的分析比较。稍后,我还会根据您的需求更详细地解释哪个平台更适合您。
MOOC Platforms Comparison
- Coursera:mooc 的大老板,由吴恩达和达芙妮·柯勒创立,与顶尖大学和公司合作,很难不成为绝对的热门。课程包括测验和作业,而专业也有顶点项目,以评估你的进展。Coursera 提供两种主要模式:课程,免费审核,但一次性收费提供证书;和专业,这是一套相互关联的课程,你可以免费试用 7 天,然后每月支付费用(~50 美元),直到你完成它,获得证书。**选择如果:**你对自己想学的东西足够清楚,可以亲自挑选课程,课程种类繁多,理论与应用平衡良好。
- Udacity: 最初由斯坦福大学提供的一些免费计算机科学课程,现在是最受尊敬的 MOOC 平台之一,具有明确的技术相关内容导向,是与谷歌或亚马逊等真正顶尖的公司合作开发的。Udacity 拥有几门关于精确主题的免费课程,但他们的专长是他们的nano degrees,这是一套涵盖某一领域所有必要技能的课程(例如数据分析师)。**选择如果:**你想要以工作为导向的课程,旨在培养你从事数据职位所需的一切,并且不太在乎价格。
- EdX:2012 年,麻省理工学院和哈佛大学共同创建了 MOOC 提供商。虽然只在 Coursera 之后一个月推出,但两者基本上分享了相同的教育课程和学习方法,有一个精心制作的平台和一个活跃的社区。他们的认证体系也非常相似,他们的认证课程与 Coursera 的课程相同,他们的项目相当于 Coursera 的专业。**选择如果:**你在 Coursera 上没有找到你要找的东西,虽然课程同样不错,但它们的种类较少,而且课程是一次性收费的,所以根据你的进度,它们会稍微贵一点。
- Udemy: 与我们之前提到的其他三个相比,这是一个怪人,尽管 Udemy 提供的课程数以万计,但它们都是由私人提供的,每个人都可以成为教练!这表明他们的证书没有得到任何大学、公司或组织的支持。所有这一切意味着内容更容易创建,但优质课程可能更难找到,但你仍然可以找到一些非常好的东西。它们的价格可以涨到每道 200 美元,但你可以发现它们几乎总是以 10-15 美元的价格出售,所以不要绝望,等待它。**选择如果:**你只是对学习内容感兴趣,不太在乎证书,并且正在寻找负担得起的选择。
Top Data Science and Machine Learning Courses
当然,这些是我个人的选择,虽然大多数人会同意几乎所有的选择,但我鼓励你有其他的观点并进行更多的研究,中央课堂的这个帖子是一个很好的开始。
2.3 书籍
好的旧书!虽然它们实际上永远不会变老,但如果你明智地选择,它们可以成为支持你学习的非常有价值的资源。就数据科学书籍而言,它们通常有两种“格式”:普通理论或面向代码,尽管有时你也会发现两者的混合。此外,在这一点上,你应该已经知道什么编程语言更适合你,因为书籍的作者已经下定决心,书籍将只使用一种语言编写。
3.下一步是什么?
我们已经走了很长一段路,了解了成为一名数据科学家需要学习的内容和地点,但是您现在做什么呢?我将向您展示如何以正确的方式将您的技能付诸实践,以便您能够适应数据科学社区。
- Jupyter📓:科学世界有点乱,大量的数学、图表和代码看起来像是你在做一些真正前卫的东西,但如果你不能清楚地展示出来,那它就一文不值。这就是为什么令人敬畏的 Jupyter 笔记本出现来帮助你,它们允许运行你的代码,绘制惊人的交互图,导入任何类型的数据,编写美丽的方程,并通过在一个精心展示的笔记本上降价来适当地评论一切,这样你就可以展示你的工作,而不是一个绝对无法辨认的混乱。在这里你可以看到一个 Jupyter 笔记本的例子来理解我所说的。
- **Kaggle🏆:**竞争数据科学可能听起来像大联盟,但 ka ggle(2017 年被谷歌收购)是一个非常棒的数据科学平台和社区,允许公司和组织创建竞赛(有时这是他们实际上想要解决的问题),每个人都可以参与,甚至赢得丰厚的奖品,并通过显示迄今为止最佳结果的实时排名来计数。此外,它需要大量的学习材料来帮助您入门,还有一个包含各种类型和不同用途的数据集的巨大存储库,所以基本上您已经拥有了开始从事实际项目所需的一切!
- **GitHub🐱:**在软件开发领域,一个叫做 Git 的东西被创造出来,这是一个版本控制软件,它基本上帮助跟踪一个多人工作的项目中的变化。在 GitHub 出现后,一个基于网络的版本控制托管服务,用非常简单的话来说,它有助于保持云上项目的组织和记录。在 GitHub 中,你会发现各种各样令人敬畏的回购,你可以分叉并为你的个人项目修改它们,但最重要的是,GitHub 将帮助你保持一个有组织的投资组合,供你在找工作时展示你的工作。
- ❓: 编码之路并非一帆风顺,事实上处理所有的错误和调试数百行代码会变得非常烦人,但作为人类本性的一部分,我们已经从错误中吸取了教训,学会了如何不被同样的石头绊倒。Stackoverflow 是一个 Q &社区,由来自世界各地的开发人员组成,它允许您通过线程找到编程中常见(和不常见)问题的解释,每个人都可以轻松地提问和回答。当你绝望地在 Google 中使用 Ctrl+C/Ctrl+时,请记住这一点,它将把你重定向到 Stackoverflow 中你辉煌的答案,就像魔法一样。
Stackoverflow saving the day
一些最后的想法
我坚信一个好的专业人士总是在学习,在一个像我们这样充满活力的世界里,你很快就会被淘汰,这就是学习的力量所在,能够跟上时代并重塑自己不仅会帮助你成长为一名专业人士,还会帮助你成长为一个人。
最后,学习是一个非常个人化的过程,没有一个神奇的公式适用于所有人,尽管在这篇文章中,我试图以建议的形式给出多种选择,但最终决定权在你,只要确保你享受这一过程🏄
2019 年 3 月更新。
熵的丰富
理解熵的不同类型。
我曾经在不恰当的时候谈论信息论和香农,一般来说,你会发现我在随机的社交活动中脱口而出关于香农的信息。
我不应该说双关语,我显然不擅长!
信息信息无处不在!
有些人认为,通过研究另一天的科学发现,我们可以学会如何做出发现。另一方面,一位圣人观察到我们从历史中学不到任何东西,除了我们从历史中学不到任何东西,亨利·福特断言历史是一派胡言。
-约翰·R·皮尔斯, 信息论导论
约翰·R·皮尔斯的《信息论导论》这本书很美。它并没有很高的技术性,事实上,它是我爱上的一个数学理论的令人耳目一新的写照。
他认为,许多强大的科学发现不是通过对自然现象的研究产生的,而是通过对人造设备中的现象的研究产生的。
熵。在任何与信息论相关的课程中,你都会经常听到这个神秘的词。事实上,如果你从事过机器学习,你一定非常熟悉交叉熵这个术语!!
尽管如此,我们一定都在某个时候疑惑过— 熵不是在热力学中使用的吗?
通信中使用的熵不同于统计力学或热力学中使用的熵。他们正在处理的问题完全不同。
热力学中的熵
鲁道夫·克劳修斯在 19 世纪 50 年代为热力学定义了熵。气体的熵取决于它的温度、体积和质量。熵是可逆性的指标,即当熵没有变化时,过程是可逆的。
Boltzmann’s formula for entropy of gas.
不可逆的物理现象总是涉及熵的增加。有趣的是,这最初是由路德维希·玻尔兹曼在 1872 年到 1875 年间提出的!玻尔兹曼公式是热力学熵最概括的公式。
因此,熵的增加意味着我们将热能转化为机械能的能力下降。熵的增加意味着可用能量的减少。
——约翰·R·皮尔斯,信息论导论
统计力学中的熵
虽然热力学给了我们熵的概念,但它并没有给出熵的详细物理图像,例如在分子的位置和速度方面。统计力学在特殊情况下确实给出了熵的详细的力学含义。
——约翰·R·皮尔斯,信息论导论
在这里,我们认识到熵的增加意味着有序性的降低或不确定性的增加。
where K is Boltzmann’s constant and Pi is the probability of being occupied.
传播理论中的熵
传播理论或者当时叫什么信息论:
- 信息来源:作家,演讲者任何能产生信息的东西
- 消息:数据,如文本文档或你想发送给某人的东西。
随着关于实际将产生什么消息的不确定性变得越来越大,消息所传达的信息量也在增加。我们来看看。你有两个朋友。一个人(A 人)不停地给你发迷因,另一个人是一个普通人(B 人),他有广泛的话题可聊。当你在手机上听到一声哔哔声,如果是 A 发来的,不确定性会减少,因为你知道信息的熵会减少。类似地,人 B 可以给你发送任何东西,因此你不知道信息会是关于什么的,不确定性是越来越高的熵。
如果是人 A,你已经认为它是一个迷因,当你打开它发现它是一个迷因。这是可以预见的,你打开它会得到一些信息。另一方面,打开不可预测的来自 B 的信息会给你更多的信息。
我们也可以看看刽子手的例子。如果你能猜出名字中比“of”或“the”更罕见的词,你会更了解这是哪部电影/书。
因此,高熵意味着更多的信息
或者
注意到它们在数学上是多么的相似了吗?
交叉熵
在机器学习中,交叉熵通常被用作损失函数。它是给定随机变量的两个概率分布之间的差值。
交叉熵 :代表事件的平均总位数,来自 Q 而不是 p
Ref:https://machinelingmastery . com/cross-entropy-for-machine-learning/
所以当我们用交叉熵作为损失函数时
期望概率(y):数据集中一个例子的每个类标签的已知概率§。
预测概率(yhat):由模型(Q)预测的每一类标签实例的概率。因此,我们可以使用上述交叉熵计算来估计单个预测的交叉熵;
其中 X 中的每个 x 是可以分配给该示例的类标签,并且 P(x) 对于已知标签将是 1,对于所有其他标签将是 0。
Ref:https://machinelingmastery . com/cross-entropy-for-machine-learning/
将信息与知识联系起来
文字,人类不断玩弄文字。当信息与知识联系在一起时,就会出现一些问题。我们不顾一切地把这个和统计力学联系起来!通信理论起源于电子通信,而不是统计力学。
外卖?
- 尽管有些人可能认为研究科学发现的历史是多余的,但科学发现是通过观察人造设备中的现象而发生的
- 通信中使用的熵之所以这么叫是因为数学类比,它与统计力学或热力学中定义的熵有很大不同。事实上,他们试图解决不同的问题。当热力学熵试图处理一个过程的可逆性时,它的统计力学对等物是根据分子的位置和速度来处理熵。通信中的熵是关于信息的,更多的熵,更多的信息
- 这里的信息与你传统的知识关联略有不同
原载于 2019 年 11 月 8 日 https://megstalks.com**的T22。
新 GPT 协议的可及性——文本生成和微调
使用正确的工具,使用 GPT-2 生成文本相当容易。了解如何做到这一点,以及如何在您自己的数据集上微调模型。
自然语言生成(NLG)是 NLP 社区中研究得很好的主题。随着深度学习方法的兴起,NLG 变得越来越好。最近,OpenAI 已经突破了极限,发布了GPT-2——一种基于变形金刚的模型,可以预测每个时间空间的下一个令牌。
如今,使用这些模型非常容易——您不需要自己实现代码,也不需要使用昂贵的资源来训练模型。例如,HuggingFace 已经发布了一个 API ,它简化了对 OpenAI 发布的预训练 GPT-2 的访问。它的一些功能包括生成文本,以及在您自己的数据集上微调模型-转移已学习的分布,以便模型将从新域生成文本。
做所有这些都很容易——只需要安装相关的包并启动一个 python 脚本。然而,为了避免麻烦,你可以使用一个可用的平台,比如Spell——你只需要指定你想要运行的,Spell 会处理剩下的事情(下载代码,安装软件包,分配计算资源,管理结果)。
虽然我不是一个拼写倡导者(我甚至没有尝试过该平台的其他功能,或者根本没有尝试过其他平台),但我决定写一个教程,详细介绍我刚才描述的过程。要了解更多,你可以在这里找到教程。
如果你也喜欢玩机器生成的文本,请随意留下你得到的有趣文本的评论。😃
**更新:**上述链接中似乎不再提供该教程。虽然有点过时(HuggingFace API 从那以后改了很多),下面是全文:
自然语言生成(NLG)是 NLP 社区中研究得很好的主题。解决文本生成挑战的一种方法是将记号序列(例如,单词或编码P(x _ 1,…,x_n) 的字节对)的概率因式分解为得到每个记号 x_1 【T5,…, x_n 的概率的乘积,这些记号以其前面的记号为条件:
给定一个训练数据集,可以训练这样一个模型,以最大化每个时间步下一个令牌的概率。一旦模型经过训练,您就可以通过从分布中一次抽取一个令牌来生成文本。轻而易举。
随着深度学习方法的兴起,NLG 变得越来越好。最近,随着 GPT-2 的发布,OpenAI 已经突破了极限。该模型使用众所周知的变压器架构:为了计算下一个令牌上的分布,该模型使用自关注机制同时使用先前的令牌。
最近,HuggingFace 发布了一个 API 来简化对 GPT-2 的访问。它的一个功能是使用预先训练好的模型生成文本:
spell run — github-url [https://github.com/huggingface/transformers.git](https://github.com/huggingface/transformers.git) \
— pip tqdm \
— pip boto3 \
— pip requests \
— pip regex \
— pip sacremoses \
“python examples/run_generation.py \
— model_type=gpt2 \
— length=70 \
— prompt=’ ‘ \
— model_name_or_path=gpt2"
以下是输出结果:
💫 Casting spell #1…
✨ Stop viewing logs with ^C
✨ Machine_Requested… done
✨ Building… done
✨ Run is running
…
…
…
$5.30-$10.00FREE SHIPPING
Items without a shipping address will be delivered to your confirmation email when you purchase your product.Use “POOL” when ordering; deliveries to POOL addresses are completely separate from shipping.<|endoftext|>Earth’s spin to new low the closer Earth takes to the Sun’s
✨ Saving… done
✨ Pushing… done
🎉 Total run time: 1m7.057677s
🎉 Run 1 complete
那很容易!OpenAI 使用了网络上找到的各种数据来训练模型,因此生成的文本几乎可以是任何自然的文本。但是,如果我们想要生成一种特定的文本,而不是多样性,会怎么样呢?让我们试着创造笑话吧!为此,我们必须使用笑话数据集来训练模型。不幸的是,获得这样一个数据集会非常困难!为了训练 GPT-2,它有 1.24 亿个重量需要学习(这仅仅是架构的缩小版),我们需要大量的数据!但是我们怎么会有那么多笑话呢?简短的回答是:我们不会。
学习生成笑话包括学习如何生成看起来自然的文本,以及确保这些文本是有趣的。第一部分是大部分学习发生的地方。使用预训练版本的 GPT-2 作为起点,该模型不必从头开始学习如何生成看起来自然的文本。它所要学习的就是把注意力集中在有趣的文本上。一个相对较小的数据集就可以完成这项任务。
不要误解我,我们将使用的数据集不够大,不足以有意义地学习任何有用的东西。此外,训练一个模型来概括幽默的概念是一个难题。然而,为了这篇文章的目的——学习如何使用和微调 GPT-2 这样的模型——这就够了:我们将见证数据集如何将模型的分布转向在某种程度上看起来像笑话的文本。
我们将使用来自短笑话数据集的一行笑话来微调 GPT-2。比一般的笑话要短,模特会更容易了解它们的分布。所以首先,让我们得到数据:
spell run “wget -O data.csv [https://raw.githubusercontent.com/amoudgl/short-jokes-dataset/master/data/onelinefun.csv](https://raw.githubusercontent.com/amoudgl/short-jokes-dataset/master/data/onelinefun.csv) && python -c \”import csv; f_in = open(‘data.csv’, ‘r’); f_out = open(‘data.txt’, ‘w’); f_out.write(‘\n’.join(row[‘Joke’] for row in csv.DictReader(f_in)))\””
输出是:
💫 Casting spell #2…
✨ Stop viewing logs with ^C
✨ Building… done
✨ Machine_Requested… done
✨ Run is running
— 2019–11–09 21:36:14 — [https://raw.githubusercontent.com/amoudgl/short-jokes-dataset/master/data/onelinefun.csv](https://raw.githubusercontent.com/amoudgl/short-jokes-dataset/master/data/onelinefun.csv)
Resolving raw.githubusercontent.com (raw.githubusercontent.com)… 151.101.0.133, 151.101.64.133, 151.101.128.133, …
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 253462 (248K) [text/plain]
Saving to: ‘data.csv’ 0K ………. ………. ………. ………. ………. 20% 3.34M 0s
50K ………. ………. ………. ………. ………. 40% 6.72M 0s
100K ………. ………. ………. ………. ………. 60% 167M 0s
150K ………. ………. ………. ………. ………. 80% 122M 0s
200K ………. ………. ………. ………. ……. 100% 6.55M=0.03s2019–11–09 21:36:14 (8.14 MB/s) — ‘data.csv’ saved [253462/253462]✨ Saving… done
✨ Pushing… done
🎉 Total run time: 13.07418s
🎉 Run 2 complete
HuggingFace 已经为我们提供了微调 GPT-2 的脚本:
spell run — github-url [https://github.com/huggingface/transformers.git](https://github.com/huggingface/transformers.git) \
— pip tqdm \
— pip boto3 \
— pip requests \
— pip regex \
— pip sacremoses \
-m runs/2/data.txt \
“python examples/run_lm_finetuning.py \
— output_dir=output \
— model_type=gpt2 \
— model_name_or_path=gpt2 \
— per_gpu_train_batch_size=2 \
— num_train_epochs=10 \
— do_train \
— train_data_file=data.txt”
输出是:
💫 Casting spell #3…
✨ Stop viewing logs with ^C
✨ Machine_Requested… done
✨ Building… done
✨ Mounting… done
✨ Run is running…
…
…🎉 Total run time: 44h36m34.553059s
🎉 Run 3 complete
请注意,使用-m
标志来安装前一次运行中下载的数据。
即使我们使用了一个小数据集(3K 的例子),在一个 CPU 上运行 10 个历元也需要大约 44 小时。只能说明模型有多大。这就是为什么如果您想要使用更大的数据集或运行许多实验(例如,调整 hyper 参数),您应该使用 GPU。
在获得上一次运行的结果后,让我们试着创造一个笑话:
spell run — github-url [https://github.com/huggingface/transformers.git](https://github.com/huggingface/transformers.git) \
— pip tqdm \
— pip boto3 \
— pip requests \
— pip regex \
— pip sacremoses \
-m runs/3/output \
“python examples/run_generation.py \
— model_type=gpt2 \
— length=70 \
— prompt=’ ‘ \
— model_name_or_path=output”
输出是:
💫 Casting spell #4…
✨ Stop viewing logs with ^C
✨ Machine_Requested… done
✨ Building… done
✨ Run is running…
…
…“I’ve got seven fingers! But I don’t have those!”
Your childhood might be difficult, but at least it doesn’t taste like your grandfather’s.
Funny things never happen, in life.
Friends, We’ve met on the beach. What’s wrong with you?
If I’m speaking honestly, I could use some✨ Saving… done
✨ Pushing… done
🎉 Total run time: 51.047054s
🎉 Run 4 complete
该模型已经学会生成短句,这对于我们的数据集来说是典型的。这个相对容易掌握的数据统计学得很好!关于这个模型有多有趣——好吧……我让你来判断!
Photo by Gratisography from Pexels
这个帖子最初是我在 www.anotherdatum.com**的 发布的。
统计学和机器学习的实际区别
不,它们不一样。如果机器学习只是美化了的统计学,那么建筑学只是美化了的沙堡建造。
老实说,我厌倦了在社交媒体上和我的大学里几乎每天都听到这样的辩论。通常,这伴随着一些含糊的陈述来解释问题。这样做双方都有罪。我希望在这篇文章结束时,你会对这些有些模糊的术语有一个更加了解的立场。
论据
与普遍的看法相反,机器学习已经存在了几十年。由于其巨大的计算需求和当时存在的计算能力的限制,它最初被避开。然而,由于信息爆炸产生的数据优势,机器学习近年来出现了复兴。
那么,如果机器学习和统计学是彼此的同义词,为什么我们没有看到每所大学的每一个统计系关闭或转变为“机器学习”系?因为他们不一样!
关于这个话题,我经常听到一些模糊的说法,最常见的是这样的说法:
“机器学习和统计学的主要区别在于它们的目的。机器学习模型旨在尽可能做出最准确的预测。统计模型是为推断变量之间的关系而设计的。”
虽然这在技术上是正确的,但它并没有给出一个特别明确或令人满意的答案。机器学习和统计学的一个主要区别确实是它们的目的。然而,说机器学习都是关于准确的预测,而统计模型是为推理而设计的,这几乎是一种毫无意义的说法,除非你精通这些概念。
首先,我们必须明白,统计和统计模型是不一样的。统计学是对数据的数学研究。除非你有数据,否则你无法做统计。统计模型是一种数据模型,用于推断数据中的关系,或者创建能够预测未来值的模型。通常,这两者是相辅相成的。
所以实际上有两件事我们需要讨论:第一,统计学和机器学习有什么不同,第二,统计模型和机器学习有什么不同。
说得更明白一点,有很多统计模型可以做出预测,但预测的准确性不是它们的强项。
同样,机器学习模型提供了不同程度的可解释性,从高度可解释性的拉索回归到难以理解的神经网络,但它们通常为了预测能力而牺牲可解释性。
从高层的角度来看,这是一个很好的答案。对大多数人来说已经足够好了。然而,有些情况下,这种解释让我们对机器学习和统计建模之间的差异产生了误解。让我们看看线性回归的例子。
统计模型 vs 机器学习—线性回归示例
在我看来,统计建模和机器学习中使用的方法的相似性导致人们假设它们是同一件事。这是可以理解的,但事实并非如此。
最明显的例子是线性回归,这可能是这种误解的主要原因。线性回归是一种统计方法,我们可以训练一个线性回归器,并获得与旨在最小化数据点之间的平方误差的统计回归模型相同的结果。
我们看到,在一种情况下,我们做了一些称为“训练”模型的事情,这涉及到使用我们数据的子集,我们不知道模型的表现如何,直到我们在训练期间不存在的额外数据(称为测试集)上“测试”这些数据。在这种情况下,机器学习的目的是在测试集上获得最佳性能。
对于统计模型,我们找到了一条使所有数据的均方误差最小化的线,假设数据是添加了一些随机噪声的线性回归量,这些噪声本质上通常是高斯噪声。不需要训练和测试集。对于许多情况,尤其是在研究中(例如下面的传感器示例),我们的模型的要点是描述数据和结果变量之间的关系,而不是对未来数据进行预测。我们称这个过程为统计推断,而不是预测。但是,我们仍然可以使用该模型来进行预测,这可能是您的主要目的,但是评估模型的方式将不涉及测试集,而是涉及评估模型参数的显著性和稳健性。
(监督)机器学习的目的是获得一个可以进行可重复预测的模型。我们通常不关心模型是否可解释,尽管我个人建议总是进行测试以确保模型预测有意义。机器学习是关于结果的,它很可能在一个你的价值完全由你的表现来表征的公司工作。然而,统计建模更多的是寻找变量之间的关系以及这些关系的重要性,同时也是为了预测。
为了具体说明这两种程序的区别,我举一个个人的例子。白天,我是一名环境科学家,主要研究传感器数据。如果我试图证明传感器能够对某种刺激(如气体浓度)做出响应,那么我会使用统计模型来确定信号响应是否具有统计显著性。我会尝试理解这种关系,并测试其可重复性,这样我就可以准确地描述传感器响应的特征,并根据这些数据做出推断。我可能要测试的一些事情是,响应是否实际上是线性的,响应是否可以归因于气体浓度而不是传感器中的随机噪声,等等。
相比之下,我还可以获得一个由 20 个不同传感器组成的阵列,我可以用它来尝试和预测我新表征的传感器的响应。如果你不太了解传感器,这可能有点奇怪,但这是目前环境科学的一个重要领域。一个有 20 个不同变量的模型预测我的传感器的结果,这显然是关于预测的,我不期望它特别容易解释。由于化学动力学产生的非线性以及物理变量和气体浓度之间的关系,该模型可能有点像神经网络一样深奥。我希望模型有意义,但只要我能做出准确的预测,我就很高兴了。
如果我试图证明我的数据变量之间的关系达到一定程度的统计意义,以便我可以在科学论文中发表它,我会使用统计模型,而不是机器学习。这是因为我更关心变量之间的关系,而不是做出预测。做出预测可能仍然很重要,但大多数机器学习算法缺乏可解释性,因此很难证明数据内部的关系(这实际上是现在学术研究中的一个大问题,研究人员使用他们不理解的算法,并获得似是而非的推论)。
Source: Analytics Vidhya
应该清楚的是,这两种方法的目标是不同的,尽管它们使用了相似的方法来实现目标。机器学习算法的评估使用测试集来验证其准确性。然而,对于统计模型,通过置信区间、显著性检验和其他检验对回归参数的分析可用于评估模型的合法性。因为这些方法产生相同的结果,所以很容易理解为什么人们会认为它们是相同的。
统计 vs 机器学习—线性回归示例
我认为这种误解很好地概括在这个表面上诙谐的比较统计和机器学习的 10 年挑战中。
然而,仅仅因为这两个术语都利用了相同的基本概率概念,就将这两个术语混为一谈是不合理的。例如,如果我们声明机器学习只是基于这一事实的美化统计,我们也可以做出以下声明。
物理只是被美化了的数学。
动物学只是美化了的集邮。
建筑只是美化了的沙堡建筑。
这些陈述(尤其是最后一个)非常荒谬,都是基于将建立在相似概念上的术语合并的想法(双关语用于架构示例)。
实际上,物理学是建立在数学基础上的,它是应用数学来理解现实中的物理现象。物理学还包括统计学的一些方面,统计学的现代形式通常建立在一个框架上,该框架由策梅洛-弗兰克尔集合论和测度论组成,以产生概率空间。他们两个有很多共同点,因为他们来自相似的起源,并且运用相似的思想来得出逻辑结论。同样,建筑和沙堡建筑可能有很多共同点——虽然我不是建筑师,所以我不能给出一个明智的解释——但它们显然是不一样的。
为了让你了解这场辩论的范围,实际上在《自然方法》杂志上发表了一篇论文,概述了统计学和机器学习之间的差异。这个想法可能看起来很可笑,但这种程度的讨论是必要的,这有点可悲。
统计学从样本中得出总体推断,机器学习找到可概括的预测模式。二…
www.nature.com](https://www.nature.com/articles/nmeth.4642)
在我们继续之前,我将快速澄清另外两个与机器学习和统计学相关的常见误解。这些是人工智能不同于机器学习,数据科学不同于统计学。这些都是相当没有争议的问题,所以它会很快。
数据科学本质上是应用于数据的计算和统计方法,这些数据可以是小型或大型数据集。这也可以包括探索性数据分析,其中数据被检查和可视化,以帮助科学家更好地理解数据并从中做出推断。数据科学还包括像数据争论和预处理这样的事情,因此涉及某种程度的计算机科学,因为它涉及编码、建立数据库、web 服务器等之间的连接和管道。
你不一定需要用计算机来做统计,但是没有计算机你就不能真正做数据科学。你可以再一次看到,虽然数据科学使用了统计学,但它们显然是不一样的。
同样,机器学习也不等同于人工智能。事实上,机器学习是 AI 的一个子集。这是非常明显的,因为我们是在教(“训练”)一台机器根据以前的数据对某种类型的数据进行归纳推理。
机器学习建立在统计学的基础上
在我们讨论统计学和机器学习有什么不同之前,让我们先讨论一下相似之处。在前面的章节中,我们已经稍微提到了这一点。
机器学习是建立在统计框架之上的。这应该是显而易见的,因为机器学习涉及数据,而数据必须用统计框架来描述。然而,扩展到大量粒子热力学的统计力学也是建立在统计框架上的。压力的概念其实是一个统计量,温度也是一个统计量。如果你认为这听起来很可笑,这很公平,但这实际上是真的。这就是为什么你不能描述一个分子的温度或压强,这是没有意义的。温度是分子碰撞产生的平均能量的表现形式。对于足够多的分子,我们可以描述像房子或室外这样的东西的温度,这是有意义的。
你会承认热力学和统计学是一样的吗?不,热力学使用统计学来帮助我们理解传输现象形式的功和热的相互作用。
事实上,热力学不仅仅是建立在统计学的基础上。类似地,机器学习利用了数学和计算机科学的大量其他领域,例如:
- 数学和统计学领域的 ML 理论
- 优化、矩阵代数、微积分等领域的 ML 算法
- 来自计算机科学和工程概念的 ML 实现(例如内核技巧、特征散列)
当一个人开始在 Python 上编码,拿出 sklearn 库并开始使用这些算法时,许多这些概念都被抽象了,因此很难看出这些差异。在这种情况下,这种抽象导致了对机器学习实际涉及内容的无知。
统计学习理论—机器学习的统计基础
统计学和机器学习的主要区别在于统计学仅仅基于概率空间。您可以从集合论中获得统计数据的整体,集合论讨论了我们如何将数字分组到称为集合的类别中,然后对这个集合施加一个度量,以确保所有这些值的总和为 1。我们称之为概率空间。
统计学除了这些集合和测度的概念之外,没有对宇宙做任何其他假设。这就是为什么当我们用非常严格的数学术语指定一个概率空间时,我们指定了三样东西。
一个概率空间,我们这样表示,(ω,F,P) ,由三部分组成:
机器学习是基于统计学习理论,这仍然是基于概率空间的公理概念。这一理论是在 20 世纪 60 年代发展起来的,是对传统统计学的扩展。
机器学习有几个类别,因此我在这里只关注监督学习,因为它是最容易解释的(尽管仍然有些深奥,因为它被数学掩盖了)。
监督学习的统计学习理论告诉我们,我们有一组数据,我们表示为 S = {(xᵢ,yᵢ)} 。这基本上就是说,我们有一个由 n 个数据点组成的数据集,每个数据点都由一些我们称之为特征的其他值来描述,这些值由 *x、*提供,这些特征由某个函数映射,从而给出值 y.
它说我们知道我们有这个数据,我们的目标是找到将 x 值映射到 y 值的函数。我们把能够描述这种映射的所有可能函数的集合称为假设空间。
为了找到这个函数,我们必须给算法一些方法来“学习”处理问题的最佳方法。这是由损失函数提供的。因此,对于我们拥有的每个假设(提出的函数),我们需要通过查看所有数据的预期风险的值来评估该函数的表现。
预期风险本质上是损失函数乘以数据的概率分布的总和。如果我们知道映射的联合概率分布,就很容易找到最佳函数。然而,这通常是未知的,因此我们的最佳选择是猜测最佳函数,然后根据经验决定损失函数是否更好。我们称之为经验风险。
然后,我们可以比较不同的函数,并寻找给我们带来最小预期风险的假设,即给出数据上所有假设的最小值(称为下确界)的假设。
然而,该算法有作弊的倾向,以便通过过度拟合数据来最小化其损失函数。这就是为什么在学习了基于训练集数据的函数之后,该函数在测试数据集上被验证,这些数据没有出现在训练集中。
我们刚刚定义的机器学习的本质引入了过度拟合的问题,并证明了在执行机器学习时需要训练和测试集。这不是统计学的一个固有特征,因为我们并没有试图最小化我们的经验风险。
选择最小化经验风险的函数的学习算法被称为经验风险最小化。
示例
以简单的线性回归为例。在传统意义上,我们试图最小化一些数据之间的误差,以便找到一个可以用来描述数据的函数。在这种情况下,我们通常使用均方误差。我们把它平方,这样正负误差就不会互相抵消。然后,我们可以以封闭形式求解回归系数。
碰巧的是,如果我们将损失函数设为均方误差,并执行统计学习理论所支持的经验风险最小化,我们最终会得到与传统线性回归分析相同的结果。
这只是因为这两种情况是等价的,同样,对相同的数据执行最大似然法也会得到相同的结果。最大似然法有不同的方式来达到同样的目标,但是没有人会争辩说最大似然法和线性回归是一样的。最简单的情况显然无助于区分这些方法。
这里要指出的另一个要点是,在传统的统计方法中,没有训练和测试集的概念,但是我们确实使用度量来帮助我们检查我们的模型如何执行。因此,评估程序是不同的,但两种方法都能够为我们提供统计上稳健的结果。
还有一点是,这里的传统统计方法给出了最优解,因为该解具有封闭形式。它没有测试出任何其他假设,也没有汇聚成一个解决方案。然而,机器学习方法尝试了一系列不同的模型,并收敛到最终的假设,这与回归算法的结果一致。
如果我们使用不同的损失函数,结果就不会收敛。例如,如果我们使用铰链损失(使用标准梯度下降是不可微分的,因此需要其他技术,如近似梯度下降),那么结果将是不同的。
可以通过考虑模型的偏差来进行最终的比较。人们可以要求机器学习算法测试线性模型,以及多项式模型、指数模型等,看看这些假设是否更好地符合给定我们的先验损失函数的数据。这类似于增加相关的假设空间。在传统的统计学意义上,我们选择一个模型,并可以评估其准确性,但不能自动使其从 100 个不同的模型中选择最佳模型。显然,模型中总是存在一些偏差,这些偏差源于算法的初始选择。这是必要的,因为找到对数据集最优的任意函数是 NP 难问题。
那么哪个更好呢?
这其实是一个很傻的问题。就统计学与机器学习而言,没有统计学,机器学习就不会存在,但机器学习在现代非常有用,因为自信息爆炸以来,人类可以访问大量数据。
比较机器学习和统计模型有点困难。你使用哪一种主要取决于你的目的是什么。如果你只是想创建一个可以高精度预测房价的算法,或者使用数据来确定某人是否可能感染某些类型的疾病,机器学习可能是更好的方法。如果您试图证明变量之间的关系或从数据中进行推断,统计模型可能是更好的方法。
Source: StackExchange
如果你没有强大的统计学背景,你仍然可以学习机器学习并利用它,机器学习库提供的抽象使得非专家使用它们非常容易,但是你仍然需要对底层的统计思想有一些理解,以防止模型过度拟合并给出似是而非的推论。
我可以在哪里了解更多信息?
如果你有兴趣深入研究统计学习理论,有很多关于这个主题的书籍和大学课程。以下是我推荐的一些讲座课程:
[## 9.520/6.860,2018 年秋季
该课程从统计学习的角度涵盖了机器学习的基础和最新进展…
www.mit.edu](http://www.mit.edu/~9.520/fall18/) [## ECE 543:统计学习理论(2018 年春季)
统计学习理论是一个新兴的研究领域,交叉在概率,统计,计算机…
maxim.ece.illinois.edu](http://maxim.ece.illinois.edu/teaching/spring18/index.html)
如果你对钻研概率空间感兴趣,那么我提前警告你,它在数学中相当沉重,通常只在研究生统计课上涉及。这里有一些关于这个主题的好资料:
http://users . jyu . fi/~ miparvia/Opetus/Stokastiikka/introduction-probability . pdf
https://people.smp.uq.edu.au/DirkKroese/asitp.pdf
感谢您的阅读!
时事通讯
关于新博客文章和额外内容的更新,请注册我的时事通讯。
丰富您的学术之旅,加入一个由科学家,研究人员和行业专业人士组成的社区,以获得…
mailchi.mp](https://mailchi.mp/6304809e49e7/matthew-stewart)
建筑人工智能的出现
历史视角
斯塔尼斯拉斯·夏洛 ,哈佛大学设计研究生院*| 2019 年 2 月 17 日*
本文放出 我们的论文 的一部分,在哈佛开发,2019 年 5 月提交。这件作品是一个更大的作品的一个组成部分,调查艾在建筑上的开端,它的 历史背景 ,它的潜在空间 组织&风格 。
今天,建筑实践、建筑方法、建筑传统和建筑技术是激烈争论的焦点。受到外来者的挑战,带来新的实践,以及来自内部的质疑,正如从业者对其当前状态的怀疑,建筑正在经历一场真正深刻的®进化。
在将对我们的学科留下持久影响的因素中,技术无疑是起作用的主要载体之一。价值链每一步的技术解决方案的出现已经极大地改变了建筑。建筑的概念事实上已经开始了缓慢的转变:首先是利用新的建筑技术,然后是开发足够的软件,最终今天是引入统计计算能力(包括数据科学和人工智能)。与其说是一种破坏,不如说我们希望在这里看到一种延续,这种延续引领建筑经历了一系列的演变,直到今天。模块化、计算设计、参数化以及最后的人工智能对我们来说是慢节奏转变的四个错综复杂的步骤。在历史背景之外,我们假设这种演变是建筑概念彻底改进的线框。
一.四阶段序列
M 这就是为什么当回顾历史时,区分创造的两个层次至关重要:发明& 创新。 发明源于学术研究,而创新则由发明诱发。在建筑领域,创新实际上塑造了一种持续发展的实践。在不同时期、发明&创新之间一直在反复进行的实践。从那里开始,我们的编年史旨在展示计算和建筑领域的深刻交织的演变,然后介绍建筑人工智能时代,作为一个顶点。这就是为什么重建我们学科近期历史的背景和亮点是我们工作的先决条件。
Inventions & Innovations | Source: Author
模块化系统
模块化可以作为系统化建筑设计的起点。始于 30 年代初,模块化建筑的出现将语言和建筑语法带入概念阶段,有助于简化和合理化建筑设计。
早在 1920 年,瓦尔特·格罗皮乌斯就为包豪斯提出了理论,模块化电网承载着技术简单和价格低廉的希望。模块化来自不同的方向,最初是作为学者和实践者的研究课题出现的。Gropius 最初引入了“ Baukasten ”的概念,这是一个典型的模块,然后通过严格的组装规则进行聚合。这种系统性将在一年后的勒·柯布西耶的“Modulor”(图 1 )中得到呼应。通过将模块化的严格性应用到人类尺度,勒·柯布西耶在 1946 年提供了模块化原则的整体实现。
Figure 1: Corbusier’s Modulor
建筑环境的尺寸将根据人体的关键指标和比率进行调整。事实上,从马赛的“*拉图雷特”*到“统一住宅”,勒·柯布西耶将尺寸和跨度系统化,以匹配“模数”的处方。然而,随着巴克明斯特·富勒的出现,模块化迅速向一个更加一体化的愿景发展,将建筑系统嵌入模块中,Dymaxion House 就是一个例子。这一尝试将模块化住房的可能性推向了极致,为行业开创了一个充满活力的先例和概念验证。
此后,跟随这些早期的理论家,建筑师被邀请弯曲他们的设计精神,以矩阵的命令,同样的道理,转移部分建筑设计的技术性到模块的逻辑。更少的麻烦,更低的成本,更多的可预测性。模块化将迅速扩展到整个行业:罗伯特·w·麦克劳克林教授于 1933 年建造的温斯洛·艾姆斯住宅,是世界上第一个大规模模块化项目,被视为一个重大突破,就像摩西·萨夫迪极具表现力的 Habitat 67 一样。城市规划甚至在 60 年代初也受到了影响,当时像建筑事务所的“插件城市这样的项目开发了模块化城市的可能性。通过不断组装和拆卸三维结构矩阵上的模块,城市可以找到一个更新的逻辑,解决增长的可能性和一如既往的可行性的必要性。
然而,通过机械规则连接网格、模块和组装系统最终导致了一种类似乐高积木的建筑概念的游戏化。但是实践不能仅仅是一个“放在一起”的棋盘游戏,聚集了一套基本的组装规则和过程。由此产生的设计的单调很快使这一理论变得无足轻重,其装配系统的建设性弱点最终使建筑师望而却步。然而,通过它的规则系统,模块化今天仍然是一个潜在的建设性原则,在实践中仍然是生动的。
计算设计
在80 年代之交,随着模块化系统的复杂性飙升,计算的出现为模块化设计带来了可行性和可扩展性。除了模块的复活,基于规则的设计的系统性在某种程度上得到了恢复。
早在 50 年代中期,一个来自不同方向的关于计算设计潜力的高层次思考就在一个相邻的学科中开始了:工程学。1959 年,Patrick Hanratty 教授发布了 PRONTO,这是 CAD(计算机辅助绘图)软件的第一个原型,面向工程零件设计。这种软件提供的可能性,加上快速发展的潜在计算能力,引发了建筑领域的讨论。不久之后,建筑师兼加州大学伯克利分校教授克里斯托弗·亚历山大(Christopher Alexander)通过制定计算设计的关键原则开始了这场讨论。在他的“关于形式综合的笔记”(1964)和后来的“一种模式语言”(1968)中,Alexander 理论化了为什么以及如何使用计算机来解决形状设计的问题。他对软件设计潜力的早期理解与当时以硬件为中心的关注形成了深刻的对比。他在书中定义的基本原则至今仍是软件编程的基石:递归、面向对象编程以及它们在设计中的应用等概念代表了一种根本性的进步。随着这一势头,整整一代计算机科学家和建筑师将创造一个新的研究领域:计算设计。由尼古拉斯·尼葛洛庞帝教授领导的麻省理工学院建筑机器小组(AMG)可能是其最典型的体现。
Figure 2: URBAN 5, AMG MIT
尼葛洛庞帝的书“建筑机器”(1970)概括了 AMG 使命的本质:研究机器如何增强创作过程,更具体地说,是作为一个整体的建筑生产。随着 URBAN II 项目和后来 URBAN V 项目的发布,该小组将在工业界参与任何努力之前展示 CAD 应用于空间设计的潜力。
在这样的结论性研究之后,建筑师和整个行业积极地将这些发明推向创新状态。弗兰克·盖里无疑是这一事业最活跃的倡导者。对他来说,计算的应用可以极大地放宽装配系统的界限,并允许新的形状和建筑几何形状。盖里科技公司(Gehry Technologies)由盖里和吉姆·格利姆夫(Jim Glymph)在 80 年代创立,通常使用早期的 CAD-CAM 软件——如来自达索系统的CATIA——来解决复杂的几何问题。盖里科技为 30 年的计算设计开创了先例,向建筑师展示了计算的价值,引发了专业的滑坡。在接下来的 15 年里,不可阻挡的计算能力增长&数据存储能力,加上越来越便宜和更加用户友好的机器,极大地促进了 3D 设计软件的采用。建筑师基于一个明确的基本原理迅速认可了新系统:计算设计 (1)允许严格控制几何形状,提高设计的可靠性、可行性和成本、 (2)促进和简化设计师之间的合作、 (3) 最终实现了比传统手绘所能承受的更多的设计迭代。更多测试&更多选择以获得更好的设计。
然而,在这个过程中,当设计师们从事计算设计时,一些缺点最终出现了。特别是,某些任务的重复性和对复杂几何形状缺乏控制成为严重的障碍。这些为计算设计中出现的全新运动铺平了道路:参数化。
参数化
在 **的参数世界中,当合理化为简单的规则集时,重复的任务和复杂的形状都有可能被处理。这些规则可以编码在程序中,以自动化耗时的手动执行过程。**这种模式推动了参数化技术的出现。简而言之,如果一项任务可以解释为给计算机的一组命令,那么设计师的任务就是将它们传达给软件,同时隔离影响结果的关键参数。一旦编码完成,架构师将能够改变参数并生成不同的可能场景:不同的潜在形状,同时产生多个设计输出。
20 世纪 60 年代初,Luigi Moretti 教授宣布了参数化建筑的出现。他的项目“ Stadium N ”虽然最初是理论性的,但却是第一次清晰地表达了参数化。通过定义 19 个驱动参数,其中包括观众的视野和裁判的日照,莫雷蒂直接从这些参数的变化中推导出体育场的形状。最终的形状,虽然令人惊讶且相当有机,但提供了这种新的参数美学的第一个例子:外观上是有机的,但作为一个构思过程却是严格理性的。三年后,伊凡·苏泽兰将把这一原理引入计算世界。萨瑟兰是 SketchPad 的创始人,这是第一款真正用户友好的 CAD 软件。嵌入在软件核心的“原子约束的概念是萨瑟兰对莫雷蒂的参数概念的翻译。在典型的画板绘图中,每个几何图形实际上都在机器端被转换成一组原子约束(参数)。这个概念是参数化设计在计算机术语中的首次表述。Samuel Geisberg,Parametric Technology Corporation(PTC)的创始人,后来在 1988 年推出了 Pro/ENGINEER,这是第一款向用户提供几何参数的软件。随着软件的发布,盖斯伯格完美地总结了参数理想:
“我们的目标是创建一个足够灵活的系统,鼓励工程师轻松考虑各种设计。设计变更的成本应该尽可能接近零。”
由于萨瑟兰和盖斯伯格的努力,设计和计算之间的桥梁已经搭建起来,新一代“参数意识”建筑师可以茁壮成长。正如 P. Schumacher 所解释的,随着建筑师越来越有能力使用参数代理来操纵他们的设计,这个学科“慢慢地向参数化靠拢”。在他的书《参数化主义,一种新的全球建筑风格&城市设计中,Schumacher 清楚地展示了参数化主义是如何在建筑学科中逐渐意识到参数概念的结果。
从参数的发明,到将其转化为整个行业的创新,我们看到了一些关键人物,他们塑造了参数化的出现。扎哈·哈迪德建筑师事务所的作品最能体现建筑的参数化。哈迪德夫人是一名在英国接受培训的伊拉克建筑师,她有数学背景,她创办了自己的事务所,目的是通过参数化设计将数学和建筑结合起来。她的设计通常是编码在程序中的规则的结果,允许对建筑物的几何形状进行前所未有的控制。每一个建筑动作都会转化为给定的参数调整,从而形成特定的建筑形状。迄今为止,哈迪德的设计是将建筑设计量化为一系列参数的完美范例。然而,如果没有大卫·于滕在 2000 年开发的软件 Grasshopper,她的工作是不可能的。Grasshopper 作为一个可视化编程界面,允许建筑师轻松地隔离他们设计的驱动参数,同时允许他们迭代地调整它们。其界面的简单性(图 3 )与内置功能的智能性相结合,今天继续为世界上大多数建筑的设计提供动力,并激发了整整一代“参数化”设计师。
Figure 3: Grasshopper Interface by David Rutten
最后,除了 Grasshopper 为建筑设计带来的短期好处,一场由参数化驱动、始于 21 世纪初的更深刻的革命今天仍在进行中:BIM(建筑信息建模)。在时任 Autodesk 副总裁的 Philip Bernstein 的带领下,BIM 的诞生和完善将建筑行业的合理性和可行性提升到了一个全新的水平。BIM 的基本思想是,建筑 3D 模型中的每个元素都是驱动每个对象形状并记录它们的参数(“属性”)的函数。从 Autodesk Revit——当今主要的 BIM 软件——到萨瑟兰的画板,我们看到一个共同的线索:明确利用参数作为设计的驱动力。
然而,在过去的 10 年里,设计的参数化已经被证明在技术上和概念上都达到了一个平台期。参数化建模未能考虑**(1)**(2)空间组织和风格的必要性高于严格的效率(3)场景的可变性,最后 (4) 模拟的计算成本。除了技术上的缺陷,参数化设计的理论前提也有缺陷:建筑可能是固定数量的参数的结果,建筑师可以简单地将其编码,作为一种抽象,远离其背景,环境和历史。事实上,当“照章办事”时,参数主义被证明忽略了空间规划的巨大复杂性:无数的参数和深刻的文化&社会因素实际上参与了城市平衡。随着我们的职业遭遇人工智能,这种以系统方式结合相邻学科的深层现实今天终于可以得到解决。
人工智能
人工智能从根本上来说是一种架构的统计方法。人工智能的前提是将统计原理与计算相结合,这是一种新的方法,可以改善参数化架构的缺点。
机器所理解的“学习”对应于计算机在面对复杂问题时的能力,首先是理解显示给他的选项的复杂性,其次是建立“直觉”来解决所面临的问题。事实上,早在 1956 年,当创造人工智能的概念时,约翰·麦卡锡就已经将其定义为“使用人脑作为机器逻辑的模型”。人工智能不是设计一个为一系列变量和规则构建的确定性模型,而是让计算机根据从数据中收集的信息或用户传输的信息来创建中间参数。一旦达到“学习阶段”,机器就可以生成解决方案,不只是简单地回答一组预定义的参数,而是创建模拟在学习阶段向他显示的信息的统计分布的结果。这一概念是人工智能带来的范式转变的核心。机器建立自己对问题的理解的部分独立性,加上它消化一组例子的复杂性的能力,颠倒了参数化的前提。由于并非所有规则&参数都由用户预先明确声明,机器可以出人意料地揭示潜在的现象,甚至试图模仿它们。这是从启发式世界(基于规则的决策)到统计学世界(基于随机的决策)的巨大飞跃。
一些理论家早就预测了人工智能在建筑领域的渗透,他们在我们之前就看到了人工智能在建筑设计方面的潜力。这些先驱们远没有设计出智能算法,而是设计并推测了这种系统的潜力。当内格罗蓬特和他的团队发布 URBAN II 时,“机器助手”的想法已经开始酝酿了。URBAN V 是一个较新的版本,它可以帮助设计师调整房间布局(定义为区块),当用户在模块化网格上绘图时,可以优化邻近区域和光线条件。事实上,URBAN V 区分了两层信息:隐性和显性。隐式维度是机器处理并推导出来的维度,而显式维度是用户设置的维度。《都市 V》中的这种信息双重性,正是内格罗蓬特所希望的人机互补的直接翻译。正是在这组隐含参数中,“智能”——换句话说,机器中内置的人工智能——会找到它的表达方式。通过调整隐含参数,计算机提出的修正将作为建议呈现给用户。对于放置不当的房间,URBAN V 会通知用户:“ TED,许多冲突正在发生”。几年后,时任剑桥大学建筑学教授的塞德里克·普莱斯(Cedric Price)发明了发电机 (1976 年,图 4 )。
Figure 4: The GENERATOR Machine, Cedric Price
普莱斯认可内格罗蓬特的工作,利用 AMG 在人工智能方面的工作并进一步推进,研究自主不断变化的建筑的想法,这将“智能地”响应和适应用户的行为。对于 Price 来说,在“智能”这个术语下,隐藏着对行为进行编码的思想,生成器将会遵循这一思想。然而,贝娄·内格罗蓬特的工作,或者说普莱斯的原型,存在一个未解决的问题:算法的实际智能。尽管接口和协议已经就绪,但基于简单的启发式关系,核心算法的实际过程复杂性仍然相当弱。
智能算法的设计,也称为 AI,实际上在 80 年代初重新引起了人们的兴趣。计算能力的突然增加和资金的急剧增加使智能问题重新成为 AI 研究的中心。这个时期的关键是两个主要的革命:专家系统和推理机。前者对应于能够使用条件语句基于一组规则进行推理的机器。这在当时是一个真正的突破。后者,最好的例子是由 Douglas Lenat 开发的 Cyc 项目 T1,涉及面向推理的机器。使用一个知识库(一组真值陈述),一个推理机将能够推断出一个新陈述的真实性。直到 90 年代早期,人工智能的数学化,这个领域才会带来真正有希望的结果。一种新型模型的出现肯定会揭示人工智能的潜力:网络和机器学习。通过使用分层管道,也称为网络,现在机器能够处理比以前开发的模型更复杂的问题。这种模型可以被“训练”,或者换句话说,为特定的任务进行调整。更有趣的是,这种想法是在一种特定类型的模型中提出的:生成对抗性神经网络(GANs)。谷歌大脑(Google Brain)研究员伊恩·古德费勒(Ian Goodfellow)在 2014 年首次提出了这一理论,该模型提供了使用网络来生成图像,同时通过自我纠正的反馈回路来确保准确性(图 5 )。
Figure 5: GAN Typical Architecture
Goodfellow 的研究颠覆了 AI 的定义,从分析工具变成了生成代理。出于同样的原因,他让人工智能离建筑学更近了一步:绘画和图像制作。总而言之,从简单网络到 GANs,新一代工具加上越来越便宜和可获得的计算能力,今天正在将人工智能定位为一种负担得起的强大媒介。如果尼葛洛庞帝或普莱斯的工作几乎没有真正的机器智能,今天的建筑软件终于可以利用这种可能性。
尽管人工智能对建筑的潜在代表非常有前途,但它仍然取决于设计师向机器传达其意图的能力。由于机器必须经过训练才能成为一个可靠的“助手”,架构师面临两个主要挑战: (1)他们必须选择一个适当的分类法,即可以转化为机器量化指标的一组正确的形容词和 (2)他们必须在广阔的人工智能领域中选择适当的工具并训练它们。这两个先决条件将最终决定人工智能架构的成败。
二。持续的进步
M 模块化、计算设计、参数化和人工智能:这四个阶段的序列反映了进展的年表,一步一步地塑造和精炼了建筑手段&方法。我们希望在这种势头下看到一种“持续进步”的形式,就像整个行业所经历的那样,而不是一系列不相关的中断。在此基础上,一套合适的矩阵帮助我们描绘出这种动态。
首先,为了证明我们的主张,我们在这里假设架构可以被理解为一个生成设计的过程,我们可以通过两个维度来描述:一方面是产生的输出的多样性或另一方面是设计的适用性或**【相关性】。******
****【多样性】取决于两个基本指标:确定所创造的选择数量的“设计数量”和衡量它们各自差异的“设计独特性”。
****“相关性”复合了“建设性的可行性”,即设计的可操作性及其“建筑质量”,包括最佳的项目组织、空间布局和环境适应性。
Variety x Relevance Framework | Source: Author
****最终, **多样性(数量 X 奇异性)**关联性(建造可行性 X 建筑质量)的组合创造了一个框架,这个框架 (1)映射并对比了我们四个时期 - 模块化、计算设计、和人工智能、 (2) 各自的定位
这个展示,虽然是方向性的和定性的,但却是一个强有力的网格来代表我们论文的核心概念。总之,这种持续发展的动力是由每个运动在某个特定时间点的限制所触发的,并因新运动的到来而加剧。
结束语
****我们 今天面临着一个巨大的挑战:将人工智能引入建筑设计领域。毫无疑问,人工智能永远不会——永远不可能——自动化建筑师的直觉和感受力。人类使用机器作为工具。不是反过来。然而,从智能助理中受益是我们力所能及的,应该仔细研究、测试和体验。
****此外,人工智能不仅仅是突然中断的结果。这是 70 年发明和创新的顶点。由于人工智能可以平衡效率和组织性,同时提供大量相关的设计选项,我们从中看到了丰富结果的可能性,这将补充我们的实践,并解决我们学科的一些盲点。我们绝不把人工智能看作是建筑领域的新教条,而是把这个领域视为一个充满潜力和希望的新挑战。
文献学
- 超越计算机的数字建筑,罗伯托·博塔齐,布卢姆斯伯里
- 数据驱动的设计&构造,兰迪·多伊奇,威利
- 建筑智能,设计师和建筑师如何创造数字景观,Molly Wright Steenson,麻省理工学院出版社
- 建筑谷歌,超越网格——建筑&信息技术第 226–229 页,Ludger Hovestadt,Birkhauser
- 算法复杂性:凭空而来,复杂性,设计策略&世界观第 75–86 页,安德里亚·格莱尼格&格奥尔格·弗拉赫利奥蒂斯,伯克豪斯
- 代码&机器,代码,操作间&旁白第 41–53 页,Andrea Gleiniger&Georg Vrachliotis,Birkhauser
- 格罗皮乌斯的问题还是关于在建筑和艺术中揭示和隐藏代码,代码,介于操作&叙述第 75–89 页,安德烈·格莱尼格&格奥尔格·弗拉赫利奥蒂斯,伯克豪斯
- 软架构机器,尼古拉斯·尼葛洛庞帝,麻省理工学院出版社。
- 建筑机器,尼古拉斯·尼葛洛庞帝,麻省理工学院出版社。
- 一种模式语言,关于合成形式的注释,克里斯多夫·亚历山大,链接
- 地图的变形;或者输入 RoweBot ,安德鲁·威特,日志#36
- 灰拳击,安德鲁·威特,日志#43
- ****人类与人工智能中的暗示性绘画,辜莞允·马丁内兹,哈佛 GSD 论文,2016
- 启用替代架构:参与式设计的协作框架, Nathan Peters,哈佛 GSD 论文,2017
- DANIEL:自动分析和检索建筑平面图的深度架构,Divya Sharma,Nitin Gupta,Chiranjoy Chattopadhyay,Sameep Mehta,2017,IBM Research,IIT 焦特布尔
- 建筑平面图中的自动房间检测和房间标记,Sheraz Ahmed,Marcus Liwicki,Markus Weber,Andreas Dengel,2012 年,凯泽斯劳滕大学
- 利用空间索引自动解释平面图,哈南·萨梅特,阿雅·索费尔,1994 年,马里兰大学
- 解析平面图图像,塞缪尔·道奇,久旭,比约恩·斯坦格,2016,亚利桑那州立大学,乐天理工学院
- 项目探索:生成性设计在建筑空间规划中的应用,丹尼尔·纳吉,达蒙·刘,约翰·洛克,吉姆·斯托达特,洛伦佐·维拉吉,王雷,戴尔·赵和大卫·本杰明,2016,生活,欧特克工作室
- 光栅转矢量:再访平面图变换,刘晨,吴家军,Pushmeet Kohli,川口恭誉古川,2017,华盛顿大学,深度思维,麻省理工学院
- 图形文档视觉理解的关系模型。建筑制图应用,2014 年,巴塞罗纳自治大学
- 基于骨骼上下文的形状匹配与建模,谢军,heng-Ann Heng,Mubarak Shah,2007,中佛罗里达大学,香港中文大学
- 平面图解释的统计分割和结构识别,Lluís-Pere de las Heras,Sheraz Ahmed,Marcus Liwicki,Ernest Valveny,Gemma Sánchez,2013,西班牙巴塞罗那计算机视觉中心
- 结合使用统计和结构策略在平面图中进行无监督和独立于符号的墙壁分割,llus-Pere de las Heras、Ernest Valveny 和 Gemma Sanchez,2014 年,西班牙巴塞罗那计算机视觉中心
- 使用生成式对抗网络支持智能移动应用的路径规划,Mohammadi,Mehdi,Ala Al-Fuqaha 和 Jun-Seok Oh。, 2018
- 基于方形树形图算法的平面图自动实时生成,Fernando Marson 和 Soraia Raupp Musse,2010 年,PUCRS
- 建筑程序建模,帕斯卡·穆勒,彼得·旺卡,西蒙·海格勒,安德烈亚斯·乌尔默,吕克·范·古尔,2015,苏黎世联邦理工学院,亚利桑那州立大学
- 建筑空间规划的生成式设计,Lorenzo Villaggi 和 Danil Nagy,2017,Autodesk Research
老年 P 对 NP 问题
为什么 P=NP 如此重要,值得 100 万美元的奖金?
Photo by Helloquence on Unsplash
p 对 NP。这是可以解决的吗?
它是由粘土数学研究所选出的七个千年奖问题之一,每个问题的第一个正确答案将获得 100 万美元的奖金。这是七个问题中最近提出的问题(1971 年),也是最容易解释的问题(希望如此)。
这是怎么回事?
在我们深入探讨之前,我希望可以安全地假设点击本文的人具有一些编程背景,并对算法及其运行时(时间和空间复杂性)有所了解。我不会详细讨论技术细节,但会向那些非技术人员提供一些背景知识。
非编程人员需要了解的基本概念
(熟悉时空复杂性的可以跳过这一节)
- 算法基本上只是一套用编程语言编写的指令
- 算法是计算机程序背后的“大脑” —它们本质上帮助解决我们的日常问题,如车辆路线、蛋白质折叠、排序、寻找质数、图形搜索等。
- 每个算法都有一个时间和空间复杂度——这本质上是一种技术上更酷的说法,即每个算法都需要一些时间来运行,并在执行时占用我们计算机上的一些内存
Big O Notation and Orders of Complexity
- 多项式时间慢 —当谈到时间复杂度(即运行一个算法需要多少时间)时,编程社区根据输入大小 n 来衡量一个算法需要的时间。当自变量趋向于某个特定值或无穷大时,描述函数极限行为的数学符号称为大 O 符号。一般来说,任何在多项式时间内运行的算法(即给定大小为 n 的输入,需要 n^k 时间)都被认为是慢的,但仍被社区“接受”为上限。任何速度较慢的东西都被编程社区认为是不可用的,因为相对于输入大小来说,花费的时间太快了。
Above table represented visually
那么,什么是 P 对 NP 的问题呢?
声明一下,现状是 P≠NP。
P (多项式时间)是指一个算法在多项式时间内可以解决的一类问题。在 P 类中的问题可以从简单的乘法到寻找列表中最大的数字。它们是相对“容易”的一组问题。
NP (非确定性多项式时间)是指非确定性计算机可以在多项式时间内解决的一类问题。这实质上是“如果我有无限的计算能力(即,我需要多少台计算机),我就能在最多多项式时间内解决任何问题”的另一种说法。更直观地说,它指的是目前无法找到足够快速(多项式时间)答案的一类问题,但如果有人提供了问题的解决方案,就可以快速验证(在多项式时间内)。这里的术语“验证”是指能够检查所提供的解决方案是否确实正确。
显然,基于以上定义,p⊆NP**。让我们看一个例子来说明这个抽象的问题。
最常见而有效的例子之一是 数独 。给定一个未解的数独网格(例如 9 x 9),一个算法要花相当多的时间来解一个。然而,如果 9 x 9 的网格增加到 100 x 100 或 10,000 x 10,000 的网格,解决它所花费的时间将会成倍增加,因为问题本身变得更加困难。然而,给定一个解出的数独网格(9 x 9 ),即使大小扩展到 10,000 乘 10,000,也很容易验证特定解是否正确。它会更慢,但是检查解决方案的时间会以更慢的速度增加(多项式)。
还有许多其他的 NP 问题,包括背包问题和旅行推销员问题,它们的相似之处在于它们很难解决但很快得到验证。我们在这里试图解决的根本问题是:
能够快速识别 NP 正确答案是否意味着也有快速找到的方法?
如果是这样的话(即 P=NP),这将极大地改变我们看待这些 NP 问题的方式,因为这意味着有一种快速的方法来解决所有这些问题,只是我们还没有找到解决方法。
如果这还不够复杂,让我们来增加点趣味。
NP-完全和 NP-困难
在这些 NP 问题中,存在着一类被研究者称为NP-完全 问题的问题。在形式上,它们是一组问题,其中的每一个问题,任何其他的 NP 问题都可以在多项式时间内化简为(在下面提到*),并且其解仍然可以在多项式时间内被验证。这意味着任何 NP 问题都可以转化为 NP-Complete 问题。*
通俗地说,他们是 NP 问题中的“最难”的。这样如果任何一个一个NP-完全 问题都可以在多项式时间内解决,那么每一个NP-完全 问题都可以在多项式时间内解决, NP 中的每一个问题都可以在多项式时间内解决(即 P=NP)。最著名的例子是旅行推销员问题。
Photo by JESHOOTS.COM on Unsplash
还有一组问题叫做 NP-Hard 问题。这些问题至少和 NP 问题一样难,但是没有要求其在多项式时间内求解的条件。这表明 NP-Hard 问题不一定属于 NP 类。一个例子是解决一个国际象棋棋盘——给定一个国际象棋棋盘的状态,几乎不可能判断在给定状态下的给定移动是否实际上是最优移动。形式上,不存在多项式时间算法来验证一个 NP 难问题的解决方案。
如果我们把两者放在一起,一个 NP-Complete 问题暗示它是 NP-Hard ,但是一个 NP-Hard 问题并不暗示它是 NP-Complete 。
定义 NP-完全性
一个问题 L ,是NP-Complete如果:
- L 是 NP 难
- L 属于 NP
下图(聚焦左手边)应该会让事情更清楚。
P versus NP diagram (source: https://en.wikipedia.org/wiki/P_versus_NP_problem)
等等,把 A 减为 B 是什么意思?
归约形成了NP-完全性 的症结。
通俗地说,一个问题 L1 可以简化为另一个问题 L2 如果:
- L1 的任何实例都可以被建模为 L2 的实例
- 后者的解决方案提供了前者的解决方案,反之亦然
为了直观地理解这一点,我们可以这样想:
如果 L1 被简化为 L2,L1 必须至多和 L2 一样难对付。相反,L2 必须至少和 L1 一样努力。
数学上,这表示为:L1≤pL2(读作“ L1 多项式可约为 L2 ”)。
Visual representation of above, where f represents the polynomial-time reduction algorithm (Source: Singapore Management University)
如果 P 实际上等于 NP 会发生什么?
既然我们已经定义了所有这些不同的术语,一个更重要的问题是——“为什么所有这些都很重要?”。找到这个问题的解决方案不仅在学术界,而且在实际情况下都会产生深远的影响。这包括:
- 密码术——从我们维护的许多密码到我们在自动取款机上使用的 PIN 码,我们依靠这些代码来管理我们的日常生活,因为它们容易检查,但人们很难破解。
- 车辆路线 —运输和物流的流动将在全球范围内得到优化,影响到从运输到电子商务再到制造的许多行业。
- ——了解或预测一个给定的氨基酸序列(一种蛋白质)将如何折叠形成其三维形状,将有助于药物设计等许多领域,甚至可能治愈癌症。
结束语
对我来说,我更像一个实用主义者,而不是理想主义者。我站在一边,认为 P 不等于和 NP,而且可能永远不会相等。尽管我很想发现癌症的治疗方法(通过快速蛋白质折叠)或快速车辆路线,但我相信世界本来就应该像现在这样复杂。公司之所以存在,是因为它们相互竞争,寻找更好的(但永远不是最好的)方法来解决这些问题。这些无法解决的问题推动着我们的经济和世界。
如果真的有解决这个问题的方法,这个问题的复杂性保证了现金奖励远远超过 100 万美元。
支持我! —如果你喜欢我的内容并且没有订阅 Medium,请考虑支持我并通过我在这里的推荐链接订阅 ( 注意:你的一部分会员费将作为推荐费分摊给我)。
参考
- https://en.wikipedia.org/wiki/P_versus_NP_problem
- https://www.youtube.com/watch?v=YX40hbAHx3s
- https://bigthink.com/technology-innovation/what-is-p-vs-np?rebelltitem=1#rebelltitem1
- http://news.mit.edu/2009/explainer-pnp
- https://www.cse.iitk.ac.in/users/sb/papers/a-talk.pdf
2019 年的人工智能军备竞赛
埃隆·马斯克和斯蒂芬·霍金的激进主义已经失败
Image depicts activists from the “Campaign to Stop Killer Robots” group, protesting outside the United Nations in Geneva
黑仔机器人已经到来。诚然,这些’致命的自主武器距离超级智能还有很长的路要走——2019 年的 AI 比终结者更接近瓦力。尽管如此,在过去的五年里,人工智能在军事技术上的应用确实是爆炸性的;尤其是受到来自美国、中国和俄罗斯的密集国家投资的推动。
一些有关方面预见到了这种升级。埃隆·马斯克和斯蒂芬·霍金只是众多知名人士中的两位,他们在 2018 年签署了“致命自主武器誓言”,呼吁全球禁止自主武器。该宣言谴责这些武器是“危险的不稳定因素”和“强大的压迫工具”。未来生命研究所在 2017 年组织了一次更大的承诺,明确警告全球大国之间可能开始致命自主武器的军备竞赛。
这篇文章将展示这种激进主义是多么的无效,不管它的初衷是多么的好。人工智能领域的军备竞赛已经开始,而且已经持续了多年。现在是 2019 年,我们不能浪费时间假装潘多拉的盒子还没有被打开。是时候盘点人工智能武器化的潜在证据,并考虑产生这一泥潭的地缘政治动机了。
准备,设置,消失
一场推动人工智能军备竞赛的国家之旅也可以从莫斯科开始。普京政府,几乎没有一个符合现有全球规范的政府,明确反对建立新的规范(反对自主武器)。莫斯科甚至成功地游说减少各国开会讨论这个问题的天数。俄罗斯自己也声称限制自主武器开发是不合适的,因为“这种武器很少被开发出来”。
俄罗斯无私地努力编造这种谎言。泄露的 2019-2021 年人工智能专用研发预算显示,未来三年,国家投资(以前为【4.9 亿美元】)几乎翻了一番。俄罗斯在这一地区的意图不是秘密。问问格拉西莫夫将军就知道了,他是俄罗斯军队的总参谋长:他在国家通讯社上公开表示“机器人将是未来战争的主要特征之一……(俄罗斯)正在寻求战场的完全自动化。”
想知道未来战争会发生什么,看看俄罗斯武器制造商皇冠上的宝石:卡拉什尼科夫(无处不在的 AK-47 的制造商)。这个军火巨头正在开发和发射一整套自主武器,每一种都有一个“神经网络”,使机器能够挑选目标并自主决定是否交战。另一家俄罗斯武器制造商 Degtyarev已经开发了一种叫做 Nerekhta 的自主“自杀机器”。这种无人驾驶飞机被建造来悄悄地接近目标,然后爆炸摧毁防御工事或敌人的坦克。
A Nerekhta participating in combat drills
这里需要强调的是,所选的例子只是俄罗斯冰山的一角:我们还没有接触到自主核潜艇、智能虫群机器人导弹或阿玛塔 T-14“超级坦克”。情况相当清楚:俄罗斯有一个庞大而雄心勃勃的自主武器计划,并将其视为国家安全利益的核心。因此,没有人应该对普京(已经)对全球人工智能武器禁令的幽灵发起进攻感到惊讶。
或许更令人惊讶的是,俄罗斯在自主武器问题上的立场与美国和中国的立场是如此一致。事实上,对于两个努力在有争议的地缘政治问题上达成共识的地缘政治大国来说,美国和俄国在反对禁止自主武器方面表现出了惊人的凝聚力(T2)。
为什么会这样?不需要触及总司令的特有的特质;尝试一个简单的数字(尽管有很多零)。五角大楼已经承诺在美国军事人工智能上花费 90 亿美元,明确指出需要跟上俄罗斯和中国的军事技术。虽然美国在人工智能上的预算只占整个国防开支的一小部分,就像在俄罗斯一样,但这个数字在最近几年翻了一番。
在全球大国中独一无二的是,美国已经开始在动荡的战斗地区部署自动驾驶汽车,数量庞大,作用重大。自主海军车辆已经开始在南中国海巡逻——更大、更强大的机器已经上路。最令人震惊的是,在奥巴马政府的领导下,美国无人驾驶飞机已经在阿富汗和巴基斯坦遍地开花。美国反对所有禁止自主武器的行动的原因非常清楚:美国想要赢得军备竞赛,而不是阻止它。
就其本身而言,中国实际上已经在去年四月表示支持禁止在战场上使用自主武器。然而,有眼光的读者应该对中国的声明有所保留:就在同一天,中国空军发布了一种新型自主无人机的“智能群体”设计计划。同样,即使在去年,中国的自主武器项目也创造了成功的故事。一些评论家认为中国在军备竞赛中占据了无可置疑的优势;与北京支持禁止人工智能武器有些矛盾。
Lawfare 的 Elsa Kania】认为中国在军事人工智能方面正在推行一种“战略模糊”的政策:向有关人权组织展示口头承诺,而不牺牲任何发展尖端致命自主武器的真正灵活性。毕竟,成为人工智能(包括武器开发)的全球领导者是字面上的中国官方计划;当战略利益受到威胁时,北京不会太在意人权组织。
换句话说,世界上三个最大的军事强国已经:
- 认定自主武器对他们的军事战略至关重要;
- 增加这些武器的资源和发展;和
- 描述了在其他强国技术发展的背景下对更先进武器的需求。
我们不得不这样称呼它:一场严重的军备竞赛。
埃隆和他的朋友们的清算
在我看来,根据现有的证据,继续积极阻止致命自主武器的发展是站不住脚的。埃隆·马斯克和《未来生活》阻止军事人工智能军备竞赛的善意努力已经失败。在这个阶段,俄国、中国和美国(更不用说和许多小国家)在致命自主武器上投入了大量资金,并将其视为未来武装冲突的基础。我们可以预计军事人工智能的资源将继续升级,各州将开始部署更多的先进无人机。
值得注意的是,大国的这种行为完全符合他们的理性动机(而不是,例如,符合一个糟糕的科幻小说情节)。单方面支持人工智能武器禁令和降低武器发展不符合任何大国的利益。如果有人这样做,另一个大国可能会抓住机会在武器化人工智能方面发展无懈可击的优势,这种可能性几乎是不可避免的。自主无人机之间的战斗很可能会由哪一方拥有更强大的软件和自主权来决定。能够自主“思考”、反应、操纵和参与的机器将战胜速度较慢的机器,更不用说行动迟缓的人类了。
考虑到这种地缘政治背景,那些担心机器人崛起的人还有什么选择呢?一个答案可能是专注于开发军事人工智能的实际工作人员和科学家,而不是他们为之工作的国家。数千名工程师去年游行抗议 Maven 项目,这是五角大楼的一个军事人工智能项目。那个项目如期取消。很可能更多的人工智能最聪明的头脑不想利用他们的天赋来推进发动战争的技术。
活动人士的另一个选择是支持一项实际上能够获得主要大国共同支持的国际协议。我的立场是,激进分子可能不得不搁置任何全面禁止开发或部署的野心,但一个更渐进的协议可能会成功:也许是一个人工智能行为准则,规范国家如何部署自主武器。各国对发展一个共享的规则集,或者至少是一个解决由新技术的新颖应用引起的外交争端的机制有着浓厚的兴趣。
这幅图景并不像看上去那么黯淡。尽管这篇文章引用了一些听起来不可思议的人工智能开发项目,但一位专家认为自主战争机器的“一般”智能比一个蹒跚学步的小孩还不如。马斯克和霍金可能未能避免人工智能军备竞赛,但至少他们最担心的事情还没有曝光。
是时候召开一个可编程的日内瓦会议了
medium.com](https://medium.com/@mattjbartlett/arms-control-for-killer-robots-54dfdbedcb13)*