- 博客(1360)
- 资源 (4)
- 收藏
- 关注

原创 必知必会!常用矩阵求导和重要的矩阵
转自https://blog.youkuaiyun.com/a841454735/article/details/88608682,来备份一下,矩阵求导很重要!一、矩阵求导 一般来讲,我们约定,这是分母布局。常见的矩阵求导方式有:向量对向量求导,标量对向量求导,向量对标量求导。1、向量对向量求导2、标量对向量求导3、向量对标量求导其他的可以参考wiki:维基百科矩阵求导公...
2020-04-25 22:18:20
1730

原创 程序员面试——C++工程师面试大全第一部分
1.static 关键字的作用1. 全局静态变量在全局变量前加上关键字 static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在.初始化:未经初始化的全局静态变量会被自动初始化为 0(自动对象的值是任意的,除非他 被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾.2. 局部静态变量在局部...
2020-02-24 13:41:40
602
原创 【python因果库实战20】causallib 评估图表概述3
在这个演示中,我们将 AdversarialBalancing 模型的图表与 IPW 模型的图表进行比较。进一步分析表明,在训练和验证阶段,IPW 模型的不平衡特征数量几乎总是少于 AdversarialBalancing 模型,尽管这两种模型在验证阶段的表现非常接近。尝试不同的学习器可能会产生不同的结果。不幸的是,我们无法获取真实的潜在结果,所以我们最好的模仿方法就是使用反事实预测。如果两者不重叠,可能意味着我们的模型在处理组之间的一致性存在问题,因此我们需要更加谨慎地解读因果结果。
2025-01-17 19:19:42
855
原创 【python因果库实战19】causallib 评估图表概述2
因此,如果模型很好地平衡了两组,则它们应该是不可区分的,相应的曲线应该沿着对角线(机会曲线)对齐。其次,“预期”ROC 曲线还具有概率校准特性,因为它展示了一个“软”曲线,其中每个倾向性得分并不简单地计入真阳性或假阳性,而是对真阳性(TP)和假阳性(FP)都有贡献。如果一组的残差存在偏移(例如,对照组的平均值为 0 而处理组的平均值为 1),那么这种偏移可能会引入到对比两个反事实预测的效果估计中。简而言之,过于高的 AUC 值(以及尖锐的垂直/水平线)可能表明两组之间分得太开,从而违反了积极性假设。
2025-01-17 19:19:33
494
原创 【python因果库实战17】双重稳健模型2
因为权重模型在整个过程中保持不变,所以在每次为不同的结果训练模型时无需重新训练它。对于同时持有结果模型和权重(处理分配预测)模型的双重稳健模型,这意味着结果模型依赖于权重模型,但权重模型不依赖于结果模型。然而,在第二次调用时,不会重新训练权重模型,因为我们提供了。这样,如果已经提供了一个已经训练好的权重模型,在重复调用。无论使用哪个结果都会训练权重模型,因为它还没有被训练。评估分别针对内部的结果模型和权重模型进行。正如所提到的,权重模型用于增强结果模型,双重稳健模型包含结果模型和权重模型。
2025-01-12 12:30:09
582
原创 【python因果库实战18】causallib 评估图表概述1
为了更容易评估因果模型的质量,causallib 提供了一系列评估图表。首先需要通过运行对模型和数据进行评估才能访问这些图表。当使用交叉验证评估时,通过向evaluate()函数提供cv="auto"参数可以获得更有用的结果。评估结果对象具有plot_all方法,可以创建所有支持的图表。在本笔记中,我们将详细介绍每个图表,并提供简短的评论说明这些图表如何有助于评估因果模型。
2025-01-12 12:30:01
735
原创 【python因果库实战16】双重稳健模型1
如果可能(如同 IPW),会使用整个权重矩阵(每个个体对于每种处理的权重),训练一个加权模型,然后将其输出(预测的权重)作为附加特征输入到结果模型中。但对于群体结果,它会在取加权平均之前使用个体结果预测来校正观察到的结果。基本上,这些是利用加权模型增强结果模型的不同集合模型。但通常情况下,只会使用权重向量(根据实际的处理分配)。但由于可能的组合非常多,本笔记并不打算展示所有组合。本笔记展示了不同的结果模型和倾向性模型组合方式,其个体结果估计直接来自于结果模型,戒烟对体重减轻效果的研究。
2025-01-05 21:40:49
356
原创 【python因果库实战14】因果生存分析3
在参数化标准化中,也称为“参数化g公式”,时间步k处的生存率是对协变量X水平和处理分配a条件下的条件生存率的加权平均,权重为每个分层中个体的比例。换句话说,类似于使用简单结果模型(S-Learner)的标准处理,我们拟合了一个包含基线协变量的风险模型。由于在标准化中我们对时间和协变量条件下的点风险进行建模,因此有一个良好指定的模型非常重要。使用过于简单的线性模型可能会导致“僵硬”的、过于简化的生存曲线。变换器添加额外的时间特征,以获得更平滑的曲线。参见《因果推断》一书第17.5节(“参数化的g公式”)。
2024-12-27 20:23:08
393
原创 【python因果库实战13】因果生存分析2
这些曲线是使用内部的、非参数默认 Kaplan-Meier 估计器生成的。它们可以通过使用参数化风险模型来进一步平滑。需要注意的是,加权风险模型只基于时间条件进行建模,例如,它不考虑协变量(不像标准化,见下文)。我们现在有了一个 IPW 模块,它实现了良好的特征平衡(加权后所有特征的标准均值差 SMD < 0.1)。(如 IPW)生成一个加权的伪人群来调整混淆因子,使得戒烟者和非戒烟者变得可互换。这些曲线可能过于平滑,因为它们是用线性风险模型拟合的。调整后的10年生存率差异减小(可能减少到了不显著的程度。
2024-12-27 20:22:50
354
原创 【python因果库实战12】因果生存分析1
下的模块估计的是特定时间点上治疗对结果的影响(例如,戒烟对1982年体重增加的影响,或者在一个规定的观察期内事件发生与否的二元结果)。除了标准的 causallib 输入(X - 基线协变量,a - 治疗分配,y - 结果指标),引入了一个新变量 t,它测量从观察期开始到事件发生的时间。戒烟者的平均年龄为46.7岁,而非戒烟者的平均年龄为43岁,这可能解释了(至少部分地)戒烟组中过量的死亡率。考虑到删失(在这种情况下,只有死亡事件),我们仍然观察到10年时生存率的差异,有利于吸烟者。
2024-12-26 20:37:49
631
原创 【python因果库实战11】用现有数据运行估计器
可观测集是可观测数据集(不包括隐藏变量)验证集用于验证目的——包含反事实、样本的治疗分配和倾向。假设我们要创建三个额外变量:协变量、治疗和结果。考虑输入数据已经存在并且已有因果结构的情况。我们希望根据这些数据模拟治疗分配和结果。
2024-12-26 20:37:44
452
原创 【python因果库实战10】为何需要因果分析
我们发现使用简单描述性统计得出的"效果"与因果分析得出的因果效应之间存在差异。这种差异源于各组(戒烟或不戒烟)具有不同的特征分布,因此不可比。我们发现参与者的年龄在治疗组中具有最大的分布变化,并且专注于它。我们发现不同年龄组的观察效果不同,并且不同年龄组的人数不同,这表明简单的平均数混杂了不同的效果。我们展示了当考虑到每个年龄组的参与者数量时,"效果"从原始观察效果向因果效果转变。我们发现当我们构建一个仅对年龄进行控制(而不是对所有混杂因素)的因果模型时,我们得到了类似的结果。
2024-12-21 19:17:28
850
1
原创 【python因果库实战9】TMLE - 目标最大似然估计2
需要注意的是,我们使用了堆叠交叉验证估计器,这样可以确保基估计器和元估计器都使用交叉验证。如果你还记得的话,TMLE对初始估计器的残差进行回归,所以初始结果模型不过拟合、不虚假地隐藏残差偏差信息是非常重要的。这是一个相对简单的机制,其中暴露量依赖于3个伯努利变量的线性组合,而结果也依赖于第三个变量的效果修饰。我们合成数据,因此我们知道真实的因果效应,依据的是Schuler和Rose 2017年的研究。我们将看到,无论是结果模型指定错误,TMLE都能对其进行修正,并导致整体上良好的估计。
2024-12-21 19:17:24
777
原创 【python因果库实战8】TMLE - 目标最大似然估计1
然而,如果初始估计器存在残差偏差,e将控制所需的校正幅度——小的残差偏差将导致小的更新,反之亦然。虽然背后的数学是复杂的,但基本原则非常简单:为了将我们的估计器集中在治疗效果上,我们将使用来自治疗机制的信息来更新和重新定位初始结果模型预测。在causallib中,这是通过应用单变量逻辑回归来估计的,将Y对H(A, X)进行回归,以Qo(A, X)作为偏移(即,强制其系数为1)。Qo可以是一种高度表达性的方法,常用的是“超级学习者”,这基本上是一种堆叠的元学习器,使用广泛的基础估计器库(池)。
2024-12-21 09:53:53
713
原创 【python因果库实战7】估计农业保护措施(CP)对减少营养物质流失的影响
总之,因果分析使我们能够关注数据允许我们检查治疗组间差异的地方。确实,与最初的分析不同,我们现在了解到,在非牧草地中,梯田、缓冲带、水道或等高耕作等保护措施实际上提高了土壤中的磷保留,并减少了种植燕麦、小麦、玉米、大豆和高粱等作物时磷向流域的泄漏。虽然我们可以推测这对其他作物也可能成立,但我们仅仅从数据中无法回答这个问题。
2024-12-21 09:53:46
1701
原创 【python因果库实战6】LaLonde 数据集
这很容易导致简单的边缘比较出现偏差(即,简单地比较治疗组与未治疗组的结果),因为我们看到这些组并非边缘相似。鉴于我们上面准备的设计矩阵,以及我们的干预措施是二元性质的,我们将选择逻辑回归来完成这项任务。然而,我们将遵循Dehejia和Wahba在其1999年的论文《非实验研究中的因果效应:重新评估培训项目的评价》中所做的基于倾向性的分析。一旦我们定义了因果模型(是的,只需要这么简单),我们就可以继续估计就业培训对年收入的影响。为了了解不同估计方法之间的差异,我们可以检查在IP加权之前和之后治疗组的平衡性。
2024-12-17 22:41:42
1014
原创 【python因果库实战5】使用银行营销数据集研究营销决策的效果5
相应地,我们将治疗变量a重新定义为:如果'campaign'大于1则为1,如果'campaign'等于1则为0。我们还需要重新定义y以恢复之前考虑接触方式时排除的非重叠群体。至于混杂因素,我们继续使用之前包括的客户特征、之前的营销活动特点以及经济指标。以'campaign'作为治疗变量,我们设想在首次与客户接触后决定停止还是继续。在这种情况下,最后一次接触的特点('contact'、'day_of_week',当然还有'duration')可能还不知道,所以它们不应该被视为潜在的混杂因素。
2024-12-17 22:41:36
788
1
原创 【python因果库实战4】使用银行营销数据集研究营销决策的效果4
Standardization类使用了一个单独的回归器,它接受输入(X, a)来预测y,即干预措施a与其他输入特征X处于相同的地位。另一种选择是StratifiedStandardization,它使用两个回归器,一个用于a=0,另一个用于a=1,每个回归器都接受X作为输入。标准化需要一个模型来估计给定干预措施a和混杂因素X时的结果y。这些值与使用逆概率加权(IPW)得到的值相似:与座机相比,使用手机联系时积极结果的绝对增长为3.4%,相对增长为29%。因此,看起来非因果分析会低估接触方式的效果。
2024-12-16 21:07:03
462
原创 【python因果库实战3】使用银行营销数据集研究营销决策的效果3
上面的最后一行显示返回的规则集仅包含一个带有两个条件的规则,这两个条件分别是 'cons.price.idx' 和 'euribor3m'。并非巧合,在前一小节的Love图中,'cons.price.idx' 和 'euribor3m' 也是治疗组间平均差异最大的协变量。我们可以推断这发生在通货膨胀和利率较高的时期:消费者价格指数 'cons.price.idx' 是衡量通货膨胀的标准指标,而欧元区银行同业拆借利率 'euribor3m' 是欧元区银行同业借贷利率,是短期利率的一个基准。
2024-12-16 21:06:57
982
原创 【python因果库实战2】使用银行营销数据集研究营销决策的效果2
在正常的分类任务中,我们希望 AUC 值接近 1,但对于因果推断而言,过高的 AUC 值(此处为 0.93)表明两个处理组(手机/座机)过于容易区分。回想一下,在观察数据的因果推断中,真实的因果效应永远是未知的:对于每个客户,我们只能观察到他们被分配的干预措施对应的一个结果,我们不能回到过去进行随机实验(随机分配客户进行干预)。除非我们愿意对结果如何从一个区域外推到另一个区域(即,对于总是被座机联系的人群,在手机联系下的结果是什么)做出强烈的假设,否则在没有处理重叠的区域估计因果效应是不建议的。
2024-12-15 20:23:41
885
原创 【python因果库实战1】使用银行营销数据集研究营销决策的效果1
UCI 银行营销数据集来源于一家真实银行的直接营销活动。这是一个广为人知的数据集,最常被当作。在这个笔记中,我们展示这个数据集同样适用于因果推断。
2024-12-15 20:23:32
1105
1
原创 【pyspark学习从入门到精通24】机器学习库_7
接下来是我们管道中的 CountVectorizer:一个计算文档中单词数量并返回计数向量的模型。聚类是机器学习中另一个重要的部分:在现实世界中,我们并不总是有目标特征的奢侈条件,因此我们需要回归到无监督学习的范式,在那里我们尝试在数据中发现模式。在这一部分,我们将尝试预测 MOTHER_WEIGHT_GAIN,给定这里描述的一些特征;不过,不要习惯看到这么好的结果:遗憾的是,现实世界的数据很少是这样的。如你所见,文本中有 262 个不同的单词,现在每个文档由每个单词出现次数的计数表示。
2024-12-07 18:08:29
923
原创 【pyspark学习从入门到精通23】机器学习库_6
我们经常处理高度非线性的连续特征,而且只用一个系数很难拟合到我们的模型中。在这种情况下,可能很难只通过一个系数来解释这样一个特征与目标之间的关系。有时,将值划分到离散的桶中是有用的。我们的函数现在看起来如下:现在我们可以将这个变量当作分类变量,并使用 OneHotEncoder 进行编码,以便将来使用。
2024-12-07 18:08:25
756
原创 【pyspark学习从入门到精通21】机器学习库_4
我们使用 .tuning 子包中的 ParamGridBuilder() 对象,并使用 .addGrid(...) 方法向网格中添加参数:第一个参数是我们要优化的模型的参数对象(在我们的例子中,这些是 logistic.maxIter 和 logistic.regParam),第二个参数是我们想要遍历的值列表。这里应该谨慎说明:如果你定义了太多的参数要优化,或者这些参数的值太多,选择最佳模型可能需要很长时间,因为随着参数数量和参数值数量的增加,需要估计的模型数量会迅速增长。最佳模型有哪些参数?
2024-11-27 23:00:27
1160
原创 【pyspark学习从入门到精通22】机器学习库_5
TrainValidationSplit 模型为了选择最佳模型,会对输入数据集(训练数据集)进行随机分割,分成两个子集:较小的训练子集和验证子集。分割只执行一次。numTopFeatures 指定要返回的特征数量。我们将选择器放在 featuresCreator 之后,所以我们调用 featuresCreator 上的 .getOutputCol()。前面的代码输出了以下结果:嗯,具有较少特征的模型肯定比完整模型表现得差,但差异并不是很大。最终,这是在更复杂的模型和不太复杂的模型之间的性能权衡。
2024-11-27 23:00:22
1233
原创 【pyspark学习从入门到精通20】机器学习库_3
在这一部分,我们将使用前一章中的数据集的一部分来介绍 PySpark ML 的概念。在这一部分,我们将再次尝试预测婴儿的生存几率。
2024-11-26 23:01:23
1042
原创 【pyspark学习从入门到精通19】机器学习库_2
指定 maxDepth 参数可以限制树生长的深度,minInstancePerNode 确定进一步分割所需的树节点中的最小观测次数,maxBins 参数指定连续变量将被分割成的最大箱数,而 impurity 指定用于测量并计算从分割中获得的信息增益的度量。在 PySpark ML 中,管道是一个端到端的转换-估计过程的概念(具有不同的阶段),它摄取一些原始数据(以 DataFrame 形式),执行必要的数据加工(转换),并最终估计一个统计模型(估计器)。这些模型从最简单的(如逻辑回归)到更复杂的都有。
2024-11-26 23:01:18
949
原创 【pyspark学习从入门到精通18】机器学习库_1
在最顶层,该包公开了三个主要的抽象类:转换器(Transformer)、估计器(Estimator)和管道(Pipeline)。我们将很快用一些简短的例子解释每一个。我们将在本章的最后一节提供一些模型的更具体的例子。
2024-11-24 09:29:25
1127
原创 【pyspark学习从入门到精通17】MLlib_4
是时候创建我们将用于构建模型的最终数据集了。我们将把 DataFrame 转换为 LabeledPoints 的 RDD。LabeledPoint 是 MLlib 中用于训练机器学习模型的结构。它由两个属性组成:标签和特征。标签是我们的目标变量,特征可以是 NumPy 数组、列表、pyspark.mllib.linalg.SparseVector、pyspark.mllib.linalg.DenseVector 或 scipy.sparse 列矩阵。
2024-11-24 09:29:20
643
原创 【pyspark学习从入门到精通16】MLlib_3
相关性有助于识别共线性数值特征并适当处理它们。前面的代码将计算相关性矩阵,并将只打印相关系数大于 0.5 的特征:corrs > 0.5 部分负责这一点。这是我们得到的结果:如你所见,“CIG_...” 特征高度相关,所以我们可以丢弃它们中的大部分。由于我们希望尽快预测婴儿的生存机会,我们将只保留 "CIG_1_TRI"。
2024-11-23 11:22:53
496
原创 【pyspark学习从入门到精通15】MLlib_2
不了解数据就构建成功的模型是可能的,但那是一个更加艰巨的任务,或者需要更多的技术资源来测试所有可能的特征组合。因此,在花费了所需的 80% 时间清理数据之后,我们再花费接下来的 15% 的时间来了解它!如你所见,与父亲相比,母亲们更年轻:母亲们的平均年龄是 28 岁,而父亲们则超过 44 岁。大约有 550 次分娩在家中发生:有些是有意的('BIRTH_PLACE' 等于 3),有些不是('BIRTH_PLACE' 等于 4)。我通常从描述性统计开始。- normL1(): 这保存了列中值的 L1-范数。
2024-11-23 11:22:49
361
原创 【pyspark学习从入门到精通14】MLlib_1
在前文中,我们学习了如何为建模准备数据。在本文中,我们将实际使用这些知识,使用 PySpark 的 MLlib 包构建一个分类模型。MLlib 代表机器学习库。尽管 MLlib 现在处于维护模式,即它不再积极开发(并且很可能会在未来被弃用),但至少覆盖库的一些特性是有必要的。此外,MLlib 目前是唯一支持流式训练模型的库。在这一部分中,你将学习如何执行以下操作:- 使用 MLlib 为建模准备数据- 执行统计测试- 使用逻辑回归预测婴儿的生存机会。
2024-11-18 21:32:12
1590
原创 【pyspark学习从入门到精通13】准备建模数据_4
另一个衡量特征之间相互关系的非常有用的方法是相关性。你的模型通常只包括与目标高度相关的特征。然而,检查特征之间的相关性几乎同样重要;包括高度相关的特征(即,共线性的)可能会导致你的模型行为不可预测,或者可能会不必要地使它复杂化。在 PySpark 中,一旦你的数据以 DataFrame 形式存在,计算相关性就非常容易。前面的代码将创建以下输出:如你所见,在信用卡欺诈数据集中,数值特征之间的相关性几乎不存在。因此,如果这些特征在统计上能够合理解释我们的目标,它们就可以用在我们的模型中。
2024-11-18 21:32:07
610
原创 【pyspark学习从入门到精通12】准备建模数据_3
异常值是那些与你的样本分布显著偏离的观测值。显著性的定义各不相同,但以最一般的形式,你可以认为没有异常值,如果所有值大致在 Q1−1.5IQR 和 Q3+1.5IQR 范围内,其中 IQR 是四分位间距;IQR 定义为上四分位数和下四分位数之间的差值,即分别是第 75 个百分位数(Q3)和第 25 个百分位数(Q1)。现在我们可以使用前面概述的定义来标记异常值。首先,我们计算每个特征的下限和上限。我们将使用 .approxQuantile(...) 方法。
2024-11-17 19:40:48
874
原创 【pyspark学习从入门到精通11】准备建模数据_2
你必须小心不要丢弃太多:根据缺失值在你的数据集中的分布,它可能会严重影响你的数据集的可用性。如果,在丢弃行之后,我最终得到的数据集非常小,或者发现数据大小的减少超过 50%,我开始检查我的数据,看看哪些特征有最多的空白,并可能完全排除它们;我们现在看到我们不需要丢弃具有 ID 3 的行,因为“体重”和“年龄”列的覆盖度有足够的观测值(在我们简化的例子中)来计算均值并在缺失值的位置插入它。所以,我们在体重和性别列中有 14% 的缺失观测值,身高列是两倍,收入列中几乎有 72% 的缺失观测值。
2024-11-17 19:40:43
592
原创 【pyspark学习从入门到精通10】准备建模数据_1
所有数据都是脏的,不管数据来源可能让你相信的是什么:它可能是你的同事、监控你环境的遥测系统、你从网上下载的数据集,或者任何其他来源。在你测试并证明你的数据处于干净状态之前(我们马上就会解释干净状态的含义),你既不应该信任它,也不应该用它进行建模。您的数据可能被以下问题污染:重复项、缺失观测值和异常值、不存在的地址、错误的电话号码和区号、不准确的地理坐标、错误的日期、错误的标签、大小写混合、尾随空格以及许多其他更微妙的问题。
2024-11-16 12:15:35
931
原创 【pyspark学习从入门到精通9】DataFrames_4
让我们运行相同的查询,只是这一次,我们将使用 SQL 查询相同的 DataFrame。请记住,这个 DataFrame 是可访问的,因为我们为 swimmers 执行了 .createOrReplaceTempView 方法。
2024-11-16 12:15:11
603
原创 【pyspark学习从入门到精通8】DataFrames_3
有两种不同的方法将现有的 RDDs 转换为 DataFrames(或 Datasets[T]):使用反射推断模式,或者以编程方式指定模式。前者允许您编写更简洁的代码(当您的 Spark 应用程序已经知道模式时),而后者允许您在运行时才揭示列及其数据类型时构建 DataFrames。注意,反射是指模式反射,而不是 Python 反射。
2024-11-16 12:15:06
1089
原创 【pyspark学习从入门到精通7】DataFrames_2
通常,您会通过使用 SparkSession(或在 PySpark shell 中调用 spark)导入数据来创建 DataFrame。我们将讨论如何将数据导入到本地文件系统、Hadoop 分布式文件系统(HDFS)或其他云存储系统(例如,S3 或 WASB)。在本文中,我们将专注于在 Spark 内直接生成您自己的 DataFrame 数据或利用 Databricks 社区版中已经可用的数据源。首先,我们将不访问文件系统,而是通过生成数据来创建 DataFrame。
2024-10-13 16:12:28
1017
Spark入门.docx
2020-04-02
人手一份核武器 - Hacking Team 泄露(开源)资料导览手册 _ WooYun知识库.pdf
2020-03-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人