KDNuggets 博客中文翻译(二百零六)
大型语言模型(LLMs)已经彻底改变了人工智能领域,提供了前所未有的自然语言理解和生成能力。然而,它们执行复杂推理任务的能力一直是密切研究的主题。一种在这方面表现出希望的技术是链式思维(CoT)提示。本文探讨了 CoT 提示的复杂性及其对 LLMs 未来的影响。
原文:KDNuggets
Python 领先于 11 个顶级数据科学、机器学习平台:趋势与分析
参考原文:
www.kdnuggets.com/2019/05/poll-top-data-science-machine-learning-platforms.html/2
区域参与
各地区的参与情况在美国略高,在欧洲略低于 2018 年,但与 2017 年的参与情况非常接近。
-
美国/加拿大,40.6%(对比去年 36.6%)
-
欧洲,33.3(对比 37.5%)
-
亚洲,12.1(对比 11.7%)
-
拉丁美洲,7.3(对比 6.6%)
-
非洲/中东,4.5%(持平)
-
澳大利亚/新西兰,2.3(对比 3.1%)
完整结果和 3 年趋势
下表详细显示了调查结果。
| KDnuggets 2019 年调查:您在过去 12 个月中用于实际项目的分析、大数据、数据科学、机器学习软件是什么? |
|---|
| 软件(2019 年投票人数) |
2019 年投票者百分比
2018 年投票者百分比
2017 年投票者百分比 |
| Python (1078) | ![]() ![]() ![]() |
|---|---|
| RapidMiner (839) | ![]() ![]() ![]() |
| R 语言 (764) | ![]() ![]() ![]() |
| Excel (571) | ![]() ![]() ![]() |
| Anaconda (556) | ![]() ![]() ![]() |
| SQL 语言 (538) | ![]() ![]() ![]() |
| Tensorflow (519) | ![]() ![]() ![]() |
| Keras (436) | ![]() ![]() ![]() |
| scikit-learn (418) | ![]() ![]() ![]() |
| Tableau (362) | ![]() ![]() ![]() |
| Apache Spark (345) | ![]() ![]() ![]() |
| Microsoft Power BI (217) | ![]() ![]() ![]() |
| XGBoost (208) | na na |
| Java (203) | ![]() ![]() ![]() |
| Hadoop:开源工具 (198) | ![]() ![]() ![]() |
| PyTorch (185) | ![]() ![]() ![]() |
| Microsoft SQL Server (184) | ![]() ![]() ![]() |
| KNIME (175) | ![]() ![]() ![]() |
| 其他免费分析/数据挖掘工具 (145) | ![]() ![]() ![]() |
| Hadoop 上的 SQL 工具 (138) | ![]() ![]() ![]() |
| Unix shell/awk (130) | ![]() ![]() ![]() |
| H2O.ai (117) | ![]() ![]() ![]() |
| C/C++ (116) | ![]() ![]() ![]() |
| Javascript (112) | na na |
| Weka (109) | ![]() ![]() ![]() |
| MATLAB (100) | ![]() ![]() ![]() |
| Apache Kafka (98) | na na |
| 其他编程和数据语言 (94) | ![]() ![]() ![]() |
| SAS Base (93) | ![]() ![]() ![]() |
| 其他深度学习工具 (92) | ![]() ![]() ![]() |
| IBM SPSS 统计 (87) | ![]() ![]() ![]() |
| 谷歌 Bigquery (86) | na na |
| 微软 Azure 机器学习 (77) | ![]() ![]() ![]() |
| Hadoop: 商业工具 (74) | ![]() ![]() ![]() |
| Alteryx (66) | ![]() ![]() ![]() |
| QlikView (60) | ![]() ![]() ![]() |
| Scala (57) | ![]() ![]() ![]() |
| SAS Enterprise Miner (55) | ![]() ![]() ![]() |
| MLlib - Spark ML 库 (52) | ![]() ![]() ![]() |
| Orange 数据挖掘 (51) | ![]() ![]() ![]() |
| LightGBM (50) | na na |
| 亚马逊机器学习/SageMaker (43) | ![]() ![]() ![]() |
| Databricks 统一分析平台 (43) | ![]() ![]() ![]() |
| BigML (43) | ![]() ![]() ![]() |
| DeepLearning4J (41) | ![]() ![]() ![]() |
| Other paid analytics/data mining/data science software (40) | ![]() ![]() ![]() |
| IBM SPSS Modeler (39) | ![]() ![]() ![]() |
| fastai library (39) | na na |
| Dataiku (33) | ![]() ![]() ![]() |
| Apache Storm (31) | na na |
| IBM DSX/Watson Studio (31) | ![]() ![]() ![]() |
| Gnu Octave (30) | ![]() ![]() ![]() |
| Pentaho (29) | ![]() ![]() ![]() |
| Microsoft other ML/Data Science tools (29) | ![]() ![]() ![]() |
| CatBoost (29) | na na |
| JMP (28) | ![]() ![]() ![]() |
| Apache MXnet (28) | ![]() ![]() ![]() |
| Julia (28) | ![]() ![]() ![]() |
| Teradata (27) | ![]() ![]() ![]() |
| Microsoft Cognitive Toolkit (27) | ![]() ![]() ![]() |
| Theano (26) | ![]() ![]() ![]() |
| IBM Cognos (23) | ![]() ![]() ![]() |
| Stata (22) | ![]() ![]() ![]() |
| 谷歌云 AutoML (21) | na na |
| MicroStrategy (21) | ![]() ![]() ![]() |
| DataRobot (21) | ![]() ![]() ![]() |
| Rattle 数据挖掘 (21) | ![]() ![]() ![]() |
| Perl (21) | ![]() ![]() ![]() |
| 微软机器学习服务器 (20) | ![]() ![]() ![]() |
| TIBCO Spotfire (19) | ![]() ![]() ![]() |
| SAP Analytics/预测分析 (18) | ![]() ![]() ![]() |
| Cloudera 数据科学工作台 (18) | na na |
| Minitab/Salford 预测模型 (17) | ![]() ![]() ![]() |
| Mathematica (17) | ![]() ![]() ![]() |
| C4.5/C5.0/See5 (17) | ![]() ![]() ![]() |
| Solver (前身 XLMiner) (15) | ![]() ![]() ![]() |
| Torch (15) | ![]() ![]() ![]() |
| Flink (13) | na na |
| SAP HANA (13) | ![]() ![]() ![]() |
| TFLearn (12) | ![]() ![]() ![]() |
| Looker (10) | na na |
| Sqream (10) | na na |
| Caffe (10) | ![]() ![]() ![]() |
| WSO2 Stream Processor (9) | na na |
| Gurobi (9) | na na |
| Lisp (7) | ![]() ![]() ![]() |
| TIBCO Data Science (6) | ![]() ![]() ![]() |
| Sisense (5) | na na |
| BayesiaLab (5) | ![]() ![]() ![]() |
| Altair/Datawatch/Angoss (5) | ![]() ![]() ![]() |
| Vowpal Wabbit (5) | ![]() ![]() ![]() |
| Datameer (4) | na na |
| Oracle Data Science Platform (4) | ![]() ![]() ![]() |
| Domino Data Labs (4) | ![]() ![]() ![]() |
| Mode Analytics (4) | na na |
这里是之前 KDnuggets 关于分析、数据挖掘、数据科学软件的调查结果:
-
开源数据科学/机器学习生态系统的 6 个组成部分;Python 是否在 R 语言面前宣告胜利?,2018 年 6 月。
-
Python 蚕食 R 语言:2018 年分析、数据科学、机器学习领域的顶级软件 - 趋势与分析,2018 年 5 月。
-
分析、数据科学、机器学习软件的最新领军者、趋势和惊喜,2017
-
R 和 Python 争夺顶级分析、数据科学软件,2016
-
R 领跑 RapidMiner,Python 追赶,大数据工具增长,Spark 点燃,2015
-
RapidMiner 继续领先,2014
-
RapidMiner 和 R 争夺第一名,2013
-
KDnuggets 2012 投票:分析、数据挖掘、大数据软件使用情况
-
KDnuggets 2011 投票:数据挖掘/分析工具使用情况
-
KDnuggets 2010 投票:数据挖掘/分析工具使用情况
-
KDnuggets 2009 投票:数据挖掘工具使用情况
-
KDnuggets 2008 投票:数据挖掘软件使用情况
-
KDnuggets 2007 投票:数据挖掘/分析软件工具
更多相关内容
主要变化:2020/21 年分析、数据科学和机器学习的应用领域
原文:
www.kdnuggets.com/2021/06/poll-where-analytics-data-science-ml-applied.html
评论拥有像 KDnuggets 这样长期运行的网站的一个优势是能够审视趋势并将调查结果与我们过去进行的类似调查结果进行比较。最新的调查结果与之前的结果进行比较显示了重大变化,许多传统的数据科学应用领域如 CRM 出现了大幅下降,而计算机视觉、农业、COVID 和教育等领域则有所增长。
最新的 KDnuggets 调查询问了
你在 2020/21 年应用了哪些分析、数据科学和机器学习?
这项调查显示了应用领域的显著变化。排名第一的是计算机视觉(2018 年的调查中没有涉及),其次是金融(2018 年没有涉及)。长期排名第一的 CRM/消费者应用领域已降至第三位。
下面是份额超过 10%的主要应用领域:
-
计算机视觉 / 图像识别,15.0%
-
金融,14.5%
-
CRM/消费者分析,13.9%
-
医疗保健,13.2%
-
教育,12.8%
-
银行,12.3%
-
COVID,11.4%
-
电子商务,11.0%
-
科学,10.7%
接下来,我们将 2020/21 年的应用领域与 2018 年的结果进行比较 - 见图 1。我们注意到大多数应用领域标记为红色,表示它们的份额下降。
图 1:2020/21 年与 2018 年相比的人工智能、数据科学和机器学习的应用领域,前六大领域在 2020/21 年份额至少为 6%。
两个领域:计算机视觉和 COVID 在 2018 年的调查中没有涉及,并在 Y 轴上显示为灰色圆圈。
形状大小对应于 2020/21 年调查中的份额。
形状表示变化的方向,上升或下降。
颜色对应于百分比变化,绿色表示增加,红色表示减少。
本次调查中新出现的应用领域有
-
计算机视觉 / 图像识别,15.0%
-
COVID,11.4%
-
体育 / 电竞,4.5%
-
语音识别,3.6%
-
食品配送,2.5%
-
犯罪 / 警务,2.2%
-
约会,0.7%
只有 3 个领域的份额增加超过 10%:
-
农业,39.6%
-
其他,17.4%
-
电信 / 有线电视,11.7%
另一方面,24 个领域的份额下降超过 10%,其中 18 个领域的下降幅度超过 20%:
-
社会政策 / 调查,-56%
-
保险,-55%
-
旅行 / 酒店业,-44%
-
垃圾邮件 / 反垃圾邮件,-35%
-
制造业,-31%
-
娱乐 / 音乐 / 电视 / 电影,-31%
-
供应链,-28%
-
移动应用,-28%
-
欺诈检测,-28%
-
银行,-28%
-
零售,-26%
-
投资 / 股票,-26%
-
游戏,-26%
-
CRM/消费者分析,-25%
-
采矿,-24%
-
医疗保健,-23%
-
科学,-21%
-
社会公益 / 非营利组织,-20%
这是另一种查看这些数据的方式,由Cong Tran创建。 
图 2:分析、数据科学、机器学习应用领域的范围图:2020/21 与 2018 年对比
本次调查共收到 447 人的回应,而 2019 年的调查为 435 人。平均受访者选择了 2.9 个领域,而 2019 年为 3.0,2018 年为 2.8,因此数据科学家平均仍在大约 3 个不同领域工作。
最后,这里是一个更详细的表格。
| 应用领域 | 2020/21 年份额 | 2018 年份额 | 与 2018 年对比变化 |
|---|---|---|---|
| 计算机视觉 / 图像识别 | 15.0% | 新增 | 无数据 |
| 金融 | 14.5% | 16.1% | -9.6% |
| 客户关系管理/消费者分析 | 13.9% | 18.6% | -25.5% |
| 医疗保健 | 13.2% | 17.2% | -23.4% |
| 教育 | 12.8% | 11.7% | 8.8% |
| 银行业 | 12.3% | 17.0% | -27.7% |
| COVID | 11.4% | 新增 | 无数据 |
| 电子商务 | 11.0% | 12.6% | -13.3% |
| 科学 | 10.7% | 13.6% | -20.8% |
| 其他 | 9.2% | 7.8% | 17.4% |
| 广告 | 8.5% | 9.0% | -5.2% |
| 欺诈检测 | 7.6% | 10.6% | -28.1% |
| 软件 | 7.6% | 8.3% | -8.1% |
| 农业 | 7.4% | 5.3% | 39.6% |
| 汽车/自动驾驶汽车 | 7.2% | 7.6% | -5.6% |
| 制造业 | 6.9% | 10.1% | -31.4% |
| 零售 | 6.9% | 9.4% | -26.4% |
| 电信 / 有线电视 | 6.9% | 6.2% | 11.7% |
| 政府 / 军事 | 6.7% | 6.4% | 4.3% |
| IT / 网络基础设施 | 6.7% | 8.3% | -18.9% |
| 医疗/制药 | 6.7% | 7.8% | -14.1% |
| 石油 / 天然气 / 能源 | 6.5% | 7.1% | -9.0% |
| 生物技术/基因组学 | 6.3% | 6.7% | -6.0% |
| 供应链 | 6.3% | 8.7% | -28.3% |
| 信用评分 | 5.8% | 7.1% | -18.4% |
| 人力资源/劳动力分析 | 5.8% | 5.7% | 1.2% |
| 搜索 / 网络内容挖掘 | 5.4% | 5.7% | -6.6% |
| 社交媒体 / 社交网络 | 5.4% | 6.0% | -10.2% |
| 投资 / 股票 | 4.9% | 6.7% | -26.2% |
| 体育 / 电竞 | 4.5% | 新增 | 无数据 |
| 直接营销/筹款 | 4.0% | 4.4% | -7.8% |
| 保险 | 3.8% | 8.5% | -55.3% |
| 语音识别 | 3.6% | 新增 | 无数据 |
| 娱乐/音乐/电视/电影 | 3.4% | 4.8% | -30.5% |
| 矿业 | 3.1% | 4.1% | -24.3% |
| 移动应用 | 3.1% | 4.4% | -28.3% |
| 游戏 | 2.9% | 3.9% | -25.6% |
| 旅行 / 酒店 | 2.7% | 4.8% | -44.4% |
| 安全 / 反恐 | 2.5% | 3.0% | -17.7% |
| 食品配送 | 2.5% | 新增 | 无数据 |
| 犯罪 / 警务 | 2.2% | 新增 | 无数据 |
| 社会公益 / 非营利 | 2.0% | 2.5% | -20.4% |
| 垃圾邮件 / 反垃圾邮件 | 1.8% | 2.8% | -35.1% |
| 社会政策 / 调查分析 | 1.1% | 2.5% | -55.8% |
| 约会 | 0.7% | 新增 | 无数据 |
相关:
更多相关话题
流行的深度学习工具 – 一项综述
原文:
www.kdnuggets.com/2015/06/popular-deep-learning-tools.html
评论
深度学习现在是人工智能和机器学习中最热门的趋势之一,每天都有令人惊叹的新成就报告,比如 在智商测试中表现优于人类。
在 2015 KDnuggets 软件调查 中,新增了深度学习工具的类别,该调查中列出了最受欢迎的工具。
-
Pylearn2 (55 用户)
-
Theano (50)
-
Caffe (29)
-
Torch (27)
-
Cuda-convnet (17)
-
Deeplearning4j (12)
-
其他深度学习工具 (106)
我没有使用过所有这些工具,因此这是基于它们的主页和教程的简要总结。
Theano 和 Pylearn2 都是在蒙特利尔大学开发的,主要开发者来自由约书亚·本吉奥领导的 LISA 组。Theano 是一个 Python 库,你也可以将其视为数学表达式编译器。它适合从头开始创建算法。这里 是一个直观的 Theano 训练示例。
如果我们想使用标准算法,我们可以将 Pylearn2 插件编写为 Theano 表达式,Theano 会优化和稳定这些表达式。它包括多层感知器/RBM/堆叠去噪自编码器/ConvNets 所需的所有内容。这里 是一个快速入门教程,带你了解 Pylearn2 的一些基本概念。
Caffe 由伯克利视觉与学习中心开发,由杨青贾创建,并由埃文·谢尔哈默领导。它是用 C++ 实现的快速且可读的 ConvNets 实现。如其官方网站所示,Caffe 能够使用一块 NVIDIA K40 GPU 和 AlexNet 每天处理超过 60M 张图像。它可以作为图像分类的工具包使用,但不适用于其他深度学习应用,如文本或语音。
Torch 是用 Lua 编写的,应用于 NYU、Facebook AI 实验室和 Google DeepMind。它声称提供一个类似 MATLAB 的环境,用于机器学习算法。为什么他们选择 Lua/LuaJIT 而不是更流行的 Python?他们在 Torch7 论文 中提到,“Lua 可以很容易地与 C 集成,因此在几小时的工作内,任何 C 或 C++ 库都可以成为 Lua 库。” Lua 用纯 ANSI C 编写,可以很容易地编译为任意目标。
OverFeat 是一个在 ImageNet 数据集上用 Torch7 训练的特征提取器,也很容易入门。
Cuda:
毫无疑问,如今 GPU 加速了深度学习研究。有关 GPU,尤其是 Nvidia Cuda 的新闻遍布互联网。 Cuda-convnet/CuDNN 支持所有主流软件,如 Caffe、Torch 和 Theano,且非常容易启用。
与上述软件包不同,Deeplearning4j 旨在用于商业环境,而非作为研究工具。正如其介绍所述,DL4J 是一个“基于 Java 的、面向行业的、商业支持的、分布式深度学习框架。”
比较
这些工具似乎在速度和易用性方面进行友好的竞争。
Caffe 开发者表示:“Caffe 是最快的 convnet 实现。”
Torch7 在大多数基准测试中被证明比 Theano 更快,如 Torch7 论文 所示。
Soumith 提供了他对所有公开开源实现的 convnet 基准测试。

