世界上最糟糕的拉面——用拉面评级在 Python 中学习 EDA
我曾经是一个巨大的拉面消费者。不出所料,我在大学期间达到了消费高峰。谁不喜欢在暴风雪的日子里吃一碗拉面,吃大学食堂的难吃的食物呢?
就像我们每天吃的其他食物一样,拉面有好有坏。在这篇文章中,我想通过探索性数据分析(EDA) 来谈谈世界上最糟糕的拉面。
本文分为五个部分:
- **数据:**对数据集的简要介绍以及从哪里获得它
- 数据结构
- **数字变量:**深入了解为什么评级列不是数字列,以及如何将其转换为数字列
- **分类变量:**深入查看一些分类列,以及如何填写缺失值
- **世界上最难吃的拉面:**深入了解哪些国家和品牌有这些拉面
- 最意想不到的拉面
1.数据
现在你可能会感到惊讶:
“拉面上有数据集?”
是的,我也是!这是一个数据集,上面有来自 Hans Lienesch 的拉面评分员对每一种拉面的评分。他从小就喜欢吃方便面,他决定为全世界的拉面制作一个关于他的评论的网站。
Hans 也发表了我在本文中使用的评分数据集:
[## 大名单-拉面评分员
单击列标题对评级进行排序。要下载 PDF 副本,请单击此处。您也可以下载一个 CSV 文件,它可以…
www.theramenrater.com](https://www.theramenrater.com/resources-2/the-list/)
在我们深入研究数据之前,有一些事情需要记住:
- 因为汉斯是唯一的评分者,所以我认为评分偏向他的偏好。对于一个有趣的 EDA,没有任何机器学习应用程序,这是一个有趣的数据集
- 完整的列表包含 2816 个观察值。去年我第一次看的时候是 2943 年——我想汉斯一定把它清理了一下。
- 汉斯列出了一些十大名单:https://www.theramenrater.com/top-ten-lists/和 T21。这个数据集中的列
Top Ten
可能会也可能不会反映它们
2.数据结构
df = pd.read_csv("../data/TheRamenRater_TheBigList.csv")df.shape
该数据集中有 2816 行和 7 列。
df.info()
来自df.info()
的信息显示Style
和Top Ten
列是缺少值的两列。
Star
是包含每个拉面评分的列,这让我预计它应该是一个数字列。和我预想的相反,这个栏目是一个object
类型。这意味着这个列中有string
值,我们将在后面进一步研究。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2816 entries, 0 to 2815
Data columns (total 7 columns):
Review # 2816 non-null int64
Brand 2816 non-null object
Variety 2816 non-null object
Style 2814 non-null object
Country 2816 non-null object
Stars 2816 non-null object
Top Ten 41 non-null object
dtypes: int64(1), object(6)
memory usage: 154.1+ KB
3.数字变量
为了进一步分析,我想将Stars
列转换成数字列。在做这个变换之前,让我们先弄清楚为什么它是一个object
。
df['Stars'].unique()
我看到除了从 1 到 5 的连续评分,我们还有Unrated
、NR
或混合数字评分,如5/2.5
或3.5/2.5
。
我试图四处搜索,以了解NR
代表什么,以及为什么会有Unrated
或混合评级拉面,但找不到线索。因为在 1% 的数据中有具有这些值,所以我将删除它们,并将该列转换为数字列,以便进一步分析。
fig, ax = plt.subplots(figsize=(6, 5))
ax = df['Stars'].hist()
plt.xlabel('Rating')
plt.ylabel('Number of Ramen')
_ = plt.title('Rating Histogram')
df['Stars'].mean()
df['Stars'].median()
平均而言,汉斯对一份拉面的评分约为 3.7 分。这和分布显示,汉斯普遍评价拉面 3 星以上。
4.分类变量
df[['Brand', 'Variety', 'Style', 'Country', 'Top Ten']].nunique()
该数据集中有 5 个分类变量。它们是:
- 品牌:388 独特价值观
- 种类:2631 种独特的数值
- 风格:8 种独特的价值观
- 国家:39 个值
- 前十名:28 个值
让我们一起来看看Style
和Top Ten
。
4.1 Style
拉面有不同的风格:包,杯,碗,托盘,盒子,餐厅,罐,酒吧。
来自df.info()
的信息表明该列中有 2 个值缺失。
df[df['Style'].isnull()]
就是这两个没有风格值的拉面。我做了一点搜索,他们看起来像是一个Pack
,所以我将用Pack
来填充这里的空白。
- Kamfen E Menm 鸡肉:https://www . theramenrater . com/2011/06/17/428-kam fen-E-men-面条-人工-鸡汤-风味/
- Unif 100 芙蓉虾:https://www . theramenrater . com/2010/09/14/unif-100-方便面-芙蓉虾-风味/
df['Style'] = np.where(df['Style'].isnull(), 'Pack', df['Style'])
上面是一段非常懒惰的代码,用来给缺失的行赋值。在这种情况下,它是可行的,但不是最佳解决方案。为什么?
- 它在这里有效,因为我的两个缺失值都可以用
Pack
填充 - 如果我们不得不为每一个填充不同的值,这将是行不通的
4.2 Country
你知道拉面不仅仅来自亚洲,而是来自世界各国吗?这是数据集中的国家列表。
df['Country'].sort_values().unique()
4.3 前十名
很显然,这个栏目只有 2012 年到 2016 年,每年排名前十的拉面。而且还不包括我上面提到的前十名(【https://www.theramenrater.com/top-ten-lists/】T2)
df['Top Ten'].unique()
df['Top Ten'].str.split("#", expand=True)[0].sort_values().unique()
5.世界上最糟糕的拉面
如上所述,大多数汉斯的评分都在 3 分以上,这让我对那些评分低于 3 分的人非常好奇,尤其是那些最低的人——我实际上想试试那些人,看看他们是否真的值得低评分。
在弄清楚这些拉面之前,不得不说汉斯有一套有趣的评分系统,带小数。我相信这背后是有原因的。但是为了简化我的分析,我将把评级分为以下几组:
- 0–1
- 1–2
- 2–3
- 3–4
- 4–5
我选择最差的拉面是那些评级从 0 到 1 星的拉面。让我们深入这个列表。
worst_ramen = df_copy[df_copy['RatingGroups'] == '0-1']
5.1 拉面最差的品牌
worst_ramen.groupby('Brand')['Variety'].count().sort_values(ascending=False).head(3)
最糟糕的拉面数量最多的品牌是:
- 白家:6 拉面
- Acecook: 4 份拉面
- Maruchan: 3 份拉面
尽管他们不一定是最差的品牌,因为每个品牌下最差的拉面的总数并没有太大的区别。
5.2 拉面最差的国家
以下是最糟糕的拉面数量最多的前 5 个国家。我很惊讶日本在那里!
- 日本:13 拉面
- 美国:12 拉面
- 中国:12 拉面
- 台湾:10 拉面
- 加拿大:10 拉面
我的假设是日本生产很多拉面(或者汉斯可能尝试过很多日本拉面),所以就比例而言,可能不会太糟糕。
最差拉面排行榜里全日本拉面只有 3%。但是为了确定它实际上是坏还是坏,我们需要将这个百分比与其他国家的百分比进行比较。我会把这个留到下次。
6.最意想不到的拉面
除了最差的拉面名单,一些非常意外的拉面真的让我大开眼界!你有没有尝过凤尾鱼味番石榴米粉、品客日清顶级拉面鸡肉味薯片或者更好的Komforte chock lates 香喷喷的拉面?
嗯,这拉面巧克力真的结束了这篇文章。也许在下一篇文章中,我会对这种美味的拉面的味道做一些评论😜
这里是完整的教程,有详细的代码和更多的 EDA 技巧。
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/hadinh1306/blog-posts/blob/master/tutorials/WorstRamen.ipynb)
Python 的禅:Python 设计原则指南
写出干净漂亮的代码!
用 Python 写干净的代码
一位 Python 爱好者曾经写过 20 句格言,说明如何用 Python 编写漂亮而干净的代码。这些格言被称为“Python 的禅宗”,在 Python 开发人员中引起了轰动。蒂姆·彼得斯为 Python 的设计写下了这些 BDFL(仁慈的终身独裁者,Python 创始人吉多·范·罗苏姆的昵称)的 20 条指导原则,但最后一句警句留给了范罗森。
直到今天,共有 19 句格言,罗森说最后一句格言是“一些奇怪的蒂姆·彼得斯在开玩笑。”但是,这些格言是什么意思呢?。让我们开始吧!
Python 之禅
漂亮总比难看好。
明的比暗的好。
简单胜于复杂。
复杂总比复杂好。
扁平比嵌套好。
稀不如密。可读性很重要。特例不足以特殊到打破规则。
虽然实用性战胜了纯粹性。错误永远不会无声无息地过去。
除非明确消音。
面对暧昧,拒绝猜测的诱惑。应该有一种——最好只有一种——显而易见的方法来做这件事。虽然这种方式一开始可能并不明显,除非你是荷兰人。
现在总比没有好。
虽然永远也不会比现在*好。如果实现很难解释,这是个坏主意。
如果实现容易解释,可能是个好主意。名称空间是一个非常棒的想法——让我们多做一些吧!
您可以通过键入以下命令在 Python IDE 中打开“复活节彩蛋”:
进口这个
漂亮总比难看好
作为一名开发人员,编写代码并使其运行并不是唯一要做的工作。Python 以可读性和简单性著称。那么,为什么要篡改呢?编写干净易读的代码是一门艺术,它受到其他程序员的欣赏,并让他们理解每一点。
def collatz(num):
if num%2 == 0:
return num//2
else:
return 3 * num + 1
number = input("Enter a number: ")
while number != 1:
number = collatz(int(number))
print(number)
在上面的代码中,不需要添加“else”。在这一点上感觉没有必要。另外,为了使它更好、更干净,你可以这样做:
def collatz(num):
if num%2 == 0:
return num//2
return 3 * num + 1
显性比隐性好
这句格言不言自明。这意味着最好使代码更加详细和明确。这样做将使代码可读。隐藏代码功能可能会产生影响,因为其他程序可能无法理解代码。
简单比复杂好
当你可以构建一个简单的代码时,为什么要构建一个复杂的代码呢?
def recursion_reverse(s):
if(len(s)==1):
return s
else:
return recursion_reverse(s[1:]) + s[0]
original_string = "ABC"
print("Reversed String : ", recursion_reverse(original_string))
您也可以只用两行代码来完成。
my_string = “ABCD”
reversed_string = my_string[::-1]
复杂比复杂好
上面的格言说简单比复杂好。现在这个说“复杂比复杂好”。越来越混乱了!一个复杂的问题可能需要复杂的技术来解决,但它不应该是复杂的。
代码的复杂性让其他程序员感到困惑。即使程序很复杂,也要尽量保持简单的一面,易于阅读和理解。复杂的代码会耗费精力和时间!而且,程序员不能浪费时间。
扁平比嵌套好
编码人员喜欢为每个功能创建子模块。比方说,我构建了一个名为“垃圾邮件”的模块,添加了子模块“foo ”,并在其中添加了“baz”。
现在,从 baz 访问另一个子包将类似于:
from spam.foo.baz import eggs
嵌套和等级制度不是增加组织而是官僚主义!
稀疏胜于密集
有时,我们倾向于只用一行代码做所有的事情。您可能会得到正确的输出。但是,可读性呢?有人不用偷看很久就能看懂吗?
print('\n'.join("%i bytes = %i bits which has %i possible values." % (j, j * 8, 256 ** j - 1) for j in
(1 << i for i in range(8))))
同样的东西可能被分成几部分,也可能被写成得到同样的结果。散布代码是一件令人愉快的事情,而密集的代码会激怒同事。
可读性计数
每次你被代码卡住的时候,你会去 StackOverflow 吗?那么,你看什么代码呢?可读的还是复杂的!
据说代码读的比写的多。所以,为了读者的缘故,请开始编写可读的代码,因为它受到我们的程序员同事的喜爱。
特例不足以违反规则
程序员必须坚持良好的“编程实践”。比方说,您导入了一个库,但是它不符合良好的编程实践。它必须帮助你完成任务,但请记住,库和语言应该总是遵循最佳的“编程实践”,并以其一致性而闻名。
虽然实用性战胜了纯粹性
与上面的“特例并不特殊到足以打破规则”的格言相反,这一条表明给定的规则集可能有一个例外。这里的关键词是“可能”。
错误永远不会无声无息地过去
当一个函数返回 None 时,就是你陷入无声错误陷阱的时候。最好是得到错误,而不是无声的错误。如果您避免这样的错误,它可能会导致错误,并进一步导致崩溃。
这就是为什么在代码中使用*“try-except”*语句变得很重要。无论你认为哪里有可疑的事情发生,你都必须添加这个组合,并了解这些无声的错误。
除非明确静音
有时您想忽略代码中的错误,最佳做法是显式地消除错误。
面对暧昧,拒绝猜测的诱惑
计算机做我们想让它们做的事情。尽管如此,这些机器让我们变得迷信。计算机代码行为不正常总是有原因的。只有你的逻辑才能解决它。因此,打破猜测和盲目尝试解决方案的诱惑,直到代码工作。
应该有一种——最好只有一种——显而易见的方法来做这件事
在 Perl 编程中,有一种说法是这样的——“有不止一种方法可以做到这一点!”用三四码做同样的事情,就好比有了双刃剑。不仅要花时间去写,而且每个人都必须能够毫无问题地阅读你的 3-4 种方法。这种实践中的灵活性不值得庆祝。
尽管这种方式一开始可能并不明显,除非你是荷兰人
关于 Python 的创造者吉多·范·罗苏姆,这句格言说,除非你是代码的创造者,否则语言规则不容易学习或记忆。一个关于 BDFL 的笑话!
现在总比没有好
这个小格言说,陷入无限循环或永无止境循环的代码比没有陷入无限循环或永无止境循环的代码更糟糕。
虽然永远也不会比现在更好
等待一个程序结束比提前终止它并得到不正确的结果要好。这句格言和上面那句“现在总比没有好”既相似又矛盾。
如果实现很难解释,这是个坏主意
如果你正在向某人解释你的代码,而向你的熟人或同事解释变得很困难,那么你的代码有问题。绝对不简单,很复杂!
如果实现很容易解释,这可能是个好主意
与上面的格言正好相反,这句格言只是说一个简单的,可读的代码很容易解释。如果你能够做到,你就在正确的轨道上。
名称空间是一个非常棒的想法——让我们多做一些吧!
在 Python 中,名称空间基本上是一个系统,每个对象都有一个唯一的名称。这是访问每一个底层对象的好方法。
a = 2
print('id(a) =', id(a))
a = a+1
print('id(a) =', id(a))
print('id(3) =', id(3))
它输出:
id(a) = 9302208
id(a) = 9302240
id(3) = 9302240
Python 组织变量的方式令人难以置信。这就是名称空间很酷的原因!
结论
Python 太神奇了!这就是为什么数百万开发人员使用它,用它编码,用它分析数据,用它建立模型。为它制定的指导方针只是激励程序员编写简单、易读、干净的代码。下次你坐着编码时,试着遵循这些指导方针。
参考文献
编码快乐!
Zoom 数据科学家访谈
图片来自pix abay
Zoom Video Communications,Inc .是一家美国通信技术公司,成立于 2011 年,总部位于加利福尼亚州圣何塞。该公司通过基于云的软件平台提供视频会议和在线聊天服务,有助于转变实时协作体验。与其他竞争对手不同,Zoom 通过由高清视频会议、移动性和网络会议组成的三合一平台提供统一的会议体验。
在 Zoom,数据在理解和改善用户体验方面发挥着不可或缺的作用,数据科学团队是公司成功的基础。最近,Zoom 宣布了一项“智能会议”功能,为其视频会议服务提供自动转录,为用户节省了记录和共享会议笔记的时间。
为了实现这一壮举,Zoom 采用了语音到文本转录:一种基于语音的人工智能技术,利用先进的机器学习技术,可以识别会议中每个人的个人语音模式。正如这项新功能所证明的那样,Zoom 一直在做开创性的工作,为新的甚至是经验丰富的数据科学家提供一个成长平台。
Zoom 的数据科学家角色
图片来自pix abay
Zoom 是一家快速发展的公司,主要依靠数据科学来做出影响增长、推动创新和改善客户体验的决策。数据科学家以及数据工程师、数据架构师、数据分析师和数据库工程师在维护这一标准中扮演着不可或缺的角色。
Zoom 的数据科学家利用数据和数据技术来识别和了解业务趋势和机会,以提高新产品和现有产品以及最终用户的满意度。尽管该公司有一个中央数据科学团队,但个人角色和职能可能略有不同,可以根据团队和分配的产品/项目进行定制。因此,必要的资格可以从标准数据分析和可视化知识到机器和深度学习重技能。
所需技能
虽然 Zoom 为新数据科学家的成长提供了一个大型平台和生态系统,但它也是高技能和经验丰富的数据科学家寻求加入已经在世界范围内产生影响的专业人士行列的原因。平均而言,Zoom 雇佣至少有四年(高级别 6 年以上)数据处理行业经验的专家来帮助决策。
其他相关要求包括:
- 经典机器学习、深度学习、强化学习/控制系统、概率论、统计学、因果推理、时间序列预测、优化和动态编程的实践经验。
- 计算机科学、统计学、经济学、数学、物理、运筹学或其他定量领域的学士/硕士/博士。
- 很强的编程语言技能,尤其是 Python,Scala 和 Java。
- 对分析和可视化工具(如 Tableau)有丰富的经验。
- 具有 SQL、Python 库和 R 的经验,能够执行复杂的模型。
- 具有构建数据管道、高效 ETL 设计、实施和维护的经验。
Zoom 的数据科学家团队
Zoom 的术语“数据科学”涵盖了广泛的领域专业知识,包括数据科学家、数据工程师和数据架构师。虽然有一个专属的数据科学团队,但数据科学家也可以被分配到其他内部团队,或跨职能合作以实现预期目标。团队在整个组织中不断扩大,尽管一般角色有时可能会重叠,但主要职责在很大程度上依赖于所分配的团队。
以下是 Zoom 的一些数据科学团队及其一般职责。
- **数据科学团队:**分析当前的数据设计,以优化和提供结构改进来应对业务增长,并提供见解和新的数据流程来帮助预测建模。其他角色还包括在关键项目上与产品经理、数据工程师、系统架构师和销售/营销团队进行跨职能协作。
- **信任和安全工程:**利用数据识别趋势,进行根本原因分析,并发现潜在的改进机会。设置、监控和维护关键指标,以评估安全计划的服务和有效性。编写复杂的 SQL 查询、R 或 Python 代码来构建数据模型,为分析框架和仪表板提供支持。利用先进的机器学习、计算机视觉和数据挖掘技术来开发高度可扩展的工具、模型和预测增长的算法。作为这个团队的一员,你还可以在关键项目上与内部团队进行跨职能合作,包括产品工程师、产品经理、数据工程师、运营、法律、合规和营销经理。
- **销售分析:**编写 Python 或 R 代码和 SQL 查询来构建模型,以维持分析框架和仪表盘。提供数据卫生和完整性,并基于产品使用和计费数据构建预测模型。角色还包括构建和维护数据可视化,以便在多级组织之间有效地交流关键销售指标和 KPI。
- 数据科学(机器学习):研究、设计和开发新的机器学习解决方案和算法,以开发新功能和改进现有产品。广泛研究数据聚类、分割、过滤、评估、自动化和预测建模,以释放新的增长机会。与工程师、数据分析师和产品经理合作,开发和改进增长模型。
如果你正在寻找更多关于数据科学相邻领域的信息,一定要查看我们关于研究科学家及其在技术中的作用的新文章!
面试过程
图片来自pix abay
面试过程遵循标准的技术招聘流程。首先是在 Zoom 会议上与人力资源部门进行初次面试,然后会给你邮寄一份后续的带回家的挑战。如果您通过了带回家的挑战,您将被邀请到现场与业务主管、人力资源主管和数据科学团队领导进行一系列面试。
初始屏幕
这是一次标准的探索性讨论,由人力资源负责。在整个面试过程中,面试官会告诉你更多关于工作角色、团队和整个公司的信息。你也可以讨论你的技能和你过去参与的项目。
示例问题:
- 给我介绍一个你过去做过的机器学习项目。
- 如果和队友有矛盾你会怎么做?
- 你从现在的职位中学到了什么?
在线数据挑战
在最初的 Zoom 会议之后,你会收到一份带回家的数据挑战,主要由机器学习、数据挖掘和数据结构问题组成。将有多达 15 个问题,分配一个半小时完成。
现场面试
现场面试是面试过程的最后一个阶段。它包括与业务负责人、人力资源负责人和数据科学团队负责人的三轮连续面试。Zoom 的数据科学现场面试是行为和技术面试的混合,旨在测试候选人在数据科学的长度和宽度方面的知识,以及产品感知知识。
问题通常是基于数据集的案例研究,类似于现实生活中的缩放案例,跨越基本的统计概念、机器学习和设计。(使用这些技巧在这里练习您的案例研究。)
缩放数据科学家面试问题
浏览以下步骤并导入所需的 Python 库——不要担心,如果您忘记了一个,可以稍后导入。
2)从 csv 文件加载数据
3)执行基本命令来理解数据
- Bin 具有以下特性:
a)“当前项目”分为[0 至 11]、[11 及更多]
b)进入[0 至 14.99]、[14.99 至 500]、[500 至 5K]、[5K 及更多]的“mrr_entry”
c)“帐户 _ 年龄”分为[0 至 90]、[90 至 180]、[180 至 360]、[360 及更多]
d)将“期限内剩余天数”分为[0 至 30]、[30 至 360]、[360 及更多]
5)将“churn_next_90”设置为您的目标列
6)将“zoom_account_no”设置为 ID 列,这不应该是一个功能
7)将“ahs_date”设置为日期列,这不应该是一个功能
8)将来自步骤(4)的入库特征和以下特征视为分类特征:
a)‘销售组’,
b)‘员工人数’,
c)“核心产品”
9)使用您喜欢的方法和 ML 算法进行特征选择。选择 10 个特征并继续步骤(10)。
10)将新数据帧(具有 10 个特征)分成测试和训练子集
11)使用与第(9)部分不同的算法,并为参数调整执行交叉验证方法。打印出结果。
12)基于来自(11)的结果,在训练子集上拟合你的模型
13)使用测试子集测试您的拟合模型
14)打印来自步骤(13)的特征重要性、准确性得分(roc_auc_score)和混淆矩阵(crosstab)
15)使用 pickle 保存训练好的模型
最终注释和提示
Zoom 数据科学家面试遵循标准的技术面试流程。问题是标准的和定制的——特定于个人角色的要求。面试问题混合了统计学、案例研究、编码、行为和产品意识。
最后,理解视频会议空间并不是必须的,但它有助于了解 B2B 工作空间公司在做什么。这也意味着在微软、Slack 或其他类似公司的背景有助于通过面试。
感谢阅读!
- 如果您想练习更多标准缩放数据科学家面试问题,请查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
- 在面试查询博客上找到更多面试指南,如 罗宾汉数据科学家面试和字节跳动数据科学家面试**。****
原载于 2020 年 10 月 19 日 https://www.interviewquery.com。****
深度学习的理论和实践方面,10 个笔记本/项目,适合初学者
动机
如今,各个工作领域的人都在谈论大数据。但是,它们是什么样的数据呢?它是否只针对一个分类问题处理数百万个数据?还是以无人监管的方式对它们进行聚类?为了理解这一点,让我们看一个简单的例子。谷歌有数十亿用户使用他们的各种服务,手机,应用程序,网络服务等等。谷歌必须分析他们的兴趣和位置,向他们展示合适的广告。通过图像处理将用户的照片和视频聚集在应用程序中,并听取用户的声音以提供更好的虚拟助手,这只是我们在这里可以计数的一些过程。你能想象谷歌一天之内从数十亿用户那里收集数据吗?更有趣的是,谷歌在这一领域并不孤独,其他公司也存在于这一领域,如亚马逊,这是当今最大的电子商务网站。因此,他们应该更频繁地更新服务,因为用户的兴趣和行为每天都在变化。为了处理海量数据,他们需要更强大、更高效的算法。
深度学习允许我们处理各种数据类型,如图像、文本、音频剪辑、视频等。目前,许多应用程序依赖深度学习的能力进行面部识别、对象检测、虚拟助理,甚至音乐创作。如果你知道机器学习,你应该记得一些分类的基本最大似然算法,如逻辑回归(LR),随机森林(RF),或支持向量机(SVM)。同样,线性回归、套索和岭作为回归变量。他们都是伟大的算法,他们救了我们很多次。然而,一些缺点使得它们不如神经网络有效。例如,逻辑回归使用单个 sigmoid 输出函数进行二元分类,当我们有许多参数要处理时,这使得提取更多信息的能力下降。另一方面,SVM 可以使用你的 CPU 中的一个内核,这对于拥有多个内核的 CPU 来说是没有意义的。此外,当出现相对大量的数据时,需要花费很多时间甚至数周来完成训练过程。但是,如果我告诉你有可能通过深度学习创建更高效、更强大的模型,会怎么样呢?由于神经网络,我们可以在几分钟内快速构建许多层和多个单元来评估我们的数据集,而常规的 ML 算法需要几天时间。因此,神经网络加快了游戏的步伐,我们不仅生成了强大而且更有效的模型来处理我们想要处理的几种数据类型。
介绍
在学习过程中,项目覆盖了一个重要的地方,以保持我们的理论知识新鲜,并将我们的理解推向更深的阶段。出于这个原因,实践将与学习各种机器学习模型和技术的理论方面一样重要。在本文中,我想分享一些应用的深度学习项目及其理论方面,我的评估和解释,供初学者和希望在这一领域进行更多实践的人使用。
项目由深度学习领域不同主题的四个知识库组成,包括从密集连接层到 1D 卷积网络的十个笔记本/项目。在本文的最后,我将推荐两个很好的来源,以学习深度学习技术的不同观点以及它们背后到底发生了什么开始。如果你是一个初学者,我强烈建议你在开始纠结这些项目之前先完成两个共享的资源。但是,请耐心阅读这篇文章的结尾,因为当你完成共享资源和本文的项目时,项目的描述可能会让你对你将学到的东西有更好的直觉。
存储库和笔记本
与存储库类似,我想将笔记本放入本文的四个部分中,在每个部分下,笔记本和相应的描述将被共享。先说第一个;
图片来自维基百科
计算机能理解手写的字母或数字吗?为了回答这个问题,我们从美国国家标准与技术研究所(NIST)的数据库中收集了 MNIST 数据集。MNIST 是这个时代最著名的数据集之一。数据集包含灰度 60000 训练和 10000 测试手写数字图像。加载 MNIST 数据集是本笔记本的第一部分。然后,观察图像的阵列表示,以便更好地直观了解模型如何处理图像。在这本笔记本中,数据集已经用一个简单的密集连接的顺序模型进行了评估。然而,就在创建顺序模型之前,通过将每个像素除以 255 对图像进行预处理,然后,创建顺序模型和评估结果的步骤紧随其后。
我们无法总是找到足够大的数据来训练我们的模型,波士顿住房数据集可能是其中之一。在这个数据集中,我们有 506 个住宅样本,其中包括 404 个训练和 102 个测试部分。拥有这样一个有限的数据集为获得小的错误率带来了挑战。在此笔记本中,波士顿房屋的价格已在加载和规范化数据集后通过回归模型进行了预测。在编译模型时,均方误差(MSE)、平均绝对误差(MAE)和均方根误差(RMSE)已作为评估矩阵和损失函数涵盖。由于 Keras 使用随机初始权重和一些其他参数创建模型,这导致每次训练得到不同的结果。为了得到准确的分数,数据被分成 10 部分,并且对于每个步骤,其中的 9 部分被用作训练数据,而 1 部分被用作测试部分。这个过程也被称为 K 倍交叉验证。
事实上,在一部电影上映后,我们会直接寻找关于它的书面命令,以回答它是否真的值得我们花费时间?因此,IMDb 分数和用户命令在电影上映与否中扮演着决定性的角色。作为一个人,不可能阅读和评估每个命令。然而,使用情感分析有助于我们利用计算机的能力来评估所有的命令。对于情感分析的根本解释,它在句子中寻找最常用的词,并在这种情况下确定它是好还是坏。在这本笔记本中,预处理数据的情感分析技术,和惩罚模型与 L2 正则化和辍学,已经涵盖。
Matthew Guay 在 Unsplash 上拍摄的照片
现在随着科技的发展,我们都在手机或者平板上看新闻。虽然像谷歌新闻一样,每个资源中有各种新闻类别,但只有基于我们兴趣的特定主题才会显示给我们。为了主要了解谷歌如何对新闻进行分类并向我们展示,我们将在本笔记本中使用路透社的新闻数据集。路透社新闻数据集包含 46 个不同主题的简短新闻专线,如技术、经济等。它由路透社于 1986 年出版。在这本笔记本中,新闻专线已经使用情感分析技术进行了分类,具有密集连接的层和辍学。
对于人类来说,即使在很小的时候,也很容易区分物体并进行分类。然而,从计算机的角度来看,这个过程并不容易。为了赋予机器这种能力,我们使用 NxN 矩阵作为过滤器,在卷积神经网络中从图像中捕捉不同的模式。因此,计算机可以根据物体的形状和颜色来区分它们。此外,当在卷积层中使用更多的滤波器时,由 ConvNets 发现的模式数量增加。
之前,MNIST 数据集仅使用密集连接的图层进行评估。在基于卷积的结构中,模型只比较数字,并试图找到它们之间的统计意义。然而,使用 ConvNet 性能很好,因为它以可视化的方式处理图像,以提取更多的模式。在本笔记本中,卷积层和池层将用于捕捉 digit 的图像模式,以获得更好的准确性。
狗对猫,以及他们的战斗…在这本笔记本中,我们将从图像中对猫和狗进行分类。原始的狗与猫数据集包含 25000 个带标签的猫和狗图像,在 Kaggle 中每类 12.500 个。⁴:但是,我们将只用其中的 4000 台。放心吧!Keras 有很多内置的函数和类,让我们的生活变得更加轻松。ImageDataGenerator 是其中之一,可以简单地从具有给定形状的目录中加载数据集。此外,当我们没有足够的数据来训练我们的模型时,它还应用数据扩充。此外,您可以从 Keras 加载并使用预训练的模型进行迁移学习。在本笔记本中,涵盖了数据扩充、从预训练模型中提取特征以及微调主题。
通常,人们认为没有办法将 ConvNets 可视化。但是,如果我告诉你,有可能看到卷积网络是如何观察我们的世界。从 ConvNets 的激活功能中提取模式有助于我们检查它们如何从图像中学习。此外,我们还可以检测他们在看哪里,以预测图像的目标。在这本笔记本中,这些图案被提取出来作为视觉效果。
词语嵌入 ⁵
在情感分析中,模型只是在句子中寻找单词的出现。由于这个原因,我们可以很容易地通过写单词的同义词来愚弄他们,因为他们倾向于偏向某些单词。还有,他们对“不好”、“不坏”等词的连接不敏感。为了防止这种情况,今天研究者和从业者大多使用单词嵌入技术。因为单词嵌入可以让我们通过为每一个单词设置多维权重向量来赋予单词意义,使它们像男人→国王,女人→女王一样接近。在这个笔记本中,预训练的“手套”字嵌入用于嵌入层。⁶然后,用它来评估 IMDb 数据集。
气温预报 ⁷
图片来自伯克利 CS188:人工智能简介
在本笔记本中,我们将看到一个在您的设备上使用温度预测应用程序的示例。我们将了解他们实际上是如何预测未来温度的,以及我们应该对这些类型的序列数据集应用何种预处理技术。为了这个问题,从 2009 年到 2016 年,Jena Climate 每 10 分钟收集一次数据集。每个样本有 14 个参数,如空气温度、压力、湿度等 11 个参数。在本笔记本中,已经创建了生成器功能来准备具有相应目标的训练、验证和测试数据。此外,门控递归单元(GRU),⁸,这是最常见的 RNN 算法之一)也包括在内。
虽然最常见的 RNN 算法,如长短期记忆(LSTM)和门控递归单元(GRU)在记忆 sequences,⁹方面做得很好,但在长序列中训练它们在计算上是昂贵的。由于这个原因,1DConvNets 用于从序列中捕获一些模式,并通过减少像 2DConvNets 这样的 RNN 层的输入参数来带来更高的计算效率。因此,1DConvNets 和 LSTM 在 Keras 中的实现已经包含在本笔记本中。
建议和结论
在结束本文之前,我想提一下两个很好的资源。其中一个是 Andrew Ng 的“深度学习专业化”,其中包含 5 个非常棒的课程,通过⁰的 homeworks 提供深度学习技术的理论方面,另一个是 Francois chollet(keras 的创作者)的“用 Python 进行深度学习”,这是一本非常好的书,我主要用来准备笔记本和撰写本文。
简而言之,在这个故事中,我们看到了深度学习的各种观点,从简单的分类问题到未来预测。在当今由大数据管理的世界中,深度学习是处理几种数据类型的重要时代。如今,我们不仅使用数据来对一些东西进行分类,我们还使用它们通过生成网络来生成图像、视频剪辑和人声。对于深度学习的未来,最近已经采取了在医学中使用它的步骤,例如从乳腺组织病理学图像中诊断乳腺癌或从 X 射线图像中检测肺癌。但还是有更多的东西等着你去发现。此外,我们可能会在空间科学领域看到更多。由于 Space-X 的猎鹰 9 号项目具有可重复使用的两级火箭设计,现在,从火箭起飞到分离模块自动着陆,都可以使用机器学习能力。
参考资料:
1.https://keras.io/api/datasets/mnist/
2.【https://keras.io/api/datasets/reuters/ 号
3.泽勒医学博士和弗格斯研究中心(2014 年 9 月)。可视化和理解卷积网络。在欧洲计算机视觉会议(第 818-833 页)。斯普林格,查姆。
4.https://www.kaggle.com/c/dogs-vs-cats
5.Mikolov,Chen,k .,Corrado,g .,& Dean,J. (2013 年)。向量空间中单词表示的有效估计。 arXiv 预印本 arXiv:1301.3781 。
6.Pennington、r . Socher 和 c . d . Manning(2014 年 10 月)。Glove:单词表示的全局向量。在2014 年自然语言处理经验方法会议论文集(第 1532-1543 页)。
7.https://S3 . Amazon AWS . com/keras-datasets/jena _ climate _ 2009 _ 2016 . CSV . zip
8.Chung,j .,Gulcehre,c .,Cho,k .,和 Bengio,Y. (2014 年)。门控递归神经网络在序列建模中的经验评估。 arXiv 预印本 arXiv:1412.3555 。
9.Hochreiter,s .,& Schmidhuber,J. (1997 年)。长短期记忆。神经计算, 9 (8),1735–1780。
10.https://www.coursera.org/specializations/deep-learning
11.https://www.manning.com/books/deep-learning-with-python
心智理论和人工智能
AI 能理解人类甚至自身的行为吗?
Liam Charmer 的照片
我们的大脑是一个复杂且尚未被完全理解的系统。只要有书面证据可以证明,哲学家们就一直在努力弄清楚我们的大脑是如何运作的。在这种情况下,可能出现的一些最有趣的问题与发现他人(甚至自己)头脑中正在发生的事情的可能性有关。给定足够多的可观察变量,人类行为是可预测的吗?
这种思考刺激心理学家发展出所谓的“心理理论”(ToM),正如 AI Goldman 所描述的[1]:
“心理理论”是指将心理状态归因于自我和他人的认知能力。同样能力的其他名称包括“常识心理学”、“天真心理学”、“民间心理学”、“读心术”和“心理化”。[……]他们[人]或他们的认知系统,是如何对他人的精神状态,即无法直接观察到的状态,形成信念或判断的?
提出了不同的经验测试(例如[2],[3]),以检查可观察的输入是否可以导致精神状态预测,以及了解精神状态是否允许预测未来的行动(行为)。虽然心理学家仍在争论理解人类的心理状态是否可能,但汤姆已经吸引了人工智能研究人员的注意。
心智理论和人工智能
Jr Korpa 拍摄的照片
人工智能在过去十年中发展迅速,利用了增加的计算能力,特别是深度神经模型取得的突破。虽然这种结果很强大,但在特定的环境中是可以实现的,而且所获得的模型只能在它们被设计为擅长的任务中表现良好。下一步将是设计一个能够处理各种不同问题的人工智能,并在与不同实体互动的同时进行学习,正如机器人领域 10 大公开挑战中的 2 个所强调的那样[4]:
(vi)机器人学人工智能(AI)的基本方面,包括学习如何学习,结合高级模式识别和基于模型的推理,用常识开发智能。
(八)社会互动了解人类社会动态和道德规范,能够真正融入我们的社会生活,表现出同理心和自然的社会行为。
将 ToM 的概念和思想与合成智能系统相结合已被证明是解决这些问题的可行选择,并且在考虑多智能体 AI 系统和人机交互问题时变得尤其相关。在这个前提的基础上,已经建立了不同的工作,例如,在[5]中使用贝叶斯 ToM 框架,甚至在[6]中使用逆向强化学习来“逆向工程”可观察的行为。下面我对 DeepMind 和谷歌大脑的研究人员提出的一种不同的方法进行评论。
ToMnet
在[7]中,作者描述了被称为心理机器理论的东西。其思想是将 ToM 视为一个元学习问题(即学会如何学习),以实现一个人工系统,该人工系统具有关于它以前从未见过的代理将如何行为的先验知识,并收集关于该代理如何与环境交互的数据,以创建包含特定代理行为的特殊性的个体模型。
与其他方法不同,目标是使用有限的数据自主学习,而不是断言一个生成模型,观察代理的行为,并对其算法进行逆向工程。实验包括 ToMnet 与 gridworld 中遵循不同策略的代理交互,在 grid world 中,每一步都可能有一组离散的可能动作。首先,代理遵循一个随机的策略,然后代理被训练有对环境的完全可观测性,最后代理被训练有不同种类的部分可观测性。
结果表明,ToMnet 实现了它的目标:当观察新的代理时,学习适用于平均行为和特定模型的通用模型。不幸的是,在更具挑战性的情况下,代理之间需要相当大的通信信道来实现这样的结果。随着模型和方法的进一步改进,预计在处理更复杂的环境和代理之间没有直接通信的情况下,将获得同样令人印象深刻的结果。
这项工作和其他作者结合心智和人工智能理论概述的可能性令人着迷。毕竟,能够理解复杂人工系统的行为可能是理解我们大脑的重要一步。
参考
[1] Goldman,Alvin I .《心理理论》《牛津认知科学哲学手册》 1 (2012)。
[2]拜伦-科恩、西蒙、艾伦·m·莱斯利和乌塔·弗里斯。"自闭症儿童有“心理理论”吗?"认知21.1(1985):37–46。
[3]维默、海因茨和约瑟夫·佩纳。"关于信念的信念:错误信念在幼儿理解欺骗中的表征和约束作用."认知13.1(1983):103–128。
[4]杨,光忠,等.“科学机器人学的重大挑战”科学机器人 3.14 (2018): eaar7650。
[5]贝克、克里斯、丽贝卡·萨克斯和约书亚·特南鲍姆。"贝叶斯心理理论:联合信念-愿望归因建模."认知科学学会年会论文集。第 33 卷。№33.2011.
[6] Ng、Andrew Y 和 Stuart J. Russell。“逆向强化学习的算法.” Icml 。第一卷。2000.
[7] Rabinowitz,Neil C .等人,《机器心理理论》 arXiv 预印本 arXiv:1802.07740 (2018)。
主成分分析理论及其在 Python 上的实现
来源: summitlife
主成分分析背后的原理和数学以及在 Python 上的实现
当处理一个包含大量数据的复杂科学项目时,其中每个例子都由许多特征描述,您可能想要可视化数据。事实上,在 1D、2D 或 3D 中可视化很容易,但如果你想可视化由 100 个特征组成的数据,你在 100D 中看不到任何东西。所以你必须降低维度,把你的数据放在一个维度等于或者小于 3D 的空间里。这可以使用主成分分析(PCA)来完成。PCA 的另一个非常好的用途是加速你的机器学习算法的训练过程。你的特征越多,你的机器学习算法就越复杂,它需要学习的参数就越多。因此,计算时间将越长。现在,很明显,如果你减少数据的大小,学习算法所需的时间将会大大减少。但是,您可能会想,如果我们减少变量的数量,那么我们将会丢失数据中的大量信息,结果也将完全不准确。这是 PCA 算法的主要挑战,我们将在本文中看到如何确保良好的准确性。
为了说明这种情况,我将使用 MNIST 数据库是一个手写数字的大型数据库。
在本文中,我将向您展示 PCA 背后的理论以及如何在 Python 上实现它。我也会给你一些何时使用这种方法的提示。
主成分分析背后的数学
在主成分分析算法中,目标是找到投影数据的 k 个向量,以便最小化投影误差。这 k 个矢量将是投影数据的 k 个方向。这里,k 对应于你的最终维度:如果你想在一个 2D 维度空间中查看你的数据,那么 k 将等于 2。
我们如何找到这些 k 向量?
让我们称为 描述我们的数据的矩阵。PCA 涉及将相互依赖的变量(在统计学中称为“相关的”)转换成彼此不相关的新变量。这些变量被称为主成分,将描述数据所传达的信息。我们需要查看协方差矩阵,因为协方差是两个随机变量的联合可变性的度量。但是为什么要协方差呢?让我们想想如何从数据中学习。你看着均值,变量是如何远离或接近均值的。这本质上是协方差:与平均值的偏差。因此,在主成分分析中,我们必须计算数据矩阵的协方差,并寻找收集最多信息的方向或向量,以便我们可以保留 PI 并去除其余的。但事情并没有那么简单,我们将一步一步来看,看看我们是如何做到的。
1.数据的标准化
该步骤的目的是标准化连续初始变量的范围,以便它们中的每一个对分析的贡献相等。
更具体地说,在 PCA 之前进行标准化是至关重要的,因为后者对初始变量的方差非常敏感。也就是说,如果初始变量的范围之间存在较大差异,则范围较大的变量将优于范围较小的变量(例如,范围在 0 和 100 之间的变量将优于范围在 0 和 1 之间的变量),这将导致有偏差的结果。因此,将数据转换为可比尺度可以防止这个问题。
数学上,这可以通过减去每个变量的每个值的平均值并除以标准偏差来完成。回想一下,Ais 是描述我们的数据的矩阵,因此每行是一个例子,每列是一个特征。让我们设定 n 等于特征的数量 et m 等于示例的数量。因此矩阵 A 是一个矩阵 mxn。
2.协方差矩阵和对角化
协方差矩阵由以下公式给出:
然后,我们需要对角化协方差矩阵。我们称 S 为对角矩阵。u 和 V 将是变换矩阵。因此,我们有:
如果你听说过 PCA,你可能听说过 SVD 。SVD 用于奇异值分解,这就是我们在 A 上应用的内容。SVD 理论表明,矩阵 A 存在以下分解:
其中 U 和 V 是分别从 aa***【ᵀ】和 a【ᵀa】中选择的具有标准正交特征向量的*正交矩阵。***s’*是对角矩阵,其中 r 元素等于 XX ᵀ 或 X ᵀ X. 对角元素由奇异值组成。
并且我们有 S’ = S. 下一步是重组特征向量以产生 U 和 V. 为了标准化解决方案,我们对特征向量进行排序,使得具有较高特征值的向量出现在具有较小值的向量之前。
与特征分解相比,奇异值分解适用于非方阵。 U 和 V 对于 SVD 中的任何矩阵都是可逆的。
3.降维
降维的思想是保留 k 个最能描述数据的特征向量。因此,我们有:
然后我们添加零空间,它已经与第一个 r v 和 u 正交,从简化 SVD 到完全 SVD。
4.如何选择 k 个特征向量
我们需要应用一个公式来保持总方差的某个百分比。假设我们希望保持方差的 99%,那么我们有如下结果:
现在我们已经看到了 PCA 背后的数学原理,我们将在 Python 上实现它。
Python 上的实现
我们将使用的数据集在这里可访问。因此,首先我们导入数据和我们需要的不同库。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pylab as plt# import the data
data = pd.read_csv("train.csv")# some pre-processing on the data
labels = data['label'].head(1500) # we only keep the first 1500 *#* Drop the label feature and store the pixel data in A and we keep
# only the first 1500
A = data.drop("label",axis=1).head(1500)
1.数据的标准化
from sklearn.preprocessing import StandardScalerstandardized_data = StandardScaler().fit_transform(A)
2.协方差矩阵和对角化
首先,我们计算 a 的协方差矩阵
covar_matrix = np.matmul(standardized_data.T , standardized_data)
然后,我们计算特征值和相应的特征向量。但是这里我们只计算最高的两个。
*# the parameter 'eigvals' is defined (low value to heigh value)*
*# eigh function will return the eigen values in ascending order*
values, vectors = eigh(covar_matrix, eigvals=(782,783))
然后,我们将原始数据样本投影到由我们刚刚计算的两个主特征向量形成的平面上。
new_coordinates = np.matmul(vectors.T, sample_data.T)
然后,我们将标签附加到 2d 投影数据,并创建一个数据帧,然后使用 seaborn 并绘制带标签的点:
new_coordinates = np.vstack((new_coordinates, labels)).T
*# creating a new data frame for plotting the labeled points.*
dataframe = pd.DataFrame(data=new_coordinates, columns=("1st_principal", "2nd_principal", "label"))# plot
sn.FacetGrid(dataframe, hue="label", size=6).map(plt.scatter, '1st_principal', '2nd_principal').add_legend()
plt.show()
类别之间有很多重叠,这意味着 PCA 不太适合高维数据集。很少几个阶层可以分开,但大多数都是混合的。 PCA 主要用于降维,不用于可视化。为了可视化高维数据,我们通常使用 T-SNE。
我们也可以使用 Python 中的 PCA 模块来实现:
*# initializing the pca*
**from** **sklearn** **import** decomposition
pca = decomposition.PCA()*# configuring the parameteres*
*# the number of components = 2*
pca.n_components = 2
pca_data = pca.fit_transform(standardized_data) pca_data = np.vstack((pca_data.T, labels)).T
*# creating a new data frame which help us in plotting the result data*
pca_df = pd.DataFrame(data=pca_data, columns=("1st_principal", "2nd_principal", "label"))# plot the data
sns.FacetGrid(pca_df, hue="label", size=6).map(plt.scatter, '1st_principal', '2nd_principal').add_legend()
plt.show()
3.降维
在这一节中,我们想找到描述我们的数据所需的特征向量的数量。因此,我们需要计算每个特征值的显著性,然后计算累积方差。我将特征值的重要性定义为:
**# initializing the pca**
from sklearn import decomposition
pca = decomposition.PCA()
**# PCA for dimensionality reduction (non-visualization)**pca.n_components = 784
pca_data = pca.fit_transform(standardized_data)# then we calculate the significance but the absolute value is not necessary as the eigen values are already positive
significance = pca.explained_variance_/ np.sum(pca.explained_variance_)cum_var_explained = np.cumsum(significance) *# Plot the PCA spectrum*
plt.figure(1, figsize=(6, 4))
plt.clf()
plt.plot(cum_var_explained, linewidth=2)
plt.axis('tight')
plt.grid()
plt.xlabel('n_components')
plt.ylabel('Cumulative_explained_variance')
plt.show()
4.如何选择 k 个特征向量
让我们回顾一下我们在第一部分看到的内容:
因此,我们绘制了该分量方差的累积和。这里 300 个成分解释了几乎 90%的差异。所以我们可以根据要求的方差来降维。
主成分分析法的优点和用途
PCA 是一种降维的方法,但是可以要求成分独立:独立成分分析 ( ICA )。
PCA 是一种无监督线性方法,大多数无监督技术并非如此。
由于 PCA 是一种降维方法,它允许将数据投影到 1D、2D 或 3D 中,从而将数据可视化。这对加速训练过程也非常有用,因为它大大减少了特征的数量,从而减少了参数的数量。
我希望你已经找到了你在这篇文章中寻找的东西,并祝你未来的项目好运!
如果你喜欢阅读这样的故事,并想支持我成为一名作家,考虑注册成为一名灵媒成员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你注册使用我的链接,我会赚一小笔佣金,你仍然要支付 5 美元。谢谢大家!!
阅读乔纳森·莱班的每一个故事(以及媒体上成千上万的其他作家)。您的会员费直接支持…
medium.com](https://medium.com/@jonathan_leban/membership)
PS:我目前是伯克利的工程硕士学生,如果你想讨论这个话题,请随时联系我。 这里的 是我的邮箱。
没有事实,只有解释
冠状病毒危机说明了了解您的数据的重要性
弗里德里希·尼采,数据专家(图片版权 Adobe)
“没有事实,只有解释”,不管怎么说,这是尼采的观点。这可能看起来很奇怪:数据,以其明显的精确性、结构性和清晰性,可能看起来就是客观确定性的定义,但那是一种错觉。现实是,数据总是收集数据的人如何看待世界的主观和不完美的表达。
冠状病毒的爆发就是一个很好的例子。一方面,这是一场极其明显的危机。病例和死亡人数每天都在公布,开源数据集可供任何人分析和建模。然而,尽管如此,即使是最基本的问题也很难找到好的答案。
在这篇文章中,我将概述我在思考数据时使用的一些问题,然后将它们应用于开源冠状病毒数据集,以了解它们如何影响我们回答一些常见问题的能力:病毒有多危险,政府在管理危机方面做得如何?
关于数据的问题
如果你不监管你的数据,没人会监管。马特·波波维奇在 Unsplash 上的照片
为什么要收集这些数据?
在收集数据时,必须做出许多决定,包括收集什么,遗漏什么,以及如何解释各种情况。理解为什么要收集数据,对于帮助你理解导致这些数据出现在你面前的决策是至关重要的,并且应该支配你对这些数据的思考方式。由试图向你推销某种东西的人建立的数据集应该与由更中立的人建立的数据集有所不同。为关键流程或基础设施提供数据的数据集不同于在服务器上放置了一两年而无人查看的数据集。
而且,不知道为什么,你会一直问自己“等等,他们为什么要这么做?!"当你在数据中发现各种各样的小精灵和奇怪的东西时。
数据有多完整?
没有真正“完整”的数据集,因为数据创建过程必然涉及决定不收集关于某些实体或这些实体的属性的信息。总是有更多的事情可以衡量,所以思考数据中你没有看到的和你看到的是至关重要的。
通常,您将处理抽样数据,因为收集整个人口的数据要么不可行,要么成本太高。在这种情况下,理解如何以及为什么以这种方式对数据进行采样,以及所选择的采样方法的一致性是至关重要的。通常,为用途 A 选择的采样方法使其对用途 B、C 和 D 无效,我们将在稍后考虑冠状病毒死亡率时看到这一点。
数据收集过程有多准确?
数据准确性会受到任何因素的影响,包括测试准确性、生成数据的系统的稳定性,或者人工数据收集者的知识和动机。请记住,仅仅因为数据都在同一个表中,就不能保证它们都同样准确;一些可能维护得很好,很精确,而另一些却一团糟。
人为错误或偏见是如何进来的?
有时候,收集数据的人知识渊博、细心、资源丰富,并且有足够的时间做好他们的工作。其他时候那是…事实并非如此。类似地,在有强烈动机看到某些结果的地方,许多人很难完全抵制将数据推向那个方向的冲动。然后总是有好的老式欺诈…
数据收集是否一致?
以上几点都不一定随着时间、地点或数据收集者而一致。数据收集团队的新领导或利益相关者可能意味着数据收集政策的改变。不断发展的技术或更广泛的背景可能会改变数据收集的方法或规模。它也可能只是一个简单的错误,在 6 个月内发现,修复不能追溯。
冠状病毒数据
“我们的数据世界”网站有很多优秀的图表,这些图表每天都来自于“T2”欧洲疾病预防和控制中心。还有其他网站,但它们都有相似的来源:按国家收集的报告病例和死亡病例。
为什么要收集这些数据?
在这种情况下,数据主要由每个国家的卫生当局收集,以告知相关国家政府病毒是如何传播的,以及对其卫生服务造成的压力。
这意味着数据往往侧重于影响卫生系统的病例,更适合每个国家政府的需要,而不是着眼于全球一致性。这并不是说没有调整实践的努力,但国家政府的需求将是第一位的。
数据有多完整?
众所周知,在许多国家,检测的可获得性有限,因此数据远不具有代表性。顺便提一句,这一点在确定国家处于感染曲线的哪个位置时至关重要:它们达到峰值了吗,还是已经超出了它们的检测能力?
测试通常不是随机进行的。相反,只有出现症状的病例(有时只有非常严重的症状)才会接受检测。这使得任何关于死亡率的推论都非常可疑。
同样,在死亡统计上,不同的国家对冠状病毒死亡的统计也不同。一些人只统计了住院死亡人数,其他人则包括护理院和其他非住院死亡人数,这可能会对总数产生非常大的影响。
数据收集过程有多准确?
没有一种病毒测试是完全准确的,冠状病毒测试和其他任何测试一样都有假阳性和假阴性率。有许多可用的测试,其中一些似乎比另一些更不准确,所以我们需要小心的比较使用不同测试的人群。
另请注意,此数据中的日期粒度是根据报告日期确定的,这可能会给出一个奇怪的工作日/周末周期,因为并非所有来源都在周末报告(不,病毒不会在周末休息)。
人为错误或偏见是如何进来的?
疫情是一场巨大、可怕的全球性危机,在这场危机中,本已捉襟见肘的卫生基础设施正在迅速适应巨大的问题。错误是意料之中的。
一些国家的报告做法可能也不完全透明。例如,淡化数字的指责指向了中国和俄国。
数据收集是否一致?
不同国家(或州)的数据收集并不一致:不同的测试策略、不同的测试和不同的死亡测量方法都意味着我们通常不会进行比较。这并不是说,努力保持指标一致的国家之间的指标永远不具有可比性,但我们应该假设情况并非如此,直到出现其他情况。
我们还预计,随着更多(更好)测试的出现,以及政府调整其指标以更好地反映他们对危机的理解,一个国家内的指标会随着时间的推移而变化(例如,在报告的总数中包括养老院死亡人数)。
总之,这是一组非常粗略的数据,我们需要非常小心地从中得出结论。让我们来看几个问题,看看这对我们得出结论的能力有什么影响。
冠状病毒有多危险?
在我们深入研究之前,值得注意的是,这种病毒的感染率和死亡率与你在疫情的个人风险不同。如果你足够幸运躲过了病毒,但却遭遇了一场车祸,通常需要 5 分钟才能到达的救护车花了 50 分钟才到达,你很可能成为疫情的受害者,如果不是病毒的话。这些“附带”死亡并非微不足道,早期分析表明它们可能是许多国家报告死亡人数的两倍或更多(尽管其中一些将是上文提到的未报告的病毒死亡)。
此外,这个问题隐含地假设有一种病毒株有一个死亡率,而可能有多种病毒株有不同的死亡率。
尽管如此,还是让我们把注意力放在病毒本身的死亡率上。快速浏览一下 4 月 21 日的数据报告中的世界,我们看到 169859 例死亡和 243 万例病例;这给了我们 7.0%的死亡率。
正如我们已经提到的,事情并没有那么简单。由于政府如何管理检测,使用何种检测,以及如何记录死亡人数,病例和死亡人数都严重失真。理清这些扭曲对全球数据集的影响将非常棘手,如果不是不可能的话。
当然,我们会及时回答这个问题,研究已经在进行中(谢天谢地,死亡率比 7% 低得多)。我的观点是,即使我们手边有大量每日更新的全球数据,我们仍然会得到可能相差一个数量级的答案。相反,对于这个特殊的问题,我们需要精心制作一个定制的数据集,一个随机抽样和一致跟踪的数据集。
让我们试试另一个问题,看看我们的进展是否更好。
政府应对危机的能力如何?
如上所述,重点通常是直接由冠状病毒导致的死亡,所以如果一些反病毒措施无意中导致其他地方的死亡,我们需要一段时间才能知道。不过,现在让我们先把这个问题放在一边,再次关注病毒死亡率。此外,关于我们是否应该比较绝对数字或每百万死亡/病例数,也有一些争论。鉴于我对比较瑞士(人口 900 万)和美国(人口 3.28 亿)很感兴趣,我将从人均水平来看:
数据来自:https://ourworldindata.org/coronavirus(快照拍摄于 2020 年 4 月 19 日)
正如广泛报道的那样,西班牙显然正处于艰难时期。英国、法国和意大利的曲线几乎完全相同。美国还没有达到西班牙、意大利或英国的梯度。瑞士看起来像德国,但更糟,韩国仍然是积极的局外人。
那么,对于这些国家之间不同的战略和能力,我们能得出什么结论呢?除了告诉每个人要像韩国那样(提前做好充分准备),很难对他们措施的有效性做出有信心的判断,锁定“实力”和死亡人数之间没有明显的模式。如前所述,我们不知道不同的数据收集做法如何加剧或隐藏这些国家之间的差异。
此外,为了正确回答这个问题,我们需要大量的额外数据,以了解人口密度、病毒变异、人口统计数据、吸烟率、气候等因素在多大程度上影响了传播和死亡率,以及那些可归因于政府政策的因素,如检测、口罩、封锁和社会距离。只有当我们控制了这些因素后,我们才能指出具体的决策和政策,看看它们真正产生了什么样的影响。
这里的要点是不要让无能的政府逃脱责任;一些政府似乎确实在方向盘上睡着了。更确切地说,关键是尽管我们手边有大量的数据,但我们发现自己需要更多的背景和不同的数据来正确回答这个问题。
所有的装备,不知道
我们越来越幸运地拥有大量的数据和很酷的工具。虽然这是一件很棒的事情,但它肯定会让我们更容易陷入分析和数据科学的最糟糕的习惯:跳入我们并不真正理解的数据,并快速制作一堆很酷的图表和指标来展示给所有人。
虽然不是特别性感,但花几个小时(是的,几个小时)真正理解你正在处理的数据,以及它与你试图解决的问题的关系,是伟大的分析和,嗯,看起来闪闪发光的垃圾之间的区别。您会惊讶地发现,您开始处理的数据实际上根本不是您需要的。
数据科学就像烹饪,神奇之处在于配料。照片由西德·瓦克斯在 Unsplash 上拍摄
我希望这篇文章中列出的问题有助于你完成这个过程。毫无疑问,它们并不详尽,您可能有自己喜欢使用的。底线是:不要将数据视为客观事实,而更像是创建数据的人认为在当时记录重要且可行的东西的反映。换句话说,分析和数据科学就像烹饪,你可以让几乎任何东西在锅里冒泡,但如果你没有正确选择配料,你可能不想吃结果。
没有像应用数据科学这样的数据科学
FastAI 的杰瑞米·霍华德如何向我推销面向大众的应用数据科学
介绍
前阵子我听了莱克斯·弗里德曼对法斯泰的杰瑞米·霍华德的采访。在那次采访中,他分享了自己的激情:让神经网络变得非常容易使用,从而让更多的人能够接触到它们。他认为,通过增加试图解决相关问题的人数,从长远来看,更多的问题将会得到解决。他引用的例子是一位精通技术的医生使用深度学习来解决具体的医疗问题。
在这篇文章中,我想阐述我认为一个可访问的应用深度学习平台需要什么。此外,我想深入研究更基础的研究和应用深度学习之间的关系。
照片由 Antoine Dautry 在 Unsplash 上拍摄
是什么让深度学习系统变得触手可及
抽象层次
一个可访问的系统需要正确处理的最重要的方面之一是接口的抽象层次。对于术语抽象,我指的是用户在使用深度学习系统时必须处理的信息的数量和类型。从用户那里抽象出不需要的信息和细节使得信息负载更易于管理。哪些信息被认为是不需要的,这当然是设计这种界面的关键挑战。
例如,当我们训练一个 CNN 来执行图像识别时,应用用户不需要知道梯度下降如何精确地拟合神经网络的系数。如果有好的自动评估方法,也不应该要求用户调整神经网络内部的设置。当然,在理想的系统中,如果用户需要,可以访问底层细节。
软件管理的稳定性和易用性
安装和更新系统应该很容易。此外,软件应该非常稳定和可预测。奇怪的错误和意想不到的行为是不关注 it 的用户的祸根:他们只是想完成工作,而不是花几天时间小心翼翼地建立一个工作系统。
最近钻研强化学习,结果用了试剂。该系统比研究人员编写的代码进步了一大步,但它肯定不是一个像 sklearn 那样可访问且健壮的系统。如果你不能全身心投入到试剂中,那么缺乏可及性会使你很难工作。这限制了我的可用性,因为我一周只能奉献一天。将深度学习工具交到兼职用户手中,尤其是领域专家,有很大的潜力让很多现实世界的问题得到解决。
合理的资源使用
从较小的数据集和回归等工具到较大的数据集和深度学习,所需的计算资源量呈指数级增长。大公司和研究小组可以投资大量的这种计算,但这对于普通用户来说是不可行的。FastAI 的一个关键设计原则是,它应该在单个 GPU 上运行,这使得投资变得可行,因为您只需要一台像样的游戏或工作站 pc。
基础研究呢
随着所有这些关于应用深度学习重要性的讨论,核心研究呢?霍华德的一个挫折是,深度学习研究社区过度关注算法的小增量更新。让学习过程加快百分之五,稍微调整一下网络架构以提高性能。他真的想解决现实世界的问题,而不是拘泥于细枝末节。
当然,如果没有研究,所有花哨的算法和工具都不会首先存在,让 FastAI 捡起来。在我看来,我们两者都需要:研究人员发明解决问题的新方法,行业人士和领域专家可以采用这些工具,并将它们应用到新的环境中。像 FastAI 这样的工具对帮助行业和领域专家做到这一点大有帮助。
最后,你对可访问的深度学习系统有什么想法?我们应该把这些工具放在群众手中,还是应该留给专家?
如果你喜欢这篇文章,你可能也会喜欢我的一些更长的文章:
在桑港,年轻选民并不过剩
获胜的工人党团队缺乏特殊的人口优势——这对他们来说是个好兆头
许多最近 关于 2020 年新加坡大选结果的评论都集中在新加坡国会选区的结果上,由相对年轻的候选人组成的反对党工人党(WP)团队出人意料地获得了一个新的 4 人团体代表选区(GRC ),这被预示为与有争议的选区有有益的人口结构匹配。该团队年龄最大的候选人 Jamus Lim(44 岁)和最年轻的 Raeesah Khan(26 岁)在某种程度上代表了更大的竞选轨迹本身,jam us 在竞选开始时的电视辩论中真诚的理想主义赢得了广泛的赞誉,而 Raeesah 在竞选结束时的社交媒体帖子中关于种族和宗教偏见的指控可能适得其反,反而暴露了更大的系统性歧视问题。 言论管制的不公平和其他权力失衡在新加坡政治中,这些问题被认为对年轻选民有着特殊的共鸣。 但是,事实上,年轻的选民在全国范围内从执政的人民行动党(PAP)中脱颖而出,并在选举结果中证明了对 Sengkang 的决定性作用,因为他们在那个选区应该占主导地位?
将选区映射到人口统计数据
确定新加坡选区的人口构成有点棘手,因为选区的界限会随着每次选举而变化,政府机构公布的数据也不符合这些选区。但是,可以执行粗略的映射。统计部门每年公布新加坡常住人口的人口统计数据,这些数据被划分为由新加坡城市规划机构——新加坡城市再发展局(URA)划定的所谓的规划区。每个规划区可以进一步细分为子区。使用地理空间软件,当选举边界与这些分区的边界重叠时(两者都是公开 可用,人们发现选举分区大体上可以被表征为分区的集合。在下面的例子中,我们可以看到,僧康镇 GRC 实际上由 Anchorvale、Compassvale、Rivervale 和僧康镇中心的规划分区组成。
由 Sengkang GRC 界定的分区(黄色)。红色代表选区边界,灰色代表分区边界
这种映射绝不是精确的——人们发现分区边界经常渗透到其他选区。然而,这些不一致很少是致命的。我们可以使用一个简单的经验法则——如果分区的至少大部分可以在选举区内划定,并且分区的划定区域居住有住宅物业(如 URA 总体规划覆盖图所确定的),则分区被包括在内。因此,Compassvale 分区包含在 Sengkang GRC 内,尽管其部分区域延伸至邻近的 Ang Mo Kio 选区,因为这些区域不包含住宅物业。
由 Sengkang GRC 界定的分区(黄色)。蓝色多边形表示 Plan 2014 年土地利用总体规划划定的居住区
(为了透明和可再现性,我已经 发布了我的映射 ,如果有任何争议,您可以在评论中联系我。)
由于统计局按分区公布人口数据,一旦绘制地图(一个相当繁琐的手工过程)完成,通过汇总过程确定每个选区的人口构成就变得相当简单(只要有所需的人口特征)。这样,我们就可以计算出一个选区中属于每个主要年龄组的居民的比例。我使用了以下简单的三方约定:
- **年轻选民:**20 *至 35 岁(含)的常住人口
- **老年选民:**65 岁及以上常住人口
- **中年选民:**35 岁至 65 岁的常住人口
年轻居民,而不是年轻选民
根据 2018 年公布的统计数据,我们发现,作为该选区总常住人口的一部分,与 WP 竞争的其他选区相比,甚至在全国范围内:
WP 竞选选区中 20-35 岁居民的比例
20 岁至 35 岁的居民占参康选区的 21.1%,与 WP 竞争的其他选区相似,与全国 20.7%的比例没有太大差别。有人可能会说,我对年轻选民的定义是限制性的,我们还应该包括 35-40 岁,甚至 40-45 岁的年龄段:
WP 竞选选区中 20-45 岁居民的比例
我们在这里开始看到一些分离,与全国 35.9%的年龄在 20 到 45 岁之间的居民相比,在僧康有 39.7%的居民。但是,所有这些选民真的够“年轻”吗?更确切地说,桑岗作为一个年轻城镇的普通形象最明显的表现是,它还没有达到投票年龄的年轻居民的比例高于平均水平
WP 竞选选区中 20 岁以下居民的比例
与全国 20.5% 的 20 岁以下人口相比,在圣康集居地,20 岁以下人口仅占四分之一多一点( 25.3% )。此外,僧康的老年居民比例较低:
65 岁及以上居民在 WP 竞选选区的比例
与全国 13.7%的比例相比,僧康镇只有 8.7%的 65 岁及以上居民。
别忘了丰戈尔西
显而易见的是,在僧康选区并不存在年轻选民过剩的情况,相反,有年幼子女的家庭过剩。基于这些数据,如果没有庞大而负债的老年人选票作为选举缓冲,重新描述由*这一特殊人口群体推动的僧康起义可能会很有吸引力。人们甚至可以讲一个半可信的故事,讲述沉浸在社交媒体方式中并投资于进步事业的在校青年如何以某种方式影响他们的父母投票给工人党!但这是为了逃避一个不方便的数据点,即丰郭尔西 SMC** 是 WP (61.0%的人民行动党)争夺的唯一表现最好的人民行动党选区,20 岁以下居民的比例甚至更高(30.3%比全国 20.5%),老年居民的比例更低(6.2%比全国 13.7%)。不可能出现这样的情况,在与竞争的反对党选择相同的 WP 的情况下,有年幼孩子的父母的人口统计和这个人口统计在一个选区决定性地转向反对执政党,而在另一个选区团结向他们。***
愚蠢的模特
事实上,一个简单的关于人民行动党在 WP 竞争选区的投票份额的广义线性模型显示,20 岁以下的年轻居民比例较高的影响实际上是非常积极的:
WP 竞选选区 PAP 选票份额的广义线性模型。“挑战者”表示人民行动党是否是选区中的挑战者(相对于现任者)。为了获得变量效应的比值比,取估计值的指数,例如 PAP 成为挑战者的效应是 exp(-0.299) = 0.74 或比值减少 26%。
在这里,选区中 20 岁以下的居民的比例每超过全国比例1 个百分点就会导致 22%的比例增加(估计优势比为 1.22),使得人民行动党赢得该选区的几率从大约 50-50 增加到 54-46。有趣的是,选区中 65 岁及以上的居民比例每比全国比例****增加 1 个百分点就会导致优势增加 22%(估计优势比为 1.22)——相反,这意味着低于平均水平的老年居民比例会降低优势。因此,在丰国西部和胜康之间,一个简单的人口统计模型显示了选区中高于平均水平的年轻居民比例和低于平均水平的老年居民比例之间的拉锯战,丰国西部年轻居民比例高得多,大大抵消了老年居民比例低的优势,为人民行动党提供了健康的获胜优势。该模型预测的人民行动党投票份额实际上非常接近实际结果:**********
WP 竞争选区的实际与拟合 PAP 投票份额,使用 PAP 挑战者地位、20 岁以下居民人口比例和 65 岁及以上居民人口比例的 3 因素模型
奥卡姆剃刀
我真的相信,正如这个模型所暗示的那样,有年幼子女的家庭在 WP 争夺的选区里不顾传统智慧,向人民行动党靠拢?一点也不。首先,该模型只适合 6 个数据点(6 个 WP 竞争选区),容易过度拟合。这次演习的目的是证明,确定一个特定的人口优势来解释 WP 在 Sengkang 的胜利是具有挑战性的,因为人们必须考虑到相邻的 Punggol West 的人口过剩的相反趋势。这一结论已经在关于执政党对选举结果进行更深入分析的公开声明中得到暗示。
相反,更简洁的解释是国家层面的战略投票。所有的人口群体,不仅仅是年轻选民或年轻家庭的选民,都果断地离开了 T2 的执政党,但仅仅是在桑港。无论选举中出现了什么突出的问题——对议会中声音多样性的渴望,对高压政治策略的拒绝,甚至是 Jamus Lim 的个人声望——僧康的居民集体承担起了国家责任,并确保这些观点得到代表,但在丰郭尔西和其他地方,类似的选民做出了不同的决定。
这对工人党和新加坡来说是个好兆头。基于年龄的政治两极分化的建议,年轻选民无可挽回地远离执政党,而老年人仍然是人民行动党的坚实的压舱石,可能还为时过早。相反,即使是同一个反对党参与竞选,同样的人口也会根据选区的不同而投出不同的票。来自桑港工人党的新议员不应该把自己视为派系人口利益的承担者,而应该把自己视为集体民族意愿的承担者——一种寻求替代但可信的政治代表、对执政党的制衡以及拒绝政府中的专制冲动的意愿。新加坡的选民,不仅仅是胜港的选民,而是全体选民,都发出了自己的声音。
*虽然新加坡法定投票年龄为 21 岁,但为了简化计算,年轻选民的定义包括 20 岁的居民。
容器和无服务器计算之间正在进行一场战争
但是最好的选择可能是同时使用两者
归根结底,容器和无服务器技术都是在服务器上运行的。但是用户体验却大不相同。克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片
W 开发人员的工作是什么?当然是写软件。但情况并非总是如此。
过去,每个应用程序都有自己的服务器。由于每台服务器的资源有限,开发人员不得不经常考虑不要让服务器的容量超载。如果一个应用程序需要在不同的服务器上运行,整个过程都必须重新设置。
企业很快意识到这相当低效:一方面,开发人员不高兴,因为他们不得不担心代码以外的其他事情。另一方面,每当一个应用程序没有占用 100%的服务器容量时,就会有大量计算资源闲置。
快进到今天:你上一次担心服务器架构是什么时候?可能有一段时间了。
这并不意味着我们摆脱了所有关于内存、RAM、存储等等的考虑。尽管开发人员越来越多地摆脱了这些问题,但这个过程还远远没有结束。
到目前为止,我们还没有走到虚拟化之路的尽头,再也不用担心服务器了。目前还不清楚哪种技术将会胜出。会是虚拟机吗?集装箱?还是无服务器计算?这是一个正在进行的辩论,也是一个值得详细研究的问题。
对两种技术进行比较,以结束孰优孰劣的争论。
towardsdatascience.com](/kubernetes-serverless-differences-84699f370609)
虚拟机的出现
进入 20 世纪 60 年代,那时虚拟机(VM)第一次被发明出来。人们不再一次为一个应用程序使用裸机服务器,而是开始考虑在一台服务器上运行多个操作系统(OS)。这将允许多个应用程序分别运行,每个应用程序都有自己的操作系统。
在 IBM 和其他公司,他们实现了仅仅是:他们模拟物理服务器,也就是说,他们对它进行虚拟表示。所谓的虚拟机管理程序负责为虚拟机分配计算资源,并确保虚拟机不会相互干扰。
这样不仅可以更有效地利用一台服务器的计算资源。您还可以在许多不同的服务器上运行应用程序,而不必每次都重新配置它。如果服务器没有安装正确操作系统的虚拟机,您可以克隆另一个虚拟机。
除此之外,虚拟机可以使服务器更加安全,因为您可以扫描它们以查找恶意软件。如果你发现了一些,你可以在一个更早的版本中恢复虚拟机,这基本上消除了恶意软件。
考虑到这些优势,虚拟机主宰这个领域也就不足为奇了,裸机应用程序非常罕见。Linux 和 Ubuntu 是许多虚拟机中常见的客户。Java 和 Python 运行在精简版的虚拟机上,这使得开发人员可以在任何机器上执行他们的代码。
如果没有虚拟机,Python 和 Java 将无法在任何地方部署。在 Unsplash 上科普高清照片
战场 1:虚拟机对容器
虚拟机模拟它所运行的硬件。相比之下,容器只是模拟一个操作系统,通常是 Linux。这就是为什么它不包含运行它的硬件的虚拟副本。
像虚拟机一样,容器离不开操作系统、应用程序及其库和依赖项。但是放弃硬件仿真的结果是容器更加轻量级、快速和可移植。这就是为什么容器只需要几秒钟就能启动,而虚拟机通常需要几分钟。
另一方面,容器并不总是像虚拟机一样安全。如果恶意软件进入容器化的系统并进入操作系统,它就有可能劫持整台机器。
相比之下,虚拟机将不同的操作系统彼此分开。因此,即使恶意软件侵入了某个虚拟机的操作系统,该虚拟机上的所有其他虚拟机也不会受到攻击。这增加了额外的安全级别,例如在处理机密数据时,这可能是至关重要的。
与容器相比,虚拟机的另一个优势是可以使用不同的操作系统。当然,这需要做更多的工作,因为您可能需要在每个操作系统上分别实现错误修复。但是如果你有一个应用程序应该运行在除了 Linux 之外的任何系统上,容器就不是一个好的选择。
另一方面,容器非常适合任何具有微服务架构的东西,也就是说,单个应用程序由许多较小的服务组成,这些服务只是松散耦合的,可以独立执行。每个单独的服务都可以放在自己的容器中。然后,开发人员需要注意的唯一事情是容器之间的正确通信。
[## 使用 Docker-Compose 将您的整个数据科学环境(或任何您想要的东西)容器化
用一个简单的文件和几个命令行从多个交互的容器中构建应用程序。
towardsdatascience.com](/containerize-your-whole-data-science-environment-or-anything-you-want-with-docker-compose-e962b8ce8ce5)
战场 2: Docker 对 Kubernetes
有一种技术与集装箱引擎同义:码头工人。但是在同一个句子中还有另一项经常被提及的技术: Kubernetes 。那么到底发生了什么 Docker 和 Kubernetes 是朋友还是敌人?
正如微软所说,比较 Docker 和 Kubernetes 有点像比较苹果和苹果派。Docker 是一种容器和开源技术的文件格式,可以在任何地方运行应用程序。Kubernetes 协调和调度许多容器,并确保它们相互之间正常通信。
Docker 有自己的容器编排服务 Docker Swarm。然而,赢家很明显:Kubernetes 比 Docker Swarm 更广泛。Kubernetes 可以在整个机器集群上运行,而 Docker Swarm 只能在单个节点上运行。
因此,除非您在单个节点上部署容器,或者不需要 Kubernetes 带来的复杂性,否则没有必要再考虑 Docker Swarm。如果你认为容器编排,想想 Kubernetes。
除了管理容器之外,Kubernetes 还允许您编排一个虚拟机集群(是的,虚拟机),并根据可用的计算资源和每个容器的要求,安排容器在选定的虚拟机上运行。
你没听错:VMs、Docker 和 Kubernetes 在一个工作流中。到目前为止,这听起来不像是一场战斗,更像是一部交响乐。但是等等,因为还有一个要来。
关于虚拟机、容器和无服务器的争论远未结束。克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片
战场 3:容器对无服务器
如果虚拟机将物理硬件从开发人员手中拿走,而容器消除了对操作系统的任何担忧(我说的是 Docker plus(可选的 Kubernetes)这样的容器),那么无服务器将使这一旅程又向前迈进了一步。
您可以在下图中看到这一点:使用无服务器,开发人员甚至不必担心他们的应用程序何时以及如何执行,他们应该将它放在哪个容器中,或者它将消耗多少计算资源。当然,他们仍然需要编写应用程序,但在他们上传到 AWS Lambda、Aurora 或 CloudFront 服务后,他们就可以收工了。
他们的代码将会休眠,直到被执行。您只需为您真正使用的机器时间付费,这使得整个事情非常经济。相比之下,您需要为 Docker 支付月费,为 Kubernetes 支付每个集群每小时的费用,不管您使用了多少。
然而,这并不意味着无服务器为王。这是一项相当新的技术,目前无论你去哪里都有限制。
例如,目前很难在无服务器上完成 A/B 测试,或者让其他复杂的部署选项工作。另外,无服务器需要一些时间来初始化代码。所以如果你需要你的应用程序非常快,你应该使用容器。
此外,无服务器还带有计算资源方面的限制。所以如果你有一个占用大量内存或者运行很长时间的任务,你最好使用容器。
虚拟化是如何发展的。IaaS,“基础设施即服务”,是虚拟机的一个时髦词汇。CaaS 代表“容器即服务”,FaaS 代表“功能即服务”,也就是无服务器计算。图片由作者提供,参考 DigitalCloud 。
未来会怎样
所有这些对无服务器的限制都不是天生的,所以我们可以期待无服务器在未来几年赢得更多容器市场。它也越来越受欢迎,因为它比容器编排对初学者更友好,非常容易扩展,并且在工作负载方面非常灵活和经济。
因此,无怪乎无服务器架构市场预计将在未来几年内增长两倍,到 2025 年总收入将超过 210 亿美元。但这并不意味着虚拟机和容器会消亡。
在十年左右的时间里,我们不太可能看到无服务器技术。看看虚拟机就知道了,它已经存在了半个世纪,现在仍在大量使用。相反,我们很可能会看到更多的容器与无服务器的共生,就像容器和虚拟机一起工作一样。像 AWS Fargate 这样的服务已经可以让你将容器和无服务器无缝地结合起来。
所有这些解决方案——虚拟机、容器和无服务器——都是好的解决方案,都有其特定的优势和劣势。尽管它们有时会在重叠的空间上竞争,但好消息是你可以混合搭配它们来满足你的需求。
大型科技公司的虚拟化之旅还远未结束。除了提高开发者效率,我们甚至不知道目的地会是什么样子。但是所有的迹象都表明,这是一条有趣、迷人且相当有利可图的未来之路。
据我们所知,无服务器可能不是最后一步。谁知道,真的,将来我们会玩什么技术?
商业没有水晶球
新的思维模式是预测未来的关键吗?
预测未来很难。我很确定这一点,因为我从来没有赢过强力球,你也没有。
尽管如此,作为商业领袖,我们需要了解市场和我们的客户是如何变化的,以便做出有效的决策。获得市场和行为洞察最常见的方法是通过数据,但大多数人使用历史数据的简单模型来预测未来的行为。无论我们是处于“典型的”市场时期,还是像现在这样剧烈动荡的时期,这都是不够的。你需要创造性地思考你的数据和你的预测来选择智能模型,以便你的预测尽可能有用。
有许多技术和工具可以用来为你的业务创建有用的预测,我将介绍一些常见预测的例子,以及如何实现它们。具体来说,我们将涵盖:
- 当数据非常嘈杂时,如何预测收入等指标
- 如何预测客户行为,如流失
预测收入
照片由Robynne Hu拍下
让我先提出一个警告。 预测未来【1】不是一门精确的科学。它永远不会百分之百准确。即便如此,预测提供了有价值的指导,并且随着你使用它的时间越长,它还会继续改进。应用更好的建模方法可以极大地改善任何业务的总体结果。**
预测建模很困难,因为真实世界数据很复杂。例如,给定一个每日收入数据(其中每个点是一天),尝试预测下一周每天的收入(参见图 1)。
图一。嘈杂的收入数据
像大多数真实世界的数据一样,这些数据中隐藏着模式和趋势,这使得外推变得困难。
像线性回归这样的基本技术可以绘制出一个总体趋势线,但不能预测下周的每一天。我们可以使用像双指数平滑这样的高级技术,但是它们很难实现。
幸运的是,有一种更简单的方法来模拟我们对下周的预测。
****重复周期意味着我们可以独立地关注一周中的每一天,而不是试图从整体上理解数据。例如,仅使用星期一向我们展示了星期一的趋势和模式实际上是一条直线(参见图 2)。
图二。仅周一的独立线性外推
通过为一周中的每一天创建单独的趋势线,我们可以以相当高的准确度为下周的每一天构建一个收入模型(参见图 3)。
图三。由一周中每一天的单独预测组成的完全构建的预测
如果你像大多数企业一样,你不需要每天预测收入。那很好。该模型处理遵循共同周期的周、月或季度数据。
但是,你可能有一个非典型周期的业务或季节性业务,如旅游业。那也很好。如果你的业务数据没有明确的周期或趋势,你可以使用趋势线或更高级的建模技术退回到一般预测。****
预测销售额
了解销售渠道是企业面临的最常见挑战之一。为了预测收入,了解销售漏斗非常重要。但是,我们如何预测通过漏斗顶部进入的销售线索量呢?实现这一点的一种方法是实施销售线索评分。
****销售线索评分是对销售线索进行排序的过程,从“最热”到“最冷”这使您可以将资源分配给“热门”销售线索,同时在销售漏斗中移动较冷门的销售线索时,保持与它们的不同接触程度。
使用销售线索评分来预测未来收入始于数据收集。相关数据可以包括关于潜在公司或个人的人口统计信息、对购买数据的洞察和行为指标。
例如,有用的公司级人口统计数据可能包括公司的行业或规模。个人人口统计信息可以是一个人在公司的职位和角色、他们的预算或权力级别。行为指标可以包括一个人打开你的电子邮件或参加网上研讨会的次数。
使用这些数据,您可以为每个销售线索分配点数。你甚至可以给“冷淡”的行为减分,比如退订邮件列表。
虽然传统的评分机制很有帮助,但它并不能预测销售线索是否会转化。然而,有一些机器学习技术可以帮助你。更基本的方法之一是所谓的逻辑回归。逻辑回归类似于线性回归,只是您试图预测的变量是一个二元结果,在这种情况下,客户是否会转换,而不是一个连续值。
无论是哪种技术,它们都将依赖于高质量的历史数据**,这些数据用于训练你的预测模型——越多越好!当您对销售线索进行评分并处理结果时,您会希望不断地重新评估您正在收集的数据的属性,以及您如何对您的评分进行加权,以查看您是否能够更好地预测未来的结果。**
所以,如果我们不想失去客户,我们应该让他们都高兴,对不对?
当然,但是这比听起来要难。没有一种产品能让所有人都同样开心,而且总有新的竞争对手伺机而动,试图抢走我们的客户。如果有办法知道哪些顾客最危险,那就太好了,这样我们就可以专注于让他们更开心。
幸运的是有,它被称为流失预测。
流失预测的工作方式很像销售线索评分,但它不是估计销售线索转化为客户的可能性,而是估计客户流失的可能性。同样的公司/个人人口统计数据(例如,公司规模)在这里也是合适的。然而,行为数据需要更新,以包含关于客户如何参与您的产品的信息。
**● **产品使用:客户登录了多少次?他们与你的产品互动的节奏是怎样的?客户中有多少用户在使用你的产品?客户是否改变了他们的服务级别(升级或降级)?你与客户的关系持续多久?
**● **支持:客户提交了多少张支持票?每张罚单的严重程度如何?门票的基调是什么?罚单解决得有多快?
**● **社交:客户在社交媒体上提到过你吗?客户是否向您推荐过其他公司?你被允许在你的网站上使用客户的标志吗?客户是否愿意为您提供案例研究进行宣传?
有了所有这些定义的属性和收集的数据,你就能够对你的所有客户进行评分,并很好地判断哪些客户可能会留下来,哪些会流失。
正如预测中的一切一样,没有水晶球会完美地告诉你未来会发生什么。目标是找到你的企业最可靠的领先指标,让你有足够的时间调整你的战略计划,以免为时过晚。
[1] A. Wieckowski,预测未来 (2018),哈佛商业评论
3 个神奇的熊猫提高记忆效率的窍门
你应该马上开始使用这三个技巧,停止使用不必要的工具。
照片由 Aaron Burden 在 Unsplash
M 任何数据分析任务仍然在笔记本电脑上执行。这加快了分析的速度,因为您已经准备好了熟悉的工作环境和所有的工具。但是你的笔记本电脑很可能不是拥有 x-GB 主内存的“最新野兽”。
然后一个记忆错误让你大吃一惊!
Gif 来自 Giphy
你该怎么办?用 Dask?你从来不使用它,这些工具通常有一些怪癖。你应该要求一个火花集群吗?或者说火花在这一点上是不是有点夸张的选择?
冷静…呼吸。
Gif 来自 Giphy
在考虑使用另一种工具之前,问自己以下问题:
我需要所有的行和列来执行分析吗?
在您开始之前,这里有几个您可能感兴趣的链接:
- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Become a Growth Product Manager](https://imp.i115008.net/c/2402645/803127/11298) [Course]- [Deep Learning (Adaptive Computation and ML series)](https://amzn.to/3ncTG7D) [Ebook]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)
上面的一些链接是附属链接,如果你通过它们购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。
技巧 1:阅读时过滤行
在一种情况下,您不需要所有行,您可以分块读取数据集并过滤不必要的行以减少内存使用:
iter_csv = pd.read_csv('dataset.csv', iterator=True, chunksize=1000)
df = pd.concat([chunk[chunk['field'] > constant] for chunk in iter_csv])
分块读取数据集比一次全部读取要慢。我建议只对大于内存的数据集使用这种方法。
技巧 2:阅读时过滤列
在一种情况下,您不需要所有的列,您可以在读取数据集时使用“usecols”参数指定必需的列:
df = pd.read_csv('file.csv', u*secols=['col1', 'col2'])*
这种方法通常会加快读取速度并减少内存消耗。因此,我建议对每个数据集使用。
技巧 3:结合两种方法
Gif 来自 Giphy
这两种方法的伟大之处在于,您可以将它们结合起来。因此过滤要读取的行并限制列数。
要升级你的熊猫游戏,看看我的熊猫系列:
从提示和技巧,如何不指南到与大数据分析相关的提示,熊猫文章的精选列表。
medium.com](https://medium.com/@romanorac/pandas-data-analysis-series-b8cec5b38b22)
但是我需要所有的列和行来进行分析!
Gif 来自 Giphy
那你应该试试 Vaex !
Vaex 是一个高性能的 Python 库,用于懒惰的核外数据帧(类似于 Pandas),以可视化和探索大型表格数据集。它每秒可以计算超过 10 亿行的基本统计数据。它支持多种可视化,允许对大数据进行交互式探索。
您应该知道的另一个用于数据分析的 Python 库——不,我不是在说 Spark 或 Dask。
towardsdatascience.com](/how-to-process-a-dataframe-with-billions-of-rows-in-seconds-c8212580f447)
在你走之前
在推特上关注我,在那里我定期发关于数据科学和机器学习的推特。
照片由Courtney hedge在 Unsplash 上拍摄
这些是 2020 年的大数据趋势。
大数据和分析是公司在竞争激烈的环境中生存的重要资源。今年,以下大数据趋势将对当前的 IT 环境产生影响。
D 数据来源和 AI 应用变得越来越复杂和全面。因此,2020 年将是大数据领域创新和进一步发展的又一年。最相关的趋势总结如下:
大数据变成宽数据
在大数据环境中,可扩展的云概念消除了限制公司的本地 IT 基础架构。今年的一个主题是“宽数据”这意味着 IT 部门越来越多地关注由不一致或格式不正确的数据和数据孤岛所创建的分散的、广泛分布的数据结构。
在过去的五年中,各种数据类型的数据库数量增加了一倍多,从大约 160 个增加到 340 个。受益最大的公司是那些能够在未来将数据整合成有意义的综合体的公司。
数据能力即服务
数据综合和数据分析的结合将进一步发展数据的有效利用。用户在阅读、工作、分析和交流数据时得到帮助是至关重要的。
为了实现这一目标,公司必须通过使用提供软件、培训以及支持 SaaS 模型(软件即服务)的合作伙伴来专门提升员工的数据知识。这不仅通过优化集成 DataOps 和自助分析改进了数据知识,还支持数据支持的决策。
数据运营和自助服务分析
借助现代自助工具,数据分析已经在业务层面成功实施。借助 DataOps,现在可以为数据管理提供灵活的解决方案。这意味着用户现在能够通过使用自动化和面向过程的技术显著提高数据管理的速度和质量。
实时数据集成、变更数据捕获(CDC)和流数据管道等技术为此奠定了基础。通过这种方式,运营数据管理中的 DataOps 和业务方面的自助服务分析在整个信息价值链中建立了一个顺畅的流程。借助数据运营和自助服务(2020 年的主要趋势之一),可以有效利用分散在整个公司的数据。
数据的“筛选”
虽然数据分析在最近几年取得了惊人的进展,但专家认为最重要的里程碑仍在我们面前:沙扎明数据。以前在手机上被称为“Shazam”的流行应用程序,可以识别正在播放的歌曲并提供相关信息,现在正在扩展到其他领域。这意味着,在 2020 年,我们也将体验到 shazaming 作为企业数据解决方案的应用。算法将支持分析系统识别数据模式和异常,并为进一步分析提供新数据。
专家们相信,在未来,数据解决方案不仅包括搜索、仪表板和可视化,还包括与运动传感器等数字设备通信的替代输入技术。沙扎明提供了巨大的机会,但也有被滥用的危险。
改进的语音处理
大数据、人工智能、物联网和机器学习(ML)实现了人类和技术交互的扩展维度。在自然语言处理(NLP)的帮助下,程序能够理解人类说的或写的语言。
由于 NLP 用于以人类语言交流内容,因此即使是未经训练的用户也可以与这种智能系统进行交互。除此之外,NLP 也是一个强大的工具,用于识别客户的需求,并根据这些需求开发产品和服务。
智能元数据目录
元数据是包含其他数据特征信息的结构化数据。这允许大量数据或原始数据被本地化、捕获、合成,最重要的是,在分布的和不同的数据库中被自动处理。
基于机器学习的智能功能用于数据准备、数据项目中的协作以及优化的工作流程。由于保留了整个上下文,因此信息更容易访问,也可用于未来的项目。
由于对智能元数据目录的需求不断增长,到 2020 年,它们将越来越多地配备人工智能,以实现主动、自适应和更快的数据供应。
关于气候变化和宇宙的研究
大数据解决方案可以为气候变化辩论做出决定性贡献。数据材料可以来自气象研究所、各种地球科学或粒子物理研究机构,甚至来自海洋研究的数据集。为了逼近从大爆炸到现在宇宙时间的事件,必须包括难以想象的大量输入。
实时分析变得更加有趣
数据密集型流媒体或实时数据分析流媒体将在 2020 年获得相当大的发展势头,不仅适用于大型的全球相关体育赛事。例如,金融世界可以通过复杂的网络连接传输数 Pb 的实时数据,并与无数其他设备进行通信。
但是,监测地震、厄尔尼诺和其他自然灾害关键研究的组织也将越来越依赖于使用机器人过程自动化(RPA)、人工智能和机器学习的大数据来提供可靠的预测。
油田模拟
石油行业是大数据分析和前所未有的计算能力的大受益者之一。这给了石油公司更好的工具来评估地震传感器产生的大量数据。
高保真成像技术和用于模型模拟的新算法为正在研究的储层的潜力提供了更大的清晰度。有了更精确的信息,他们可以最大限度地降低识别和测绘油藏的风险,同时优化管理和运营成本。
你认为我错过了重要的部分吗?在评论里留下你的看法…大家一起讨论…
图片经由pix abay
这些数据科学产品组合将让您惊叹不已并深受启发(2020 年中期版)
使用这些来改进您自己的数据科学产品组合,学习新技能或发现新的有趣项目。
查尔斯·德鲁维奥在 Unsplash 上拍摄的照片
为什么是投资组合?
数据科学是一个艰难的领域。它结合了数学和统计学,计算机科学和黑魔法。截至 2020 年年中,这也是一个蓬勃发展的领域,每一个招聘广告都有无数的申请者蜂拥而至。此外,正如我提到的——现在是 2020 年年中,肆虐的疫情把一切都拖得更低了。
建立一份课程完成证书的清单也不会让你走得很远,除非你有一些真正的学术证书(硕士/博士)。像 m 课程和 d 课程这样的 MOOC 证书很不错,但是我还没有听到太多这样的例子。le 也不再是过去的样子了。它的自由竞争已经成为无用的过度拟合模型的墓地,真正的竞争由难以与之竞争的团队主导,无论如何对个人投资组合的用途有限。
那么,如何在网上建立个人档案呢?我个人的想法是,就像一个著名的乐队曾经说过的那样,你可以走自己的路。
不要试图去做别人做过的事情,做你感兴趣的项目,而是建立一个你工作的文件夹,并把它放在那里让全世界看到你做了什么,以及你能做什么。
由 Ricardo Gomez Angel 在 Unsplash 上拍摄的原始照片
说了这么多,我很感激说起来容易做起来难。没有多少数据科学家也是设计师/前端开发人员,他们并不总是热衷于学习额外的技能,也不一定有时间去学习。
幸运的是,我们不必总是重新发明轮子。不像过去的文件夹是字面上的……文件夹满是光滑的纸页,或者简历只会出现在人力资源部的桌子上,许多令人惊讶的文件夹可以在网上找到。这些都是无价的资源,为什么不充分利用呢?
学习/灵感
除了将它们作为我们自己投资组合的参考,这些网站也是学习和想法的极其宝贵的资源。
这些作者的许多项目是实用的、有趣的和原创的。在我看来,它们也是很好的补充学习工具。例如,当我考虑在我的工作中或者为我的客户应用这个工具时,看到一个 ML 工具的实际应用提供了学习理论方面的背景。
我已经说得够多了——让我们深入了解这些令人惊叹的作品,看看它们到底是如何有用的。
这显然只是众多优秀投资组合中的一些随机选择。如果你同意/不同意我的想法,请在评论中告诉我你最喜欢的和!
大卫·文丘里
大卫·文丘里肯定会给这些狗打分(http://davidventuri.com/portfolio)
几年前,我在研究数据科学课程时第一次遇到了大卫·文丘里。他写了一篇名为“ 我辍学去创建我自己的数据科学硕士学位——这是我的课程表 ”的博文。
这个帖子来自 2016 年 4 月,它确实经受住了时间的考验,截至 2020 年 8 月,已经在媒体上获得了 8000 多次点击!
从那以后,他做了更多的事情。他为 DataCamp 创建了课程,包括一个 Scala 课程,Tableau 课程的一部分,以及一个使用 MLB(棒球)Statcast 数据的课程。
他甚至创建了一门名为“与卡戴珊上下:使用熊猫的 Python 项目”的课程。谁会想到单词 Python 会出现在单词 Kardashians 的旁边,而不是指最近的丑闻或对宠物的糟糕选择?
没错。这个人很有才华。
他的作品集网站恰当地反映了这种广泛的才华,展示了他作品中内容类型的广度和题材的多样性。
大卫·文丘里的作品集(http://davidventuri.com/portfolio)
文丘里网站上的标题按照终端客户的类型组织其内容。它们的范围很广,从为 DataCamp 或 Udacity 创建的课程、项目和内容,到一系列个人项目,包括 FreeCodeCamp 的文章、体育分析和少量网络应用。
然而,在看了一会儿这个网站之后,给我留下深刻印象的是,它清晰地展示了他能够产生的产出的确切类型。换句话说:
文丘里产品组合的每一部分都实现了一个营销目的。
MOOCs 很容易——毕竟,他是一位经验丰富的课程制作人。
但接下来的部分包括两个非常不同的视频,以突出他的制作技巧和在摄像机前的舒适感。一个是教学视频,一个是高制作…狗视频(巧妙的营销视频)。
他的个人项目是为了突出用明亮的链接表示的输出媒介。他的输出被分段,链接到“代码”、“演示”或“网站”中的一个。这允许查看者在项目的上下文中立即看到感兴趣的输出。
甚至他的书面作品也被明确归类为“报告”、“文章”或“帖子”,明确承认了预期的受众类型。有人读了这篇文章,很明显会得到一个相关的样本产品,而不是一堆按主题分类的“写作样本”。(这确实让我怀疑他是否对招聘信息进行了搜集或分析,从而得出了这一分类。)
点击这里查看他的作品集。
汉娜·韩嫣
汉娜·韩嫣的作品集网站(【https://www.hannahyan.com】T4)
作为一名数据可视化极客,这个网站立即让我充满了喜悦和羡慕。
她主页上展示的大部分项目都是可视化的(我可以补充说,非常精彩)。每个项目都由一个图像表示,鼠标悬停在图像上会显示关于它的更多详细信息,如下面的动画所示。
因此,在访问网站的几秒钟内,读者就有机会看到她制作的一系列可视化效果,以及她在使用从 R、D3.js 或 P5.js 到 Tableau 的各种工具方面的技术实力。
我个人也非常喜欢干净的布局和简单一致的界面。浏览它只是一种享受。
汉娜·韩嫣的视觉化作品集的一些例子(https://www.hannahyan.com)
点击每个项目,读者会看到一篇关于观想的文章。
她还有一个专门的数据科学作品集,放在一个单独的页面上。
韩的几个数据科学项目()——看那只狗!
显然,这种布局旨在传达比可视化页面更多的关于每个数据科学的信息。通过像她所做的那样将项目按类型分开,她能够为读者实现每一页的视觉一致性。这可能也表明,一般来说,读者(潜在客户)只对可视化或数据科学中的一个感兴趣,而不是两个都感兴趣。
点击查看她的作品集。
多恩·马丁
在进入下一个投资组合示例之前,坐下来,喝一杯,振作精神。
多恩·马丁的网站(【https://donnemartin.com/】T4)
多恩·马丁自称是脸书的一名软件工程师,但是看了他的网站和 GitHub 页面,我很确信他是一名时间旅行者或者是某种能够延长时间的巫师。稍后我会回到这一点,但现在,看看下面的动画,通过他的主网站滚动。
他的投资组合网站的方法与我们之前看到的完全不同。他采取的方法是让人群的声音(即 GitHub 明星)来说话,好家伙——他们是不是大声。
他随便标榜 20k+星的多个个人项目!
多恩·马丁的作品集页面(https://donnemartin.com/#portfolio)
他的 GitHub 页面本身就非常令人印象深刻。既然在讨论数据科学作品集,那就来看看他的回购数据科学笔记本吧。
记得我说过我认为马丁可能是个巫师吗?每当我们回到焚烧女巫和男巫,这个数据科学笔记本回购将是我对马丁的主要证据提交。
我只是不明白他什么时候可能有时间创造所有这些,除非他有能力让时间变慢。这只是一个样本——实际上是一个非常小的样本,是他在这次回购中提供的笔记本。
多恩·马丁的笔记本回购(https://github . com/donne Martin/data-science-ipython-notebooks)
这是一个密集的列表,但是按照使用的主要库来分组,它作为一个展示做得很好。甚至在打开他的任何一个笔记本或者阅读这些笔记本的摘要之前,这个列表就很容易地展示了他的职业道德、技能广度以及沟通和教学的能力。
你可以轻而易举地花上几天或几周时间浏览马丁的作品集——就我个人而言,我不认为这样做是个坏主意。点击查看。
克劳迪娅·滕·胡普
克劳迪娅·滕胡普的网站(【https://www.claudiatenhoope.com】T2
Hoope 的网站干净整洁,易于阅读。我想强调的这个投资组合网站的一个关键区别是,它明确地兼作招聘/咨询页面,有她的每日价格等。
她是一名自由职业者,所以她有必要向潜在客户详细说明她提供的具体服务。她在这里使用的语言也表明,它们是为那些不一定熟悉数据科学的人准备的。
这是一个很好的提醒,让我们思考我们发布的每条信息的目标受众是谁,并相应地调整内容。
克劳迪娅·滕胡普的服务页面(【https://www.claudiatenhoope.com】T4)
看看吧——她的页面是这里。
朱莉娅·尼库尔斯基
朱莉娅·尼库尔斯基的作品集网站(http://julianikulski.com/portfolio)
这是另一个优秀的作品集网站,这次是由朱莉娅·尼库尔斯基创建的。与其他人一样,她在这里列出了一些很棒的项目,每个项目都有一个英雄形象,并附有简短的描述和关键技能。
我不会写太多关于它的东西——因为主要的布局似乎和其他一些相似,而且我不懂德语!
一个非常有趣(非常元)的亮点是一篇题为“如何建立一个数据科学组合网站”的帖子,如果你正在阅读这篇文章,你可能会发现相关内容!
感谢阅读——这只是我在网上找到的一小部分网站。如果你有自己喜欢的,或者对这篇文章有(建设性的)批评,请在评论中或者在推特上告诉我!
另外,如果你喜欢这个,比如说👋/继续关注,或点击此处获取更新。ICYMI:我还写了这篇比较 Plotly Dash 和 Streamlit 的文章:
[## Plotly Dash 与 Streamlit——哪个是构建数据仪表板 web 应用程序的最佳库?
用于共享数据科学/可视化项目的两个顶级 Python 数据仪表板库的比较——
towardsdatascience.com](/plotly-dash-vs-streamlit-which-is-the-best-library-for-building-data-dashboard-web-apps-97d7c98b938c)
这是关于可视化数据中隐藏的关系,以 NBA 的数据为例:
[## 如何用 Python 可视化数据中的隐藏关系 NBA 助攻分析
使用交互式快照、气泡图和桑基图操纵和可视化数据,使用 Plotly(代码和数据…
towardsdatascience.com](/how-to-visualize-hidden-relationships-in-data-with-python-analysing-nba-assists-e480de59db50)
他们都有皇冠
亲教会媒体在 Unsplash 上拍摄的照片
揭露流行天后之间的竞争,并对他们的实力进行探索性的数据分析
如果你和我一样,是那种认真对待流行音乐的人,那么你很可能已经卷入了关于流行女歌手的激烈讨论。更多的时候,关于这个问题的争论最终导致女性之间的对立,并加深了音乐行业根深蒂固的厌女症。
参与这种试图寻找“最佳”流行女歌手的讨论可能不会有结果的原因之一是,就像其他人一样,他们都有自己的优势和劣势。用一个人的力量去比较所有其他人不仅没有抓住重点,而且没有给予他们足够的信任,因为他们经历了所有的事情,为我们这些粉丝带来了如此惊人的作品。
因此,我们不打算集中讨论这个问题。
我们不能否认音乐围绕着我们个人的喜好和经历。因此,你将在下面读到的不仅是对这些艺术家作品的一个证明,也是一个反思的时刻,它是如何引起你如此大的共鸣,以至于你愿意为捍卫它而战。
通过这样做,并真正开放和好奇,我们不仅对我们的音乐品味获得了更详细的知识,而且将这种错误的比较叙事改写为更尊重的比较叙事,同时提高和提升了所有这些令人惊叹的女性。
为了做到这一点,我们从 Spotify 和 Genius 收集了数据,我们将深入研究九位流行天后(碧昂斯、泰勒·斯威夫特、爱莉安娜·格兰德、蕾哈娜、Lady Gaga、麦当娜、玛丽亚·凯莉、布兰妮·斯皮尔斯和凯蒂·佩里)的完整唱片目录,使用十二个变量来分析他们的歌曲(可跳舞性、歌曲时长、语速、能量、歌词情感、声音情感,等等)。对此分析,我们只是认为这些艺术家的个人项目。
走吧。
玛丽亚·凯莉——轻柔的歌曲,努力的工作
自从 1990 年玛丽亚·凯莉(Mariah Carey)出道以来,MC 不仅拥有最大的歌曲和专辑目录,而且在所有被考虑的艺术家中,她歌曲的制作比例也是最大的。
作者提供的图片
看看玛丽亚·凯莉的目录,很明显她一直比她的同龄人更擅长声学探测项目。随着她在charm branch的巅峰声学作品,像 Through The Rain 这样的歌曲证明没有必要忙于制作来让她的声音闪耀。
作者提供的图片
另一方面,玛丽亚可以很容易地过渡到更流行的流行音乐和 R&B 潮流,不完美天使的回忆录有她最热门的作品之一,痴迷。即使有更多的重磅制作,像我想知道什么是爱这样的歌曲表明,剥离下来的歌曲仍然非常适合她(即使是封面)。
TL;英雄博士
在这里,当你感到希望破灭时,我们有 **Hero ,**来帮助你,这是一个完美的例子,说明由玛丽亚创作和制作的强大的原声歌曲如何能让人真正找到自己的力量。
碧昂斯——多才多艺
很难定义埃永西,正如人们所料,我们对女王 B 的发现也有多面性。
鉴于碧昂斯在当前流行乐坛对说唱、嘻哈和 R&B 的重要性,她在歌曲中使用大量词汇也就不足为奇了,正如我们在下面看到的。
autor 提供的图像
在声学上,我们也可以从一个名为 speechiness 的变量中察觉到这一点,speechiness 是一种音乐特征,可以识别一个音轨中存在的口语词。
碧昂斯是迄今为止最健谈的流行女歌手,这一特征在她的专辑《B’day》中达到顶峰,在那里我们可以听到她的说唱技巧的完美例子。
作者提供的图片
下面我们看到一个试图抓住艺术家多面性的尝试。为了做到这一点,我们找到艺术家的平均表现(关于所有变量),然后检查每首音乐离这个表现有多远。对于一个更加多才多艺的艺术家来说,简单地平均其所有目录并不能做到公平,这种从歌曲到平均值的计算距离往往会更高——碧昂斯就是这种情况。
作者图片
作为这种声音和抒情广度的一个例子,我们可以看看,例如柠檬水。在里面,我们可以听到从乡村(爸爸课程)到摇滚*(不要伤害自己)*的一切,R & B、嘻哈、流行和民谣也混合在一起。
这种多才多艺当然不是一个小壮举,它肯定是一件很难单独实现的事情。证明这一点的是碧昂斯愿意与才华横溢的作家和制片人合作,以帮助实现她的愿景。当考虑到她创作和制作的所有歌曲时,几乎就好像她为每首新歌带来了至少一位新制作人和两位新作者。
作者图片
最后,但同样重要的是,碧昂斯热爱爱情。她 74%的歌曲都使用这个词。
作者图片
TL;博士-等一下
这首歌是与 15 个人合作创作的,是对真正多才多艺的描绘,因为它源于另一首流行经典歌曲的推文*(Yeah Yeahs 的地图)、**、、*、**是她最常用的 5 首歌曲之一,也是与“典型”碧昂斯声音最遥远的 10 首歌曲之一。另外,这是关于爱情的。或者至少,告诉他们他们不像我爱你一样爱你。
泰勒·斯威夫特——伟大的悲伤歌词
正如泰勒自己所知道的,正如《美国小姐》中所展示的,她的主要强项是歌词。正如人们所料,能够以如此个人和亲密的方式讲述故事,泰勒是少数几位从她的目录中写下一切的艺术家之一。
作者图片
除此之外,当你听到她的歌时,很明显这些通常不是快乐的歌。事实上,当我们分析她的歌词(歌词情绪)和她的声音(效价)上描绘的情感时,很明显泰勒的力量围绕着悲伤的歌词和悲伤的声音。
作者图片
下面,当我们分析这种情感之间的关系是如何在她的作品中演变的,我们可能会发现一些惊喜。
虽然这是她最黑暗的声音,但也是她正面歌词的巅峰。通过扮演她最没有歉意的坏婊子角色,像我做了坏事看到泰勒对自己变坏感觉良好这样的歌曲,都贯穿着肮脏和沉重的节奏。
她的其他项目通常会反其道而行之。虽然有一个比名声更轻的声音,但所有这一切听起来至少比一般的流行天后更悲伤一点。不过,就歌词而言,没有人像斯威夫特小姐那样写悲伤的波普作品。例如,1989 年的《T21》尽管有一部更倾向于流行音乐的作品,但歌词却很悲伤,比如《走出困境》和《你所要做的就是留下来》。值得注意的一件事是,即使是在风格转变的过程中,泰勒也发挥了她的抒情天赋,让它适合她要做的任何事情。
作者图片
TL;放逐博士(专长。Bon Iver)
尽管泰勒已经给了我们很多启示,但她的写作天赋仍然让我们惊叹。为了证明这一点,我们在这里有*,这是她最新项目民俗中的一首歌,它位列泰勒最悲伤歌曲(歌词和声音)的前五名。*
蕾哈娜——变坏的好女孩
我们不需要数据就能相信蕾哈娜是最差的流行女孩,对吗?看在上帝的份上,她有一整张专辑可以证明这一点。此外,除了成为流行音乐中最露骨的女人之外,人们还能指望一个被铁链和鞭子打倒并兴奋不已的人做什么呢?
作者图片
这可能是流行音乐最有预兆的举动,蕾哈娜从扮演好女孩的三张专辑,成为所有流行天后中歌曲最露骨的专辑(R 级),她随后的项目在露骨方面都保持在平均水平以上。
作者图片
那么,她是 f单词的冠军就不足为奇了。*
作者图片
TL;博士——脑中的爱
毫无疑问,蕾哈娜向我们展示了她不害怕弄脏自己。 爱在脑中, 虽然 , 是她选择向我们展示她脆弱的一面的场合之一,即使如此,它仍然让我们如此美好。
凯蒂·佩里——糖热潮
aty Perry 以她完美的流行歌曲而闻名。凯蒂·佩里(Katy Perry)的歌曲通常会让那些听它的人瞬间陷入闪电战,但最终却让我们感到乏味。她的秘密是什么?显然,节奏——衡量一首歌的节拍有多“快”的指标,用每分钟节拍数(bpm)来衡量。
**
作者提供的图片
从上面的图表中可以看出,凯蒂·佩里倾向于使用更快的节拍,这种倾向是从她的第一个项目一个男孩开始建立的,此后逐渐衰退,在她的最新项目见证中达到最低点。
尽管节奏有所放缓,但在她的每个项目中都能找到高节奏的歌曲。举几个:我吻了一个女孩,e . t .咆哮与魔鬼共舞。
事实证明,凯蒂知道我们都可以用高潮来度过低谷。当我们分析她的歌曲听起来像什么以及它们实际上说什么时,我们发现她是假快乐歌曲的女王:那些有快乐节拍的歌曲,但一旦你真正注意歌词,就会真正融入你的感情。
作者提供的图片
作者图片
作者图片
凯蒂也是文字女王。虽然她的歌曲遵循相当传统的流行规则,但她将概念作为歌曲主要思想的吸引力(孔雀、烟火、幽灵、海啸、钟摆、轮盘都是这种例子)可能有助于解释为什么她是词汇最多样化的艺术家。
最后,但同样重要的是,如果没有一些好的歌曲跟着唱,流行热潮会是什么样的呢?
凯蒂肯定知道这一点,她没有让我们失望。她的歌曲中有 75%有这个词在里面。哦耶!
TL;DR —热 N 冷
为了不隐晦地表现出来,我们可以在 热 N 冷 上找到佩里所有最大的优点。除了快乐和快速的节奏,各种反义词的使用及其优柔寡断的爱情的沮丧信息可能会给你带来你需要的苦乐参半的甜味。
Lady Gaga —高电压
当你听到 Lady Gaga 的歌时,你有什么感觉?通常这就像电击穿过你的身体,让你想起来做点什么,对吗?可变的能量是与这种音乐强度相关的,对于感觉快速、响亮和嘈杂的歌曲来说更高。**
不足为奇的是,Lady Gaga 在这一类别中独占鳌头。
作者提供的图片
作为高能径赛的一个例子
考虑到她所有的工作,这位女士只给了我们更多一点平静,在她的更倾向于乡村的乔安妮。在那之前和之后,只有一次又一次的震惊,在《生来如此》上达到了顶峰。娶夜,ScheiBe,Judas 和天生如此都是能量听起来是什么样子的绝佳例子。****
但这并没有结束。尽管 Lady Gaga 的声音让我们感觉像触电一样,但她也很擅长让我们在第二次聆听时感到愤怒或悲伤。当考虑到抒情的内容时,很明显她想要的是什么:让我们同时跳舞和哭泣。
作者图片
正如她最新专辑中真正强调的那样,色彩学,歌曲像爱丽丝和塑料娃娃在舞池中打动了我们,但也谈到了脆弱的感情,感到被困,被利用和愤怒。所以,下次你跳舞的时候,试着注意歌词,这样至少你可以很好地利用它们。**
TL;DR —电话
对于那些有点忙的人来说, 电话 将帮助你了解 Lady Gaga 的一切:高电压歌曲,对讨厌的男孩极度鄙视。
布兰妮·斯皮尔斯——跳舞吧
如果你想跳舞,该找谁?是布兰妮,婊子。
作者提供的图片
她是这群人中最适合跳舞的,她的大多数项目在可跳性方面都远高于平均水平。在停电时达到她的舞蹈巅峰,歌曲如给我更多和我的一部分展示了为什么当布兰妮的歌曲在任何地方播放时都很难保持安静。**
即使是她不太适合跳舞的项目,布兰妮·琼,也仅仅是因为更多情感流行歌曲的出现,比如香水。伴随着这些更平静的流行歌曲,她最受欢迎的歌曲之一是:工作母狗。
当我们考虑歌词背后的情感时,很明显布兰妮的专长是让我们随着积极的信息起舞,无论是性感的感觉还是绝望的爱。
作者图片
TL;DR——有毒
作为一首歌,绝对应该有一个警告:它每次都会让你跳舞,它是有史以来最伟大的流行歌曲之一,它会让你感到性感和活力。
爱莉安娜·格兰德——开槽,是的
E 尽管阿丽亚娜的审美散发出喜欢惹麻烦的纹身女孩的氛围,但从声音上来说,她拥有天后中最华丽的节拍,倾向于慢节奏的歌曲。不过,不要难过,如果她的一首歌让你进入状态,就像生活中所有美好的事情一样,它会很快结束:她的歌曲往往比大多数歌曲结束得快,让我们想要更多。**
********
作者图片
作者图片
尽管如此,正如我们在旁边的图表中所看到的,Ariana 继续倾向于较慢的节奏,我们看到,自从她的第一个项目your Truly 以来,她已经变得有点快了。在里面,我们可以听到一些她最棒的歌曲。**
当你考虑她的演变时,我的一切走得更快,因为她在像 Bang Bang 和 Break Free 这样的歌曲中追求更流行和电子的声音。
********
作者提供的图片
阿丽亚娜的另一个巨大优势是她的声音和演讲能力。领先于更多的说唱歌手,像sweeter和daily这样的歌曲展示了即使时间很短,她也能说很多。****
还有一点:她喜欢“耶”好吧。她唱的 74 首歌让她(和我们)每次都兴奋不已。
TL;美国国家航空航天局
给你一些空间,并帮助把这一切绑起来: NASA 。在 Ariana 的前 5 名最慢的堵塞,结束很快,有一些“耶”的组合,它在交付速度上排名前 15,每分钟 220 个词。
麦当娜——创新
作为今天成为流行歌手的女性之一,麦当娜经历了她职业生涯的许多阶段也就不足为奇了,她的声音也是如此。当我们分析她的演变和每件作品从她过去的唱片到那时的差异时,我们可以看到,考虑到她的整个旅程,她是创新更多的艺术家。
作者图片
查看以下每位艺术家的轨迹:
与过去的唱片目录/作者图片相比,最具创新性的专辑
作者图片
在她的 14 张专辑中,色情、光线和硬糖是她唱片目录上的主要飞跃。这可以归因于与她以前作品的不同之处,包括在编曲中使用乐器,歌词中更积极的语气以及舞蹈性的增加。**
即使你从这三个项目中的每一个项目中分析一首歌,你也能很容易理解为什么它们如此不同。以她的第一个项目麦当娜和一首标志性歌曲如假日为例。例如,合成器带来的感觉良好的天真氛围与情色更性感的舞蹈氛围非常不同。我们可以看到的另一个亮点是硬糖的 4 分钟,它沉重的节奏和明显的嘻哈影响。**
TL;博士——挂断了
显然,麦当娜太难在一首歌中描述,但 挂了, 可能是我们能得到的最接近 。即使等待的人时间过得很慢,但如果你在等的是麦当娜,那也是值得的。她可以,也一定会再次创新。
如果你更喜欢柔和、多变、伟大的歌词、诅咒、高能、流行音乐、慢歌、舞曲或创新的声音,那就是你的选择。每个艺术家都有值得喜爱的地方;因此,如果你不知道,就要明白这与他们无关。
绝对是关于你的。
如何不用 REST API 搭建机器学习 Web App
(图片作者)
我希望我已经知道的事情:
使用 Streamlit
所以几周前,我的一个朋友正在做这个项目,使用 OpenCV 进行物体检测,她应该给它一个客户端。她在 GET/POST 请求之间挣扎了很久,最终放弃了这个项目。
我们都在某个时候遇到过这种情况,我们努力将我们的 ML 模型集成到我们的应用程序中。那一刻,我意识到许多数据科学/机器学习爱好者可能不知道这个行业的福利,称为 Streamlit!
那么…是什么?
Streamlit 是一个开源应用框架,它可以帮助数据科学家和机器学习工程师在几个小时内创建漂亮、高性能的应用!全是纯 Python。全部免费。
我应该用它是因为?
这是一个最小框架,也是目前构建强大的数据/机器学习应用的最快方式!
支持机器学习爱好者使用 Flask、Django 或其他工具部署而无需。
我再也不用担心那些回调了!
我再也不用担心那些 HTML 标签了!
经过简化的数据缓存加速了计算流水线!
让我们立即开始吧!
Streamlit 搜索每次保存的更改,并在您编码时即时更新应用程序。代码从上到下运行,总是从一个新的状态开始,绝对不需要回调。这是一个轻松而健壮的应用程序模型,让你以令人难以置信的速度构建丰富的 ui。
你只需要做以下事情:
该设置
还有**万岁!**几秒钟后,示例应用程序将在默认浏览器的新标签中打开。
另外,确保你已经安装了 Python 3.6 或更高版本。你可以在这里找到文档。
因此,事不宜迟,让我们开始制作一个功能齐全的多分类器机器学习 Web 应用程序。
进口货
进口货
加载和分割我们的数据集
在这个工作站中,我们从mushrooms.csv
文件中加载我们的蘑菇数据集,并将数据集分成通常的 7:3 (70%用于训练,30%用于测试)。这是一个关于蘑菇是否可食用或有毒的二元分类数据集。你可以在这里找到数据集。
在这里,@st.cache()
是一种缓存机制,它允许我们的 web 应用程序即使在从 web 加载数据、操作大型数据集或执行昂贵的计算时也能保持响应。
装载弹药
所以每次你用@st.cache
装饰器标记一个函数,它告诉 Streamlit,“嘿,你需要检查一些东西!”比如:
- 函数的输入参数
- 函数中使用的任何外部变量的值
- 函数的主体和
- 缓存函数中使用的任何函数的主体。
Streamlit 通过哈希来记录这些组件的变化。可以把缓存想象成一个简单的内存中的键值存储,其中键是上述所有内容的散列,值是通过引用传递的实际输出对象。
情节
所以我们从 sklearn 库导入了两条简单的曲线和一个混淆矩阵。我们通过metrics_list
到plot_metrics
,这将是客户选择的一个或多个选项。每个评估指标各自的功能如下:
评估指标
多重分类器
很高兴你能坚持到这里!现在我们到了最激动人心的部分。我们会给我们的客户,选择多个分类器!
对于这个应用,我们将使用支持向量机(SVM) 、逻辑回归和随机森林分类器。
支持向量机(SVM)
在支持向量机中,我们总是旨在增加*的余量。*永远记住,正则化参数( C)的值越大,余量越小。
如果客户选择 SVM,他们将可以通过内置小部件如单选按钮、多选和数字输入来定制超参数,如正则化参数©内核和内核系数。
超参数
定制好超参数后,我们准备好通过点击侧边栏上的分类按钮来训练我们的 SVM。
训练和绘制结果
逻辑回归
逻辑回归是一种机器学习分类算法,用于预测分类因变量的概率。
如果客户选择逻辑回归,他们可以选择定制超参数,如正则化参数©迭代次数,通过内置部件,如滑块和数字输入
逻辑回归
随机森林分类器
随机森林分类器被认为是一种高度准确和稳健的方法,因为有大量决策树参与该过程。它在随机选择的数据样本上创建决策树,从每棵树上获得一个预测,并通过投票选择最佳解决方案。
如果客户端选择随机森林分类器,他们可以选择定制超参数,如森林中的棵数、最大值。树的深度和通过内置小部件如单选按钮和数字输入构建树时的自举样本
随机森林分类器
浏览器
您的浏览器上会有这样的内容:
浏览器
现在你可以看到 Streamlit 的真正力量了。因此,没有正式的机器学习或编码背景的人可以使用你的 web 应用程序,只需通过触摸和点击控件来训练模型,并观察不同分类器的表现。
在这个基础项目中,只有少数内置函数投入使用。您可以随时探索更多并扩展您的机器学习 Web 应用程序的功能。
关于这个项目的完整代码,可以参考我的 GitHub。
保持安全直到下一次:3
我希望在加入 Metis 新加坡数据科学训练营之前就知道的事情
作为一个没有编码或统计背景的人,我在新加坡 Metis 数据科学训练营的亲身经历。
这并不意味着是一篇短短的 5 分钟的阅读(如果你想深入了解自己的处境,也不应该是这样)。剧透:每一天都是一场艰苦的战斗。
实际上,我在梅蒂斯训练营,2019 年 10 月 7 日至 12 月 27 日,彩色。图片来自 me.me
训练营结构
Metis 新加坡数据科学训练营是一个为期 12 周的密集计划,重点是 Python 编程,通过完成 5 个项目,您可以了解探索性数据分析(EDA)、统计建模和大数据工具。
众所周知,这些训练营非常紧张——事实也的确如此。想象一下将 1-2 年的信息压缩到 3 个月内。
每一天,我都从结对编程练习开始,抓紧时间休息 5 分钟,然后立即去上课。我会停下来吃午饭,然后回来上更多的课,通常在下午 3-4 点左右结束。
虽然课程已经结束,但我的一天还没有结束。无论我有多少空闲时间,我都在努力跟上我前一天(甚至更早)学到的概念,同时,在两周的期限内从事自我启动的项目。整个周期重复了整整 3 个月。
虽然这非常困难,但我不能说我完全没有从中受益。在训练营之前,我是一个自学狂(Youtube,LeetCode,阅读数据科学文章),并认为自己进展顺利。直到我进入训练营,这严重挑战了我的观点。我很高兴我这么做了,因为我会被困在我的小泡泡里,以为一切都很好,而事实上并不是这样。训练营让我意识到在数据科学领域还有很多要学,并让我具备了足够的知识来合法地自己开始。**
不要低估训练营
这是 极其 的统计和数学密集型,这些是我希望在加入之前就知道的事情,也是我给你的建议,不是 好有 而是 必须有 才能加入一个。
你必须拥有的东西
照片经由Amazon.com。差不多总结了你在营地必须要有的东西。购买并携带这个杯子参加训练营,获得额外积分
1.你一定喜欢图表
惊喜惊喜。这是一个与数据相关的字段。显然,你的大部分发现,如果不是全部的话,将会以图表的形式出现。你必须喜欢看图表,使用它们,调整它们(条形图,折线图,散点图等)。)而且你一定要喜欢与他们分享你的发现。
2.你怀疑一切
你质疑一切,想要验证呈现给你的事实/数字背后的真相。这一点很重要,因为你在一个数据相关的领域,你想知道你得到的数据是否有效。
如果这听起来像你,那就完美了,因为统计学作为一种工具,可以让你对数据集进行理解、量化以及测试有效性,这让你相信你的假设是正确的,你的模型是可行的。这就引出了我的下一个观点。
3.你必须很好地掌握统计学
你还必须知道如何(或者至少欣赏)以一种实用的方式应用统计学。在训练营只有 3 个月的时间,每天超快的节奏不会等到你完全理解了一个概念,第二天你就会被另一个人扇耳光。这也引出了我的下一个观点。
4.你必须有很好的数学技能
我说的是微积分,像 log,ln,微分方程等等。为了理解统计概念并理解如何使用它们,你需要对数学有很好的理解。如果你不这样做,你会开始意识到随着每一天的流逝,你会被遗忘在尘埃中。
如果你没有这些,我会说你会经历一段艰难的旅程。在加入之前,我甚至不知道什么是线性回归,如果你想让你的钱发挥最大作用并在训练营中生存下来,我建议你至少获得统计和数学的中级水平。
如果你认为你已经准备好了,而且前面提到的 4 点都很有趣,那就完美了!我们可以继续讨论如何应对接下来的 3 个月。
跟上训练营的步伐
1。有疑问时询问
如果你不知道也不问,你只是在伤害自己,因为如果你不知道,你会一直一无所知。如果你不知道内容,这并不荒谬(我的意思是——这就是你报名参加训练营的原因,对吗?).只有当你知道自己有疑虑却不去澄清时才是荒谬的。
2.你必须接受 不知道一切
我的意思不是说你没有尽最大努力,当你有知识失误时可以松懈——而是要意识到,在你开始进入下一步之前试图抓住的一切会导致你 太慢 和 会导致你最终什么都不做。
这甚至阻碍了我开始一个项目。在开始我的项目之前,我想知道每一点代码,首先学习线性回归,用一整套知识武装自己。结果,我只剩下很少的时间去做任何实际的工作 接近尾声 产生了不尽人意的结果 。
你永远不会在人生的每个阶段都知道所有的事情,也永远不会做好充分的准备。我从未想过我会如此老套地使用一句被滥用的名言,但正如耐克所说的那样,
“照做就是了”
真的——去做吧。会有很多时候你什么都不知道,这没关系。这就是你在训练营的原因。如果有什么,你可以随时咨询谷歌。你将会使用新的代码,即使你把它输入到你的 Jupyter 笔记本里,你也完全不知道,这没关系。因为你 会 学会后你会用它。
3.你必须有 的勇气 才能遵守纪律并坚持到底
你每天都必须前进。
最好的学习方法是通过一个 的迭代过程 。当你开始一个项目时,你会遇到许多障碍。尽管这很痛苦,但你不得不忍受不知道会发生什么——有时甚至不知道如何搜索答案,甚至不知道正确的问题。挺好的。坚持原则,坚持到底。如果你不知道,不要停留在原地。
试着问问题。试试谷歌搜索。尝试与人交谈,尝试咨询你的同学、你的讲师,甚至前一批学生(黑乌鸦(詹姆斯·吴)和爱德华·宾基帮了我大忙)。你会交到很多朋友,其中你最好的朋友是谷歌(说真的,谷歌是救命恩人。哦,还有 StackOverflow)。
在你解决了项目中的一个问题后,你会有一种巨大的成就感——然后立刻又陷入一个新的问题中(顺便说一下,这很正常)。这就引出了我的下一个观点…
4.你必须热爱持续学习
这个领域的事物是不断运动、变化的。老实说,编码曾经是独角兽技能。现在几乎每个人都可以编码。你必须保持领先,要想领先,你必须不断学习。你 拥有 去热爱学习的过程。
5.理解项目设计是一个迭代过程
苹果不是一天建成的,你在这个夏令营中着手的任何项目也不是。理解项目是一个持续的、建立在先前尝试基础上的过程。
你可以有一个令人印象深刻的最终目标,你想从你的项目中得到什么,并画出一个巨大的甘特图,你想如何去完成它,但现实是,会有很多障碍阻止你这样做(事情永远不会 100%按照计划进行)。
如果不能在第一次尝试中创造出令人惊奇的东西,不要如此犹豫。专注于 完成 先做简单的事情,做完之后再改进!
图片来自我自己的训练营课堂笔记
我认为上面的图像最好地呈现了项目设计的概念。制造汽车的想法从来都不是源于拥有汽车本身。它产生于对更好的交通选择的日益增长的需求和需要的总体想法。
同样,你的项目将遵循一个与此非常相似的过程。一个关于要实现什么的总体想法,在创建了第一个成品之后,你对它进行改进(甚至可能创建一个不同于你最初设想的产品)。
唷,训练营听起来有很多工作要做。
是的,是很多。这就是为什么它被称为训练营。并且知道这将会很难——没关系。你并不孤单。如果你一定要知道,这段时间我受了很多苦。想想看,熬夜到凌晨 4 点,为你的演示排练和制作幻灯片,在醒来淋浴、梳洗和去 Metis 做演示之前,只睡两个小时。
但确实变好了。因为随着每个项目的通过,你变得更加精通编码,更加熟悉 Python 及其语法,使用适当的统计软件包,并且在演示和交流方面变得更好(我必须说,这很棒,因为我喜欢和人说话)。这个过程是痛苦的,但当你回顾过去时,你会为你所取得的成就感到骄傲——熬过了那个疯狂而紧张的时间表,并且 拥有 5 个数据科学项目 。
就像我怎么强调项目设计是一个迭代的过程,你的学习也是。这里有一些提示,你可以在做项目时记住,同时跟上快节奏的教学大纲。
秘诀 1:早点开始,提前学习
保持领先于教学大纲。即使你还没有在课堂上讲述统计概念(使用哪种模型)或项目中要使用的编程语法,请继续阅读,并在课程计划的同时完成项目。
红色条=课程进度。灰色条=井…最理想的是你。图片来自 geeksaresexy.net
你是铺设铁轨的阿高,火车是课程。事情是这样的。完成你的项目,直到你在课堂上了解到你的新统计模型的那一刻,你准备好在课程结束时把它放进你的项目中。
技巧 2:多任务
时间管理将是一个巨大的问题,因为这个营地的最后期限很紧。然而,这些截止日期并不一定会成为你的败笔。
你的项目总是以一个 演示 和一个 博文 结束(不像这个,傻瓜。像我的其他关于我的项目的博客文章。不要等到你写完所有的代码和分析之后才开始写。
当你的模型训练的时候,或者当你运行一个很长的网页抓取器的时候,同时做你的幻灯片和写你的博客文章。发挥你的创造力,把零碎的工作放进去!
提示 3:甚至在夏令营开始前就决定项目想法
训练营的毕业要求是完成教学大纲中的所有 5 个项目,其中 4 个是自我发起和自我领导的项目,每个项目都有一个总体的统计概念,希望你在学会这些概念后展示出来(请遵循提示 1:早点开始,提前学习**)。**
项目二:线性回归
项目三:监督学习
项目四:自然语言处理
项目五:激情项目(随便你)
我建议在进入训练营之前,想出一些你想做的事情的想法,因为你的大部分时间将会花在学习训练营的材料上,而不是花在为项目做些什么的头脑风暴上。
它不需要非常具体,因为你可以在训练营进行的过程中完善这些想法(你也可以和你的教练和同学一起讨论这些想法)。但是,如果你不想为做什么而大惊小怪,同时又要跟上训练营中技术含量很高的材料,你至少要知道自己想做什么。
好的,谢谢,但是这仍然没有给我一个具体的想法,我应该做什么项目
记住你为什么在这个营地。你这样做是希望就业吗?你这样做只是为了提高技能吗?或许引用技术带头人的一句话可以对此有所启发。
“我不擅长编码,但我最起码的代码是有商业价值的。”
好的,这实际上并不是一字不差的,但很大程度上是从他的视频中推断出来的。你的代码/项目给世界带来了什么价值?一个好的编码者不是一个记忆存储器(一个记住编码语言中所有语法的人),而是一个知道他的产品能给世界带来什么价值的人。同样,你的项目应该是人们可以从中看到价值的项目。问自己这些问题:
- 雇主希望看到什么?
- 我想提供什么商业价值?
- 我对这个世界有什么迫切的问题,答案是什么?其他人能从这些知识中受益吗?
思路可以参考这个。如果没有,也非常欢迎你来探索我写的关于我在夏令营期间完成的项目的博客!
如果你对我到目前为止所说的一切没有一丝一毫的担心,那太好了!在野营之前去度假,因为那 3 个月将会是一次非常棒的旅行。如果没有,忘记这个假期,投入你的时间尽你所能为它做好准备,因为…那 3 个月将会是一段非常棒的旅程。
个人外卖
我还想补充一点,在我个人看来,只有当你已经决定要从事数据科学职业时,你才应该参加数据科学训练营。如果这是你的职业,当你还在 探索 的时候就不会了。否则,在训练营的每一天都将是折磨。已经有学生退学了(我不是想吓唬你,只是告诉你实际发生了什么)。
从实践中学习,而不是通过阅读
如果训练营的时间密集型结构教会了我什么的话,那就是你通过做来学习,而不是通过阅读。****
如果你不能用这些知识做任何有价值的事情,那么积累所有的 Coursera 或 Udemy 认证就毫无意义。向世界展示你能做的。正如 JomaTech 所说,**
***“如果你做了一个有趣的分析,但没有人阅读你的分析…你真的做了分析吗?”
- JomaTech 关于获得数据科学工作的 5 个技巧***
非常明智。
我个人打算通过从事侧重于现实世界应用的项目来丰富我的学习。在这个过程中,我相信我会遇到很多我不知道的东西,我会学到解决问题的东西,而不是学到很多没用的东西。
有时候你真的需要冷静下来
我知道我说了很多关于集训营紧张,多任务,勤奋和有纪律的学习,以及领先于教学大纲的事情。但事实是:没有人能连续三个月每天工作 18 小时。倦怠在训练营中很常见。有时候你得吃点镇静剂。
每个项目结束后,给自己一个奖励。休息一天来恢复精神,和你的同学一起喝点东西,随便什么。只要断开你自己与物质的联系,然后在你完成充电后再回来。
最后谢谢
我真的想说,我非常幸运,周围都是了不起的同学(他们远远超出了我的技能水平),当我在课程中遇到任何困难时,他们都非常有帮助地指导我。
我们也打了很多比赛(我们喝了很多酒),这有助于抵消训练营的压力。
感谢你的阅读,如果你想联系我,你可以通过我的 Linkedin 或者 xianjinseow92@gmail.com 联系我。
干杯!
制作第一个 ML 模型之前需要知道的事情
一系列重要但通常被遗忘的细节。
如果你已经完成了你的第一个关于机器学习的 MOOC(在 Coursera 上也叫做吴恩达),并且想在这个领域探索更多的机会,或者你是一个一直在观察数据科学和 ML 的人,并且想看看这个领域是否适合你,你就在正确的地方(实际上)学习了一些配方的成分,这些成分将帮助你在 ML 上大放异彩。
把 ML 分成几个部分,你现在应该关心的三个部分是-
- 数据,因为这是“数据”科学,
- 模型背后的数学,
- 编程。
在本文中,最大的关注点将放在数据上,所以我们先讨论另外两个。
模型背后的数学原理
在第一次运行 model.fit()和 model.predict()之前,没有必要知道算法是如何工作的,但是为了利用算法的实际能力,您需要了解它是如何工作的。逻辑回归是一种广义线性模型,因此输出连续数据的线性回归模型可以很容易地修改为给出类别作为结果。精度测量或参数值,一切都是某种形式的数学函数。
图模特合体()和模特预测()(图片来源)的火炬手
所以下一个问题是,“要知道多少数学知识?”这个问题的答案多少取决于你的目标是什么。如果你想成为一名研究人员,改善目前最先进的模型,你显然需要知道进入你的机器学习模型的每一点数学知识,因为这是你如何改善现有的,通过找到新的数学函数,对数据进行处理以产生更好的结果。如果你只是想在你的模型上得到足够好的符合你目标的预测,知道足够多的数学知识来完成这个项目就足够了。
编程
在你已经弄清楚你想要解决的问题和它的类型(分类、回归、聚类、排序等等)之后,ML 模型的编程就开始了。),做了必要的预处理,决定了从哪个算法开始。获得一个好的起点是很重要的——阅读任何相关的前期工作并编写代码;一旦你获得了一个基线精度,尝试不同的算法或建立在相同的基础上。这有助于理解正在发生的事情,以及下一步你需要做什么来实现你的目标。
尽可能多地记录下来,因为 6 个月后你很可能会忘记工作流程背后的逻辑。无论是编码者还是阅读代码的人,遵循良好的编码实践总是有帮助的。
数据
这是在很大程度上决定 ML 模型成功的部分,所以在这里花费最多的时间是最有意义的。
制作有用模型的先决条件是了解机器学习中使用的术语。
一个标签是我们预测的东西——简单线性回归中的 y 变量。
一个特征是一个输入变量——简单线性回归中的 x 变量。
一个例子是数据 x 的一个特殊实例。
这总是有助于更好地报告和记录模型,也有助于纠正错误。你可以通过谷歌查阅机器学习词汇表。
现在你可以开始了,ML 项目工作流程中的第一件事就是问题陈述。专注于传统编程难以解决的问题。思考你试图解决的问题实际上是否需要机器学习,这是一个很好的实践。如果你是从一场卡格尔比赛开始,你已经有了目标。但是,如果你想在真实世界的数据集上工作,首先制作最基本的情节,尝试找出变量之间的模式和关系,并基于这些推理,为自己构建一个问题陈述。这就是统计项目通常被处理的方式。
有时,我们可以得到客户的要求,使用特定的算法来解决问题。比如说,手头的数据是一个城市在一定时期内的日平均气温的时间序列。这里的问题陈述是使用监督学习来预测或预报 6 天的平均温度。
抽样资料
在这里,给出的只是一系列需要以某种方式转换成特征和标签的值。某一天的温度与前几天的温度并不完全不同。如果今天的气温是 20 摄氏度,明天就不可能是 10 摄氏度或 15 摄氏度,除非在非常情况下,否则气温一定接近 20 摄氏度。这个想法可以用来做我们的工作。
使用滑动窗口方法,前两个温度可用作当前温度(标签)的特征。考虑的特征数量也可以增加,并且任何监督算法都可以应用于这个问题。
定义问题陈述基本上就是弄清楚你想做什么,以及你想怎么做。这篇文章提供了更多关于这方面的信息。
既然需要解决的问题已经清楚了,解决问题的第一步就是探索性数据分析或 EDA。简单地说,EDA 正在了解数据集,寻找差异、缺失值、趋势和模式,如果有的话;一般理解,这样您就可以回答关于数据集的任何描述性问题,而不必每次都进行查找。
Daniel Bourke 的文章提供了一份很好的 EDA 清单。
在任何 ML 项目中,可视化都是关键。假设两个变量 x 和 y 具有以下属性,你能想到多少个差异巨大的数据集???
看哪,安斯康贝的四重奏!!!
虽然 4 个数据集共享相同的描述性度量,但它们彼此完全不同。给定的准确度为 67%的回归线将无法为第二或第四数据集提供良好的预测。
如果你觉得 EDA 只对表格数据集有帮助,你可以阅读 Andrej Karpathy 关于手动分类 CIFAR10 数据集的观察。
EDA 的另一个需要注意的方面是数据集中存在的要素的数据类型的重要性。如果您浏览任何网站,从必要的标签收集的数据有时是字符串格式的,这可能会被忽略,然后在训练模型时导致问题。同样,不是每种算法都适用于每种数据类型。因此,查看数据类型并选择适合 ML 模型的数据类型是一个很好的实践。
有时数据集不够大,因此可能不适合某些最大似然算法。除非明确指定,否则并不总是需要使用一种特定的算法;选择适合你的目标。对于简单的分类任务,使用决策树可以提供比 5 层神经网络更好的准确性,并且花费更少的时间。
ML 工作流中的一个主要组成部分是将数据集分成训练、测试和/或验证数据集。如果这些例子不是随机的或者是连续的,那么就需要仔细地进行划分,否则模型中就会出现偏差。你还需要确保分类任务中的职业平衡。
2015 年,这一案件曝光,当时谷歌照片应用程序的对象识别功能将两名黑人标记为大猩猩。这是一个真实世界的场景,其中一个产品是失败的,因为它是在一个数据集上训练的,该数据集对于某些类来说具有相当高的不平衡性。作为一名开发人员,没有人希望处于这样的境地,因此,一点点额外的关心总是有帮助的。
最近,在构建更好的模型方面,研究人员和数据科学家非常关注的一个概念是特征工程。
特征工程是将原始数据转换为能够更好地向预测模型呈现潜在问题的特征的过程,从而提高对未知数据的模型准确性
-杰森·布朗利,在探索功能工程,如何设计功能以及如何做好它
2014 年,在 DrivenData 举办的一场比赛中,参赛者需要构建一个机器学习算法,该算法可以自动将标签贴在不同的购买商品上,从而了解学校如何花钱来定制策略建议,以改善学生、教师和管理人员的成果。
如果你想到一个有潜力赢得比赛并成为最好的算法,你会想到哪些?胜出的模型是逻辑回归,它包含了许多精心创建的特性。这证明了特性工程的力量,也是你应该去看看的一个原因。你可以在这里了解更多关于这个挑战的信息。
现在你有了一个问题陈述和一个干净的工程数据集,你可以开始你的第一个 ML 模型了。有一件事永远不会被说得太多,那就是这个领域为尝试新的和不同的想法提供了很大的空间。随着难以置信的数据量的产生,构建新的有用的应用程序或改进现有应用程序有着巨大的空间和机会。请记住,在数据科学中,没有解决问题的正确方法,只要符合您的目的并能为您带来期望的结果,帮助您以诚实的方式成长和学习,就是正确的方法。
页(page 的缩写)你可以在这里找到一个很好的资源来学习这个话题。