几率有多大?
我是如何计算这个一月的日子的
计算我在瑜伽馆抽奖中获胜的几率——以及参加抽奖是什么感觉
接受挑战
新年刚过,我的朋友 Steph Tong 找到我,想和她一起参加一个比赛(“力量挑战”),在一月份完成 20 节瑜伽课。出于#newyearnewme 的心态,我很快就同意了,尽管当时我的身材已经完全走样了。
关键外卖
这比我预想的要有挑战性得多。我面临着预期的精神挑战,即定期早起,以及身体挑战,即把锻炼计划增加到前一个月的 4 倍。
我很惊讶这有多重复。核心力量(瑜伽。我们要去的工作室)有一个相当严格的序列。这意味着序列变得单调,同样的肌肉群在我每次锻炼时都会受到冲击。我很高兴从这一切中变得更强壮、更灵活,但我无法告诉你 2 月 1 日来做其他事情时我有多兴奋。
我们中彩票的可能性有多大?
我和 Steph 有 10.93%的机会赢得比赛
任何完成这 20 门课程的人都可以参加比赛并获得奖品(老实说,这也是吸引我和斯蒂芬的原因之一)。根据我们当地工作室跟踪每个人进展的公告板,看起来 Steph 和我将是我们工作室 10 个人中完成挑战的两个人。实际上并不要求进入这个板,所以可能有人进入了而没有跟踪。然而,划掉那些框已经非常令人满意了,所以我不能想象任何人不会抓住这个机会。
这个公告板允许我和 Steph 工作室的参与者跟踪我们 20 节课的进度。注意:这张照片拍摄于 1 月 27 日,所以我在推断谁将在剩下的 4 天内完成挑战。
每个工作室都会给一个人颁发一个奖项,所以我们知道我们每个人都有十分之一的机会赢得这个奖项。
剩下的 21 个奖项将颁发给任何工作室的任何人,因此确定这些几率会有点棘手。我在这里做了一些假设:
- 获奖者将被替换选出(我只是假设他们不会给同一个人一个以上的奖项)
- 其他工作室也有 10 人完成了挑战。我不知道这是否合理,但我不知道还能做什么。
在 US⁴有 225 个工作室(注意:当我在谷歌上搜索这个数字时,我看到了一篇有趣的纽约时报文章,关于核心力量的 model⁵).业务这意味着大约有 2250 人将获得 21 项国家大奖。
我发现了一个有用的在线 calculator⁶,它允许我在没有替换的情况下计算抽样,以确定我们的胜算(这个计算器有很多选项,除了我使用它的目的之外,你还可以调整)。斯蒂芬和我各有 0.04%(2250 分之一)的机会赢得特定的国家奖,T2 有 0.93%的机会赢得任何国家奖。
当我们把这个加到我们赢得当地奖项的 10%的机会上,我们每个人都有 10.93%的机会赢得某样东西。
当然,真正的奖励是对我们健康的承诺,我们等等等等…🙄。Steph 和我来这里是为了免费的东西!
其余的经历,按数字来说
我一直在使用 Euphy 应用程序来跟踪我的进展——主要是因为我喜欢它们的可视化效果。
轻了 6 磅
每节课 5 美元…95 美分
也许承诺一个月反复去同一个工作室的最好的部分是,你真的可以无限制地花你的钱。(Planet Money 有一个很棒的插曲,讲述了大多数健身房是如何不期望或不希望你这样做的)。
我可以享受每月 119 美元的新会员费。如果我不是新来的,每门课应该是 9.50 美元:/。
4 处我无法解释的瘀伤
我不会再做的 3 个姿势
我是一个不灵活的人。结果,当我太努力去做那些意味着伸展我的小腿、腿筋等的姿势时,我开始给我的膝盖施加很大的压力。
我做了一些研究,并调整了我的实践,排除了以下内容:
- 半鸽式——我可以做同样的伸展运动,而不会让我的膝盖在全鸽式或坐姿 4 字形中爆炸。
- 跑步者的弓箭步
- 战士 1 —不知道这个姿势怎么不伤到大家。如果我把后膝向外,臀部向前,我的膝盖会尖叫“我不是为这个而生的!”
我更有信心的两个姿势
- 椅子姿势——这套曾经令人痛苦和困惑的酷刑指令现在开始感觉至少比坐在潮湿的公园长椅上要好。
- 如果我说实话,我曾经跳过这个体式(如果我在木板和扑通一声趴在地板上之间停下来,会有什么区别吗?)现在,我实际上在两者之间做了一个停留。这很难,但我在努力!
正如你所看到的,还有改进的空间,但是我得到了很好的助攻!
1 尴尬的实现
十多年来,我一直把猫和牛的姿势混在一起。意识到自己的错误后,我一时感到羞愧,但我并不真的和猫在一起…或者奶牛。糟糕,_(ツ)_/。
在我看来,看看这只猫摆出的牛的姿势,还有这只牛摆出的猫的姿势!(图片来源:123rf.com 和 shutterstock.com)
0 提示穿什么在高温瑜伽中感觉舒服
[1]“顶点体式”是一个用来描述(通常)这一类中最具挑战性的体式的术语。这个练习的目的是给你力量和灵活性来接近我们的击球姿势。
[2]https://www . NPR . org/2019/06/12/731987365/episode-590-the-planet-money-workout
[3]https://www . gaiam . com/blogs/discover/4-瑜伽错误会导致膝盖疼痛
[4]https://www.corepoweryoga.com/yoga-studio/all-locations
[5]https://www . nytimes . com/2019/04/06/style/core power-yoga-teacher-training . html
[6]https://www.omnicalculator.com/statistics/probability设 P(A)为 1/2250*100(中选一等奖的几率)。将 P(B)设置为 100,因为您没有第二个条件。将“尝试时”设置为 21(奖品数量)。将下拉列表更改为“至少出现一次”(我的名字被选为 21 个名字之一)。
数据科学家必须知道的 20 个机器学习面试问题
用这些面试问题磨练你的机器学习知识
鉴于我的文章、谷歌的数据科学面试脑筋急转弯、亚马逊的数据科学家面试练习题、微软数据科学面试问答、 5 个数据科学家常见的 SQL 面试问题的受欢迎程度,我在网上收集了一些机器学习数据科学面试问题,并尽我所能进行了回答。开始了。
问:什么是交叉验证?
交叉验证本质上是一种用于评估模型在新的独立数据集上表现如何的技术。交叉验证最简单的例子是将数据分成两组:定型数据和测试数据,其中定型数据用于构建模型,测试数据用于测试模型。
问:如何定义/选择指标?
没有放之四海而皆准的标准。选择用于评估机器学习模型的度量取决于各种因素:
- 是回归还是分类任务?
- 商业目标是什么?精确度与召回率
- 目标变量的分布是什么?
可以使用的指标有很多,包括调整后的 r 平方、MAE、MSE、准确度、召回率、精确度、f1 分数等等。
如果你想了解更多关于如何评估你的机器学习模型的信息,请查看我的文章‘如何用 Python 代码评估你的机器学习模型’!
问:解释什么是精确和召回
回忆试图回答“正确识别实际阳性的比例是多少?”
Precision 试图回答“多大比例的肯定识别实际上是正确的?”
摘自维基百科
问:解释什么是假阳性和假阴性。为什么这些对彼此很重要?举例说明假阳性比假阴性更重要,假阴性比假阳性更重要,以及这两种错误同等重要
一个假阳性是当一个条件不存在时对其存在的不正确识别。
假阴性是对实际存在的条件不存在的错误识别。
假阴性比假阳性更重要的一个例子是癌症筛查。与其说有人得了癌症,后来才发现没有,不如说有人没得癌症。
这是一个主观的论点,但从心理学的角度来看,假阳性可能比假阴性更糟糕。例如,赢得彩票的假阳性可能比假阴性更糟糕,因为人们通常不会期望赢得彩票。
问:监督学习和无监督学习有什么区别?给出具体的例子
监督学习涉及学习基于示例输入-输出对将输入映射到输出的函数[1]。
例如,如果我有一个包含两个变量的数据集,年龄(输入)和身高(输出),我可以实现一个监督学习模型,根据年龄预测一个人的身高。
由作者创建
与监督学习不同,非监督学习用于从输入数据中进行推断和发现模式,而不参考标记的结果。无监督学习的一个常见用途是根据购买行为对客户进行分组,以找到目标市场。
查看我的文章’ 六分钟解释所有机器学习模型 '如果你想了解更多这方面的信息!
问:假设您需要使用多元回归生成一个预测模型。解释你打算如何验证这个模型
有两种主要方法可以做到这一点:
A)调整后的 R 平方。
r 平方是一种度量,它告诉你因变量的方差在多大程度上是由自变量的方差来解释的。更简单地说,当系数估计趋势时,R 平方表示最佳拟合线周围的散布。
然而,添加到模型中的每个额外的独立变量总是增加 R 平方值——因此,一个有几个独立变量的模型可能看起来更适合,即使它不是。这就是调整后的 R 的用武之地。调整后的 R 补偿每个额外的独立变量,并且仅在每个给定变量将模型改进到超出概率可能的程度时才增加。这很重要,因为我们正在创建一个多元回归模型。
B)交叉验证
大多数人常用的方法是交叉验证,将数据分成两组:训练数据和测试数据。参见第一个问题的答案,了解更多信息。
问:NLP 代表什么?
NLP 代表自然语言处理。它是人工智能的一个分支,赋予机器阅读和理解人类语言的能力。
问:什么时候你会使用随机森林来对抗 SVM,为什么?
为什么随机森林是比支持向量机更好的模型选择,有几个原因:
- 随机森林允许您确定要素的重要性。SVM 不能这么做。
- 随机森林比 SVM 建造起来更快更简单。
- 对于多类分类问题,支持向量机需要一种 one-vs-rest 方法,这种方法扩展性差,占用内存多。
问:什么是主成分分析?解释你会用主成分分析来解决哪类问题。
从最简单的意义上来说,PCA 涉及将高维数据(例如 3 维)投影到更小的空间(例如 2 维)。这导致数据的维度降低(2 维而不是 3 维),同时保持模型中的所有原始变量。
PCA 通常用于压缩目的,以减少所需的内存并加速算法,以及用于可视化目的,使汇总数据更容易。
问:为什么朴素贝叶斯这么差?如何改进使用朴素贝叶斯的垃圾邮件检测算法?
朴素贝叶斯的一个主要缺点是,它有一个很强的假设,即假设这些特征彼此不相关,但事实通常并非如此。
改进这种使用朴素贝叶斯的算法的一种方法是对特征去相关,使得假设成立。
问:线性模型的缺点是什么?
线性模型有几个缺点:
- 线性模型有一些强有力的假设,在应用中可能不成立。它假设线性关系、多元正态性、没有或很少多重共线性、没有自相关和同方差
- 线性模型不能用于离散或二元结果。
- 您不能改变线性模型的模型灵活性。
问:你认为 50 个小决策树比一个大决策树好吗?为什么?
问这个问题的另一种方式是“随机森林是比决策树更好的模型吗?”答案是肯定的,因为随机森林是一种集成方法,需要许多弱决策树来形成强学习器。随机森林更准确、更健壮,并且不容易过度拟合。
问:为什么均方差不是衡量模型性能的好方法?你有什么建议?
均方误差(MSE)对大误差给予相对较高的权重,因此,MSE 往往过于强调大偏差。更可靠的替代方法是 MAE(平均绝对偏差)。
问:线性回归需要哪些假设?如果这些假设中的一些被违反了呢?
这些假设如下:
- 用于拟合模型的样本数据是代表人口的
- X 和 Y 的均值之间的关系是线性****
- 残差的方差对于 X 的任何值都是相同的(同方差)****
- 观察是相互独立的
- 对于 X 的任意值,Y 都是正态分布**。**
极端违反这些假设将使结果变得多余。对这些假设的小的违反将导致估计的更大的偏差或方差。
问:什么是共线性,如何处理共线性?如何去除多重共线性?
当多元回归方程中的一个自变量与另一个自变量高度相关时,就存在多重共线性。这可能是有问题的,因为它破坏了一个独立变量的统计意义。
您可以使用方差膨胀因子(VIF)来确定自变量之间是否存在多重共线性-标准基准是,如果 VIF 大于 5,则存在多重共线性。
问:如何检查回归模型是否很好地拟合了数据?
有几个指标可供您使用:
****R 平方/调整后的 R 平方:相对拟合度。这在之前的回答中已经解释过了
F1 得分:评估所有回归系数都等于零的原假设与至少一个不等于零的替代假设
RMSE: 绝对契合度。
什么是决策树?
图片来自 Kaggle
决策树是一种流行的模型,用于运筹学、战略规划和机器学习。上面的每个方块被称为一个节点,节点越多,你的决策树就越精确(一般来说)。决策树中做出决策的最后节点被称为树的叶。决策树直观且易于构建,但在准确性方面有所欠缺。
问:什么是随机森林?为什么好?
随机森林是一种建立在决策树基础上的集成学习技术。随机森林包括使用原始数据的自举数据集创建多个决策树,并在决策树的每一步随机选择一个变量子集。然后,该模型选择每个决策树的所有预测的模式。依靠“多数获胜”模型,它降低了单个树出错的风险。
例如,如果我们创建一个决策树,第三个,它会预测 0。但是如果我们依赖所有 4 个决策树的模式,预测值将是 1。这就是随机森林的力量。
随机森林提供了其他几个好处,包括强大的性能,可以模拟非线性边界,不需要交叉验证,并赋予功能重要性。
问:什么是内核?解释内核技巧
核是一种计算两个向量 𝐱 x 和 𝐲 y 在某个(可能是非常高维的)特征空间内点积的方法,这就是为什么核函数有时被称为“广义点积”[2]
核心技巧是一种使用线性分类器来解决非线性问题的方法,方法是将线性不可分的数据转换为高维线性可分的数据。
摘自分析 Vidhya
问:在拟合 SVM 之前进行降维是否有益?为什么或为什么不?
当特征的数量大于观察的数量时,那么执行维数减少通常会改善 SVM。
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式就是在媒体这里关注我。
- 在成为第一批在Twitter上关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!
- 在 LinkedIn 这里关注我。
- 在我的邮箱列表** 这里注册。**
- 查看我的网站,terenceshin.com。
参考
[1] Stuart J. Russell,Peter Norvig,人工智能:一种现代方法(2010 年),普伦蒂斯霍尔
[2]阿列克谢·格里戈里耶夫,如何直观地解释什么是内核? (2016),栈交换
相关文章
最流行的机器学习模型的直观解释。
towardsdatascience.com](/all-machine-learning-models-explained-in-6-minutes-9fe30ff6776a) [## 数据科学家的 40 个统计面试问题和答案
为你的面试复习统计知识的资源!
towardsdatascience.com](/40-statistics-interview-problems-and-answers-for-data-scientists-6971a02b7eee)**
准备数据科学面试的 20 个机器学习相关问题
Clem Onojeghuo 在 Unsplash 拍摄的照片
自信的指甲数据科学访谈,第 1 部分
机器学习相关的问题在面试中总是占很大一部分。数据科学家、机器学习工程师等职位要求潜在候选人对机器学习模型有全面的了解,并熟悉使用这些模型进行分析。在与面试官讨论你的一些项目以展示你对某些模型的理解时,面试官会问一些关于模型选择、特征选择、特征工程、模型评估等基本的机器学习问题。在这篇文章中,我将讨论 20 个与机器学习相关的问题,并解释我如何在面试中回答这些问题。
型号规格
1、什么是有监督的机器学习问题,什么是无监督的机器学习问题?
通过检查问题中是否有要预测的目标值或标签,可以很容易地区分它们。监督机器学习将数据与目标值进行映射,以便模型将使用从数据中提取的特征来预测目标值。例如,用线性回归来预测房价;使用逻辑回归预测一个人是否会拖欠债务。
无监督的机器学习问题没有预测的目标值,但正在学习从数据中发现一般模式。例如,基于模式对数据进行聚类;基于特征方差的降维。
2、什么是分类问题,什么是回归问题?
分类问题和回归问题都是有监督的机器学习问题,因此问题中存在目标值。分类问题具有代表类别的离散目标值。对于二元分类问题,只有正类和负类。回归问题需要预测连续的目标值,如房价、等待时间等。
3、一个机器学习模型的参数和超参数是什么?
参数是在模型的拟合过程中生成的,而超参数是默认定义的或通过 GridSearchCV 搜索指定的。以岭回归为例,参数是所有特征的系数,而超参数是指定模型中正则化级别的α。
4、什么是 logistic 回归的成本函数?
逻辑回归使用交叉熵作为成本函数:
具有交叉熵的成本函数同时惩罚不确定性和不正确的预测。以高置信度做出的不正确预测对总和的影响最大。例如,当 y_j = 0,而你的模型预测 f (X_j) = 0.9 时。代价将是-log(0.1),接近无穷大。
5、什么是 SVM,什么是支持向量?
支持向量机(SVM)是一种监督机器学习算法,通常用于解决二分类问题。它还可以应用于多类分类问题和回归问题。
支持向量是距离分离超平面最近的数据点。它们是最难分类的数据点。此外,支持向量是训练集的元素,如果被移除,其将改变划分超平面的位置。我有一篇文章解释了更多关于 SVM 的概念:
支持向量机(SVM)是一种监督机器学习算法,通常用于解决二元…
towardsdatascience.com](/explain-support-vector-machines-in-mathematic-details-c7cc1be9f3b9)
6、什么是梯度下降和随机梯度下降?
每个机器学习模型都有一个代价函数 J (θ_0,θ_1,…θ_n),其中θs 是参数。为了在拟合过程中找到最佳参数,我们正在解决一个优化问题:
最小 J (θ_0,θ_1,…θ_n)
w.r.t θ_0,θ_1,…θ_n
梯度下降通过一阶迭代解决了这个问题:
它从θs 的随机值开始,并根据一阶偏导数不断更新θs。当偏导数为正时,我们减小θ,反之亦然:
当偏导数达到零或足够接近零时,迭代停止并达到局部/全局最小值。ɳ是学习率,当它很小时,它需要更长的时间来收敛,但如果它很大,成本函数可能不会在每次迭代中减少,在某些情况下可能会发散。
随机梯度下降是一种优化方法,它单独考虑每个训练观察,而不是一次全部考虑(正常梯度下降会这样)。它不是计算成本函数的精确梯度,而是使用每个观察值来估计梯度,然后在该方向上迈出一步。虽然每个单独的观察将提供真实梯度的差的估计,但是给定足够的随机性,参数将收敛到良好的全局估计。因为随机梯度下降每次只需要考虑一个观测值,所以它可以处理太大而不适合内存的数据集。
7、K-means 怎么选 K?
我们选择预先在 K-means 算法中定义的聚类数,并且 K 值在技术上和实践上都是确定的。
首先,我们需要绘制肘形曲线,该曲线测量相对于 K 的失真(距聚类中心的平方距离的平均值)或惯量(样本距最近聚类中心的平方距离的总和)。注意,随着 K 的增加,我们将始终减少失真和惯量,如果 K 等于数据点的数量,则它们的值将为零。我们可以使用肘形曲线来检查下降速度,并在值下降相当慢时选择“肘点”处的 K。
实际上,我们需要选择更容易解释或者实际可行的 K。例如,如果您的公司只有资源(劳动力和资本)将客户分为三类,那么您必须将 K 设置为 3。
8、什么是在线学习?
在线学习是用新数据更新拟合,而不是重新拟合整个模型。它通常应用于两种情况。一种是当您的数据按顺序出现时,您希望逐步调整您的模型以适应新数据。另一种情况是,当您的数据太大而无法一次全部训练时,您可以使用随机梯度下降或根据您使用的模型指定批量大小。
模型评估
9、欠拟合和过拟合有什么区别?
欠拟合是指模型不够复杂,无法学习数据模式,过拟合是指模型过于复杂,拾取的是噪声而不是模式。当拟合不足时,您的模型在训练集和测试集中的性能都很差,您需要包括更多的功能,或者使用更复杂的模型。过度拟合时。该模型将在训练集中表现得非常好,但它不能推广到新数据,这意味着它在测试集中表现很差。您需要使用更简单的模型,或者通过正则化、打包或丢弃来删除一些要素。
10、偏倚和方差之间的权衡是什么?
偏差是衡量你的模型表现有多差,因此它是一个衡量拟合不足的指标。方差是对过度拟合的一种度量,即测量您的模型在多大程度上符合数据中的噪声。
11、什么是正规化,L1 和 L2 的正规化有什么区别?
我们通常在线性模型中使用正则化来控制过拟合。正则化是在拟合模型时将参数的大小添加到成本函数中。因此,它迫使模型选择较少的特征或减少特征参数的大小,并减少过度拟合的机会,尤其是当有大量特征时。
L1 正则化将参数的绝对值添加到成本函数,而 L2 正则化添加参数的平方。在线性回归中,L1 正则化是拉索回归,L2 正则化是岭回归。L1 正则化可以将无用特征的参数降为零,从而可以用于特征选择。L2 正则化不能使任何参数降为零,但可以使值大大降低。此外,由于 L2 使用的是平方值,因此它会严重惩罚“异常值”,即非常大的参数。L1 正则化适用于具有较少特征的模型,每个特征都有较大或中等的影响,而 L2 正则化适用于具有许多特征的模型,每个特征都有较小的影响。
12、如何从贝叶斯的角度解读 L2 正则化?
从贝叶斯的角度来看,参数由以下因素决定:
最大似然估计
其中 p (β|y,X)是后验分布,p (β)是先验分布,p (y|X,β)是似然函数。当忽略先验分布,仅最大化似然函数来估计β时,我们没有任何正则化。当有关于先验分布的假设时,我们增加了正则化,这意味着我们对该模型可以选择的β设置了一些限制。对于 L2 正则化,我们增加了一个假设,即β服从均值等于零的正态分布。
关于贝叶斯统计的更多信息,你可以阅读我的以下文章:
towardsdatascience.com](/the-ultimate-guide-to-bayesian-statistics-ed2940aa2bd2)
13、如何评价回归模型,如何评价分类模型?(也包括效力)
评价一个模型,需要从技术上和实际上评价它的性能。从技术上讲,根据不同的场景,我们使用 MSE、MAE、RMSE 等来评估回归模型,使用准确度、召回率、精确度、F 值、AUC 来评估分类模型。我有一篇文章描述了评估分类模型的度量标准的选择:
将机器学习模型与假设检验相结合。别扯头发了,读读这篇文章。
towardsdatascience.com](/the-ultimate-guide-of-classification-metrics-for-model-evaluation-83e4cdf294d9)
在实践方面,我们需要评估在这种情况下模型是否准备好部署和使用业务度量。如果我们正在改进一个旧模型,我们可以比较旧模型和新模型之间的技术指标,看看新模型是否有更好的性能。如果这是您正在构建的最佳模型,那么您需要用业务度量来定义“良好的性能”。例如,如果我们遵循模型的错误预测,损失是多少,这在很大程度上取决于业务场景。如果发送广告是廉价的,那么模型仍然是好的,以低精度。但是,如果发送广告是昂贵的,那么我们需要有更高的精度。
14、如何评价线性回归模型?
有几种方法可以评估线性回归模型。我们可以使用平均绝对误差(MAE)、均方误差(MSE)、均方根误差(RMSE)等指标来评估模型。请注意,如果您不希望异常值影响您的模型性能,那么您应该使用 MAE 而不是 MSE。除了这些指标,我们还可以使用 R 平方或调整的 R 平方(R2)。R-Squared 是将您构建的模型与基线模型进行比较的度量,其中基线模型始终预测 y 的平均值。
如果您的模型比基线模型差,R 平方可以小于零。校正的 R 平方根据您的模型用于进行预测的要素数量来校正 R 平方。如果增加一个要素并没有比预期更好地提高模型性能,调整后的 R 平方将会降低。
请注意,MAE 和 MSE 在没有上下文的情况下都很难解释,因为它们取决于数据的规模。但是,因为 R 平方具有固定的范围,所以接近 1 的值总是意味着模型对数据拟合得相当好。
15、什么是装袋和助推?我们为什么要使用它们?
Bagging 正在并行训练集成模型。我们有一个用随机选择的子样本(有替换)和特征训练的相同模型的集合。最终预测结合了所有模型的预测。对于分类问题,需要多数票。而对于回归问题,它取所有模型预测的平均值。装袋通常用于对抗过度拟合,随机森林就是一个很好的例子。
Boosting 是垂直训练模型。它采用一系列模型,每个模型都采用前一个模型的输出。它对重新加权的数据进行训练,以专注于以前模型出错的数据。最终的预测在最后被合并成一个加权平均值。Boosting 是一种对抗欠拟合的技术,梯度增强决策树就是一个很好的例子。
你应该在时间序列数据集上使用什么交叉验证技术?
默认的交叉验证技术在将数据拆分到不同的文件夹之前对其进行混洗,这对于时间序列分析来说是不希望的。时间序列数据的顺序很重要,我们不想在未来的数据上训练,也不想在过去的数据上测试。相反,我们需要保持秩序,只训练过去。
有两种方法:“滑动窗口”和“正向链接”。首先,我们保留数据的顺序,并将它们分成不同的文件夹。在滑动窗口中,我们在折叠 1 上训练,在折叠 2 上测试。然后我们在折叠 2 上训练,在折叠 3 上测试。我们将完成,直到我们测试最后一次折叠。在前向链接中,我们在折叠 1 上训练,在折叠 2 上测试。然后我们在折叠 1+2 上训练,在折叠 3 上测试。然后在折叠 1+2+3 训练,在折叠 4 测试。我们会停下来,直到我们测试完最后一次折叠。
数据准备
17、什么是数据规范化,为什么?
数据标准化(或缩放)使所有连续要素的值范围更加一致。对于每个特征,我们减去特征平均值并除以其标准误差或范围。目标是让所有连续的要素都处于相同的比例。数据规范化至少在三种情况下有用:
1,对于使用欧几里得距离的算法:Kmeans,KNN:不同的标度扭曲了距离的计算。
2,对于用梯度下降优化的算法:不同尺度的特征使得梯度下降更难收敛。
3,用于降维(PCA):查找具有最大方差的特征组合
18、如何处理缺失数据?
答案在很大程度上取决于具体的场景,但这里有一些选择:
1,当数据集的大小不会显著减小时,删除丢失的行/列,除非将其过滤掉会使样本有偏差。
2、用均值/中值/众数代替缺失值:可能会有问题,因为它降低了特征的方差,忽略了这个特征与其他特征之间的相关性。
3、通过构建插值器或基于其他特征预测它们来预测值
4、将缺失值作为一个单独的特征:也许某些值是因为特定的原因而缺失的,可以对数据分析有所帮助。
19、如何处理不平衡数据集?
不平衡的数据集使得正常的分类指标,如准确性,不能很好地工作。有几种方法可以处理不平衡的数据集:
1、根据问题选择不同的度量来评估模型:F 值、召回率、准确率等。
从较大的集合中丢弃一些观察值:通过随机丢弃该集合中的一些数据来对较大的集合进行下采样。
3、增加较小集合的观测值:通过制作较小集合中数据点的多个副本(可能导致模型过拟合)或使用合成数据创建(例如 SMOTE)来对较小集合进行上采样,在 SMOTE 中,我们使用较小集合中的现有数据来创建看起来像现有数据点的新数据点。
20、什么是降维?为什么和如何?
降维是在拟合模型之前降低数据的维度(特征的数量)。
维度诅咒 是进行降维的首要原因。维度诅咒是说当维度增加时,首先每个维度的数据密集度降低,其次更高的维度使模型更容易过度拟合。
根据问题的不同,有不同的技术来进行降维。最严格的正向方式做主成分分析(PCA),这是一种无监督的机器学习算法,只保留方差最大的不相关特征。
在文本分析过程中,通常需要降低维数,因为矢量化矩阵是一个稀疏矩阵。哈希矢量器将在将数据拟合到模型中之前降低维度。
这都是准备面试的二十个机器学习相关问题。你可以将它们用作准备面试的清单,或者作为帮助你更好地理解机器学习基础知识的学习指南。我写过其他关于统计学问题的面试指南:
自信的钉钉数据科学访谈,第 2 部分
towardsdatascience.com](/22-statistics-questions-to-prepare-for-data-science-interviews-d5651a8b3c56)
概率中的一些练习题:
自信地完成数据科学面试,第 3 部分
towardsdatascience.com](/12-probability-practice-questions-for-data-science-interviews-2ec5230304d9)
案例研究问题:
自信地完成数据科学面试,第 4 部分
towardsdatascience.com](/structure-your-answers-for-case-study-questions-during-data-science-interviews-a14a02d21e6c)
行为问题:
自信地完成数据科学面试,第 5 部分
towardsdatascience.com](/prepare-behavioral-questions-for-data-science-interviews-96e97f13be15)
感谢您的阅读!这是我所有博客帖子的列表。如果你感兴趣的话,可以去看看!
我快乐的地方
zzhu17.medium.com](https://zzhu17.medium.com/my-blog-posts-gallery-ac6e01fe5cc3) [## 阅读朱(以及媒体上成千上万的其他作家)的每一个故事
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
zzhu17.medium.com](https://zzhu17.medium.com/membership)
2020 年 20 分钟数据科学速成班
帮助你在顶尖科技公司找到工作的终极资源
图片由阿曼达·福西特提供
这篇文章是一个广泛的速成班,我认为这是成为一名数据科学家需要知道的一些最基本和最有用的概念。我已经把它分成了不同的部分,这样你就可以一点一点地看了。
好吧,这并没有涵盖与数据科学相关的一切(那是不可能的),不,这应该是而不是你用来发展知识和技能的唯一资源…
然而,如果你一无所知,那么这将有助于你很好地理解数据科学的基础知识。如果您对数据科学有所了解,这可以作为一门紧凑的速成课程,用于复习、磨练您的知识和/或找出您知识中的差距。
一如既往,我希望这能对您有所帮助,并祝您在数据科学事业中好运!
目录
1.机器学习模型
机器学习模型的基本分段
所有的机器学习模型被分类为监督的或非监督的。如果模型是一个监督模型,那么它会被细分为回归或分类模型。我们将讨论这些术语的含义以及下面每个类别中对应的模型。
监督学习
监督学习涉及学习基于示例输入-输出对将输入映射到输出的函数。
例如,如果我有一个包含两个变量的数据集,年龄(输入)和身高(输出),我可以实现一个监督学习模型,根据年龄预测一个人的身高。
监督学习的例子
重复一下,在监督学习中,有两个子类别:回归和分类。
回归
在回归模型中,输出是连续的。下面是一些最常见的回归模型。
线性回归
线性回归的例子
线性回归的概念就是找到一条最符合数据的直线。线性回归的扩展包括多元线性回归(例如,找到最佳拟合的平面)和多项式回归(例如,找到最佳拟合的曲线)。你可以在我的上一篇文章中了解更多关于线性回归的知识。
决策图表
图片来自 Kaggle
决策树是一种流行的模型,用于运筹学、战略规划和机器学习。上面的每个方块被称为一个节点,节点越多,你的决策树就越精确(一般来说)。决策树的最后一个节点,也就是做出决策的地方,被称为树的叶。决策树直观且易于构建,但在准确性方面有所欠缺。
随机森林
随机森林是一种基于决策树的集成学习技术。随机森林包括使用原始数据的自举数据集创建多个决策树,并在决策树的每一步随机选择一个变量子集。然后,该模型选择每个决策树的所有预测的模式。这有什么意义?依靠“多数获胜”模型,它降低了单个树出错的风险。
例如,如果我们创建一个决策树,第三个,它会预测 0。但是如果我们依赖所有 4 个决策树的模式,预测值将是 1。这就是随机森林的力量。
StatQuest 做了一项了不起的工作,更详细地说明了这一点。见此处。
神经网络
神经网络的可视化表示
一个神经网络是一个受人脑启发的多层模型。就像我们大脑中的神经元一样,上面的圆圈代表一个节点。蓝色圆圈代表输入层,黑色圆圈代表隐藏层,,绿色圆圈代表输出层。隐藏层中的每个节点代表一个输入经过的函数,最终导致绿色圆圈中的输出。
神经网络实际上是非常复杂和非常数学化的,所以我不会进入它的细节,但…
饶彤彤的文章对神经网络背后的过程给出了直观的解释(见此处)。
如果你想更进一步,理解神经网络背后的数学,请点击这里查看这本免费的在线书籍。
如果你是一名视觉/音频学习者,3Blue1Brown 在 YouTube 上有一个关于神经网络和深度学习的惊人系列这里。
分类
在分类模型中,输出是离散的。下面是一些最常见的分类模型。
逻辑回归
逻辑回归类似于线性回归,但用于模拟有限数量结果的概率,通常为两个。在对结果的概率建模时,逻辑回归比线性回归更常用,原因有很多(见此处)。实质上,逻辑方程是以这样一种方式创建的,即输出值只能在 0 和 1 之间(见下文)。
支持向量机
一个支持向量机是一种监督分类技术,它实际上可以变得非常复杂,但在最基本的层面上是非常直观的。
让我们假设有两类数据。支持向量机将找到一个超平面或两类数据之间的边界,该边界使两类数据之间的间隔最大化(见下文)。有许多平面可以分隔这两个类别,但只有一个平面可以最大化类别之间的边距或距离。
如果你想了解更多细节,Savan 在这里写了一篇关于支持向量机的文章。
朴素贝叶斯
朴素贝叶斯是数据科学中使用的另一种流行的分类器。背后的想法是由贝叶斯定理驱动的:
虽然有许多关于朴素贝叶斯的不切实际的假设(这就是为什么它被称为‘朴素’),但它已经被证明在大多数情况下都是有效的,而且构建起来也相对较快。
如果你想了解更多,请点击这里。
决策树,随机森林,神经网络
这些模型遵循与前面解释的相同的逻辑。唯一区别是输出是离散的而不是连续的。
无监督学习
与监督学习不同,非监督学习用于从输入数据中进行推断和发现模式,而不参考标记的结果。无监督学习中使用的两种主要方法包括聚类和降维。
使聚集
摘自 GeeksforGeeks
聚类是一种无监督的技术,涉及数据点的分组,或聚类。它经常用于客户细分、欺诈检测和文档分类。
常见的聚类技术有 k-means 聚类、分层聚类、均值漂移聚类、基于密度的聚类。虽然每种技术在寻找聚类时有不同的方法,但它们的目标都是一样的。
降维
降维是通过获得一组主变量来减少所考虑的随机变量的数量的过程。简单来说,就是减少特性集的维数的过程(更简单来说,就是减少特性的数量)。大多数降维技术可以分为特征消除或特征提取。
一种流行的降维方法叫做主成分分析。
主成分分析
从最简单的意义上来说, PCA 涉及到将高维数据(如 3 维)投影到更小的空间(如 2 维)。这导致数据的维度降低(2 维而不是 3 维),同时保持模型中的所有原始变量。
这涉及到相当多的数学问题。如果你想了解更多…
点击查看这篇关于 PCA 的精彩文章。
如果你宁愿看视频,StatQuest 在 5 分钟内解释 PCA这里。
2.统计数字
数据类型
数值:用数字表示的数据;是可以衡量的。既可以是离散也可以是连续。
分类:定性数据分类成类别。可以是名义(未排序)或序数(排序数据)。
集中趋势测量
**均值:**一个数据集的平均值。
**中位数:**有序数据集的中间;不易受离群值的影响。
**模式:**数据集中最常见的值;仅与离散数据相关。
差异量数
**范围:**数据集中最高值和最低值之差。
方差(σ2): 衡量一组数据相对于平均值的分布程度。
标准差(σ): 数据集中数字分布的另一种度量;它是方差的平方根。
Z-score: 确定数据点偏离平均值的标准偏差数。
R-Squared: 拟合的统计度量,表明自变量解释了因变量的多少变化;仅对简单的线性回归有用。
**调整后的 R 平方:**已针对模型中预测器的数量进行调整的 R 平方的修改版本;如果新项对模型的改进超过偶然的预期,那么它就会增加,反之亦然。
变量之间关系的度量
**协方差:**测量两个(或多个)变量之间的方差。如果是正的,那么它们倾向于向同一个方向移动,如果是负的,那么它们倾向于向相反的方向移动,如果它们是零,那么它们彼此没有关系。
样本的分母变为(n-1)
**相关性:**衡量两个变量之间的关系强度,范围从-1 到 1;协方差的标准化版本。一般来说,+/- 0.7 的相关性代表两个变量之间的密切关系。另一方面,介于-0.3 和 0.3 之间的相关性表明变量之间几乎没有关系。
概率分布函数
概率密度函数(PDF): 连续数据的函数,其中任意点的值可以被解释为提供随机变量的值等于该样本的相对可能性。(维基)
概率质量函数(PMF): 离散数据的函数,给出给定值出现的概率。
累积密度函数(CDF): 告诉我们随机变量小于某个值的概率的函数;PDF 的积分。
连续数据分布
**均匀分布:**所有结果可能性相等的概率分布。
**正态/高斯分布:**通常称为钟形曲线,与 中心极限定理 有关;平均值为 0,标准偏差为 1。
**T-分布:**在样本量较小和/r 总体方差未知时用于估计总体参数的概率分布(参见更多 此处 )。
**卡方分布:**卡方统计量的分布(见 此处 )。
离散数据分布
**泊松分布:**概率分布,表示给定数量的事件在固定时间段内发生的概率。
**二项式分布:**一系列 n 次独立经历中成功次数的概率分布,每次经历都有自己的布尔值结果(p,1-p)。
朋友圈
矩描述了分布的性质和形状的不同方面。一阶矩是均值**,二阶矩是方差**,三阶矩是偏度**,四阶矩是峰度**。********
准确(性)
**真阳性:**检测条件出现时的条件。
**真否定:**不检测条件不存在时的条件。
**假阳性:**检测条件不存在时的条件。
**假阴性:**在条件存在时不检测条件。
灵敏度:又称召回;当条件存在时,测量测试检测条件的能力;灵敏度= TP/(TP+FN)
**特异性:**测量当条件不存在时,测试正确排除条件的能力;特异性= TN/(TN+FP)
预测值阳性:又称精度;对应于条件存在的阳性比例;PVP = TP/(TP+FP)
**预测值阴性:**对应于不存在条件的阴性比例;PVN = TN/(TN+FN)
假设检验和统计显著性
查看我的文章“尽可能简单地解释假设检验”以获得更深入的解释 这里 。
**零假设:**样本观察结果纯粹来自偶然的假设。
**备选假设:**样本观测值受某种非随机原因影响的假设。
**P 值:**假设零假设正确,获得某个检验的观测结果的概率;较小的 p 值意味着有更强的证据支持替代假设。
α:显著性水平;当零假设为真时拒绝零假设的概率—也称为1 型错误。
**Beta:**2 型错误;未能拒绝虚假的零假设。
假设检验的步骤:
1。陈述无效假设和替代假设
2。确定测试规模;是单尾还是双尾检验?
3。计算测试统计和概率值
4。分析结果,拒绝或不拒绝零假设(如果 p 值大于α,不拒绝零假设!)
3.可能性
概率是事件发生的可能性。
**条件概率【P(A | B)】**是一个事件发生的可能性,基于前一个事件的发生。
独立事件是其结果不影响另一事件结果概率的事件;P(A|B) = P(A)。
互斥事件是不能同时发生的事件;P(A|B) = 0。
**贝叶斯定理:**确定条件概率的数学公式。“给定 B 的概率等于给定 A 的 B 的概率乘以 A 的概率超过 B 的概率”。
概率的八大法则
- 规则#1:对于任何事件 A,0≤P(A)≤1;换句话说,一个事件的概率范围可以从 0 到 1。
- 规则 2:所有可能结果的概率总和总是等于 1。
- 规则#3: P(不是 A)= 1—P(A);这个规则解释了一个事件的概率和它的补事件之间的关系。补充事件是指包含 a 中没有的所有可能结果的事件。
- 规则#4:如果 A 和 B 是不相交事件(互斥),那么 P(A 或 B)= P(A)+P(B);这被称为不相交事件的添加规则
- 规则#5: P(A 或 B) = P(A) + P(B) — P(A 和 B);这叫做一般加法法则。
- 规则#6:如果 A 和 B 是两个独立事件,那么 P(A 和 B)= P(A) P(B)*;这被称为独立事件的乘法法则。
- 规则#7:给定事件 A,事件 B 的条件概率为 P(B|A) = P(A 和 B) / P(A)
- 规则#8:对于任意两个事件 A 和 B, P(A 和 B)= P(A) P(B | A)*;这被称为通用乘法法则
计数方法
阶乘公式:n!= n x(n-1)x(n-2)x…x 2 x 1 当项目数等于可用位置数时使用。例如:找出 5 个人可以坐在 5 个空座位上的总方式数。
= 5×4×3×2×1 = 120
基本计数原理(乘法) 当允许重复且填充空位的方式数不受之前填充的影响时,应使用此方法。有 3 种早餐、4 种午餐和 5 种甜点。组合总数= 5 x 4 x 3 = 60
排列:P(n,r)= n!/(n r)!
一个代码有 4 个数字,按特定的顺序排列,数字范围从 0 到 9。如果一个数字只能用一次,有多少种排列?
P(n,r) = 10!/(10–4)!=(10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x2 x 1)/(6x 5 x 4 x 3 x2 x 1)= 5040
组合公式:C(n,r)=(n!)/[(n r)!r!] 当不允许替换并且项目的排列顺序不重要时使用。要赢得彩票,你必须从 1 到 52 中以任何顺序选出 5 个正确的数字。有多少种可能的组合?
C(n,r) = 52!/ (52–5)!5!= 2598960
4.熊猫
Pandas 是 Python 中的一个软件库,用于数据操作和分析。这在数据科学领域是普遍现象,必须了解!下面是学习熊猫基本功能的指南。
设置
导入熊猫库
import pandas as pd
创建和读取数据
创建数据框架
数据帧只是一个由多个数组组成的表。在下面的示例中,代码将创建一个包含 ABC 和 DEF 两列的表。
pd**.DataFrame**({'ABC':[1,2,3],'DEF':[4,5,6]},index=[1,2,3])
创建一个系列
系列是一系列值,也称为列表。从视觉角度来看,想象它是表格中的一列。
pd**.Series**([1,2,3],index=[], name ='ABC')
将 CSV 文件读入数据帧
获取数据的最常见方式。这将 CSV 文件转换为数据帧。
# example
df = pd**.read_csv**("filename.csv", index_col=0)
将数据帧转换为 CSV 文件
反之亦然,如果您想将 DataFrame 转换成 CSV,可以使用下面的代码:
# example
df**.to_csv**("filename.csv", index_col=0)
确定数据帧的形状
这将告诉您数据帧有多大,格式是什么(行,列)。
df**.shape()**
查看数据帧的前 5 行
如果你想直观地了解数据帧的样子。head() 返回给定数据帧的前 5 行。
df**.head()**
查看一列或多列的数据类型
# For one column
df.variable**.dtype**# For all columns
df**.dtypes**
将列转换为另一种数据类型
如果您想将整数转换成浮点数(反之亦然),这是很有用的。
df.variable**.astype()**
操作数据帧
从数据帧中选择系列
# a) Method 1
df.property_name# b) Method 2
df['property_name']
索引系列
# if you want to get the first value in a series
df['property_name'][0]
基于索引的选择
基于索引的选择根据数据在数据帧中的数字位置检索数据。它遵循行优先,列第二的格式。Iloc 的索引方案是这样的:的第一个数字是包含性的,而的最后一个数字是排他性的。
df**.iloc[]**
基于标签的选择
基于标签的选择是索引数据帧的另一种方式,但它基于实际数据值而不是数字位置来检索数据。Loc 的索引方案使得的第一个和最后一个值都包含在内。
df**.loc[]**
使用现有列设置索引
因为基于标签的选择依赖于数据帧的索引,所以可以使用**。set_index()** 将一列分配给索引。
df.**set_index**("variable")
基于条件标签的选择
我们也可以使用基于标签的选择来过滤出数据帧。
# a) Single Condition
df.loc[df.property_name == 'ABC']# b) Multiple conditions using AND
df.loc[df.property_name == 'ABC' & df.property_name == 'DEF']# c) Multiple conditions using OR
df.loc[df.property_name == 'ABC' | df.property_name == 'DEF']
选择值在值列表中的位置
我们也可以使用 isin() 来过滤数据帧。如果你懂 SQL,它类似于 WHERE ___ IN()语句。
df.loc[df.property_name.**isin**(['ABC','DEF'])
选择值为空/不为空的位置
第一行代码将过滤 DataFrame,只显示属性名为 null 的行。
反之亦然,第二行代码用 filter it 使属性名不为空。
df.loc[df.property_name**.isnull**()]df.loc[df.property_name**.notnull()**]
添加新列
df['new_column'] = 'ABC'
重命名列
您通常会希望将列重命名为更容易引用的名称。使用下面的代码,列 ABC 将被重命名为 DEF。
df.**rename**(columns={'ABC': 'DEF'})
汇总函数
。描述()
这给出了数据帧或变量的高级摘要。它是类型敏感的,这意味着与字符串变量相比,数字变量的输出是不同的。
df**.describe()**
df.variable**.describe()**
。平均值()
这将返回变量的平均值。
df.variable**.mean()**
。唯一()
这将返回变量的所有唯一值。
df.variable**.unique()**
。值计数()
这显示了唯一值的列表以及数据帧中出现的频率。
df.variable.**value_counts()**
映射函数
。地图()
映射用于通过函数将一组初始值转换为另一组值。例如,我们可以使用映射将列的值从米转换为厘米,或者我们可以将这些值标准化。
。map()用于转换一个序列。
df.numerical_variable**.map()**
。应用()
。apply()类似于。map(),只是它转换整个数据帧。
df.numerical_variable**.apply()**
分组和排序
。groupby()
获取变量的每个值的计数(与 value_counts 相同)
df**.groupby**('variable').variable**.count()**
获取变量的每个值的最小值
df**.groupby**('variable').variable**.min()**
获取变量的每个值的汇总(长度、最小值、最大值)
df**.groupby**(['variable']).variable.**agg([len, min, max])**
多重索引
df.groupby(['variable_one', 'variable_two'])
对数据帧排序
按一个变量排序
df.**sort_values**(by='variable', ascending=False)
多变量排序
df.sort_values(by=['variable_one', 'variable_two'])
按索引排序
df**.sort_index()**
处理缺失数据
处理缺失数据是 EDA 中最重要的步骤之一。下面是一些处理缺失数据的方法。
删除包含空值的行
如果您有一个包含大量行的数据帧,并且您能够完全删除包含空值的行,那么。dropna()是一个有用的工具。
df.**dropna()**
删除包含空值的列
这与上面的类似,除了它删除任何具有空值的列而不是行。
df.**dropna(axis=1)**
填充缺失值
如果您希望填充缺少的值,而不是完全删除行或列,可以使用下面的代码:
df.variable**.fillna**("n/a")
替换值
假设有一个数据帧,其中有人已经用“n/a”填充了缺失值,但是您希望用“unknown”填充缺失值。那么您可以使用下面的代码:
df.variable**.replace**("n/a", "unknown")
组合数据
。concat()
当您想要合并具有相同列的两个数据帧时,这很有用。例如,如果我们想将一月份的销售额和二月份的销售额结合起来分析长期趋势,您可以使用以下代码:
Jan_sales = pd.read_csv("jan_sales.csv")
Feb_sales = pd.read_csv("feb_sales.csv")**pd.concat**([Jan_sales, Feb_sales])
。加入()
如果您想要合并具有公共索引的两个列(例如 customer_id),那么您可以使用。加入()。
使用上的参数确定要连接的列。
要确定它是左连接、右连接、内连接还是外连接,可以使用参数 how 。
# example
table_1.**join**(table_2, on='customer_id', *how='left')*
如果你不了解 SQL joins,在这里阅读。本质上是一样的想法。
5.SQL 和查询
定义
行,也称为*记录,*是代表单个实体的属性(变量)的集合。例如,一行可能代表一个住院病人,可能有年龄、体重、身高等属性/变量…
表是具有相同属性(相同变量)的行的集合。对我帮助最大的是把一个表格想象成一个 Excel 表格。
表格示例
查询是从数据库表或表的组合中请求数据。使用上面的表格,如果我想找到所有年龄大于 23 岁的病人,我将编写一个查询*。*
如何编写 SQL
因为这是给初学者的教程,所以如果你想从一个表中提取数据,我将向你展示如何编写一个查询。
一个基本查询有五个组成部分:
- 选择(必填)
- 从(必填)
- 其中(可选)
- 分组依据(可选)
- 排序依据(可选)
其结构如下:
***SELECT**
[column_name_1],
[column_name_2],
[column_name_n]
**FROM**
[table_name]
**WHERE**
[condition 1]
**GROUP BY** [column_name]
**ORDER BY** [column_name]*
让我们带回我的例子作为参考:
1.选择(必填)
***SELECT 确定要从给定的表中提取哪些列。*例如,如果我想提取名称,那么我的代码应该是这样的:
*SELECT Name*
一个巧妙的技巧是,如果你想拉所有的列的*,你可以使用星号——见下文:***
*SELECT **
2.从(必填)
***FROM 确定您要从哪个表中提取信息。*例如,如果您想要提取患者的姓名,您可能想要从名为 patient_info 的表中提取数据(见上文)。代码看起来会像这样:
*SELECT
Name
FROM
patient_info*
这是您的第一个函数查询!让我们来完成另外 3 个可选步骤。
3.其中(可选)
如果您想选择年龄超过 23 岁的患者的姓名,该怎么办?这就是我们的用武之地。 WHERE 是用来过滤您的表的语句,就像您在 Excel 中使用过滤工具一样!
获取 23 岁以上患者姓名的代码在左边。右侧显示了一个可视化表示:
如果想要满足两个子句的患者姓名,可以使用和。例如,查找年龄超过 23 岁且体重超过 130 磅的患者的姓名。
*SELECT
Name
FROM
patient_info
WHERE
Age > 23
AND
Weight_lbs > 130*
如果您想要满足两个子句之一的的患者姓名,您可以使用或*。例如,查找小于 22 岁或大于 23 岁的患者的姓名。***
*SELECT
Name
FROM
patient_info
WHERE
Age < 22
OR
Age > 23*
4.分组依据(可选)
GROUP BY 正如它所说的那样— 它将具有相同值的行分组到汇总行中。它通常与计数、最小值、最大值、总和、AVG 等聚合函数一起使用。
让我们用下面的例子:
如果我们想得到每个病人去医院的次数,我们可以使用下面的代码并得到下面的结果:
5.排序依据(可选)
ORDER BY 允许您根据特定属性或多个属性按升序或降序对结果进行排序。我们来举个例子。
*SELECT
*
FROM
patient_info
ORDER BY
Age asc*
“ORDER BY Age asc”意味着您的结果集将按年龄以升序对行进行排序(参见上图中的左表)。如果你想按降序排列(上图的右边表格),你可以用 desc 代替 asc 。
现在你已经学习了基本结构,下一步是学习 SQL 连接,你可以在这里阅读。
6.额外内容
如果你读到了最后,恭喜你!我希望这能激励你继续你的数据科学之旅。事实是,关于我写的每个主题,还有很多东西需要学习,但幸运的是,有成千上万的资源可供您使用!
以下是一些额外的资源和教程,您可以用来继续学习:
- 建立你的第一个机器学习模型并开始你的数据科学生涯的指南 : 如果你从未创建过机器学习模型并且不知道从哪里开始,请参考这个。
- 探索性数据分析的详尽逐步指南:探索您的数据对于您使用的每个数据集都至关重要。通读这篇文章,了解什么是 EDA 以及如何进行 EDA。
- 如何用 Python 代码评价你的机器学习模型! :创建你的机器学习模型是一回事。创造一个好的机器学习模型是另一件事。这篇文章教你如何评估你是否建立了一个好的机器学习模型。
- 超过 100 个数据科学家面试问答! :一旦你建立了一个强大的数据科学组合,你觉得已经准备好找工作了,利用这个资源来帮助你准备找工作。
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式就是在媒体上关注我这里。**
- 在 Twitter 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!
- 关注我LinkedIn这里。**
- 在我的邮箱列表* 这里报名。***
- 看看我的网站,【terenceshin.com】。****
21 种更热门的数据工具以及它们不做的事情
照片通过 Unsplash
在过去的几个月里,随着部分堆栈的整合和新挑战的出现,数据生态系统继续蓬勃发展。我们帮助利益相关方驾驭这一生态系统的第一次尝试强调了 25 种热门的新数据工具和它们不做的事情 —阐明了特色公司和项目解决了和没有解决的具体问题。
这项工作得到了数据科学、工程和分析社区的积极响应,并激发了比我们最初预期更多的参与。此外,我们很高兴看到最初的帖子激发了其他发人深省的文章,如 20 个热门的新数据工具及其早期上市策略。
更进一步
无论如何,我们很快意识到我们最初的帖子不够深入,因为我们收到了几十封电子邮件、Twitter 消息和关于其他未涵盖的解决方案的 Slack DMs。我们已经揭示了数据工具和平台不断扩展的宇宙中的一个小角落,然而还有机会覆盖更多。
虽然我们不能在一篇后续文章中记录每一个额外的数据工具,但在这里,我们将继续努力,通过强调几个额外的工具来培育这个生态系统。这些工具的创造者不仅占据了不断发展的现代数据堆栈中有意义的部分,他们还亲切地回应了我们的请求,帮助我们了解它们的位置。
他们在这里用自己的话说。
更多工具和响应
- 造船厂:造船厂是一个工作流程编排平台,帮助团队快速启动、监控和共享数据解决方案,而无需担心基础设施管理。它允许用户创建可重复使用的蓝图,在作业之间无缝共享数据,无需任何专有设置即可运行代码,同时动态扩展资源。船厂不是一个无代码工具,不支持数据版本化或数据可视化。
- Count : Count 是一个数据笔记本,代替仪表盘进行报表和自助服务,支持数据转换。Count 特别擅长团队协作,使技术和非技术用户能够在同一台笔记本电脑内工作。数数不是数据科学笔记本。
- Castor : Castor 在组织关于数据的信息以支持数据发现、GDPR 合规性和知识管理方面是独一无二的。通过即插即用的解决方案,Castor 构建了所有数据资产的全面且可操作的地图。Castor 不是数据可视化或 BI 工具。
- Census : Census 在将数据模型从仓库同步到像 Salesforce 这样的商业工具方面独树一帜。它补充了现有的仓库、数据加载器&转换工具,使数据团队能够推动业务运营。它不是一个无代码工具,也不会自动为你的数据建模;它依赖于分析师用 SQL 编写模型。
- 迭代地:迭代地是一个模式注册表,帮助团队协作定义、装备和验证他们的分析。通过迭代,您可以更快地交付高质量的分析,并防止破坏信任的常见数据质量&隐私问题。迭代不是 BI 工具、数据管道或转换工具。
- StreamSQL : StreamSQL 处理模型特性的部署、版本控制和共享。使用您的定义,它会为服务和培训生成要素。它的注册便于跨团队和模型重用特性。Stream 没有对管理进行建模,并且完全不知道一旦您获得了这些特性,您将如何处理它们。
- Xplenty : Xplenty 是一个基于云的 ETL 解决方案,为跨各种来源和目的地的自动化数据流提供简单的可视化数据管道。它在接收大量数据、执行无代码数据转换和调度工作流方面有着独特的优势。Xplenty 不做事件流。
- ve tice 在跟踪、记录、组织所有人工智能资产(例如数据集、特征、模型、实验、仪表板、笔记本)和基础领域知识方面独树一帜,能够成功地管理和扩展企业人工智能计划。Vectice 不提供任何运行时或计算环境。
- Snowplow Analytics:Snowplow 是一个流行为数据引擎,它擅长从专用的 web/移动/服务器 SDK 生成事件数据,增强这些数据并将其交付到您的数据仓库。Snowplow 不是一个数据集成(ELT)工具,也不是一个通用的流框架,也不是一个 BI 工具。
- Datafold : Datafold 在比较 SQL 数据仓库中或跨数据仓库的数据集方面表现得非常出色。它支持在任何大小的表上运行“git diff”。Datafold 本身不是一个数据库(它在现有的基础设施上工作),它不处理文件。
- Splitgraph : Splitgraph 是一个用于构建、扩展、版本控制和共享 SQL 数据库的工具,它在增强现有工具方面是独一无二的。Splitgraph 还具有一个数据目录,其中包括 40K 个开放数据集,可以使用任何 SQL 客户端进行查询(和连接)。Splitgraph 不是数据库。
- Datacoral : Datacoral 擅长于从基于 SQL 的声明性规范中自动生成数据接收和转换管道,并自动捕获和显示模式级血统。Datacoral 与 Segment 等数据接收工具以及 Airflow 等工作流管理工具配合得很好。Datacoral 不是数据仓库或查询引擎。
- Apache Arrow : Apache Arrow 作为一种独立于语言的标准,对于大型表格数据集的快速内存分析处理和高效的进程间传输(开销最小)是独一无二的。虽然旨在作为数据框项目的计算基础,但它不能替代面向最终用户的工具,如 pandas。
- Datasaur : Datasaur 通过 ML 辅助建议支持 NLP 标注。它支持劳动力管理,维护数据隐私,并可以通过 API 集成到任何 ML 工作流中。Datasaur 不处理图像/视频标签的边界框。
- Datakin : Datakin 是一款 DataOps 解决方案,有助于保证数据管道无中断运行,并且生成的数据可信。它通过自动发现数据沿袭并提供快速识别和解决问题的工具来做到这一点。Datakin 不是数据目录,也不会取代任何现有的数据基础架构组件(工作流程编排、数据处理等)。
- ApertureData : ApertureData 是一个数据库,用于存储图像、视频、特征向量等视觉数据,以及注释等相关元数据。它本身支持对媒体对象的复杂搜索和预处理操作,并与基于云的存储和 ML 框架(如 PyTorch/Tensorflow)集成…ApertureData 不从图像/视频中提取元数据或特征。
- Orchest : Orchest 擅长通过在浏览器中提供可视化的管道编辑环境来帮助数据科学家交互式地构建数据科学管道。管道步骤是容器化的笔记本或脚本。Orchest 没有取代 Jupyter 笔记本,没有提供无代码工具,也没有自带计算基础设施。
- Gazette : Gazette 是一个开源的流媒体平台,它打破了批处理和实时数据之间的鸿沟,使用户能够用恰好一次的语义构建实时应用。它提供实时消息流,这些消息流作为常规文件在云存储中本地持久存储。Gazette 不是 ETL 工具或分析平台。
- Coiled : Coiled 擅长使用 Dask 在原生 Python 中扩展数据科学和机器学习工作流,这是人们所熟悉的,被广泛采用,并给出了很好的反馈。Coiled 是一种固执己见的方式,在保持 PyData 生态系统不变的情况下向集群和云发展。Coiled/Dask 不是数据库或 Kubernetes 的替代品。
- Upsolver : Upsolver 是一个云原生解决方案,用于在云存储上集成结构化和非结构化数据。它利用一个可视化的 SQL 界面进行快速简单的数据转换。Upsolver 不是一个平台即服务解决方案,它要求开发人员编写额外的代码并学习底层概念来处理数据。
- Soda : Soda 在创建和监控数据可观察性度量方面是独一无二的。其开源指标收集代理为数据和分析工程师提供了一个简单、可扩展的框架,以创建跨数据湖和数据仓库的可观察性。Soda 不是一个数据编排、调度或建模框架。
作为作者(莎拉,亚伯 & 皮特),我们集体集思广益,讨论如何扩展这项工作,创建一个不断增长的列表,帮助从业者找到并采用正确的工具,帮助创始人找到最佳合作伙伴,帮助投资者将公司与他们的投资主题对应起来。我们期待听到您对最佳媒体的想法,以便在社区的支持下继续这一探索。
每个数据科学家都应该知道的 20 种数字运算
NumPy 构成了数据科学领域中许多 Python 库的基础。
数据科学的一切都始于数据,数据有多种格式。数字、图像、文本、x 光、声音和视频记录只是数据源的一些例子。无论数据以何种格式传入,都需要转换成数字数组进行分析。因此,在数据科学中有效地存储和修改数字数组是至关重要的。
NumPy (数字 Python)是一个科学计算包,它提供了许多创建和操作数字数组的方法。它形成了许多广泛使用的与数据科学相关的 Python 库的基础,如 Pandas 和 Matplotlib。
在这篇文章中,我将介绍 NumPy 数组上 20 种常用的操作。这些操作可分为四大类:
- 创建数组
- 操纵数组
- 组合数组
- 带数组的线性代数
我们首先需要导入 NumPy:
import numpy as np
创建数组
- 特定范围内的随机整数
第一个参数决定了范围的上限。缺省情况下,下限是 0,但是我们也可以指定它。尺寸参数用于指定尺寸,如预期。
我们创建了一个介于 2 和 10 之间的 3x2 整数数组。
2。在 0 和 1 之间随机浮动
介于 0 和 1 之间的一维浮点数组。创建随机噪声数据是有用的。
3。来自标准正态分布的样本
Np.random.randn()用于从标准正态分布(即零均值和单位方差)创建样本。
我们创建了一个有 100 个浮点数的数组。
4。带有 1 和 0 的矩阵
矩阵可以被认为是二维数组。我们可以分别用 0 和 np 个 1 创建一个矩阵。
我们只需要指定矩阵的维数。
5。单位矩阵
单位矩阵是对角线上有一个 1,每隔一个位置有一个 0 的方阵(nxn)。Np.eye 或 np.identity 可以用来创建一个。
6。阿兰格
Arange 函数用于创建在指定间隔内具有均匀间隔的序列值的数组。我们可以指定起始值、终止值和步长。
默认起始值为零,默认步长为一。
7。只有一个值的数组
我们可以使用 np.full. 创建一个在每个位置都有相同值的数组
我们需要指定要填充的尺寸和数量。此外,可以使用 dtype 参数更改数据类型。默认数据类型是整数。
操纵数组
让我们首先创建一个二维数组:
8。散开
Ravel 函数展平数组(即转换为一维数组)。
默认情况下,通过逐行添加来展平数组。通过将 order 参数设置为 F (Fortran 风格),可以将其更改为列方式。
9。重塑
同样,它重塑了一个数组。A 的形状是(3,4),大小是 12。
我们需要保持尺寸,它是每个维度中尺寸的乘积。
我们不必指定每个维度的大小。我们可以让 NumPy 通过传递-1 来计算维度。
10。转置
转置矩阵就是交换行和列。
11。Vsplit
将一个数组垂直拆分成多个子数组。
我们将一个 4x3 的阵列分成 2 个子阵列,形状为 2x3。
我们可以在分割后访问特定的子数组。
我们将一个 6×3 的数组分成 3 个子数组,得到第一个子数组。
12。Hsplit
它类似于 vsplit,但水平工作。
如果我们对一个 6x3 的数组应用 hsplit,得到 3 个子数组,得到的数组将具有(6,1)的形状。
组合数组
在某些情况下,我们可能需要组合数组。NumPy 提供了以多种不同方式组合数组的函数和方法。
13。串联
类似于熊猫的 concat 功能。
我们可以使用 reshape 函数将这些数组转换成列向量,然后垂直连接。
14。Vstack
它用于垂直堆叠数组(一行在另一行之上)。
它也适用于高维数组。
15。Hstack
与 vstack 相似,但水平工作(列方向)。
带有 NumPy 数组的线性代数(numpy.linalg)
线性代数是数据科学领域的基础。NumPy 是使用最广泛的科学计算库,它提供了大量的线性代数运算。
16。详细信息
返回矩阵的行列式。
矩阵必须是正方形(即行数等于列数)才能计算行列式。对于高维数组,后两维必须是正方形。
17。Inv
计算矩阵的逆矩阵。
矩阵的逆是与原矩阵相乘时给出单位矩阵的矩阵。不是每个矩阵都有逆矩阵。如果矩阵 A 有逆,则称其为可逆或非奇异。
18。Eig
计算方阵的特征值和右特征向量。
19。圆点
计算两个向量的点积,即元素相对于其位置的乘积之和。第一个向量的第一个元素乘以第二个向量的第一个元素,依此类推。
20。马特穆尔
它执行矩阵乘法。
我们已经介绍了 NumPy 的基本操作。NumPy 上有更高级的操作,但最好先理解基础知识。
感谢您的阅读。如果您有任何反馈,请告诉我。
20 个熊猫功能将加速您的数据分析过程
举例说明。
Pandas 是一个主要使用的 python 数据分析库。它提供了许多功能和方法来加快数据分析过程。使 pandas 如此普遍的是它的功能性、灵活性和简单的语法。
在这篇文章中,我将举例说明熊猫的 20 个功能。其中一些很常见,我相信你以前也用过。其中一些对你来说可能是新的。但是,所有这些都会为您的数据分析过程增加价值。
我们开始吧。
import numpy as np
import pandas as pd
1。查询
我们有时需要根据条件过滤数据帧或应用掩码来获得某些值。过滤数据帧的一个简单方法是查询函数。让我们首先创建一个样本数据帧。
values_1 = np.random.randint(10, size=10)
values_2 = np.random.randint(10, size=10)
years = np.arange(2010,2020)
groups = ['A','A','B','A','B','B','C','A','C','C']df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1, 'value_2':values_2})df
使用查询功能非常简单,只需编写过滤条件即可。
df.query('value_1 < value_2')
2。插入
当我们想在数据帧中添加一个新列时,默认情况下它会被添加到末尾。然而,pandas 提供了使用插入功能在任意位置添加新列的选项。
我们需要通过传递一个索引作为第一个参数来指定位置。该值必须是整数。列索引从零开始,就像行索引一样。第二个参数是列名,第三个参数是包含值的对象,这些值可以是系列或类似于数组的对象。
#new column
new_col = np.random.randn(10)#insert the new column at position 2
df.insert(2, 'new_col', new_col)df
3。累计和
数据框架包含 3 个不同组的一些年值。我们可能只对每年的值感兴趣,但在某些情况下,我们也需要一个累计和。Pandas 提供了一个简单易用的函数来计算累计和,即 cumsum 。
如果我们只应用累计和,组(A,B,C)将被忽略。这种累积值在某些情况下可能没有用,因为我们无法区分不同的组。放心吧!这个问题有一个非常简单方便的解决方案。我们可以通过应用分组,然后再应用累加函数。
df['cumsum_2'] = df[['value_2','group']].groupby('group').cumsum()df
4。样品
样本方法允许您从系列或数据帧中随机选择数值。当我们想从分布中选择一个随机样本时,这是很有用的。
sample1 = df.sample(n=3)
sample1
我们用 n 参数指定值的数量,但是我们也可以将一个比率传递给 frac 参数。例如,0.5 将返回一半的行。
sample2 = df.sample(frac=0.5)
sample2
为了获得可再现的样本,我们可以使用 random_state 参数。如果将整数值传递给 random_state,则每次运行代码时都会产生相同的样本。
5。其中
“Where”用于根据条件替换行或列中的值。默认的替换值是 NaN,但是我们也可以指定替换值。
df['new_col'].where(df['new_col'] > 0 , 0)
“where”的工作方式是选择符合条件的值,并用指定的值替换剩余的值。其中(df[‘new_col’] > 0,0) 选择“new_col”中所有大于 0 的值,其余值替换为 0。因此,where 也可以被认为是一个掩码操作。
重要的一点是,这里的对于熊猫和 NumPy 来说并不完全一样。我们可以获得相同的结果,但语法略有不同。使用 DataFrame.where ,选择符合条件的值作为,其他值替换为指定值。 Np.where 还要求指定符合条件的值。以下两行返回相同的结果:
df['new_col'].where(df['new_col'] > 0 , 0)np.where(df['new_col'] > 0, df['new_col'], 0)
6。Isin
在处理数据帧时,我们经常使用过滤或选择方法。 Isin 方法是一种高级过滤。例如,我们可以根据选择列表过滤值。
years = ['2010','2014','2017']
df[df.year.isin(years)]
7。Loc 和 iloc
Loc 和 iloc 用于选择行和列。
- 位置:按标签选择
- iloc:按职位选择
loc 用于通过标签选择数据。列的标签是列名。我们需要小心行标签。如果我们不指定任何特定的索引,pandas 默认创建整数索引。因此,行标签是从 0 开始向上的整数。与 iloc 一起使用的行位置也是从 0 开始的整数。
使用 iloc 选择前 3 行和前 2 列:
用 loc 选择前 3 行和前 2 列:
注:当使用 loc 时,包括指数的上限,而使用 iloc 时不包括。
选择行“1”、“3”、“5”和列“年”和“值 _1”:
8。Pct_change
此函数用于通过系列中的值计算百分比变化。假设我们有一个包含[2,3,6]的系列。如果我们将 pct_change 应用于这个序列,返回的序列将是[NaN,0.5,1.0]。从第一个元素到第二个元素有 50%的增加,从第二个到第三个元素有 100%的增加。Pct_change 函数在比较时间序列中元素的变化百分比时非常有用。
df.value_1.pct_change()
9。排名
Rank 函数为值分配等级。假设我们有一个包含[1,7,5,3]的序列 s。分配给这些值的等级将是[1,4,3,2]。
df['rank_1'] = df['value_1'].rank()
df
10。融化
Melt 用于将宽数据帧转换为窄数据帧。我所说的宽是指具有大量列的数据帧。一些数据帧的结构是连续的测量值或变量用列来表示。在某些情况下,将这些列表示为行可能更适合我们的任务。考虑以下数据帧:
我们有三个不同的城市,在不同的日子进行测量。我们决定用一列中的行来表示这些日子。还会有一列显示测量结果。我们可以通过使用融化功能轻松实现这一点:
df_wide.melt(id_vars=['city'])
默认情况下,变量和值列的名称是给定的。我们可以使用 melt 函数的参数 var_name 和 value_name 来指定新的列名。
11。爆炸
假设您的数据集在单个观测值(行)中包含一个要素的多个条目,但您希望在单独的行中对它们进行分析。
我们希望在单独的行上看到第“1”天“c”的测量值,使用 explode 很容易做到这一点。
df1.explode('measurement').reset_index(drop=True)
12。努尼克
Nunique 计算列或行中唯一条目的数量。它在分类特征中非常有用,尤其是在我们事先不知道类别数量的情况下。让我们看看我们的初始数据框架:
df.year.nunique()
10df.group.nunique()
3
我们可以直接对数据帧应用唯一函数,并查看每列中唯一值的数量:
如果轴参数设置为 1,nunique 返回每行中唯一值的数量。
13。查找
它可用于根据其他行、列对上的值在数据帧中查找值。这个函数最好通过一个例子来解释。假设我们有以下数据帧:
对于每一天,我们有 4 个人的测量值和一个包含这 4 个人的名字的列。我们希望创建一个新列,在“个人”列中显示个人的度量。因此,对于第一行,新列中的值将是 4(列“Alex”中的值)。
df['Person_point'] = df.lookup(df.index, df['Person'])
df
14。推断 _ 对象
Pandas 支持广泛的数据类型,其中之一是对象。对象包含文本或混合(数字和非数字)值。但是,如果有不同的选项可用,则不建议使用对象数据类型。使用更具体的数据类型可以更快地执行某些操作。例如,我们更喜欢用整数或浮点数据类型来表示数值。
infer_objects 尝试为对象列推断更好的数据类型。考虑以下数据帧:
df2.dtypes
A object
B object
C object
D object
dtype: object
所有的数据类型都是对象。让我们看看推断的数据类型是什么:
df2.infer_objects().dtypesA int64
B float64
C bool
D object
dtype: object
这可能看起来微不足道,但是在有很多列的情况下绝对有用。
15。内存使用量
Memory_usage()以字节为单位返回每列使用的内存量。这在我们处理大型数据帧时尤其有用。考虑下面有一百万行的数据帧。
df_large = pd.DataFrame({'A': np.random.randn(1000000),
'B': np.random.randint(100, size=1000000)})df_large.shape
(1000000, 2)
以及每列的内存使用量(以字节为单位):
df_large.memory_usage()
Index 128
A 8000000
B 8000000
dtype: int64
整个数据帧的内存使用量,以兆字节为单位:
df_large.memory_usage().sum() / (1024**2) #converting to megabytes15.2589111328125
16。描述
Describe 函数计算数字列的基本统计数据,包括计数、平均值、标准偏差、最小值和最大值、中值、第一个和第三个四分位数。因此,它提供了数据帧的统计摘要。
17。合并
Merge()根据共享列中的值组合数据帧。考虑以下两个数据帧。
我们可以基于列中的共享值来合并它们。设置合并条件的参数是“ on 参数。
基于 column_a 中的公共值合并 df1 和 df2。merge 函数的 how 参数允许以不同方式组合数据帧。how 的可能值为“内部”、“外部”、“左侧”、“右侧”。
- inner:只有在对参数指定的列中具有相同值的行(默认值为 how 参数)
- 外部:所有行
- 左侧:左侧数据帧中的所有行
- 右侧:右侧数据帧中的所有行
18。Select_dtypes
Select_dtypes 函数根据对数据类型设置的条件返回数据帧列的子集。它允许使用 include 和 exlude 参数来包含或排除某些数据类型。
df.select_dtypes(include='int64')
df.select_dtypes(exclude='int64')
19。替换
顾名思义,它允许替换数据帧中的值。
df.replace('A', 'A_1')
第一个参数是要替换的值,第二个参数是新值。
我们还可以同时传入一个字典进行多次替换。
df.replace({'A':'A_1', 'B':'B_1'})
20。应用地图
Applymap 函数用于将函数应用于数据帧的元素。请注意,如果操作的矢量化版本可用,它应该优先于 applymap。例如,如果我们想将每个元素乘以一个数,我们不需要也不应该使用 applymap 函数。在这种情况下,简单的矢量化运算(例如 df * 4)要快得多。
然而,在某些情况下,我们可能没有矢量化运算的选项。例如,我们可以使用熊猫数据帧的 Style 属性来改变数据帧的样式。以下函数将负值的颜色更改为红色。
def color_negative_values(val):
color = 'red' if val < 0 else 'black'
return 'color: %s' % color
我们需要使用 applymap 函数将该函数应用于数据帧。
df3.style.applymap(color_negative_values)
感谢您的阅读。如果您有任何反馈,请告诉我。
20 分掌握熊猫时间序列分析
如何处理时间序列数据?
马库斯·温克勒在 Unsplash 上的照片
时间序列数据有许多定义,所有这些定义都以不同的方式表示相同的含义。一个直截了当的定义是,时间序列数据包括附加到连续时间戳的数据点。
时间序列数据的来源是周期性的测量或观察。我们观察很多行业的时间序列数据。仅举几个例子:
- 一段时间内的股票价格
- 每日、每周、每月销售额
- 过程中的定期测量
- 一段时间内的电力或天然气消耗率
在这篇文章中,我将列出 20 点,帮助你全面理解如何处理熊猫的时间序列数据。
- 不同形式的时间序列数据
时间序列数据可以是特定日期、持续时间或固定定义间隔的形式。
时间戳可以是一天中的日期,也可以是给定日期中的纳秒,具体取决于精度。例如,“2020–01–01 14:59:30”是一个基于秒的时间戳。
2。时间序列数据结构
Pandas 提供灵活高效的数据结构来处理各种时间序列数据。
除了这 3 种结构,Pandas 还支持日期偏移概念,这是一种考虑日历算法的相对持续时间。
3。创建时间戳
最基本的时间序列数据结构是时间戳,可以使用 to_datetime 或 Timestamp 函数创建
import pandas as pdpd.to_datetime('2020-9-13')
Timestamp('2020-09-13 00:00:00')pd.Timestamp('2020-9-13')
Timestamp('2020-09-13 00:00:00')
4。访问时间戳保存的信息
我们可以获得存储在时间戳中的关于日、月、年的信息。
a = pd.Timestamp('2020-9-13')a.day_name()
'Sunday'a.month_name()
'September'a.day
13a.month
9a.year
2020
5。访问不太明显的信息
时间戳对象还保存关于日期算法的信息。例如,我们可以问这一年是否是闰年。以下是我们可以获得的一些更具体的信息:
b = pd.Timestamp('2020-9-30')b.is_month_end
Trueb.is_leap_year
Trueb.is_quarter_start
Falseb.weekofyear
40
6。欧式日期
我们可以使用 to_datetime 函数来处理欧式日期(即首先是一天)。dayfirst 参数设置为 True。
pd.to_datetime('10-9-2020', dayfirst=True)
Timestamp('2020-09-10 00:00:00')pd.to_datetime('10-9-2020')
Timestamp('2020-10-09 00:00:00')
注意:如果第一项大于 12,熊猫知道它不能是一个月。
pd.to_datetime('13-9-2020')
Timestamp('2020-09-13 00:00:00')
7。将数据框架转换为时间序列数据
to_datetime 函数可以将具有适当列的 dataframe 转换为时间序列。考虑以下数据帧:
pd.to_datetime(df)0 2020-04-13
1 2020-05-16
2 2019-04-11
dtype: datetime64[ns]
8。超出时间戳
在现实生活中,我们几乎总是处理连续的时间序列数据,而不是单个日期。Pandas 也使得处理时序数据变得非常简单。
我们可以将日期列表传递给 to_datetime 函数。
pd.to_datetime(['2020-09-13', '2020-08-12',
'2020-08-04', '2020-09-05'])DatetimeIndex(['2020-09-13', '2020-08-12', '2020-08-04', '2020-09-05'], dtype='datetime64[ns]', freq=None)
返回的对象是 DatetimeIndex。
创建日期序列有更实用的方法。
9。使用 to_datetime 和 to_timedelta 创建时间序列
可以通过向时间戳添加 TimedeltaIndex 来创建 DatetimeIndex。
pd.to_datetime('10-9-2020') + pd.to_timedelta(np.arange(5), 'D')
“d”用于“day ”,但还有许多其他选项可用。点击可以查看的全部名单。
10。日期 _ 范围功能
它提供了一种更灵活的方法来创建 DatetimeIndex。
pd.date_range(start='2020-01-10', periods=10, freq='M')
periods 参数指定索引中的项数。freq 是频率,M 表示一个月的最后一天。
就 freq 参数的参数而言,date_range 非常灵活。
pd.date_range(start='2020-01-10', periods=10, freq='6D')
我们已经创建了一个频率为 6 天的索引。
11。周期 _ 范围函数
它返回一个 PeriodIndex。语法类似于 date_range 函数。
pd.period_range('2018', periods=10, freq='M')
12。timedelta_range 函数
它返回一个 TimedeltaIndex。
pd.timedelta_range(start='0', periods=24, freq='H')
13。时区
默认情况下,熊猫的时间序列对象没有指定的时区。
dates = pd.date_range('2019-01-01','2019-01-10')dates.tz is None
True
我们可以使用 tz_localize 方法给这些对象分配一个时区。
dates_lcz = dates.tz_localize('Europe/Berlin')dates_lcz.tz
<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
14。创建一个带有指定时区的时间序列
我们还可以使用 tz 关键字参数创建一个带有时区的时间序列对象。
pd.date_range('2020-01-01', periods = 5, freq = 'D', tz='US/Eastern')
15。偏移
假设我们有一个时间序列索引,并希望偏移特定时间的所有日期。
A = pd.date_range('2020-01-01', periods=10, freq='D')
A
让我们给这个系列增加一个星期的偏移。
A + pd.offsets.Week()
16。移动时间序列数据
时间序列数据分析可能需要移动数据点来进行比较。移位功能及时移位数据。
A.shift(10, freq='M')
17。Shift vs tshift
- 移位:移位数据
- tshift:移动时间索引
让我们创建一个带有时间序列索引的数据帧,并绘制它以查看 shift 和 tshift 之间的差异。
dates = pd.date_range('2020-03-01', periods=30, freq='D')
values = np.random.randint(10, size=30)
df = pd.DataFrame({'values':values}, index=dates)df.head()
让我们把原始的时间序列和移动的时间序列一起画出来。
import matplotlib.pyplot as pltfig, axs = plt.subplots(nrows=3, figsize=(10,6), sharey=True)
plt.tight_layout(pad=4)
df.plot(ax=axs[0], legend=None)
df.shift(10).plot(ax=axs[1], legend=None)
df.tshift(10).plot(ax=axs[2], legend=None)
18。使用重采样功能进行重采样
时间序列数据的另一个常见操作是重采样。根据任务的不同,我们可能需要以更高或更低的频率对数据进行重新采样。
重采样创建指定内部的组(或箱),并允许您对组进行聚合。
让我们创建一个包含 30 个值和一个时间序列索引的熊猫序列。
A = pd.date_range('2020-01-01', periods=30, freq='D')
values = np.random.randint(10, size=30)
S = pd.Series(values, index=A)
下面将返回 3 天期间的平均值。
S.resample('3D').mean()
19。Asfreq 功能
在某些情况下,我们可能对特定频率下的值感兴趣。Asfreq 函数返回指定间隔结束时的值。例如,我们可能只需要上一步中创建的序列中每 3 天的值(不是 3 天的平均值)。
S.asfreq('3D')
20。滚动
滚动是对时间序列数据非常有用的操作。滚动意味着创建一个指定大小的滚动窗口,并对该窗口中的数据执行计算,当然,该窗口会滚动数据。下图解释了滚动的概念。
(图片由作者提供)
值得注意的是,计算是在整个窗口都在数据中时开始的。换句话说,如果窗口的大小为三,则第一次聚合在第三行完成。
让我们对我们的系列应用 3 天滚动窗口。
S.rolling(3).mean()[:10]
结论
我们已经全面介绍了熊猫的时间序列分析。值得注意的是,Pandas 提供了更多的时间序列分析。
官方文档涵盖了时间序列的所有函数和方法。乍一看,这似乎是详尽无遗的,但你会通过练习变得舒适。
感谢您的阅读。如果您有任何反馈,请告诉我。
20 个流行的机器学习指标。第 2 部分:排名和统计指标
简要介绍机器学习中用于评估分类、回归、排名、统计、视觉、NLP 和深度学习模型的最重要指标
丹·弗里曼在 Unsplash 上拍摄的照片
介绍
在这篇文章的第一部分,我介绍了用于评估分类和回归模型的 10 个指标。在这一部分中,我将介绍用于评估为排名开发的模型(也称为学习排名)的度量标准,以及统计模型的度量标准。特别是,我将讨论以下 5 个指标:
- 平均倒数排名(MRR)
- k 点精度
- DCG 和 NDCG(归一化贴现累计收益)
- 皮尔逊相关系数
- 决定系数(R )
排名相关指标
排序是机器学习中的一个基本问题,机器学习试图根据项目在特定任务中的相关性对项目列表进行排序(例如,根据页面与给定查询的相关性对谷歌页面进行排序)。它在电子商务和搜索引擎中有广泛的应用,例如:
- 电影推荐(如网飞和 YouTube ),
- 在谷歌上的页面排名,
- 在亚马逊上对电子商务产品进行排名,
- 查询自动完成,
- 在 vimeo 上进行图片搜索,
- 在 Expedia / 预订上搜索酒店。
在学习排序问题中,该模型试图预测给定任务的项目列表的排序(或相对顺序)。排序问题的算法可以分为:
-
逐点模型: 试图预测数据集中每个查询-文档对的(匹配)得分,并使用它对项目进行排序。
-
列表式模型:尝试直接优化上述评估指标之一的值,对训练数据中的所有查询进行平均。
在评估过程中,给定几个查询的项目列表的基本顺序,我们想知道这些项目列表的预测顺序有多好。
对于评估排名问题,提出了各种度量标准,例如:
- 维护、修理和更换
- 精度@ K
- DCG 和 NDCG
- 地图
- 肯德尔氏τ
- 斯皮尔曼氏 rho
在本帖中,我们关注上面的前 3 个指标,它们是排名问题最流行的指标。
其中一些指标可能非常琐碎,但为了完整起见,我决定涵盖它们。所以请随意跳过你熟悉的那些。没有任何进一步的原因,让我们开始我们的旅程。
11- MRR
平均倒数排名(MRR)是评估排名模型的最简单的指标之一。MRR 本质上是一组查询 Q 的“第一相关项目”的倒数排名的平均值,并且被定义为:
为了说明这一点,让我们考虑下面的例子,其中模型试图通过屏蔽 3 个猜测来预测英语单词的复数形式。在每种情况下,也给出了正确的答案。
该系统的 MRR 可以被发现为:
*MRR = 1/3 (1/2+1/3+1/1)= 11/18
MRR 的局限性之一是,它只考虑其中一个项目(最相关的一个)的排名,而忽略了其他项目(例如介质,因为介质的复数形式被忽略)。对于我们想要浏览相关项目列表的情况,这可能不是一个好的度量。
12-k 精度
k (P@k)处的精度是另一个流行的度量,它被定义为“前 k 个文档中相关文档的数量”:
例如,如果您在 Google 上搜索“洗手液”,在第一页中,10 个链接中有 8 个与洗手液相关,则该查询的 P@10 等于 0.8。
现在要找到一组查询 Q 在 k 处的精度,可以找到 Q 中所有查询的 P@k 的平均值。
P@k 有几个限制。最重要的是,它没有考虑相关文档在前 k 个中的位置。在这种情况下,手动评估模型也很容易,因为只需要检查前 k 个结果来确定它们是否相关。
注意,recall@k 是另一个流行的指标,可以用非常相似的方式定义。
13- DCG 和 NDCG
标准化的贴现累积收益(NDCG)可能是评估学习排序系统的最流行的度量。与之前的指标不同,NDCG 考虑了文档的顺序和相对重要性,并重视将高度相关的文档放在推荐列表的前列。
在给出 NDCG 的官方定义之前,我们先介绍两个相关的指标,累积收益(CG)和折现累积收益(DCG)。
一组检索到的文档的累积增益(CG) 是它们与查询的相关性分数的总和,定义如下。
这里我们假设每个文档与一个查询的相关性分数是给定的(否则它通常被设置为一个常数值)
贴现累积增益(DCG) 本质上是 CG 的加权版本,其中使用对数缩减因子来将相关性分数与结果的位置成比例地贴现。这很有用,因为在实践中,当分析系统的性能时,我们希望给予前几个项目(比后面的项目)更高的优先级。DCG 被定义为:
还有另一个版本的
归一化贴现累积收益(NDCG) 试图进一步增强 DCG,以更好地适应现实世界的应用。由于检索到的项目集在不同的查询或系统中可能大小不同,NDCG 试图使用 DCG 的规范化版本(通过除以理想系统的 DCG)来比较性能。换句话说,它通过相关性对结果列表的文档进行排序,找到位置 p 处的最高 DCG(由理想系统实现),并用于将 DCG 归一化为:
其中,IDCG 是“理想贴现累积收益”,定义如下:
NDCG 是一个流行的指标,但也有其自身的局限性。它的一个主要限制是它不能惩罚结果中的坏文档。它可能不适合测量可能经常有几个同样好的结果的查询的性能(尤其是当我们主要对前几个结果感兴趣时,因为它在实践中是这样做的)。
统计指标
尽管人们可以将机器学习视为应用统计学,并因此将所有的 ML 度量作为某种统计度量,但有一些度量主要由统计学家用来评估统计模型的性能。这里一些流行的指标包括:皮尔逊相关系数、决定系数®、斯皮尔曼等级相关系数、p 值等等。这里我们简单介绍一下相关系数,和 R 平方。
14-皮尔逊相关系数
皮尔逊相关系数可能是整个统计学和机器学习领域中最流行的度量之一。它的应用非常广泛,几乎用于统计建模的每个方面,从特征选择和降维,到正则化和模型评估等等。
两个随机变量(或任意两个向量/矩阵)的相关系数显示了它们的统计相关性。
两个随机变量 X 和 Y 线性相关系数定义如下:
这里的μ和σ分别表示每个变量的均值和标准差。
在大多数情况下,变量的基本统计分布是未知的,我们所拥有的只是随机变量的 N 个样本(你可以把它想象成一个 N 维向量)。在这些情况下,我们可以使用两个 N 维向量 X 和 Y 的样本相关系数*,如下所示:***
两个变量的相关系数在[-1,1] 中总是一个值。
已知两个变量是独立的当且仅当它们的相关性是 0 。****
15-决定系数®
决定系数或 R,正式定义为可从自变量预测的因变量方差的比例。
为了更好地理解这意味着什么,让我们假设一个数据集有 N 个样本,对应的目标值为 y_1,y_2,…,y_N。让我们假设我们的模型对这些样本的对应预测值为 f_1,f_2,…,f_N。
现在,我们可以定义以下用于计算 R 的术语:
- 观察数据的平均值:
- 总平方和(与数据的方差成比例):
- 残差平方和,也叫残差平方和*😗**
那么 R 的最一般定义可以写成如下:
在最好的情况下,模拟值与观察值完全匹配,这导致 R =1 。
总是预测观察数据平均值的模型将具有 R =0 。
摘要
在这篇文章中,我介绍了用于评估排名和统计模型性能的 5 个流行指标。在这篇文章的下一部分,我将介绍用于评估计算机视觉、NLP 和深度学习模型性能的 5 个更高级的指标。
参考
[1] Christopher M. Bishop,“模式识别与机器学习”, springer,2006。
***[2]杰罗姆·弗里德曼、特雷弗·哈斯蒂和罗伯特·蒂布拉尼。”*统计学习的要素”,施普林格统计丛书,2001。
[3] Tilo Strutz,“数据拟合和不确定性:加权最小二乘法的实用介绍及其他”, Vieweg 和 Teubner,2010 年。
使用日期和时间的时间序列的 20 个简单而强大的功能
时间序列模型的特征工程!
时间序列只不过是相对于时间观察到的一系列数据点。在数据科学中,时间序列主要是一个独立变量,目标是使用历史数据预测未来。传统上,时间序列问题是通过 ARIMA 模型利用其滞后和差分特性来解决的。然而,对于意外事件,记录的信号显示了趋势的更动态的性质,因此仅使用这些传统方法很难获得准确的模型。
时间序列被认为是机器学习中最关键和最难解决的问题之一。
实践者制定了一种现代方法,通过手动特征工程将时间序列转换为表格数据格式来解决机器学习问题。有许多数据集可以用来解决特定的时间序列问题。针对财务、供应链等领域的问题。基于日期和时间的功能可以在捕捉趋势和理解数据方面发挥重要作用,尤其是在时间序列数据方面。
这篇文章主要讲述了一些可以基于日期和/或时间纯粹由创建的特性。这些特性中有一些是非常常用的,但是还有一些特性可能值得关注和考虑。
下面显示的特征工程并不一定意味着它将被机器学习算法作为特征消费,并给出准确的预测。有时,需要不同的维度来更好地查看数据,这只有通过创建此类要素才能实现。
必需的软件包:
- 熊猫
- 日期时间
- 日历
占用检测数据集来自 UCI 机器学习知识库
数据集的示例如下所示:
1.日期:
上面代码的输出
2.时间:
上面代码的输出
3.小时:
上面代码的输出
4.分钟:
上面代码的输出
5.第二:
上面代码的输出
获取每日最低温度的数据集,可在找到。数据集的头部如下所示:
6.一年中的星期:
上面代码的输出
7.一周中的某一天:
上面代码的输出
8.一年中的某一天:
上面代码的输出
9.两个日期之间的天数差异:
此功能计算两个日期之间的天数差异。下面是一个显示今天和过去某个 x 日期之间的例子。
上面代码的输出
10.两个日期在月份上的差异:
这个特性类似于上面我们用月而不是天来计算两个日期之间的差异。下面是一个显示今天和过去某个 x 日期之间的例子。
上面代码的输出
11.离月底还有几天:
这是一个有趣的特性,可以计算离月底还有多少天。在接近月底的趋势下,这真的很有帮助
上面代码的输出
类似地,人们也可以计算 天从月的开始。 也可以算 日 _ 至 _ 感恩节等。
12.一年中的第几个季度:
该功能主要是确定一年中的季度。
上面代码的输出
13:确定是否是季度初:
此功能用于确定日期是否是季度的开始。
上面代码的输出
输出通常是布尔型的。将真假映射到 1 和 0
14:确定是否是季度末:
这与上面的功能相反,在上面的功能中,我们确定日期是否是季度末。
上面代码的输出
15.年份:
该功能用于从日期开始计算年。
上面代码的输出
16.月份:
该功能用于从日期开始计算月份。
上面代码的输出
17.日期:
该功能用于从日期开始计算日。
上面代码的输出
18.确定它是否是月初:
根据日期,此功能确定它是否是月初
上面代码的输出
19.确定现在是否是月末:
根据日期,此功能确定是否是月末
上面代码的输出
20.确定是否是闰年:
有时,当数据持续时间较长时(比如 10-15 年),或者如果数据的粒度是每年一次,那么这个特性可能非常有用。不用手动查找和创建,人们可以使用 datetime 库直接确定它是否是闰年。
上面代码的输出
结论:
感谢您阅读文章。我希望你会觉得它有用。这些是我在处理时间序列问题时经常用到的一些特征。正如我之前提到的,这有助于发现数据背后隐藏的大量事实。正如有人正确指出的那样——“你越是折磨数据,它就越能说话”。非常感谢任何反馈/意见。如果您知道任何有趣的功能,请发表评论并与社区分享!