一些流行深度学习工具的比较表列在 Caffe 论文 中。

有关“最佳深度神经网络框架”的讨论可以在 reddit 上找到。DL4J 网站上也提供了 DL4J 与 Torch 与 Theano 与 Caffe 的比较。
相关:
-
R 领先于 RapidMiner,Python 赶上来,大数据工具增长,Spark 点燃
-
在哪里学习深度学习 – 课程、教程、软件
-
CuDNN – 深度学习的新库
你最喜欢的深度学习软件包是什么?
我们的前三个课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织进行 IT
更多相关话题
哈佛大学的最受欢迎编程入门课程免费提供!
原文:
www.kdnuggets.com/2022/03/popular-intro-programming-course-harvard-free.html

如果你有兴趣追求美国最佳工作之一,那么学习和理解计算机科学是必不可少的。
我们的三大推荐课程
1. Google 网络安全证书 - 快速进入网络安全职业道路。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT 需求
哈佛大学,全球顶尖学校之一,提供名为 CS50 的热门编程课程,教授计算机科学的基础知识。这些课程通过由哈佛共同创办的电子学习平台edX进行。这些课程免费注册,但你可以选择支付费用以获得证书,这可以添加到你的简历或 LinkedIn 上。
CS50 课程非常受欢迎,适合没有计算机科学经验的学员到了解编程的人。2005 年 12 月 7 日,Mark Zuckerberg 在 Michael D. Smith 教授的带领下,参加了关于 Facebook 和计算机科学的 CS50 客座讲座。
CS50 目前是哈佛大学最大的课程,已有 3,493,337 人注册。
CS50 的计算机科学导论
CS50 的计算机科学导论在哈佛校园内的注册人数最多,并且是 edX 有史以来的前 100 门课程之一。该课程由 David J. Malan、Doug Lloyd 和 Brian Yu 教授,是哈佛大学最大的课程。
-
课程语言: 英语
-
课程时长? 预计 12 周,每周 6–18 小时
-
难度级别? 入门级
-
费用: 免费,验证证书$149。完成 9 个问题集和最终项目并获得满意成绩的学生有资格获得证书。
-
edX 链接: CS50 的计算机科学导论
-
YouTube 链接: CS50 的计算机科学导论
-
GitHub 链接: CS50
-
Discord 链接:
discord.gg/T8QZqRx -
Twitter:
twitter.com/cs50课程安排
讲座 0 - Scratch
这是 CS50 的第 0 周,你将学习计算机科学的基础知识,以及如何使用它来解决问题。内容涉及数字的表示,例如十进制和二进制,以及文本的 ASCII 字符编码。
其他话题包括图像、视频、声音、算法如何用于解决问题,以及如何编写伪代码。你对编程的初步理解将使用一种叫做Scratch的图形编程语言,探索抽象和条件语句。
讲座 1 - C
这是 CS50 的第 1 周,你将学习编程语言 C。你将深入了解流行的 IDE,如 Visual Studio Code,并掌握编译器和接口。
之后,你将进一步探讨诸如函数、参数、返回值、变量和学习新命令等主题。本讲座还包括类型、格式代码、运算符、条件语句、布尔表达式、循环等内容。
讲座 2 - 数组
这是 CS50 的第 2 周。在这一阶段,你应该已经理解了计算机科学的基本概念以及如何使用编程语言 C 来返回值、进行循环,并了解你可能遇到的数据类型。
本讲座涵盖的主题包括编译、调试、内存、数组、字符、字符串、命令行参数,以及通过打印“hello, world”、你的名字等内容来帮助你更清楚地理解这些主题。
讲座 3 - 算法
这是 CS50 的第 3 周,你将学习算法。在这讲座中,你将利用前一讲座中的所有基础知识和解决问题的工具,并将它们嵌入到算法如何解决数组问题中。
涵盖的主题包括线性/二分查找、使用代码进行搜索、结构体、排序和选择数据、递归和归并排序。这些主题将帮助你欣赏算法如何用于解决许多简单问题。
讲座 4 - 内存
这是 CS50 的第 4 周,你可能已经大致了解了内存以及数组如何用于存储数据。本讲座进一步探讨了数据存储的详细理解。
本讲座的主题包括像素、十六进制、地址、指针、字符串、指针运算、内存分配、垃圾值、文件、JPEG 等。每个主题的视觉表现帮助你理解每个概念及数据存储方式。
讲座 5 - 数据结构
这是 CS50 的第 5 周,本讲座将帮助你更深入了解数据结构及其不同类型。本讲座重点讨论数组和内存,以及如何分配更多内存并移动数组。
主题包括回顾、链表、动态数组、动态链表、实现链表、树及其他数据结构相关内容。
讲座 6 - Python
这是 CS50 的第 6 周,你将学习一种新的编程语言:Python!它将通过之前的示例讲解 C 和 Python 之间的相似性。
因此,主题与讲座 1 - C 相似,但有一些额外内容。这些包括 Python 语法、库、输入、条件、文档、列表、字符串、命令行参数、退出代码、算法、文件及更多库。
讲座 7 - SQL
这是 CS50 的第 7 周,主要关注 SQL,这是一种流行的标准化编程语言,用于管理关系数据库并对数据库中的数据执行操作。
你将涵盖的主题包括不同的文件类型、数据清理、关系数据库、SQL 及其功能、SQLite、主键/外键等。SQL 是一种非常流行的编程语言,比 SQL 容易学习得多。
讲座 8 - HTML, CSS, JavaScript
这是 CS50 的第 8 周,你将学习更多编程语言。HTML、CSS 和 JavaScript 相辅相成。HTML 提供网站的基本结构,CSS 控制网站的呈现、格式和布局,而 JavaScript 则控制不同元素的行为。
你将学习有关互联网和网站的所有知识,例如路由器、IP 地址、HTTP、URL 参数、HTML、CSS 和 JavaScript 元素。
安全
本讲座虽然不完全属于计算机科学,但它是整体技术的重要组成部分。它深入探讨了如何保护你的计算机、笔记本电脑、数据和手机的安全。
这一讲包含的主题有密码、暴力破解攻击、双因素认证、密码管理器和加密。
第 9 讲 - Flask
这是 CS50 的第 9 周课程,在这一讲中,你将学习 Flask,这是一种用 Python 编写的微型 Web 框架,提供创建 Web 应用程序的有用工具。
你将学习有关 Web 服务器、模板、布局、错误检查、数据存储、数据库等内容。
人工智能
与安全讲座一样,这一讲也不属于 CS50 大纲的一部分,但了解人工智能及其应用仍然很重要。人工智能是数据科学家需求增加的原因之一。
主题包括决策制定、决策树、启发式方法、强化学习、神经网络等。
第 10 讲 - 伦理
这是 CS50 的第 10 周课程,即本课程的最后一讲。这一讲将回顾你所学到的工具和技能,以及如何继续成长和实施它们。它还将讨论计算思维以及总体技术背后的伦理。
你将学到的内容概述
-
这是一个入门级课程,教授和指导学生使用编程的步骤序列有效解决特定问题。
-
理解编程语言,如 C、Python、SQL、JavaScript、CSS 和 HTML。
-
主题包括抽象、算法、数据结构、封装、资源管理、安全、软件工程和 Web 开发。
-
现实世界的问题,如金融取证、密码学和游戏。
**Nisha Arya**是一位数据科学家和自由技术作家。她特别关注提供数据科学职业建议或教程以及围绕数据科学的理论知识。她还希望探索人工智能如何有益于人类生命的延续。她是一个热衷于学习的人,寻求拓宽技术知识和写作技能,同时帮助指导他人。
更多相关内容
-
常见的机器学习算法
原文:
www.kdnuggets.com/2022/05/popular-machine-learning-algorithms.html
在开始学习数据科学时,有很多内容需要学习,这可能会让人感到相当不知所措。如果你需要对数据科学的基础知识有更多的了解,可以查看这篇文章:初学者最佳数据科学书籍。
本指南将帮助有志于数据科学和机器学习工程的人员获得更好的知识和经验。我将列出不同类型的机器学习算法,这些算法可以在 Python 和 R 中使用。
1. 线性回归

来源:维基百科
线性回归是最简单的机器学习算法,源自监督学习。它主要用于解决回归问题,并利用独立变量的知识对连续因变量进行预测。
线性回归的目标是找到最佳拟合线,这有助于预测连续因变量的输出。例如,连续值包括房价、年龄和工资。
简单线性回归是一种模型,它使用直线来估计一个独立变量与一个因变量之间的关系。多元线性回归则包括两个以上的独立变量。
2. 逻辑回归

来源:维基百科
逻辑回归是另一种从监督学习中分支出来的机器学习算法。它可以用于回归和分类任务,但主要用于分类。如果你想了解更多关于逻辑回归在分类任务中的应用,请点击链接。
逻辑回归用于预测具有独立变量知识的分类因变量。其目的是对输出进行分类,这些输出只能是 0 或 1。输入的加权和通过一个称为Sigmoid 函数的激活函数,该函数将值映射到 0 和 1 之间。
逻辑回归基于最大似然估计,这是一种估计假定概率分布参数的方法,给定一些观察到的数据。
在线性回归和逻辑回归之间容易感到困惑,因此如果你想对这两者有更深入的了解,可以阅读这篇文章:线性回归与逻辑回归:简明解释。
3. 决策树

来源:explorium
决策树是另一种机器学习算法,分支自监督学习。决策树算法可以用于回归和分类问题。
这是一个树状模型,用于通过直观展示决策及其潜在结果、后果和成本来进行决策过程。这个概念类似于人类思维;通过将数据分割成部分。随着我们尽可能多地细化数据,我们将它们分割成独特的片段。
决策树的整体目标是创建一个可以用来预测目标变量类别的训练模型。
决策树有两种类型,取决于目标变量的类型:
-
分类变量:决策树的目标变量为分类的。
-
连续变量:决策树的目标变量为连续的。
4. 随机森林®

来源: 维基百科
下一个机器学习算法是随机森林算法,这是一种广泛用于分类和回归问题的监督机器学习算法。与决策树一样,它也是一种基于树的算法。然而,随机森林算法使用多个决策树来做出决策——一片树的森林。
随机森林算法使用包含连续变量的数据集来处理回归任务,而使用分类变量来处理分类任务。
随机森林算法是一种集成方法,这意味着结合多个模型,使用一组模型来进行预测,而不是使用单一模型。
集成方法使用两种类型的方法:
-
Bagging:这会生成额外的数据用于训练数据集。这样做是为了减少预测中的方差。
-
Boosting:这将弱学习器结合起来,通过创建序列模型将其转变为强学习器,从而使最终模型具有最高的准确性。
5. 朴素贝叶斯

来源: Medium
朴素贝叶斯是一种基于贝叶斯定理的分类技术。贝叶斯定理是用于计算条件概率的数学公式。
上述公式为:
-
E 发生的可能性在 H 发生的条件下(后验概率)
-
E 发生的可能性在 H 发生的条件下
-
H 自己发生的可能性
-
E 自己发生的可能性
它假设当一个特征在一个类别中存在时,与其他特征的存在无关。它基于各种属性预测不同类别的概率。具有最高概率的类别被认为是最可能的类别。
朴素贝叶斯不是单一算法,而是多个算法,它们都共享一个共同的原则,基于贝叶斯定理。
6. k-最近邻

来源:rapidminer
kNN,即 K-最近邻算法,是一种从监督学习中衍生出的算法,可用于解决分类和回归问题。KNN 算法假设相似的事物会靠得很近。我记住它是“物以类聚”。
kNN 使用距离、接近度或亲密度的概念来衡量其他数据点之间的相似性。通过一种数学方法计算图上点之间的距离,然后根据最近的标记观测数据点为未观测数据进行标记。
为了找到最接近的相似点,你需要找到数据点之间的距离。这可以通过使用欧几里得距离、汉明距离、曼哈顿距离和闵可夫斯基距离等距离度量来完成。
K 被称为最近邻居的数量,一般是一个奇数。
7. K-Means

来源:Wikimedia
K-means 聚类是一种从无监督学习中衍生的机器学习算法。它是一种聚类算法,将相似的项目/数据点分组为簇,其中组的数量称为 K。
簇内的数据点被认为是同质的,而与同类组相比则是异质的。
K-means 通过找到这些数据点之间的相似性并将它们分组为簇来实现:
-
选择 k 值。
-
初始化质心。
-
选择分组并计算平均值。
为了确定 k 值,你可以使用两种方法:
-
Elbow Method
-
Silhouette Method
8. 降维

来源:TDS
降维是一种减少训练数据中输入变量数量的技术。通俗来说,就是减少特征集的维度。假设你有一个包含一百列的数据集,降维会将列数减少到二十。
当特征数量增加时,模型会自动变得更复杂,并且过拟合的可能性更高。
维度诅咒是处理高维数据时最大的问题,指的是当数据具有过多特征时的情况。
降维可以通过以下组件实现:
-
特征选择用于识别和选择相关特征。
-
特征工程通过现有特征手动生成新特征。
降维的方法包括:
-
主成分分析 (PCA)
-
线性判别分析 (LDA)
-
广义判别分析 (GDA)
结论
现在你对数据科学家日常生活中使用的流行机器学习算法有了很好的理解。
如果你想知道进一步扩展知识的资源,可以阅读这篇文章:2022 年你需要阅读的机器学习书籍
RANDOM FORESTS 和 RANDOMFORESTS 是 Minitab, LLC 的注册商标。
尼莎·阿雅 是一名数据科学家和自由职业技术作家。她特别关注提供数据科学职业建议或教程以及数据科学相关理论知识。她还希望探索人工智能如何/可以有助于延长人类生命。她是一位热衷于学习的人,寻求拓宽她的技术知识和写作技能,同时帮助指导他人。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 领域
更多相关话题
流行的机器学习面试问题,第二部分
原文:
www.kdnuggets.com/2021/01/popular-machine-learning-interview-questions-part2.html
评论
作者 Mo Daoud,从事技术工作,AI 爱好者。
本文是我 流行的机器学习面试问题 的第二部分。
在这里,我展示了在面试中我通常看到的更多问题。我必须说明,这不是一份面试准备指南,也不是所有问题的完整列表。相反,你应该将这篇文章作为复习你机器学习知识的材料。我建议你在阅读答案之前先阅读问题,并尝试自己回答。这样,你可以验证你的知识,并发现技能上的差距。让我们开始吧。

图片由 Gabrielle Henderson 提供,来源于 Unsplash。
Q1. 人工神经网络 (ANN)、卷积神经网络 (CNN) 和递归神经网络 (RNN) 之间有什么区别?
ANN 代表 人工神经网络,这是深度学习的基础。在 ANN 中,我们有层、神经元、激活函数、权重和反向传播。你应该对这些术语都很熟悉。如果不熟悉,可以阅读 神经元、激活函数、反向传播、时期、梯度下降:这些是什么?
我通常发现候选人在面试时通过绘图来说明他们的想法并确认他们的知识。绘制以下图表将帮助你进一步解释 ANN 以及它是如何学习的。

人工神经网络:学习步骤。图片作者。
CNN 是一个 卷积神经网络,主要应用于计算机视觉和视频分析。CNN 处理如何将图像输入到人工神经网络中,如何捕捉图像的重要特征并将其转换为可以输入神经网络的格式。
CNN 处理图像并经过以下步骤
1 - 卷积
图像被转换为 0 和 1,然后乘以特征检测器以生成特征图。此步骤的主要原因是为了减少输入图像的大小。可能会丢失一些信息,但图像的主要特征将被捕捉到。通常,图像会被多个特征检测器处理,生成多个特征图。这些特征图会经过一个函数,通常是 ReLU,以确保图像中的非线性。
2 - 池化
有几种池化操作,但最常见的是最大池化。它教会网络空间变异性。简单来说,就是即使图像被颠倒、倾斜,或从远处或近处拍摄,网络也能识别图像特征。这种操作的输出是一个池化特征图。
3 - 展平
这个操作的目的是能够将池化特征图输入到神经网络中。
下面的图示展示了整个卷积神经网络(CNN)操作。

卷积神经网络。图片由作者提供。
如你所见,CNN 的展平输出包含了图像特征,并且以可以输入到人工神经网络(ANN)的格式呈现。
RNN 是 递归神经网络,主要用于时间序列问题,如股票市场预测。它们以 LSTM(长短期记忆)而闻名。与人工神经网络(ANN)类似,RNN 也有输入层和输出层以及多个中间层的神经元,但主要区别在于 RNN 神经元具有某种短期记忆。这种短期记忆使得神经元能够记住之前在该神经元中的内容。这就是为什么 RNN 适用于时间序列问题和翻译的原因,因为网络需要了解之前翻译的词汇,以便生成连贯的句子,而不仅仅是逐词翻译。
这个问题是我最喜欢的问题之一,因为它展示了对神经网络主要概念的总体理解。
Q2. AI、ML 和 DL 之间的区别是什么?
这是一个简单的问题,但许多人却答错了。主要是要知道人工智能是一个通用术语,然后给出一些例子。
人工智能 是让计算机在决策、文本处理、翻译等方面像人类一样行为的科学。人工智能是一个大的伞,机器学习和深度学习都在它之下。
每个机器学习算法都被认为是人工智能(AI),但不是所有的人工智能算法都被认为是机器学习。

AI、ML 和 DL 之间的关系。图片由作者提供。
机器学习:你选择模型进行训练,并且 手动 执行特征提取,以便模型进行学习。
深度学习:你设计神经网络的架构,特征从提供的标记训练数据中被 自动 提取。

机器学习与深度学习之间的区别。图片由作者提供。
Q3. 什么是矩阵分解机器算法,它们用于什么?
因式分解机可以用于分类或回归,并且在处理大规模稀疏数据集时,比传统算法如线性回归更加高效。这种特性使得因式分解机在推荐系统中被广泛应用。因式分解机是监督学习算法,主要用于处理稀疏数据。然而,它们不进行降维。因式分解机的一个应用例子是广告点击预测和商品推荐。
Q4. 如何使用非常不平衡的数据集创建模型?例如,处理信用卡欺诈数据时,真实欺诈案例非常少,而大多数案例都是非欺诈性的。
使用不平衡数据集创建模型会导致结果不佳,尤其是对更多训练数据(在我们这个例子中是非欺诈性交易)有偏向。你绝不应使用不平衡数据集来创建模型。解决方案是尽量收集更多平衡的数据,如果不可能,则可以使用**SMOTE(合成少数类过采样)或随机过采样(ROS)**对数据进行过采样。

SMOTE 技术用于平衡数据集。图片来源:作者。
SMOTE技术会生成新的少数类观察值,在这个例子中是欺诈性观察值。这些合成观察值几乎与原始欺诈性观察值相同。该技术迅速有效,但其生成的合成观察值类型不如其他过采样技术创造的独特观察值有用。
Q5. 什么是正则化,L1 和 L2 正则化有什么区别?
在机器学习中,正则化是对参数进行约束、规整或使系数估计向零收缩的过程。换句话说,这种技术会抑制学习更复杂或更灵活的模型,从而避免过拟合的风险。正则化基本上是随着模型复杂性的增加而增加惩罚,这有助于避免过拟合。
L1 有效地去除不重要的特征,过于激进的去除可能导致欠拟合。L2 则对每个特征进行加权,而不是完全去除它们,这可能带来更好的准确性。简而言之,L1 去除特征,而 L2 则不去除,而是对其权重进行规整。
Q6. 什么是迁移学习?它有什么用?
迁移学习允许你从现有的训练模型开始,通常是从像 GitHub 这样的来源获取现成的模型。你将现有的训练模型应用于你不同但紧密相关的观察数据。这节省了你部署和操作机器学习解决方案的时间,因为你是从一个预训练的模型开始的。
在迁移学习中,网络初始化为预训练的权重,仅将顶层全连接层初始化为随机权重。然后,整个网络会根据新数据进行微调。在这种模式下,即使数据集较小,也可以进行训练。这是因为网络已经过训练,因此可以在没有足够训练数据的情况下使用。

全学习 vs. 迁移学习。图像来源于作者。
Q7. LDA 算法是什么?举一个例子。
LDA(潜在狄利克雷分配) 算法是一种无监督学习算法,尝试将一组观察结果描述为不同类别的混合。LDA 最常用于发现文档集中的用户指定数量的主题,即主题建模。
Q8. 线性回归和逻辑回归有什么区别?
线性回归 用于预测连续变量,主要用于解决回归问题。线性回归通过寻找最佳拟合线来预测数值输出。
逻辑回归 用于预测分类值,主要用于分类问题。逻辑回归产生一个 S 曲线进行分类,输出是二元或类别值。
Q9. Bag of Words 用于什么?
Bag-of-Words 是一种 NLP(自然语言处理)算法,它创建输入文档文本的标记,并输出文本的统计表示。这种统计表示,例如直方图,显示文档中每个词的计数。
Q10. 如何识别高偏差模型?如何修复?
高偏差模型是由于模型简单而产生的,通常在你看到以下情况时容易识别:
-
高训练误差
-
验证误差或测试误差与训练误差相同
要修复高偏差模型,你可以:
-
添加更多输入特征
-
通过引入多项式特征增加复杂性
-
减少正则化项
Q11. 如何识别高方差模型?如何修复?
高方差模型是由于模型复杂而产生的,通常在你看到以下情况时容易识别:
-
低训练误差
-
高验证误差或高测试误差
要修复高方差模型,你可以:
-
获取更多训练数据
-
减少输入特征
-
增加正则化项
Q12. 评估回归模型的一些常见工具是什么?
当我听到回归模型评估时,第一个想到的就是 RMSE(均方根误差),因为它是回归评估中最简单和最常见的指标。RMSE 可以轻松地告诉你模型是否过高估计或低估。
RMSE 是预测数值目标与真实数值答案之间的差距(即真实数值)。RMSE 值越小,模型的预测精度越好。如果模型的预测正确,其 RMSE 将为 0。
Q13. 什么是 ROC 和 AUC?它们用于什么?
**ROC(接收操作特征)**曲线,或 ROC 曲线,是一种图形绘制,展示了二元分类系统在其区分阈值变化时的诊断能力。

ROC 曲线。来源。
该曲线绘制了两个参数:
-
真正率
-
假正率
ROC 曲线在不同分类阈值下绘制真正率与假正率。降低分类阈值将更多项分类为正,从而增加假正例和真正例。
**ROC 曲线下的面积(AUC)**衡量 ROC 曲线下方的整个二维面积。AUC 用于相互比较/评估机器学习分类模型,并测量整个 ROC 曲线下的二维面积。

AUC. 来源。
AUC 提供了所有可能分类阈值下的性能总衡量。一种解释 AUC 的方法是模型将随机正例的排名高于随机负例的概率。
祝你好运,无论你即将参加哪个面试。网上有大量的机器学习和人工智能信息,你可以从许多来源获取知识。我鼓励你利用免费资源、课程和类似的文章来深入了解机器学习。无论你从事哪个行业,机器学习和人工智能都会影响你的工作,因此请为自己装备所需的知识。
原文。经许可转载。
相关:
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速入门网络安全职业。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 方面
更多相关话题
流行的机器学习面试问题
原文:
www.kdnuggets.com/2021/01/popular-machine-learning-interview-questions.html
评论
由Mo Daoud提供,科技工作者,AI 爱好者。
面试足够困难和压力重重,我在这里的目标是帮助你为机器学习面试做好准备。这份清单并不包括所有面试问题,也不能保证帮助你通过面试。它基本上是一份我从担任面试官时收集的面试问题列表。

照片由Clem Onojeghuo在Unsplash上提供。
Q1. 机器学习的不同类型是什么,简要说明一下?
预期的答案应提到监督学习、无监督学习和强化学习。
监督学习 你给算法标签数据,算法必须从中学习并弄清楚如何解决未来类似的问题。可以把它看作是给算法问题和答案。算法必须学习这些问题是如何解决的,以便以类似的方式解决未来的问题。这就像上面的例子,其中银行从你的习惯中学习哪些信用卡交易是真实的,哪些是欺诈的。
无监督学习 你给算法一个没有标签的数据或对答案没有任何先验知识的问题。可以把它看作是给算法问题而没有答案。算法必须通过从数据中获取洞察力来找到最佳答案。这类似于银行根据各种参数对其客户进行聚类,决定谁有资格获得信用卡优惠、信用额度优惠,谁不符合任何优惠。这通常使用一种叫做K-Means的机器学习方法来完成。
强化学习 这是当算法通过奖励和惩罚从自己的经验中学习。最简单的例子是自动驾驶汽车,其中有一个代理通过每一步的移动来学习。朝目标的正向移动会给代理带来奖励,而远离目标的负向移动会给代理带来惩罚。
Q2. 给我一个监督学习的例子,以及一个无监督学习的例子?
在这里,我通常期望听到 3 个词:分类、回归和聚类。这些是机器学习的一些最流行和基础的用法。
分类和回归主要使用监督学习,候选人可以举例说明如何使用历史数据来训练模型。
例如,如果有人盗用了你的信用卡并进行了一次在线交易。你可能会收到来自银行的电子邮件或短信,要求你确认这笔交易。否则,银行会认为这是欺诈。你的银行算法通过你的购买历史学会了你的信用卡购买习惯,当检测到异常交易时,银行怀疑这是欺诈。这是一种机器学习形式,可能是决策树分类。
另一个例子是一个汽车公司尝试根据今年的销售数字和历史数据预测明年的销售情况,这是一种机器学习形式,可能是线性回归。
聚类主要使用无监督学习,其中没有历史数据。一个简单的例子是垃圾邮件过滤器,其中算法检查所有传入邮件的不同部分,将它们组合在一起,然后将邮件分为垃圾邮件和正常邮件。
Q3. 你构建了一个深度学习模型,在训练过程中,你注意到在经过一定数量的周期后,准确率在下降。是什么问题,如何解决?
答案应该与过拟合有关。
似乎模型正在学习确切的数据集特征,而不是捕捉其特征,这被称为模型过拟合。可能模型相比数据集非常复杂。模型在层数和神经元方面比所需的要复杂。
根据情况,有几种方法可以修复这个过拟合模型。最常见的方法是早期停止和dropout 正则化。
早期停止就是它听起来的意思:一旦开始看到准确率下降,就提前停止训练。Dropout 正则化是丢弃一些输出层或节点。因此,剩余的节点具有不同的权重,并且必须额外工作以捕捉特征。
Q4. 深度学习模型中的偏差(Bias)和方差(Variance)有什么区别?如何在它们之间实现平衡?
这与前一个问题有点相关。答案应该包括欠拟合的简单模型、过拟合的复杂模型,以及偏差和方差不能同时最小化的事实。
高偏差意味着模型很简单,在训练阶段无法捕捉许多特征,也就是欠拟合模型。高方差意味着模型很复杂,不仅捕捉了特征,还学习了除了那些特定训练集特征之外的其他内容,这也被称为过拟合。

图像来源:作者。
如你所见,在中间有一个甜点区域可以平衡偏差和方差。如果你的模型向右移动,则模型变得更加复杂,从而增加了方差,导致过拟合。如果你的模型向左移动,则变得过于简单,从而增加了偏差,导致欠拟合。
一个好的数据科学家知道如何通过调整模型的超参数来权衡偏差和方差,从而实现最佳模型复杂度。
简单模型意味着少量的神经元和较少的层,而复杂模型意味着大量的神经元和几层。
Q5. 什么是混淆矩阵?它用于监督学习和无监督学习吗?类型 1 和类型 2 错误是什么?
混淆矩阵仅用于评估监督学习模型的性能,不能用于无监督模型。

混淆矩阵。来源:你想知道的机器学习知识但又太害怕去问的事.
混淆矩阵是一种展示模型四种结果的方法:真正例、假正例、假负例和真负例。召回率、精确度、准确率和 F1 分数都可以从混淆矩阵中计算得出。
类型 1 错误是当你的算法做出正面预测,但实际上是负面的。例如,你的算法预测一个患者有癌症,但实际上他没有。
类型 2 错误是当你的算法做出负面预测,但实际上是正面的。例如,你的算法预测一个患者没有癌症,但实际上他有。
Q6. 什么是模型学习率?高学习率总是好吗?
学习率是一个调整参数,它决定了每次迭代(epoch)的步长。步长是指你在估计错误后更新神经元权重的速度。模型权重通过反向传播错误方法进行更新。因此,输入会从模型的输入节点流经神经元到输出节点,然后确定错误并反向传播以更新神经元(模型)权重。更新这些神经元权重的速度就是学习率。

图片作者。
如果学习率高,则模型权重更新迅速且频繁,那么你的模型将快速收敛,但可能会超过真实错误的最小值。这意味着一个较快但有误的模型。
如果学习率低,则模型权重更新缓慢,那么你的模型将需要很长时间才能收敛,但不会超过真实错误的最小值。这意味着一个较慢但更准确的模型。
Q7. 什么是梯度消失?
这个问题与前一个问题相关。这里我期待对梯度下降的快速解释以及反向传播如何影响它。
可以将梯度下降视为在反向传播过程中用来更新神经网络的权重。将激活函数视为与模型中每个神经元相关联的方程。这个方程决定了该神经元是否应该被激活,这取决于神经元输入与模型预测的相关性。
在某些情况下,当你有一个多层的深度神经网络,并且根据你选择的激活函数(以及其他超参数),梯度会变得非常小,并且可能在从输出到输入节点的反向传播过程中消失。这里的问题是模型中神经元的权重不会被更新(或被非常小的值更新)。因此,你的模型不会学习(或学习很少)。这明显是梯度消失问题的例子。
Q8. KNN 和 K-means 之间有什么区别?
我个人对有这么多候选人混淆这两个概念感到惊讶。答案应说明KNN 是一种监督模型用于分类,而K-means 是一种无监督模型用于聚类。然后候选人应提供一个分类的例子和一个聚类的例子。
Q9. 什么是交叉验证机器学习模型?
这是另一个简单的例子,答案应包括在模型从未见过的新数据上进行测试。最佳的例子是当你使用 Scikit Learn(或任何其他库)将数据拆分为训练集和测试集时。测试集数据用于在模型训练后进行交叉验证,以便你可以评估模型的性能。
Q10. 如何评估你的监督学习模型?什么是召回率和准确率?
准确率:这是指在所有模型预测为正的情况下,有多少实际是正的。当假阳性对你的输出很重要时,你需要关注准确率。

准确率。
假设你是一个小公司,你向潜在的客户发送样品,这些客户可能会购买你的产品。你不想将样品发送给那些无论如何都不会购买你产品的客户。那些收到样品但不购买你产品的客户是假阳性,因为你预测他们会购买你的产品(预测 = 1),但实际上他们永远不会(实际 = 0)。在这种情况下,你希望尽可能减少假阳性,以获得高准确率。

召回率。
召回率:这是对实际正例中有多少被正确分类的答案。当假阴性对输出很重要时,你会关心召回率。以你的信用卡为例。有人偷了你的信用卡号码,并在一个你从未访问过的可疑网站上购买了东西。这显然是欺诈交易,但不幸的是,你的银行算法没有检测到。发生的情况是,你的银行预测这不是欺诈(预测 = 0),但实际上是欺诈(实际 = 1)。在这种情况下,你的银行应该开发一种减少 FN 从而提高召回率的欺诈检测算法。
Q11。什么是维度诅咒,如何解决它?
这适用于数据集具有过多特征时,这使得模型难以学习和提取这些特征。
可能会发生两种主要情况
-
特征数量多于观察值,从而增加了过拟合模型的风险
-
特征过多,观察值变得更难以聚类。过多的维度导致数据集中的每个观察值都与所有其他观察值等距,从而无法形成有意义的簇
解决此问题的主要技术是主成分分析(PCA)。
PCA 是一种无监督机器学习算法,旨在降低数据集中维度(特征数量),同时尽可能保留更多信息。其方法是找到一组新的特征,称为主成分,这些主成分是原始特征的复合体,相互之间不相关。它们还受到约束,使得第一个主成分解释数据中可能的最大变异性,第二个主成分解释第二大变异性,依此类推。
最后,希望这些示例问题和答案能帮助你为即将到来的面试做准备。它们也可以作为你机器学习知识的复习材料。
原文。经许可转载。
准备好更多面试问题了吗?查看*本文第二部分**!*
相关:
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你组织中的 IT
更多相关内容
Post GPT-4: 解答关于 AI 的最常见问题
原文:
www.kdnuggets.com/2023/04/post-gpt4-answering-asked-questions-ai.html

图片由作者提供
我们生活在一个既令人兴奋又奇怪的时代。生成式 AI,如 ChatGPT,已经改变了一切。我们看到像谷歌这样的公司首次承受压力,目前的就业市场充满不确定性,而开源开发正全速推进。跟上 AI 的发展和虚假信息很困难。
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 工作
在这篇博客中,我将尝试回答一些关于 AI 的常见问题。这些答案基于我在写作和阅读有关 AI 最新发展的过程中形成的观点。
哪一个更好:开源还是闭源?
在我看来,开源和闭源 AI 开发都是必要的。你需要理解 ChatGPT 的核心是Transformers,这是一个开源项目,由谷歌大脑团队开发。没有开源开发,我们的创新会变得缓慢。有很多社区主导的项目正在运行大公司。
另一方面,闭源项目拥有完善的团队、资源和资本来开发精致的产品。在 OpenAI 的案例中,DALLE 2 和 ChatGPT 需要多个 GPU,有时仅仅实验的成本就可能高达数百万。它是一个干净且无错误的应用程序。
如果你问我,我会说开源更好。开源项目是公开的,透明的,推动创新,开发者可以通过出售许可证或提供额外功能来赚钱。
AI 会完全取代技术工作者和艺术家吗?
不会。让我用简单的术语解释一下。AI 永远不会取代任何工作。它是来辅助我们的。工作场所文化将发生巨大变化。利用 AI 工具的人将逐渐取代那些仍在执行手动任务的人。
我知道 Dalle-2、Mid Journey、ChatGPT 和 GPT-4 都很棒,但相信我,它们不如普通人。ChatGPT 会犯错,并且不理解复杂的任务和概念。例如,如果你要求 ChatGPT 开发一个有多个集成的合适应用,它将无法理解整体情况。你必须进行多次手动修改才能正确完成任务。
生成性 AI 的潜在风险是什么,如何避免这些风险?
-
版权问题:这些模型是在公共和一些受版权法保护的私人数据上开发的。你的辛勤工作被一些公司用来开发产品,而你却没有得到补偿。我们可以通过制定人工智能法律来解决这个问题。
-
安全和隐私:ChatGPT 已经变得比任何东西都大,难以保持这个庞大系统的安全。曾经有用户投诉他们在查看其他人的历史记录。除此之外,你还允许 OpenAI 访问你的聊天记录,这对公司来说是个问题。你可以通过使用开源模型和工具包创建自己的 ChatGPT 应用来解决这个问题。查看 OpenChatKit: 开源 ChatGPT 替代方案。
-
剽窃:教育机构面临困境,因为学生使用这些工具提交作业、开发项目甚至撰写论文。一些免费的工具,如OpenAI AI 文本分类器,可以帮助教师检测生成的作品。你还可以查看检测 ChatGPT、GPT3 和 GPT2 的 5 个免费工具。
-
虚假信息和滥用:像 ChatGPT 这样的语言模型可以被用于大规模的信息传播活动或在线滥用。你可以通过使用水印技术来解决这个问题。
为什么埃隆·马斯克和其他科技领袖希望暂停 AI 开发六个月?
一个由埃隆·马斯克和 11,761 名个人(包括人工智能专家)签署的公开信,由非营利组织 Future of Life Institute 发布。信中呼吁暂时停止高级人工智能的开发,持续六个月。签署者敦促人工智能实验室避免训练超过 OpenAI 最近发布的 GPT-4 能力的任何技术。
这意味着 AI 领导者认为具有人类竞争智能的 AI 系统可能对社会和人类构成深远的风险。
首先,停止开发是不可能的。他们如何停止开源开发或中国等国家的开发?魔已经放出了瓶子。我们能做的就是努力使其变得安全和可靠。
在我看来,我相信这封公开信也有商业角度。许多公司未能成功推出像 GPT-4 这样的应用,他们需要 6 个月的缓冲时间来开发并与微软和 OpenAI 竞争。
接下来会发生什么?我们是否能在有生之年看到通用人工智能(AGI)?
我们将看到多模态领域的大量发展,其中模型将能够接收图像、视频和音频作为输入,并输出文本、图像和音频。例如,如果你让 AI 撰写技术博客,它将添加文本、代码块和图像,创建一个可以发布的完整博客。或者你可以像与人对话一样与 AI 交谈,它将像钢铁侠中的贾维斯一样用音频回复你。
未来,你将看到 AI 在工作生活中的更多应用,这将开启像提示工程这样的新研究领域。
我可以肯定的是,我们离通用人工智能(AGI)还有很长的路要走。AGI 是一种自我意识的机器,能够独立思考和决策。这些模型和 AI 应用是建立在人类生成的数据基础上的,要使 AI 在所有方面超过人类,它需要自主学习。因此,我在有生之年无法看到 AGI,但我仍然充满希望。
你应该害怕 AGI 吗?我想时间会告诉我们答案。
Abid Ali Awan (@1abidaliawan) 是一位认证的数据科学专家,热衷于构建机器学习模型。目前,他专注于内容创作和撰写关于机器学习和数据科学技术的技术博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络开发一款 AI 产品,帮助那些面临心理疾病的学生。
了解更多相关信息
Hasura 如何通过 PostHog 提升了 20% 的转化率
原文:
www.kdnuggets.com/2021/10/posthog-hasura-improved-conversion-rates.html
赞助帖子。

自 2018 年推出以来,Hasura 的开源 GraphQL 引擎已被成千上万的团队采用,从独立开发者到像 Airbus 和 Atlassian 这样的企业。2021 年,Hasura 开始使用 PostHog 收集内部数据和洞察,以便团队继续改进其市场领先的平台。
我们的前三个课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业轨道
2. Google 数据分析专业证书 - 提升您的数据分析技能
3. Google IT 支持专业证书 - 支持您组织的 IT
“我们选择了 PostHog,因为没有其他工具提供自托管的分析部署,”Hasura 的软件工程师Rikin Kachhia 说。 “我们的系统处理敏感数据,我们不想涉及合规问题或将数据发送给第三方。PostHog 通过使我们能够自己部署和维护,解决了这个问题。”
团队还喜欢 PostHog 是一个完全自助的 платформ,任何公司员工都可以使用,即使他们以前从未使用过数据科学或分析平台。例如,Hasura 的 UI 和 UX 团队能够自己运行查询并发现可操作的数据,从而减少了其他团队对他们的支持时间。
推动整个入职漏斗的采用
Hasura 的一个早期重点领域是新用户的入职漏斗。最初,团队只是想了解整体转化率,他们通过在 PostHog 中构建漏斗分析来实现这一目标。团队迅速能够识别漏斗中可以改进的具体区域。
“使用 PostHog,我们观察到在我们入职流程的特定阶段存在流失,”Kachhia 说。 “因此,我们采取了几个措施,例如将这些步骤推向漏斗的下方。”
将具有挑战性的阶段推向漏斗的下方意味着用户在处理这些阶段时更为投入。因此,这些变化使得用户不会首先遇到漏斗中最具挑战性的部分。这些变化帮助我们在转化率上提升了 10-20%。”
Kachhia 说:“尽管我们最初只是使用 PostHog 来诊断 UX 问题,但现在我们在各个方面都使用它。我们的所有博客、网站、产品……所有内容都直接接入 PostHog,以便我们获取所需的数据,继续进行改进。”
今天就免费托管你自己的分析工具
PostHog 的开源平台为你提供了完整的工具套件,从漏斗和趋势分析到会话录制和数据仓库集成应有尽有。访问 PostHog.com 以了解更多信息并立即免费部署。
自托管产品分析的三大理由
原文:
www.kdnuggets.com/2021/11/posthog-three-reasons-self-host-product-analysis.html
赞助帖子。

在选择新的分析平台时,您可以做出的最重要决定之一就是平台和数据将托管在哪里——在第三方的云中,还是在您自己的基础设施上。云托管分析通常是常规做法,有些可以让您迅速入门,但越来越多的团队选择使用像 PostHog 这样的自托管平台。
我们的前 3 个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升您的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持您的组织 IT
这里有三个强有力的理由说明自托管是传统云部署的有说服力的替代方案。
1. 立即克服广告拦截器
与依赖第三方 cookie 的云托管解决方案不同,自托管解决方案直接从用户那里收集数据。这意味着它们能够收集更多可用数据和更高质量的数据,因为它们不受广告拦截器或隐私功能的干扰。
估计有 45% 的消费者使用广告拦截器,自托管已成为现代数据驱动型企业的关键。一些同时运行多个分析平台的团队,通过自托管的 PostHog 部署捕获的数据量增加了 50% 以上!
2. 保留对分析平台的控制权
云托管服务可能是一种方便的部署方式,特别是当您不想管理托管的操作方面时。然而,有时直接控制更新安装或数据保留政策等方面是很有帮助的。
开源平台如 PostHog 提供了更多的控制。像 MentionMe 的软件工程师 Lleo Harress 这样的用户,自今年早些时候推出 PostHog 以来,围绕其自托管部署构建了整个技术栈。
了解 MentionMe 如何使用 PostHog 收集和保护客户数据
3. 使安全性和合规性变得轻松
自托管到你自己的基础设施不仅意味着你能获得更好的数据——这也意味着你可以完全控制数据的安全性。没有第三方服务需要审计;没有额外的合规或安全认证要求。你的数据保留在你的系统中。
“我们不想因为处理敏感数据而涉及第三方的合规问题,”Hasura 的软件工程师 Rikin Kachhia 说。“在 PostHog 上自托管解决了这个问题。”
了解 Hasura 如何通过 PostHog 将转化率提高 20%
今天就免费托管你自己的分析
PostHog 为你提供了一整套产品分析工具,从用户漏斗和趋势分析到会话记录和数据仓库集成——所有这些都可以在你自己托管的平台上进行。
更多相关主题
揭示链式思维提示在大型语言模型中的力量
原文:
www.kdnuggets.com/2023/07/power-chain-thought-prompting-large-language-models.html

作者通过 Midjourney 创建的图像
介绍链式思维提示
大型语言模型(LLMs)已经彻底改变了人工智能领域,提供了前所未有的自然语言理解和生成能力。然而,它们执行复杂推理任务的能力一直是密切研究的主题。一种在这方面表现出希望的技术是链式思维(CoT)提示。本文探讨了 CoT 提示的复杂性及其对 LLMs 未来的影响。
我们的前 3 个课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业道路。
2. Google 数据分析专业证书 - 提升您的数据分析技能
3. Google IT 支持专业证书 - 支持您组织的 IT 工作
CoT 提示,如在最近的论文中介绍的,是一种鼓励 LLM 解释其推理过程的方法。这是通过向模型提供几个示例来实现的,其中推理过程被明确地概述。然后,LLM 预计会在回答提示时遵循类似的推理过程。这种技术已被发现显著提高模型在需要复杂推理任务上的表现。
CoT 提示的一个主要优势是其提升 LLM 在需要算术、常识和符号推理任务中的表现的能力。该技术已被证明可以提高性能,特别是对于大约 1000 亿参数的模型。然而,较小的模型被发现会产生不合逻辑的思维链,导致比标准提示方法更低的准确性。
理解链式思维提示
从本质上讲,CoT 提示是关于引导 LLM 按步骤思考。这是通过向模型提供几个示例来实现的,这些示例概述了推理过程。然后,模型在回答提示时预计会遵循类似的思维链。这种方法对于需要一系列推理步骤才能生成响应的复杂任务特别有效。
这里是一个 CoT 提示示例(取自 这篇文章 机器学习大师上的文章),使用了少量示例策略:
问:乔有 20 个鸡蛋。他又买了 2 箱鸡蛋。每箱包含 12 个鸡蛋。乔现在有多少个鸡蛋?
答:乔开始时有 20 个鸡蛋。2 箱 12 个鸡蛋就是 24 个鸡蛋。20 + 24 = 44。因此,乔现在有 44 个鸡蛋,答案是 44。
问:农民约翰有 93 只鸡。如果他卖给农民比尔 20 只鸡,并买回两倍于卖出的数量,他现在有多少只鸡?
ChatGPT 的回应:
答:农民约翰卖给农民比尔 20 只鸡,因此他剩下了 93 – 20 = 73 只鸡。他然后购买了卖出的两倍数量的鸡,因此他买了 2 * 20 = 40 只鸡。将这些新买的鸡加到剩余的鸡上,农民约翰现在有 73 + 40 = 113 只鸡。
CoT 提示还可以在零-shot 设置中使用。这涉及在原始提示中添加类似“我们一步一步来思考”的短语,这也可以与少量示例提示一起使用。这种简单的添加已被发现能有效提高模型在没有很多示例的任务上的性能。
自动化思维链提示
尽管 CoT 提示可能有效,但它通常需要手动制作示例,这可能会耗费时间并导致次优解。为了解决这个问题,研究人员提出了 一种被称为自动化思维链(Auto-CoT)的方法。这种方法利用 LLM 自动生成演示的推理链,从而消除了手动工作的需要。
Auto-CoT 包含两个主要阶段:问题聚类和演示抽样。在问题聚类阶段,将给定数据集中的问题划分为几个簇。在演示抽样阶段,从每个簇中选择一个代表性问题,并使用简单启发式的 Zero-Shot-CoT 生成其推理链。这个过程鼓励模型使用简单且准确的演示。
Auto-CoT 过程:
-
问题聚类:将给定数据集中的问题划分为几个簇
-
演示抽样:从每个簇中选择一个代表性问题,并使用简单启发式的 Zero-Shot-CoT 生成其推理链
限制与未来方向
尽管 CoT 提示显示出前景,但它并非没有局限性。首先,它仅在使用约 1000 亿参数的模型时才能获得性能提升。较小的模型往往会产生不合理的思维链,导致比标准提示更低的准确性。此外,CoT 提示的性能提升通常与模型的大小成正比。
尽管存在这些限制,CoT 提示在提升 LLM 推理能力的探索中代表了一个重要的进步。未来的研究可能会集中在改进这一技术,并探索使其在更广泛的任务和模型规模中更为有效的方法。
结论
思维链提示代表了人工智能领域的重要进展,特别是在提升大语言模型的推理能力方面。通过鼓励这些模型解释其推理过程,CoT 提示在改进需要算术、常识和符号推理的复杂任务的表现上显示出了潜力。尽管该技术有其局限性,但它为 LLM 的未来打开了令人兴奋的可能性。
随着我们不断突破 LLM 的能力界限,像 CoT 提示这样的技术将发挥关键作用。通过使这些模型逐步思考并解释其推理过程,我们不仅可以提高它们在复杂任务中的表现,还可以获得对其内部机制的宝贵洞察。虽然完全推理的 LLM 之路仍然漫长,但有了像 CoT 提示这样的技术,我们无疑走在了正确的道路上。
Matthew Mayo (@mattmayo13) 是数据科学家和 KDnuggets 的总编辑,KDnuggets 是著名的在线数据科学和机器学习资源。他的兴趣领域包括自然语言处理、算法设计与优化、无监督学习、神经网络以及机器学习的自动化方法。Matthew 拥有计算机科学硕士学位和数据挖掘研究生文凭。他可以通过 editor1 at kdnuggets[dot]com 联系到。
更多相关主题
合作的力量:开源项目如何推进 AI
原文:
www.kdnuggets.com/2023/08/power-collaboration-opensource-projects-advancing-ai.html

图片由 谷歌 DeepMind 提供
人工智能(AI)是近年来增长最快的技术之一。基于 AI 的产品,例如 ChatGPT,已在不到两个月的时间里获得超过 1 亿用户。开发基于 AI 的产品涉及使用多个软件工具,其中一些是开源的。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业轨道。
2. 谷歌数据分析专业证书 - 提升您的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持您的组织 IT
对于不熟悉该概念的人来说,开源软件或项目是那些将其源代码公开给公众的软件或项目,允许他们查看、使用和修改。使用开源软件和工具具有多种优势,尤其是在构建复杂的基于 AI 的产品时。
在这篇文章中,我们将探讨开源项目对创新 AI 解决方案的深远影响。首先,让我们分享一些可能感兴趣的流行开源 AI 项目。
流行的 AI 开源项目
开源项目如何影响 AI 创新
更快的市场响应时间
开源项目通过实现新产品和服务的更快市场投放,对 AI 创新产生了重大影响。当开发人员和初创公司可以访问现有的开源 AI 工具、框架和库时,他们可以避免从零开始构建所有东西。这加速了开发过程,因为他们可以利用开源社区已经贡献的代码、算法和解决方案。
通过不再重新发明轮子,开发人员可以专注于为现有工具增加价值,并根据产品需求对其进行定制。这不仅加快了开发过程,还减少了成本,因为他们不必分配资源来构建已经存在于开源项目中的基础组件。除了节省时间和成本外,更快地将产品推向市场也至关重要,因为这使得你能够从真实用户那里获得反馈,并避免为产品添加不必要的功能。
减少 AI 偏见
AI 产品的主要挑战之一是它们的性能和可靠性在很大程度上依赖于用于训练算法的数据。这意味着用有偏见的数据训练算法会导致有偏见的性能,这可能会产生负面影响。AI 偏见在人工智能系统的部署中是一个重要问题。好消息是,有几种开源 AI 工具可以在解决这个问题中发挥重要作用。
例如,像IBM 的 AI Fairness 360或微软的 Fairlearn这样的开源项目提供了可访问且文档齐全的资源,使开发人员更容易检测和减少 AI 算法中的偏见。开源软件的透明性使开发人员能够了解这些工具的内部工作原理,这对识别和纠正偏见至关重要。
通过利用这些开源工具,开发人员可以创建公平公正对待所有个体的 AI 系统。这些工具的开源特性还确保了来自不同背景和文化的开发人员可以访问和修改它们的代码,进一步增强了其公平性。
加速 AI 采用
实现 AI 算法和模型通常涉及复杂的数学概念和技术知识。开源项目通过提供预构建的工具和库简化了采用 AI 技术的过程。这使得数据科学家和开发人员可以访问这些资源,并轻松地将其集成到他们的应用程序中,从而节省时间和精力。
例如,Python 相关的开源 AI 库,如Microsoft CNTK、Apple Core ML和Keras Python,帮助了成千上万的 AI 开发者和数据科学家轻松地将 AI 功能集成到他们的产品中。这种可达性降低了 AI 采纳的门槛,使更多个人和组织能够受益于 AI 技术,而不必成为 AI 专家。因此,AI 在各个行业的整体采纳和整合也得到了加速。
透明性与信任
随着 AI 在我们生活中变得越来越普遍,人们对其透明性和可信度的担忧也在增加。由于许多大型科技公司卷入了多个数据隐私和安全丑闻,它们之间的信任逐渐减少。开源 AI 项目通过提供源代码的可用性,提供了解决这一挑战的方案。
当 AI 算法的源代码公开可用时,研究人员、开发者和公众可以审查和理解这些算法的工作原理。这种透明性有助于识别 AI 系统中的潜在偏见、漏洞或错误,促进用户和利益相关者之间的问责制和信任。这种方法已经被 Twitter 采用,在埃隆·马斯克接管公司后,其排名算法现在是开源的。
培养 AI 开发者之间的社区意识
AI 中的开源软件促进了 AI 开发者之间的协作和社区驱动的环境。通过公开分享他们的工作,开发者可以获得社区其他成员的宝贵反馈、建议和贡献。当然,这些反馈的质量和数量在很大程度上依赖于社区的规模。
这种协作方法鼓励思想和知识的交流,从而推动 AI 技术的持续改进和创新。它还有助于打破学术界和工业界之间的障碍,因为来自这两个领域的研究人员和开发者可以积极参与开源项目,合作开展前沿研究,共同推动 AI 领域的发展。
结论
开源项目在 AI 产品的开发和进步中发挥了关键作用,其重要性预计在未来仍将持续。这些项目提供了大量现成的 AI 工具和资源,开发者可以利用这些工具,而无需从头开始构建一切。例如,他们可以利用已有的大型语言模型和其他复杂的 AI 库及工具,从而显著减少将 AI 功能集成到应用程序中所需的时间和精力。
开源 AI 项目的可及性是实现 AI 普及的关键因素。随着更多个人参与这些项目,AI 社区的集体知识和专业技能也在增长。这意味着 AI 解决方案对更广泛的开发人员和 IT 专业人员变得越来越可及,无论他们的 AI 专业水平如何。这种可及性打破了障碍,使更多人能够利用 AI 的潜力来解决现实世界的问题。
参考文献
-
ts2.space/en/harnessing-the-power-of-open-source-in-ai-development/# -
www.brookings.edu/articles/how-open-source-software-shapes-ai-policy/
Vijayasarathi Balasubramanian 是一位拥有十七年经验的 AI/数据科学专家,专注于开发数据采集和创新解决方案。作为一名热衷的专业人士,他始终紧跟数据科学和技术的变化,目前正在探索生成 AI、ChatGPT 和基于图的推荐引擎。Vijay 目前在 Microsoft 担任高级数据科学家,为多个开源社区(包括 Apache Airflow、Beam 和 Tensorflow)贡献他的知识,并辅导科学创业公司创始人。他还隶属于 IEEE、IET 和 BCS 等多个技术组织,并曾担任 Golden Bridge Awards 和 UK IT Awards 的评委。
更多相关主题
释放 MLOps 和 DataOps 在数据科学中的力量
原文:
www.kdnuggets.com/2021/06/power-mlops-dataops-data-science.html
评论
由 Yash Mehta 发表,他是 Intellectus 的创始人兼首席执行官。

我们的前三个课程推荐
1. Google 网络安全证书 - 快速开启网络安全职业生涯。
2. Google 数据分析专业证书 - 提升您的数据分析技能
3. Google IT 支持专业证书 - 支持您的组织 IT
数据量巨大,挖掘、分析和实时传递数据的科学也是如此。无论数据对业务有多么重要,它仍然面临着将数百万用户的隐私置于难以想象的风险之中的问题。这正是为什么突然倾向于更多自动化过程的原因。
在过去的一年中,坚持传统分析的企业意识到没有改革就无法生存。例如,企业正在尝试微型数据库,每个数据库仅存储一个特定业务实体的主数据。同时,自助服务实践在发现、清理和准备数据方面的采用也有所增加。他们已经理解了接受 ‘XOps’ 思维模式的重要性,并将更重要的角色委派给 MLOps 和 DataOps 实践。
MLOps 的需求
现在,MLOps 变得重要,因为将 ML 模型投入实际运行比训练它们或将其作为 API 部署要困难得多。缺乏治理工具会进一步加剧这种复杂性。最终,由于动态数据的涌入,ML 模型无法适应变化,导致最终输出不达标。
简单来说, MLOps 是 ML 模型与其在实际生产中执行之间的一切。这个过程需要数据科学家与如 ML/DL 工程师等操作专业人员的全面协作。作为一个团队,他们会对不同的特性如参数和超参数进行实验。其目标是加快模型的开发与部署、监控和机器学习模型的批准。
85% 的 AI 项目容易出错
根据 Gartner 的说法,这在很大程度上是由于生产路线图的低效和与 DevOps 团队的沟通差距。通过自动化模型部署,MLOps 精细地解决了这些问题。由于数据科学本质上是动态的,MLOps 创建了适应性强的传输管道,从而容纳各种类型的模型。此外,
-
它通过自动化消除了耗时的数据科学算法,使科学家能够更高效地预见结果。
-
它提供了数据科学家、DevOps 资源和开发人员之间的全面协作,从而简化了模型优化。
-
它确保了模型从数据科学到 DevOps 团队的无缝过渡,与持续集成保持一致。
在此过程中,Neptune.ai 是一个值得提及的案例研究。MLOps 平台提供了一个用于记录所有元数据集的“存储”。元数据存储提供了一个用户友好的平台,以完善 MLOps 模型管理。在这里,数据科学家可以创建日志、存储和组织数据集,并查询在 MLOps 模型生命周期内生成的所有元数据。此外,仪表板提供 ML 实验跟踪、模型注册和对元数据数据库的即时访问。
还有其他公司,例如 Neal Analytics,提供端到端生命周期的处理 MLOps。凭借跨多个领域的经验,ML 服务提供了路线图规划、成熟度评估以及模型管理和执行。
DataOps 是一套最佳实践,指导自动化和过程导向的路线图,以提高质量并减少分析的周期时间。
因此,它推动了敏捷性,并确保数据一致地交付给业务。像 MLOps 一样,DataOps 也推动了可重用性和灵活性,以适应新的用例。此外,通过设计来治理数据可以创建工作流,自动在新的管道中实施政策。
在这里,数据的使用既简单又安全,防止组织面临不可预见的问题。目标是流式传输干净的数据,以实现可信赖的可操作预测分析。不可忽视的是,定义数据角色、制定数据政策和设计数据管道都包含在这一实践中。
有趣的是,定制化方案因其适应不断发展的企业面貌而获得了广泛的赞誉。考虑 K2View,它提供了一种独特的方法来收集、清理、分析和流式传输数据。他们的数据织物技术从多个来源捕获数据,并将其对齐到统一模板中,从而简化了编排、元数据管理和数据治理。
在追求更快数据交付的过程中,他们的技术遵循数据科学中的连续性原则:
-
持续数据集成
实现按需数据集成和跨域管理主数据集。这有助于实时访问在 Fabric 数据模型中反映的新来源。此模型是访问数据的中央数据仓库。
-
持续数据交付
处理对织物模型的所有修改。它们几乎不依赖于停机时间,并在运行时进行操作而不干扰交付。
-
持续数据部署 随需数据访问到任何请求应用程序,通过 ETL、虚拟化、流式传输、网络服务或消息传递等交付模型。
Gartner 建议,仅通过使用织物技术,企业可以节省 30%的集成时间、30%的部署时间以及 70%的维护资源。因此,各种行业的企业已经采纳了织物模型,以强化他们的 DataOps 和 MLOps 计划。
转发
对于那些努力超越大量数据的企业来说,拥抱混合思维模式是至关重要的。因此,支持 DataOps 和 MLOps 的数据交付模型为长远发展提供了更强的基础。在企业规模上实施数据管理是实现业务敏捷性的唯一公式。因此,优先考虑能够在动态使用案例和混合环境中产生业务价值的数据。
简介: Yash Mehta 是一位物联网和大数据爱好者,他在 IDG、IEEE、Entrepreneur 等出版物上贡献了许多文章。他共同开发了像Getlua这样的平台,允许用户轻松地合并多个文件。他还创立了一个研究平台,从专家那里生成可操作的见解。
相关:
更多相关内容
强大的 CSV 处理与 kdb+
原文:
www.kdnuggets.com/2020/07/powerful-csv-processing-kdb.html
评论
由 Ferenc Bodon 博士,数据工程师,Kx 的云解决方案架构师

我们的前三课程推荐
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT
逗号分隔文本文件(CSV)是数据处理的最基本格式。所有支持处理关系数据的编程语言和软件,都提供一定程度的 CSV 处理功能。你可以在不安装数据库管理系统的情况下持久化和处理数据。通常,你不需要具有所有功能的完整 DBMS,如处理事务和并发/远程访问、索引等……轻量级的 CSV 格式允许轻松处理和共享捕获的信息。
CSV 格式早于个人电脑,并且已成为近 50 年来最常见的数据交换格式之一。CSV 文件将在未来继续存在。有效地处理这种格式是高效开发人员、数据工程师/科学家、DevOps 人员等的核心要求……你可能需要过滤行、按列排序、选择现有列或派生新列。也许你需要进行复杂的分析,这需要聚合和分组。
本文提供了处理 CSV 文件的可用工具的概述,并描述了 kdb+ 及其查询语言 q 如何将 CSV 处理提升到新的性能和简洁水平。
常见的 CSV 工具
Linux 命令行工具
许多 CSV 处理需要在具有强大终端控制台和某种 shell 的 Linux 或 Mac 环境中完成。大多数 shell,如 Bash,支持数组。你可以逐行读取 CSV 并将所有字段存储在数组变量中。你可以使用内置的字符串操作和整数计算(甚至用 bc -l 进行浮点计算)对单元格值进行操作。代码将会很长且难以维护。
一般的文本处理工具如awk和sed脚本可能会导致更短更简单的代码。像cut、sort、uniq和paste这样的命令进一步简化了 CSV 处理。你可以指定分隔符并按位置引用字段。
世界在不断变化,CSV 文件也是如此。如果在引用的列前添加了新列,或者列被重新排列(例如,将相关列移到一起),基于位置的引用会被打破。这个问题表现得很隐蔽:你的脚本可能运行顺利,但你只是用到了不同的列进行计算!如果你没有回归测试框架来保护你的代码库,最终用户(或你的竞争对手)可能会发现这个问题。这可能会很尴尬。
基于位置的引用会创建脆弱的代码。使用这些 Linux 命令处理 CSV 对于原型设计和快速分析很有效,但一旦你的代码库开始增加或你与其他同事共享脚本,就会遇到限制。难怪在 SQL 中,基于位置的列引用是有限制且不鼓励使用的。
Linux 命令行工具的巨大优势在于无需安装。你的 shell 脚本很可能可以在其他人的 Linux 系统上运行。熟悉 Linux 中随手可用的工具是有用的,但在处理复杂且长期的任务时,通常应避免使用这些工具。
CSVKit
许多开源库提供 CSV 支持。Python 库CSVKit是最受欢迎的库之一。它提供了比本地 Linux 命令更强大的解决方案,例如允许按名称引用列。列名存储在 CSV 的第一行。按名称引用对列重命名很敏感,但这可能发生的频率低于添加或移动列。
此外,CSVKit 对第一行的处理比通用文本工具更好。Linux 命令sort将第一行视为其他任何一行,并可能将其放置在输出的中间。类似地,cat在连接多个 CSV 文件时包括了第一行。命令csvsort和csvstack正确处理第一行。
最后,CSVKit 开发者特别注意提供一致的命令行参数,例如分隔符由-d定义。相比之下,你需要记住sort的分隔符由-t指定,而其他 Linux 命令,如cut、paste,则使用-d。
CSVKit 包含一些简单命名的工具,如 csvcut、csvgrep 和 csvsort,它们替代了传统的 Linux 命令 cut、grep 和 sort。尽管如此,Linux 命令的优点在于它们的速度。
你可能使用 Linux 命令 head、tail、less/more 和 cat 来快速查看文本文件的内容。不幸的是,这些工具的输出对于 CSV 文件并不理想。列对不齐,你会花费大量时间眯着眼睛在单色屏幕上判断给定单元格属于哪个列。你可能会放弃并将数据导入 Excel 或 Google 表格。但是,如果文件在远程机器上,你首先需要将其通过 SCP 传输到桌面。你可以通过使用 csvlook 节省时间并在控制台中工作。命令 csvlook 能很好地对齐列名下的列。要执行下面的命令,请下载武器销售数据并将其转换为 data.csv,如 CSVKit 教程 所述。
$ csvlook --max-rows 20 data.csv
如果你的控制台很窄,不用担心:将输出管道到 less -S 并使用箭头键左右移动。
CSVKit 中另一个有用的扩展是命令 csvstat。它分析文件内容并显示统计信息,比如所有列的不同值的数量。同时,它会尝试推断数据类型。如果列类型是数字,它还会返回值的最大值、最小值、均值、中位数和标准差。
要执行聚合、过滤和分组操作,可以使用 CSVKit 命令 csvsql,该命令允许你对 CSV 文件运行 ANSI SQL 命令。
xsv
一些 CSVKit 命令比较慢,因为它们将整个文件加载到内存中并创建内存数据库。Rust 开发者重新实现了几个传统工具,如 cat、ls、grep 和 find,并且像 bat、exa、ripgrep 和 fd 这样的工具应运而生。难怪他们还创建了一个高性能的 CSV 处理工具,即库 xsv。
Rust 库还支持选择列、过滤、排序和连接 CSV 文件。可以为经常处理的 CSV 文件添加索引,以加快操作速度。索引是迈向 DBMS 的优雅而轻量化的一步。
类型推断
CSV 是一种文本格式,不包含列的类型信息。一个字符串可以根据其值转换为数据类型。如果列的所有值都匹配模式YYYY.MM.DD,我们可以得出列包含日期的结论。但我们如何处理字面量 100000?它是整数,还是时间 10:00:00?也许源过程只支持数字并省略了时间分隔符?在现实生活中,关于来源的信息并不总是可用,你需要逆向工程数据。如果列的所有值都匹配字符串HHMMSS,那么我们可以高置信度地得出列包含时间值的结论。以下是我们可以采取的两种方法来做出决定。
首先,我们可以严格一些:我们预定义任何类型需要匹配的模式。模式不重叠。如果时间被定义为HH:MM:SS而整数定义为[1-9][0-9]*,那么 100000 是一个整数。
其次,我们可以让模式重叠,如果发生冲突,我们选择域较小的类型或基于某些规则。这种方法偏好时间而非整数,如果时间模式还包含HHMMSS。
CSVKit 库实现了第一种方法。
q/kdb+
Kdb+是全球最快的时间序列数据库,经过优化,用于摄取、分析和存储大量结构化数据。其查询语言叫做Q,是一种通用编程语言。表格在 q 中是第一类对象。Q 表语义上类似于 Pandas/R 数据框。你可以将表格持久化到磁盘,因此这个解决方案可以被认为是一个数据库,称为kdb+。
导出和导入 CSV 文件是核心语言的一部分。表t可以通过命令保存在目录dir中。
q) save `:dir/t.csv
这里q)表示启动 q 解释器后的默认提示符。
要选择不同的名称,例如output.csv,然后使用文件文本操作符0:来保存文本,并使用实用工具.h.cd将 kdb+表转换为字符串列表。
q) `output.csv 0: .h.cd t
你也可以使用其他分隔符而不是逗号。
要导入 CSVdata.csv,请指定列类型和分隔符。以下命令假设列名在第一行。
q) ("SSE**F"; enlist csv) 0: `data.csv
类型编码可以在kdb+参考卡上找到,E代表实数,I代表整数,S代表枚举(kdb+术语中的符号),D代表日期,等等……使用空格来忽略列。字符*代表字符串。
手动指定类型的维护成本高,对于宽 CSV 文件来说繁琐且容易出错。插入一个新列可能会破坏代码。
幸运的是,Kx 开源库csvutil和csvguess提供了一个方便且可靠的解决方案。
脚本csvutil.q包含一个函数,用于加载 CSV 文件,分析其值,推断类型并返回一个 kdb+ 表。
q) \l utils/csvutil.q
q) .csv.read `data.csv

脚本csvguess.q让你能够将关于列的元数据保存到文本文件中。开发人员可以查看和调整类型列,并在生产环境中使用这些元数据以正确的类型加载 CSV。这两个脚本有不同的用户。数据科学家更倾向于使用csvutil.q进行临时分析。当 IT 人员配置 kdb+ CSV 数据源时,他们会使用csvguess.q的辅助元数据导出和导入功能。类型提示提供了一个比手动输入所有列的类型更少出错的解决方案。
类型转换
库csvutil.q支持两种类型转换 - 严格模式由.csv.basicread实现,而.csv.read函数检查更多模式以推断类型。
函数.csv.read只是一个通用函数.csv.data的包装器,它接受一个文件名和一个元数据表。元数据可以通过.csv.basicinfo和.csv.info生成,具体取决于我们希望采用的推断规则。你可以在 q 解释器中通过输入函数名称并按 Enter 键来查看函数定义。
q) .csv.read
{[file] data[file; info[file]]}
列元数据表有点类似于csvstat的输出。

每一行属于一列,每个字段存储一些关于列的有用信息,如名称(c)、推断的类型(t)、最大宽度(mw)等。字段gr,即粒度,特别有趣,因为它表示列值的压缩效果如何,以及它们是否应作为枚举存储而不是字符串。有关列的更多详细信息,请参见文档。
你可以通过变量READLINES控制要检查的行数以进行类型推断。默认值为 5555。这个数字越小,推断规则的偶然性越大。例如,在样本表(也用于 CSVKit 教程)中,列fips在前 916 行匹配模式HMMSS,所以我们可以推断时间为类型。从第 917 行开始,模式匹配中断,出现了像31067这样的值。要禁用基于文件的部分类型推断,只需更改READLINES。
q) .csv.READLINES: count read0 `data.csv
基于 kdb+ 的单行命令
让我们将 q 解释器和csvutil.q的加载包装成一个简单的 shell 函数,以创建一个强大的命令行 CSV 处理工具。
$ function qcsv { q -c 25 320 -s $(nproc --all) <<< 'system "l utils/csvutil.q";'"$1"; }
-c 25 320命令行参数修改了默认的 25×80 控制台大小,以便更好地显示宽表。-s开关为并行处理分配多个线程。我们将此值设置为计算机上的核心数量。如果你在 Mac 上工作,可以使用$(sysctl -n hw.ncpu)。你可以通过执行以下命令来验证设置:
$ qcsv 'system "s"'
显示为qcsv分配的工作线程数量。
这个简单的包装器可以轻松实现csvlook、csvcut、csvgrep和csvsort的功能……甚至更多。例如,
$ qcsv '.csv.read10 `data.csv'
模拟csvlook并整齐对齐data.csv的前 10 行。你可以将输出管道传输到less -S来处理宽表。

每当你想查看表的前几行或后几行时,使用sublist函数。
$ qcsv '20 sublist .csv.read `data.csv'
选择列、过滤、排序
一旦我们拥有 kdb+ 表格,我们可以使用 qSQL 的全部功能进行任何数据操作。要选择列
$ qcsv 'select nsn,item_name from .csv.read `data.csv'
也许,你不喜欢将资源用于分析列,将其加载到内存中,然后丢弃它们的想法。好消息!我们有一个捷径。
在 kdb+ 中,函数.csv.infoonly接受列列表以限制列分析。我们可以将输出插入到通用的.csv.read中。
$ qcsv '.csv.data[`data.csv; .csv.infoonly[`data.csv; `nsn`item_name]]'
再次使用 qSQL,我们可以进一步过滤结果以选择匹配的行。
$ qcsv 'select from .csv.read `data.csv where item_name like "RIFLE*", fips > 31100'
我们可以使用关键字xasc和xdesc来模拟csvsort。
$ qcsv '`fips xdesc .csv.read `data.csv'
管道
Unix 系统的一个显著特性是管道:将一个命令的输出作为另一个命令的输入。CSVKit 也遵循这一原则。一旦 CSV 的内容转换为 kdb+ 表格,你可能希望停留在这个地方,因为 q 的强大功能提供了一个方便而强大的数据处理环境。
然而,在某些情况下,可能需要执行一个通过 STDIN 接受输入的黑箱脚本。我们的qcsv命令可以将 kdb+ 表格转换为所需的输出。例如,在下面的命令中,我们通过一个匿名函数处理输入 CSV,然后将输出发送到blackboxcommand。
$ qcsv '-1 .h.cd { // do something here } .csv.read `data.csv;' | blackboxcommand
如果你想处理标准输入,记得在末尾加上分号。
如果你想在一个无法完全放入内存的表上运行 csvsql 查询,而查询包含一个可以用来减少表大小的 WHERE 子句,使用管道是最优雅的解决方案。例如,代替执行
$ csvsql --query "select ... FROM data WHERE item_name like "RIFLE*" data.csv
构建一个大型内存数据库,你可以做
$ csvgrep -c item_name -r "RIFLE*" data.csv | csvsql --query "select ... FROM STDIN"
不幸的是,csvgrep的过滤功能有限。你可以指定列和单个值或正则表达式。即使 ANSI SQL 也能表达更复杂的过滤。
库 csvutil.q 和 csvguess.q 提供了 q 语言在预过滤输入表时的全部功能。在批量加载函数 POSTLOADEACH 中,输入的 CSV 段将被处理,其输出将被附加到最终结果中。为了避免创建庞大的单行代码,我使用了 q 解释器并逐行执行所有语句。
$ q
q) \l utils/csvutil.q
q) POSTLOADEACH: {x where x[`item_name] like "RIFLE*"};
q) DATA: ();
q) bulkload[`data.csv; .csv.info[`data.csv]];
q) select ... from DATA
在 q 函数中,你可以做任何事情:使用业务或实用函数,进行数学运算,调用外部服务器等……
在批量加载完成后执行函数 POSTLOADALL。这种后处理在 csvguess.q 生成的加载脚本中特别有用。例如,在 纽约街道树数据 中,多个列(例如 root_stone)包含 Yes/No 值,你可以轻松地将其转换为布尔值。
POSTLOADALL: {update `Yes=root_stone from x}
索引
xsv 的索引功能通过在 CSV 旁边创建扩展名为 idx 的二进制文件来加速查询。
$ xsv index data.csv
CSVKit 推荐使用索引来加速 SQL 查询的方法是将 CSV 内容转移到 SQLite 数据库中,并使用其 CLI 创建索引和查询数据。这些操作都假设你有权限在计算机上创建文件。
$ csvsql --db sqlite:///data.db --insert data.csv
$ sqlite3 data.db 'CREATE INDEX idx ON data(county)'
要获取格式良好的查询输出,请使用命令行选项 -header 和 -csv。
$ sqlite3 -header -csv data.db 'SELECT county, COUNT(*) AS NR FROM data GROUP BY county;'
同样地,如果你将 CSV 转换为专有的 kdb+ 格式,你可以获得巨大的性能提升。如果你对经常查询的列添加索引,性能会进一步提升。你还可以在保存之前对表进行排序。 排序属性 被附加到列上,多个操作的速度加快,例如,通过用二分查找替换线性查找。
在下面的命令中,我创建了 data.csv 的 kdb+ 等效表 t,位于目录 db 中,并通过属性 应用索引 于 county 列,通过属性 g# 实现。
$ mkdir db
$ qcsv '`:db/t/ set .Q.en[hsym `db] update `g#county from .csv.read `data.csv'
你不需要在 q 解释器周围使用 qcsv 包装器来运行查询。
$ q db <<< 'select nr: count i by county from t'
如果我们有有限的硬件资源且 CSV 无法载入内存,则可以使用支持批量加载和保存的 csvguess.q。
$ q csvguess.q data.csv -savescript -exit
# overwrite POSTSAVEALL definition in data.load.q to
# POSTSAVEALL: {@[SAVEPATH[]; `county; `g#]}
$ q data.load.q -bulksave -savedb kdb -savename t -exit
注意,kdb+ 是一个列式数据库,每一列都有其自己的文件表示。当你运行查询 select count i by county from t 时,仅读取 county 列并需要资源。这使得你可以对无法完全载入内存的表执行查询,而 csvsql 将退出并显示错误消息。
比较 SQLite 和 kdb+ 超出了本文的范围,但在一个有 310 万行的表上进行的快速比较表明,它们在性能上存在巨大差异。
| 操作 | SQLite | kdb+ |
|---|---|---|
| 导入 CSV 的执行时间 | 223 秒 | 6 秒 |
| 导入 CSV 的内存需求 | 5841 千字节 | 178 千字节 |
| 查询的执行时间 | 6693 毫秒 | 16 毫秒 |
特殊函数
qSQL 是 ANSI SQL 的超集。通过我们的单行命令 qcsv,我们可以表达 ANSI SQL 无法处理的复杂逻辑。此外,qSQL 只是 q 编程语言的一部分。q 的所有特性、库和函数都可以进一步处理 CSV 文件。这些功能包括向量操作、函数式编程、高级迭代器、日期/时间和字符串操作等。
Kdb+ 还有更多的技巧。我们可以加载我们在生产中使用的业务逻辑。这就像使用我们数据库管理系统的存储过程来分析本地 CSV 文件一样。Kdb+ 提供了一个用于流处理、内存中的历史数据处理的单一解决方案,你还可以在你的临时数据分析中利用它。
可能性并不止于此。除了加载现有脚本外,你还可以轻松连接到现有的 kdb+ 服务。例如,要在远程 kdb+ 服务器(如 72.7.9.248:5001)上调用 q 函数 fn 并传递 CSV 内容作为参数,你可以使用 one-shot TCP 请求。
qcsv '`:72.7.9.248:5001 (`fn; .csv.read `data.csv)'
使用 kdb+,你可以完全灵活地将脚本和服务嵌入到单行命令中以处理 CSV 文件。简单而强大,对吧?
让我们考察三个领域,以了解在分析 CSV 文件时可以达到多远的深度。
Pivot
数据透视表是数据分析中常用的功能。它通过将列值转换为新列来提供更紧凑的数据视图。新的视图允许并排检查相关值。这种技术常用于可视化多个分组的聚合结果。
我在最 广泛使用的数据透视实现 周围添加了一个 封装函数,放在 utils/pivot.q 中。我们只需加载库 pivot.q 并添加 .pvt.pivot 前缀。它需要一个 键控表,通常是通过多个分组聚合的结果。数据透视列是最后一个键列。看看数据透视如何将一个狭窄、难以消化的表格转换为一个适合控制台的方形格式。

q 语言允许你通过总计列和总计行轻松扩展数据透视表,前提是你愿意离开方便的选择语句世界并使用函数式形式。探索任何选择语句的函数等效形式超出了本文的范围。这里,我仅展示解决方案以演示其可行性。

注意,总计的中位数不能直接从原始数据透视表中得出。后台执行了三个额外的选择语句。
数组列
没有什么阻止你将值列表放入 CSV 的一个单元格中。你只需要使用除逗号之外的分隔符,例如空白或分号。与 ANSI SQL 不同,kdb+可以处理数组列。
我们之前已经使用函数.h.cd将 kdb+表转换为字符串列表,然后保存到 CSV 中。.h.cd 按预期处理数组列。你可以通过.h.d设置次级分隔符。尽管 q 中的字符串是字符列表,.h.cd不会在字符之间插入次级分隔符。这是大多数用户期望的行为。
在读取 CSV 的数组列时,它将被存储为字符串列。kdb+函数vs(缩写为vector 来自string)通过分隔符字符串分割一个字符串。
q)" " vs "10 31 -42"
"10"
"31"
"-42"
你可以通过整数转换,将字符串列表转换为整数列表,用"I"$表示。
与 kdb+中的许多函数一样,vs可以与中缀或括号符号一起使用。
q) vs[" "; "10 31 -42"]
Kdb+支持函数式编程。你可以使用each轻松地将单目函数应用于列表。这类似于 Python 的map函数。此外,你可以通过绑定参数从二元函数推导出单目函数。这称为投影。将这些结合起来,我们可以按如下方式按空格分割字符串列表
q) vs[" "] each ("10 31 -42"; "104 105 107")
"10" "31" "-42"
"104" "105" "107"
或者更优雅地使用 Each 迭代器(用'表示),如果分隔符是单个字符的话。
q) " " vs' ("10 31 -42"; "104 105 107")
一个表列可以是一个字符串列表。假设列A包含用空白分隔的整数。函数.csv.read返回一个字符串列,我们可以轻松将其转换为数组列。
q) update "I"$" " vs' A from .csv.read `data.csv
为了展示 q 语言的强大功能,假设data.csv中有另一列数组称为IDX,其中包含索引。对于每一行,我们需要计算数组列A在IDX指定的索引处的和。让我稍微探讨一下索引操作。
在 q 中,你可以像在其他编程语言中一样索引一个列表。
q) list: 4 1 6 3 // this is an integer list
q) list[2]
6
Q 是一个向量语言。许多运算符不仅接受标量,还接受列表。索引就是这样的一个操作。
q) list[2 1]
6 1
方括号只是语法糖。你可以改为使用@运算符和中缀符号。
q) list @ 2 1
6 1
当将列表的列表作为@运算符的两个参数传递时,我们需要再次使用 Each 迭代器。将所有内容汇总起来,我们通过
$ qcsv $'
t:update "I"$" " vs\' A, "I"$" " vs\' IDX from .csv.read `data.csv;
update sum_A_of: sum each A@\'IDX from t'

我将表达式拆分成多行以提高可读性,但从 shell 的角度来看,这仍然是一个单一的命令。
Each 迭代器(')需要转义,我们需要使用 ANSI-C 引用,因此在开头的引号前面有$。
连接
连接两个 CSV 文件已经被 Linux 命令join支持。命令csvjoin进一步支持所有类型的 SQL 连接:内连接、左连接、右连接和外连接。Q 也支持这些经典的连接操作。
对于时间序列,另一个常用的连接类型是asof及其泛化形式window join。如果你有两个数据流且时间不同,则 asof 连接可以合并这两个数据流。
让我展示一下在实际场景中如何使用 window join 来分析分布式进程。我们的主进程向 worker 进程发送请求。每个请求会产生多个任务。我们存储请求的start和end时间以及任务的start时间和duration。我们希望看到 worker 在每个请求上花费的时间比例。由于网络延迟,任务的开始时间在请求的开始时间之后。以下是主进程数据的一个示例。
| requestID | workerID | start | end |
|---|---|---|---|
| RQ1 | SL1 | 12:31 | 12:52 |
| RQ2 | SL2 | 12:31 | 12:50 |
| RQ3 | SL1 | 12:54 | 12:59 |
| RQ4 | SL3 | 12:51 | 13:00 |
| RQ5 | SL1 | 13:10 | 13:13 |
合并后的 worker 数据是
| workerID | taskID | start | duration |
|---|---|---|---|
| SL1 | 1 | 12:32 | 1 |
| SL1 | 2 | 12:35 | 2 |
| SL1 | 3 | 12:37 | 10 |
| SL2 | 1 | 12:31 | 17 |
| SL1 | 4 | 12:55 | 1 |
| SL1 | 5 | 12:56 | 3 |
| SL3 | 1 | 12:52 | 3 |
| SL3 | 2 | 12:58 | 1 |
| SL1 | 6 | 13:10 | 2 |
函数wj1帮助找到具有给定 workerID 值且落在主表的start和end列指定的时间窗口内的任务。
q) m: .csv.read `main.csv
q) s: .csv.read `worker.csv
q) wj1[(m.start;m.end); `workerID`start; m; (`workerID`start xasc s; (::; `taskID))]
requestID workerID start end taskID
------------------------------------
1 sl1 12:31 12:52 1 2 3h
2 sl2 12:31 12:50 ,1h
3 sl1 12:54 12:59 4 5h
4 sl3 12:51 13:00 1 2h
5 sl1 13:10 13:13 ,6h
列taskID中整数列表末尾的字符h表示短整型,即一个整数占用两个字节。函数.csv.info尝试节省内存,并使用占用最少空间的整数和浮点数表示,同时保留所有信息。
为了获取比例,我们需要处理经过的时间。
q) select requestID, rate: duration % end-start from
wj1[(m.start;m.end); `workerID`start; m;
(`workerID`start xasc s; (sum; `duration))]

性能
让我们比较在公开的 CSV 上执行简单聚合的性能,该 CSV 用于基准测试xsv包。该 145 MByte 的文件包含近 3200 万行。
$ curl -LO https://burntsushi.net/stuff/worldcitiespop.csv
我们希望查看按人口排序的前 10 个区域。我们需要汇总每个区域城市的人口。包 xsv 不支持聚合,因此不适用。
q 查询非常简单。
$ qcsv '10 sublist `Population xdesc select sum Population by Region from .csv.basicread `worldcitiespop.csv'
聚合操作只需要Population和Region列,因此我们可以通过省略未使用列的类型转换来加快查询速度。
$ qcsv '10 sublist `Population xdesc select sum Population by Region from .csv.data[`worldcitiespop.csv; .csv.infoonly[`worldcitiespop.csv; `Population`Region]]
csvsql非常相似
$ csvsql --query "select Region, SUM(Population) AS Population FROM worldcitiespop GROUP BY Region ORDER BY Population DESC LIMIT 10" worldcitiespop.csv
我们还可以通过命令行选项--no-inference --snifflimit 0禁用类型推断和方言嗅探。这将使命令执行速度提高一倍。
还有其他几个开源工具可以在 CSV 文件上运行 SQL 语句。我还评估了两个用 Go 编写的包。
$ textql -header -sql "select Region, SUM(Population) AS Population FROM worldcitiespop GROUP BY Region ORDER BY Population DESC LIMIT 10" worldcitiespop.csv
下面显示了以秒为单位的运行时间。第二行对应于对同一 CSV 文件进行五次重复的实验。
| CSVKit | textql | csvq | kdb+ |
|---|---|---|---|
| 116 | 23 | 13 | 2 |
| OUT OF MEM | 102 | OUT OF MEM | 6 |
以下表格包含了以千字节为单位的内存需求
| CSVKit | textql | csvq | kdb+ |
|---|---|---|---|
| 5224 | 216 | 4343 | 172 |
kdb+ 以其惊人的速度而著称。基准测试通常关注数据是否驻留在内存中或使用其专有格式存储在磁盘上。CSV 支持是该语言的一个有用功能。然而,极致的优化、对向量操作的支持以及固有的并行化都得到了回报:kdb+ 在 CSV 分析工具中表现显著优越。执行速度直接转化为生产力。如果查询返回时间从 2 秒变成近两分钟,这会让你付出多少代价?如果开发人员在等待几分钟的过程中频繁中断,他们会怎么做?
选择工具时,支持也是一个关键因素。维护成本不断增加的个人项目和其他非营利解决方案很容易被抛弃。q/kdb+ 的供应商,Kx Systems,成立于 1993 年,提供了稳定的背景、专业的支持渠道和高质量文档供 kdb+ 开发人员使用。
测试在 n1-standard-4 GCP 虚拟机上运行。kdb+ 解决方案的运行时间在更多核心的机器上会进一步下降,因为 kdb+ 4.0 利用 多线程原语。
结论
处理 CSV 文件的库有很多,每个库都有其存在的理由。kdb+ 拥有一个出色的开源库 csvutil.q/csvguess.q,具有复杂的类型推断引擎。一旦将 CSV 转换为 kdb+ 内存表,你可以轻松处理其他工具仅能困难应对的问题 - 如果它们能处理的话。你可以以可读的方式表达复杂的逻辑,这种方式易于维护,只需将加载库的 q 解释器包装到一个 shell 函数中即可。该解决方案比替代方法更环保,因为它执行速度更快,占用的内存更少。
致谢
我想对Stephen Taylor、Tim Thornton、Rebecca Kelly 和 Rian O’Cuinneagain 表达我的感激,他们提供了宝贵的反馈,并大大改善了内容。
个人简介:Ferenc Bodon 博士 是一位经验丰富的数据工程师、软件开发人员、多语言程序员、具有数据挖掘和统计学学术背景的软件架构师。他具有长远的思维,并始终致力于寻找顶级质量、稳健的解决方案,这些方案具有可扩展性并允许快速开发。他相信软件质量,直到找到“荣耀解决方案”才能放松。
原文。经许可转载。
相关内容:
-
Python 用于数据分析……真的这么简单吗?!?
-
10 个 Python 字符串处理技巧与窍门
-
R 中的文本处理
更多相关主题
仅用两行代码实现强大的探索性数据分析
原文:
www.kdnuggets.com/2021/02/powerful-exploratory-data-analysis-sweetviz.html
评论
由Francois Bertrand提供,数据可视化和游戏的编码员及设计师。

我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 方面
探索性数据分析(EDA)是大多数数据科学项目中一个至关重要的早期步骤,它通常包括采取相同的步骤来描述数据集(例如,查找数据类型、缺失信息、值的分布、相关性等)。鉴于这些任务的重复性和相似性,有一些库可以自动化这些任务,并帮助启动过程。
最新的一个工具是一个名为 Sweetviz 的开源 Python 库(GitHub),由几位贡献者和我自己共同创建,正是为了这个目的。它接受 pandas 数据框,并生成一个自包含的 HTML 报告。
它功能强大: 除了只需两行代码即可创建富有洞察力和美观的可视化外,它还提供了手动生成所需大量时间的分析,包括一些其他库无法如此快速提供的分析,如:
-
两个数据集的比较(例如,训练集与测试集)
-
目标值与所有其他变量的可视化(例如,“男性与女性的生存率是多少”)
这是一个由 Sweetviz 生成的关于著名泰坦尼克号幸存者数据集的报告链接。我们将在本文中分析这个报告。
EDA 变得…有趣?!
能够快速获得如此多关于目标值的信息,并几乎瞬间比较数据集的不同区域,将这一步骤从完全枯燥的工作转变为更快、更有趣,甚至在某种程度上…有趣!(至少对于这个数据爱好者来说!)当然,EDA 是一个更长的过程,但至少第一步要顺利得多。让我们看看在著名样本数据集上的效果。
分析泰坦尼克号数据集
对于本文,我们将分析你可以在这里找到的泰坦尼克号幸存者样本数据集。
安装 Sweetviz 后(使用 pip install sweetviz),只需像平常一样加载 pandas 数据框,然后根据需要调用 analyze()、compare() 或 compare_intra()(更多细节见下文)。完整的文档可以在 GitHub 上找到。现在,让我们从当前的案例开始,加载如下:
import sweetviz
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
我们现在有两个数据框(训练集和测试集),我们希望分析目标值“Survived”。我想指出的是,在这种情况下,我们事先知道目标列的名称,但指定目标列始终是可选的。我们可以用以下代码生成报告:
my_report = sweetviz.compare([train, "Train"], [test, "Test"], "Survived")
运行此命令将执行分析并创建报告对象。要获取输出,只需使用 show_html() 命令:
my_report.show_html("Report.html") # Not providing a filename will default to SWEETVIZ_REPORT.html
生成文件后,它将通过默认浏览器打开,应该如下所示:

有很多内容需要解读,所以我们一步步来吧!
摘要展示

摘要展示了两个数据框的特征。我们可以立即识别出测试集的大小大约是训练集的一半,但包含相同的特征。底部的图例显示,训练集包含“Survived”目标变量,但测试集不包含。
请注意,Sweetviz 会对每列的数据类型进行最佳猜测,包括数值型、类别/布尔型和文本型。这些可以被覆盖——更多细节见下文。
关联
将鼠标悬停在摘要中的“关联”按钮上,会使右侧出现关联图:

该图表是 Drazen Zaric: Better Heatmaps and Correlation Matrix Plots in Python 和 Shaked Zychlinski: The Search for Categorical Correlation 的视觉效果合成。
基本上,除了展示传统的数值相关性外,它还将数值相关性、类别-类别的不确定系数以及类别-数值的相关比率统一在一个图表中。方框代表类别特征相关变量,圆圈代表数值-数值相关性。为了清晰起见,简单对角线被留空。
重要提示:由不确定系数提供的类别-类别关联是不对称的,意味着每一行表示行标题(在左侧)对每一列提供了多少信息。例如,“性别”、“客舱等级”和“票价”是对“生存”提供最多信息的元素。对于泰坦尼克号数据集,这些信息是相当对称的,但情况并不总是如此。
最后,值得注意的是这些相关性/关联方法不应被视为绝对真理,因为它们对数据的基本分布和关系做出了一些假设。然而,它们可以作为一个非常有用的起点。
目标变量

当指定一个目标变量时,它会首先显示在一个特殊的黑色框中。
重要提示:目前只有数值和布尔特征可以作为目标变量。
从这个摘要中我们可以得知,“生存”在训练集中没有缺失数据(891,100%),有 2 个不同的可能值(占所有值的不到 1%),从图表中可以估算出大约 60%未能生存。
详细区域(类别/布尔型)
当你将鼠标悬停在任何变量上时,右侧区域将展示详细信息。详细信息的内容取决于正在分析的变量类型。在类别(或布尔型)变量的情况下,如目标变量,分析如下:

重要提示:目前需要一台“宽屏”显示器才能查看完整的详细区域。
在这里,我们可以看到每个类别的具体统计数据,其中 62%未能生存,38%存活。你还可以看到其他特征的关联详细信息。
数值数据

数值数据在其摘要中展示了更多的信息。在这里,我们可以看到,在这种情况下,大约有 20%的数据缺失(测试数据中为 21%,非常一致)。
注意,目标值(在此情况下为“生存”)被绘制为分布图上方的一条线。这可以实现对目标分布相对于其他变量的即时分析。
有趣的是,从右侧的图表中我们可以看到,生存率在所有年龄段中都相当一致,除了最年轻的年龄段,其生存率较高。这看起来像是“妇女和儿童优先”并非仅仅是空话。
详细区域(数值)

与类别数据类型一样,数值数据类型在其详细区域中显示了一些额外的信息。这里值得注意的是图表上方的按钮。这些按钮会改变图表中显示的“箱”的数量。你可以选择以下选项:
-
自动
-
5
-
15
-
30
注意:要访问这些按钮,你需要通过点击当前特征来“锁定”它。该特征会有一个红色轮廓,显示它已被锁定,你可以访问详细区域。
例如,选择“30”会生成一个更详细的图表:

文本数据

目前,系统未考虑为数值型或类别型的数据将被视为“文本”。文本特征目前只显示计数(百分比)作为统计信息。
FeatureConfig:强制数据类型,跳过列
在许多情况下,有些“标签”列你可能不想分析(尽管目标分析可以提供基于标签的目标值分布的见解)。在其他情况下,你可能希望强制某些值标记为类别型,即使它们在本质上是数值型的。
要完成所有这些操作,只需创建一个 FeatureConfig 对象并将其传递给分析/比较函数。你可以在 kwargs 中指定一个字符串或一个列表,用于skip,force_cat,和force_text:
feature_config = sweetviz.FeatureConfig(skip="PassengerId", force_cat=["Ticket"])
my_report = sweetviz.compare([train, "Train"], [test, "Test"], "Survived", feature_config)
比较子群体(例如,男性与女性)
即使你只查看单一数据集,研究该数据集中不同子群体的特征也是非常有用的。为此,Sweetviz 提供了compare_intra()函数。要使用它,你需要提供一个布尔测试来拆分数据集(在这里我们尝试train[“Sex”] == ‘male’,以了解不同性别群体的情况),并为每个子群体指定一个名称。例如:
my_report = sweetviz.compare_intra(train, train["Sex"] == 'male', ["Male", "Female"], 'Survived')
my_report.show_html() # Not providing a filename will default to SWEETVIZ_REPORT.html
生成以下分析:(在此截图中,我使用了 feature_config 来跳过“性别”特征的分析,因为它是多余的)

注意,目标值(在这种情况下为“生存”)现在被绘制为单独的线条,每个比较的数据集一个(例如,男性用蓝色,女性用橙色)。
综合来看
EDA(探索性数据分析)是一个流动的、艺术性的过程,必须根据每个数据集和情况进行独特的调整。然而,像 Sweetviz 这样的工具可以帮助启动这一过程,并消除许多初步的数据特征工作,从而立即提供见解。让我们一起查看 Titanic 数据集的所有特征,看看这可能是什么样的。
单独字段
乘客 ID

-
ID 和生存率的分布均匀且有序,如你所希望/预期的那样,因此没有意外情况。
-
无缺失数据
性别

-
男性的数量大约是女性的两倍,但……
-
女性的生存概率远高于男性
-
从相关性来看,性别与票价相关,这一点既在意料之中,又在意料之外……
-
训练集和测试集之间的分布相似
-
无缺失数据
年龄

-
20%缺失数据,训练集和测试集之间的缺失数据和分布一致
-
以年轻人为主的人口,但 0–70 岁的年龄段都有很好的代表性
-
生存率分布相当均匀,除了最年轻年龄段有一个峰值
-
使用详细窗口中的 30 个区间直方图,你可以看到这个生存率峰值确实是针对最年轻的(大约<=5 岁),因为在大约 10 岁时,生存率非常低。
-
年龄似乎与兄弟姐妹数量、票舱等级和票价相关,令人惊讶的是与登船港口也有些关联
Name

-
没有缺失数据,数据看起来很干净
-
所有名字都是独特的,这并不意外
Pclass

-
生存率与舱位等级紧密相关(头等舱最可能生存,三等舱最不可能生存)
-
训练集和测试集之间的分布类似
-
没有缺失数据
SibSp

-
似乎在 1 号和 2 号船舱有生存率的峰值,但(查看未显示的详细面板)在 3 号及以上的船舱有明显的下降。大家庭可能无法生存或者可能更贫困?
-
训练集和测试集之间的分布类似
-
没有缺失数据
Parch

-
训练集和测试集之间的分布类似
-
没有缺失数据
Ticket
-
~80%的值是独特的,所以平均每 5 张票中大约有 1 张是共享的
-
最高频率的票是 7,这通常与最大兄弟姐妹数量(8)一致
-
没有缺失数据,数据看起来很干净
Fare

-
正如预期的那样,与 Pclass 一样,较高的票价生存情况更好(尽管在更高水平上样本量会变得相当薄)
-
“生存”变量的相关系数为 0.26,相对较高,因此可能支持这一理论
-
大约 30%的独特值感觉有点高,因为你会期望更少的固定价格,但似乎有很多细节,因此这没问题
-
测试集中只有 1 条缺失记录,数据在训练集和测试集之间比较一致
Cabin

-
大量缺失数据(高达 78%),但训练集和测试集之间的一致性很好
-
最高频率是 4,这与每个舱位最多 4 人是合理的
Embarked

-
3 个独特的值(S、C、Q)
-
训练数据中只有 2 行缺失。训练集和测试集之间的数据看起来很一致
-
C 类的生存率稍高;这可能是一个富人居住的地区吗?
-
无论如何,“登船港口”对“生存”的不确定系数仅为 0.03,因此可能不是很重要
一般分析
- 总体而言,大部分数据是存在的,并且看起来一致且合理;没有重大异常值或巨大惊喜
测试数据与训练数据
-
测试集的行数大约少了 50%
-
训练集和测试集在缺失数据的分布上非常接近
-
训练集和测试集的数据值在各个方面都非常一致
关联/相关分析
-
性别、票价和 Pclass 提供了最多的生还信息。
-
正如预期的那样,票价和 Pclass 高度相关。
-
年龄似乎能告诉我们关于 Pclass、兄弟姐妹以及某种程度上的 Fare 的信息,这在一定程度上是可以预期的。它对“Embarked”也有很大提示,这有点令人惊讶。
缺失数据
- 除了年龄(约 20%)和舱位(约 77%)的显著缺失数据外,没有其他显著的缺失数据(其他特征中偶尔也有一些缺失)。
结论
这些信息都来自两行代码!Sweetviz 现在还支持笔记本集成(你可以插入内联报告)和新功能!
使用 Sweetviz,当我开始查看新的数据集时,它能迅速帮助我起步。值得指出的是,我还发现它在后续分析过程中非常有用,例如,在特征生成期间,快速概览新特征的表现。我希望你也会发现它在自己的数据分析中是一种有用的工具。
原文。转载已获许可。
相关:
更多相关内容
更多推荐




































na na





























na na





na na











na na























na na

















na na


na na











na na























na na




















na na














na na





na na
na na


na na
na na





na na








na na





na na


所有评论(0)