python 逻辑回归 复杂抽样_【课程笔记】《Udacity数据分析(入门)》「纳米学位」——第 4 部分:统计学 ——By Tensor麻麻麻...

第4部分:统计学

仅作为学习记录作为参考

统计学 - 总共分为16部分:

1、描述统计学 - 第一部分(选修)

2、描述统计学 - 第二部分(选修)

3、录取案例分析

4、概率

5、二项分布

6、条件概率

7、贝叶斯规则

8、Python概率练习

9、正态分布理论

10、抽样分布与中心及限定理

11、置信区间

12、假设检验

13、案例研究:A/B测试

14、回归

15、多元线性回归

16、逻辑回归

项目:A/B测试项目

一、描述统计学 - 第一部分(选修)

1、数据类型

数据类型

数值

连续

离散

身高、年龄、收入

书中的页数、院子里的树、咖啡店里的狗

分类

定序

定类

字母成绩等级、调查评级

性别、婚姻状况、早餐食品

2、分析数值:数据

在分析离散数值数据和连续数值数据的时候,分析数值数据有四个主要方面:

center(集中趋势)

spread(离散程度)

shape(形状)

outliers(异常值)

集中趋势测量的方式有三种:

三大测量方法:mean(均值)、median(中位数) 、mode(众数)

3、符号表达式介绍

表达式,学术和工业界专业人士用来传达数学思想的通用语言。符号表达式让难以用语言表达的想法变得更容易传达。

随机变量

随机变量是某些进程的可能值的占位符。我们看到随机变量用大写字母表示(X、Y 或 Z 是表示随机变量的常用方法)。它可以是从 0 到无限的任意值。

大写字母与小写字母

随机变量用大写字母表示。每当我们观察到这些随机变量的一个结果,就用相同字母的小写表示。

4、更多聚合的知识

Σ 符号用于使用求和进行聚合,但是我们可以选择通过其他方式进行聚合。求和是最常见的聚合方式之一。但是,我们可能需要以其他方式进行聚合。如果我们想将所有的值相乘,我们可以使用求积符∏ ,希腊字母 π 的大写。我们聚合连续值的方式称为积分(微积分中的一种常用技术),它使用以下符号 ∫ ,就像一个拉长的 s。(π(option+P),∫(option+B))

求和sigma ∑

(如何在键盘上打出∑这个符号?同时按住option和W键即可)

求和并计算均值⬇️

![求和并计算均值](https://upload-images.

.io/upload_images/5016667-ea76c4633a173f82.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

总结

二、描述统计学 - 第二部分(选修)

本部分主要讲分析值变量的第二方面:离散程度

离散程度测量用于告诉我们数据之间的分散程度。常见的离散程度测量包括:

极差(Range)

极差又称全距,是最大值(MAXMUM)和最小值(MINMUM)之间的差值。

四分位差 (IQR)(inter-quartile range)

四分位差为Q 3 和 Q 1 之间的差值。

标准差(Standard Deviation)

每个观察值与均值之间的平均差异。

方差(Variance)

直方图对于了解数值数据的不同方面是非常有用的。理解前面提到的关于数值变量的四个方面:

集中趋势

离散程度

形状

异常值

很神奇,一个数据的众数、中位数、平均数都一样,离散程度差很多。

离散程度差异通过直方图表现出来

1、五数概括法

五数概括法包括 5 个值:

最小值(MINMUN): 数据集中的最小值。

Q 1(第一四分位数):排序后数据第 25% 处的值。

Q 2(中位数):排序后数据第 50% 处的值。

Q 3(第三四分位数):排序后数据第 75% 处的值。

最大值(MAXMUM): 数据集中的最大值。

需要注意的是,Q2不用在计算Q1和Q3 的数据集中。

奇数个数值计算Q1 Q2 Q3

对于偶数个数值。

偶数个数值计算Q1 Q2 Q3

2、标准差和方差

标准差和方差计算两个数据哪个更分散,数据越大越分散

标准差(Standard Deviation)

每个观察值与均值之间的平均差异。

方差(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。

求方差

如何求标准差

方差和标注差部分——总结

方差和标准差都能用于比较两组不同数据的离散程度。方差/标准差较高的一组数据相比较低的一组数据,其分布更为广泛。但是注意,有可能只有一个(或多个)异常值提高了方差或者标准差,而大多数数据实际上比较集中。

在比较两个数据集之间的离散程度时,每个数据集的单位必须相同。

当数据与货币或经济有关时,方差(或标准差)更高则表示风险越高。

在实践中,标准差比方差更常用,因为它使用原始数据集的单位,标准差的单位是原始数据单位的平方,这没什么实际意义。

3、形状和异常值

形状

数据的分布通常为以下三种形状之一:

右偏态(类似幂律分布)

左偏态

对称分布(通常是正态分布)

右偏态

关于形状小结

异常值

异常值是明显偏离其余数据点的点。这会极大地影响均值和标准差等度量,而对五数概括法中的第1四分位数、中位数、第2四分位数的影响较小。

当出现 异常值 时,我们应该考虑以下几点。

注意到它们的存在以及对概括性度量的影响。

如果有拼写错误 —— 删除或改正。

了解它们为什么会存在,以及对我们要回答的关于异常值的问题的影响。

当有异常值时,报告五数概括法的值通常能比均值和标准差等度量更好地体现异常值的存在。

报告时要小心。知道如何提出正确的问题。

异常值处理建议

在数据集中使用列(随机变量)的准则。

绘制你的数据以确定是否有异常值。

通过上述方法处理异常值。

如果无异常值,且你的数据遵循正态分布,使用均值和标准差来描述你的数据集,并报告数据为正态分布。

如果你有偏态数据或异常值,则使用五数概括法来概括你的数据并报告异常值。

4、描述统计与推论统计

描述统计

描述统计 是用我们在本课中谈到的度量描述收集的数据:集中趋势度量、离散程度度量、分布形状和异常值。我们也可以通过绘制数据图获得更好的理解。

总体 —— 我们想要研究的整个群体。

参数 —— 描述总体的数值摘要

样本 —— 总体的子集

统计量 —— 描述样本的数值摘要

三、录取案例分析

1、 录取案例练习:辛普森悖论

案例总结:查看数据的方式的不同会引起完全不同的结果。

四、概率

1、概率和统计的区别

统计和概率是不同但又紧密相关的数学领域。

在概率中,我们根据假定的模型或原因,对未来事件做出预测;而在统计中,我们对过去发生的事件中的数据进行分析,从而推断出这些模型或原因是什么。一个是预测数据,另一个是根据数据进行预测。

举个:

“概率论研究的是一个透明箱子,你知道这个箱子的构造(里面有几个红球、几个白球,也就是所谓的分布函数),然后计算下一个摸出来的球是红球的概率。

统计学面对的是一个黑匣子,你只看得到每次摸出来的是红球还是白球,然后需要猜测这个黑匣子的内部结构,例如红球和白球的比例是多少?(参数估计)能不能认为红球40%,白球60%?(假设检验)”

2、概率总结

何事件的概率在 0 和 1 之间,其中包括 0 和 1。

互补事件的概率为 1 减去某个事件的概率。其他一切可能事件的概率是 1 减去某个事件本身的概率。因此所有可能事件概率的总和等于 1。

如果我们事件是独立的,一系列可能事件的概率是这些事件的乘积。某个事件的概率 AND 下一个事件的概率 AND 下一个事件的概率,即这些事件概率的乘积。

五、二项分布

1、计算多次抛硬币的情况

案例

n! 代表n的阶乘

公式

不同概率的情况

可以使用这个分布决定下列事件的概率:

掷硬币 10 次出现 3 次正面的概率。

掷硬币 10 次出现 8 次以上正面的概率。

掷硬币 20 次不出现正面的概率。

二项分布公式

P代表概率,K代表出现次数,n代表操作次数

六、条件概率

条件概率总结

七、贝叶斯规则

1、条件概率

注释:

P(A) 表示 "A 的概率"

P(\neg A)P(¬A) 表示 "非 A 的概率"

P(A,B)P(A,B) 表示 "A 和 B 同时发生的 概率" 并且

P(A|B)P(A∣B) 表示 "条件为 B 时 A 发生的概率"

贝叶斯公式

2、贝叶斯公式

P(S|Y) = P(Y|S)*P(S) / P(Y)

八、Python概率练习

1、random函数

函数使用方法:

randint:

np.radom.randint(2,size = 100,)

choice

np.random.choice([0,1],size = 100,p=[0.3,0.7])——P是概率

使用示例

2、二项式:binomial函数

使用方法案例

九、正态分布理论

1、公式

正态分布公式

十、抽样分布与中心及限定理

1、 描述统计 与 推论统计

描述统计 是用来描述收集的数据。

推论统计 在于使用我们收集的数据对更大的总体数据得出结论。

再次回顾之前学过的概念:

总体 —— 我们想要研究的整个群体。

参数 —— 描述总体的数值摘要

样本 —— 总体的子集

统计量 —— 描述样本的数值摘要

计算方差、标准差

v_5 = np.var(sample_props)

s_5 = np.std(sample_props)

2、抽样分布

image.png

参数和统计符号法.png

抽样分布涉及的两个重要数学定理包括:

大数法则

中心极限定理

三种最常见的估计技巧:

使用 numpy 的 random.choice 模拟从 pop_data 数组中进行3次取样

test_1 = np.random.choice(pop_data, 3)

中心极限定理 表示 样本容量足够大,平均数的抽样分布越接近正态分布。

中心极限定理

但是,中心极限定理不能应用于所有统计量。像方差

自助法

自助法 (bootstrap) 是放回抽样。在 python 中使用 random.choice 实际上是自助法。无论选择多少次,我们数据集中任何数字的概率保持不变。抛硬币和掷骰子也是自展抽样,因为在一个场景中滚动出 6,并不意味着后面出现 6 的概率降低。

下列是发现 "最佳统计量" 估计技巧最常见的三种方式:

两个有用链接:

可以通过 这里 学习更多布拉德利·埃弗龙 (Bradley Efron) 知识。

自助法可以作为推论技巧的原因,更多注释可以参见 这里。

总结

十一、置信区间

1、置信区间的使用

2、均数差

代码

练习作业

对于10,000次迭代,自展法(bootstrap)会对你的样本数据进行抽样,计算喝咖啡和不喝咖啡的人的平均身高的差异。使用你的抽样分布建立一个99%的置信区间。

diff_coffee = []

for _ in range(10000):

coffee_sample = sample_data.sample(200, replace = True)

d_coffee = coffee_sample[coffee_sample['drinks_coffee'] == True]['height'].mean()

nd_coffee = coffee_sample[coffee_sample['drinks_coffee'] == False]['height'].mean()

diff_coffee.append(d_coffee - nd_coffee)

plt.hist(diff_coffee)

np.percentile(diff_coffee, 0.5), np.percentile(diff_coffee, 99.5)

对于10,000次迭代,自展法会对样本数据进行抽样,计算21岁以上和21岁以下的平均身高的差异。使用你的抽样分布构建一个99%的置信区间。

diff_coffee = []

for _ in range(10000):

coffee_sample = sample_data.sample(200, replace = True)

d_coffee = coffee_sample[coffee_sample['age'] == '<21']['height'].mean()

nd_coffee = coffee_sample[coffee_sample['age'] != '<21']['height'].mean()

diff_coffee.append(d_coffee - nd_coffee)

plt.hist(diff_coffee)

np.percentile(diff_coffee, 0.5), np.percentile(diff_coffee, 99.5)

对于10,000次迭代,自展法会对你的样本数据进行抽样,计算出21岁以下个体的喝咖啡的人的平均身高和不喝咖啡的人的平均身高之间的差异。使用你的抽样分布,建立一个95%的置信区间。

diff_21 = []

for _ in range(10000):

coffee_sample = sample_data.sample(200, replace = True)

d_coffee = coffee_sample.query("age == '<21' and drinks_coffee == True")['height'].mean()

nd_coffee = coffee_sample.query("age == '<21' and drinks_coffee == False")['height'].mean()

diff_21.append(d_coffee - nd_coffee)

plt.hist(diff_21)

np.percentile(diff_21, 2.5), np.percentile(diff_21, 97.5)

对于10,000次迭代,自展法会对你的样本数据进行抽样,计算出21岁以上个体的喝咖啡的人的平均身高和不喝咖啡的人的平均身高之间的差异。使用你的抽样分布,建立一个95%的置信区间。

diff_21 = []

for _ in range(10000):

coffee_sample = sample_data.sample(200, replace = True)

d_coffee = coffee_sample.query("age != '>21' and drinks_coffee == True")['height'].mean()

nd_coffee = coffee_sample.query("age != '>21' and drinks_coffee == False")['height'].mean()

diff_21.append(d_coffee - nd_coffee)

plt.hist(diff_21)

np.percentile(diff_21, 2.5), np.percentile(diff_21, 97.5)

统计显著性和实际显著性

使用置信区间和假设检验,你能够在做决策时提供 统计显著性。

然而,做决策时考虑 实际显著性 同样很重要。 实际显著性 考虑到所处情况的其他因素,假设检验或置信空间的结果可能不会直接考虑到这种情况。空间、时间 或 金钱 等约束条件对商业决定很重要。但是可能不会在统计测试中直接考虑这些因素。

置信区间的总结

十二、假设检验

概念

1、检验假设概念

检验假设概念

错误类型

2、P值

P值大,表示不应该抛弃零假设。

步骤

P值小于或等于å时,可以拒绝零假设

2、本章小结

总结

十三、案例研究:A/B测试

1、求点击率的代码

点击率部分的代码

我们来复习下分析这个 A/B 测试结果涉及了哪些操作。

我们计算了对照组和实验组的指标观察差异,即点击率;

我们为比例差异 (即点击率差异)建立了抽样分布 模型;

我们用这个抽样分布模型来为 零假设分布 建立模型,也即创建了一个随机正态分布模型,模型以 0 为中心,大小和宽度与抽样分布的一样。

我们通过找出零假设分布中大于观察差异的那部分比值,从而计算出了 p 值;

我们用 p 值来确定观察差异是否有 统计显著性。

2、多个分析指标

Bonferroni 校正

Bonferroni 校正是处理多测试实验的方法之一,也就是说 Bonferroni 校正可以处理本案例多指标造成的问题。要计算新的 Bonferroni 校正显著值,我们需要让原显著值除以测试数量。

注:

一旦指标间有关联,Bonferroni 方案就显得太过保守,因此要更好地解决这个问题,我们可以用更复杂的办法,如封闭测试程序、 Boole-Bonferroni 联合校正 以及 Holm-Bonferroni 方案。这些都没有 Bonferroni 方案那么保守,而且会把指标间的相关性考虑在内。

如果你真的选了没那么保守的方案,请确保方案假设的确适用于你的情况,而不是在 糊弄 p 值。为了得到显著性结果而选择不适合的测试方法只会造成决策有失偏颇,长期下来会伤害到你的公司业绩。

十四、回归

1、回归

回归是常用的一种数据分析的方法,通过规定因变量和自变量来确定变量之间的因果关系,是一种建立回归模型,并根据实测数据来求解模型的各个参数,然后评价回归模型是否能够很好的拟合实测数据。

课纲:

认识回归应用

学习回归的工作原理

借助 Python 来用回归解决问题

2、机器学习

机器学习 通常分为监督 和 非监督学习,而你将在本课(接下来的课程还会涉及相关扩展知识)学到的回归则是监督机器学习的范例之一。

在监督机器学习中,你要做的是预测数据标签。一般你可能会想预测交易是否欺诈、愿意购买产品的顾客或某一地区的房价。

线性回归和罗辑回归都属于监督学习

3、线性回归

在简单线性回归中,我们要对两个定量变量进行比较。

反应 变量是你想预测的变量,解释变量则是用于预测反应变量的变量,在线性回归中,通常我们会用散点图来可视化两个变量的关系,你将在接下来的各种概念中进一步了解这一点。

练习

4、散点图

散点图是比较两个定量变量的常用可视化手段。散点图常用的汇总统计是 相关系数,该系数常以 r 来表示。

虽然还有其它几种办法来衡量两个变量之间的相关性,但最常用的办法是用皮尔逊相关系数,该系数能说明 线性关系 的:

相关程度

相关方向

斯皮尔曼相关性系数则不只衡量线性关系,可能更适用于关联两个变量的场合。

散点图的相关度,在-1和1 之间,越接近-1,负相关越强;越接近1,正相关越强。

相关度

相关系数

计算相关系数

5、回归线

回归线

截距&斜率

最小二乘法

用python拟合回归线

注意,如果电脑没有安装statsmodels库,需要安装以下

命令:

在终端输入:

pip install satamodels

在python中使用的时候,需要导入satamodels,

如下:

import satamodels.api as sm

OLS:最小二乘法

更多参考资料在这里 !!!

最小二乘法使用方法

我们可以用 Python (或其它软件) 来对线性模型的系数进行假设检验。这些测试能帮我们判断某个变量与其反应变量是否具有具统计显著性的线性关系,不过对截距进行假设检验通常没什么作用。

然而,对每个 x 变量进行假设检验,测试所涉及的两组为:总体斜率等于 0 vs. 参数不等于 0 的其它情况(对立假设)。因此,如果斜率不等于 0 (即对立假设为真),那我们就能证明与那个系数有关的 x 变量与反应变量间有具统计显著性的线性关系,也就意味着 x 变量能帮我们预测反应变量 (或者,最起码意味着模型里有 x 变量比没有好)。

决定系数 即相关系数的平方。

决定系数变量通常定义为模型中能以 x 变量解释的反应变量的变化范围。通常来说,决定系数越接近 1,模型就越拟合数据。

很多人觉得决定系数不是个很好的衡量标准 (他们可能是对的),不过我想说,我们所使用的任何衡量模型数据拟合度的方法,都可借助交叉验证来判断其准确性。这里 是一位朋友的文章,里面就用交叉验证探讨了他觉得决定系数不好的原因。

R值可变性

练习题

十五、多元线性回归

1、多元线性回归

可观看可汗学院线性代数免费课程学习线性代数相关知识。

用python求多因素的线性回归,就是把所有影响因素都加进去,分类变量会报错。

代码实操

这一部分主要是为了解释,为什么会出现这个结果,这个结果的来源是怎么求的,这部分求解我看不懂。。。。。先记下来⬇️

求解方法

2、虚拟变量

要往线性模型里添加分类变量,就需要把分类变量转变为 虚拟变量。转化后,你需要舍弃一个 虚拟列,才能得到 满秩 矩阵。

如果你要用 0 、1 编码来创建虚拟变量,你就得舍弃一个虚拟列,确保所得矩阵是满秩的(这样你从 python 里得到的解才会是可靠的。)

之所以要这么做,原因就在于线性代数的本质,更具体地说,要逆转矩阵,你手里的矩阵必须是满秩的 (也就是所有列都得线性独立),因此,你得舍弃掉一个虚拟列,方能得到线性独立的各列 (和一个满秩矩阵)。

把虚拟变量添加到线性模型中

首先需要把分类变量进行分出独立的列:

pd.get_dummies()

视频曾提到 统计学习简介 一书,其中就提到了如下五个假设:

因变量-自变量关系的非线性

误差项的相关性

非恒定方差和正态分布误差

异常值/高杠杆点

共线性

相关误差

如果我们是随时间变化来收集的数据(比如预测未来股价或利率),或数据与空间有关(如预测洪涝或干旱地区),那就很容易出现相关误差。通常,我们可以用过去数据点提供的信息(针对与时间有关的数据)或用相邻数据点提供的信息(针对与空间有关的数据)来提高预测结果。

不考虑相关误差的主要问题在于:往往你会利用这一相关性,得到更好的未来事件预测数据或空间关联事件预测数据。

要判断是否有相关误差,最常用的方法是观察收集数据的域。要是你不确定的话,你可以试试一个叫 Durbin-Watson 的检验方法,人们常用该测试来评估误差相关性是否造成问题。还有 ARIMA 或 ARMA 模型,人们常用这两个模型来利用误差相关性,以便做出更佳预测。

非恒定方差和正态分布误差

你预测的值不同,得到的预测值范围也不同,那就意味着方差不恒定。非恒定方差对预测好坏影响不大,但会导致置信区间和 p 值不准确,这种时候,在预测值接近实际值的那部分区域,系数的置信区间会太泛,而在预测值较远离实际值的区域则会太窄。

通常来说,对数函数(或使用其它反应变量的变换方式)能够 “摆脱” 非恒定方差,而要选择合适的变换方式,我们一般会用 Box-Cox。

用预测值的残差图也可以评估非恒定方差。在本页底部的图片中,非恒定方差的标签为 异方差。理想来说,我们要的是一个有异方差残差的无偏模型(其异方差残差在一定数值范围内保持不变)。

虽然本文并不探讨残差的正态性,如果你想创建可靠的置信区间,正态性回归假设就十分重要了,更多相关信息详见 这里。

异常值/杠杆点

异常值和杠杆点是远离数据正常趋势的点。这些点会对你的解造成很大的影响,在现实中,这些点甚至可能是错误的。如果从不同来源收集数据,你就可能在记录或收集过程中造成某些数据值出错。

异常值也可能是准确真实的数据点,而不一定是测量或数据输入错误。在这种情况下,'修复'就会变得更为主观。要如何处理这些异常值往往取决于你的分析目的。线性模型,特别是使用最小二乘法的线性模型,比较容易受到影响,也就是说,大异常值可能会大幅度地左右我们的结果。当然,异常值也有一些解决技巧,也就是我们常说的 正则化。本课不会谈及这些技巧,但在 机器学习纳米学位免费课程中,我们对这些技巧做了粗略的介绍。

而在宾夕法尼亚州立大学提供的完整回归课程里,就有特别长的篇幅在探讨杠杆点的问题,详见 这里。

共线性(多重共线性)

如果我们的自变量彼此相关,就会出现多重共线性。多重共线性的一个主要问题在于:它会导致简单线性回归系数偏离我们想要的方向。

要判断是否有多重共线性,最常见的办法是借助二变量图或 方差膨胀因子 (即 VIFs)。下一概念我们就要更深入地探讨多重共线性,因而在此不做赘述。

(本节完)

多重共线性与VIF

#查看多个变量间的关系

import seaborn as sb

sb.pairplot(df[['变量1','变量2','变量3']])

VIF

判断方法:

当方差膨胀因子> 10,就会出现多重线性。

图中,R指的是变量之间的相关性,相关性越高,1-R部分就小,1/1-R就越大。

3、高阶项

4、特征工程与特征选择

Sebastian 和 Katie 讲授的 这个机器学习 课程是个很好的学习途径,能帮你更好地理解许多概念,也对你接下来更深入地理解机器学习很有帮助。

若要查看有关特征工程的 Sklearn 文献,请点 这里

有关在 pandas 里处理缺失值的其它文献,请点 这里。

填充缺失数据

交叉验证

概念 k 折交叉验证由 Sebastian 的视频讲解,这也属于优达学城的免费课程,你可以点 这里 来学习该课程。本课由 Katie 讲授,所以有些参考不是很恰当,但他还是很好地解释了交叉验证的工作原理。

模型评估

总结

十六、逻辑回归

1、逻辑回归

逻辑回归

解释结果

指数化&倒数

这两节课涉及的一些概念可查看 机器学习纳米学位课程 。

精准率、召回率

精准率&召回率

公式

这里是逻辑回归 sklearn 包的相关文献,另外,这里是处理混淆矩阵的相关文献。

以上就是实用统计学的所有内容了!这两节课讲的是多元线性回归和逻辑回归,但你看到的大多数内容已经开始朝 数据科学 靠拢了,也就是说,大部分内容已经超越了多数日常 数据分析 的范畴了。不过,我希望这两节课的一些挑战给你带来了愉快的体验。

这两节课初步介绍的两种办法——多元线性回归和逻辑回归,只是监督机器学习的一部分。你可以从优达学城免费课程中了解更多,又或者可以在机器学习纳米学位课程 中查看项目回顾以及优达学城的社区信息。

在本课中,我们学习了逻辑回归,你学到了:

如何使用 python 来实现逻辑回归,用 statsmodels 和 sklearn 包来预测二元分类反应值。

如何解释 statsmodels 逻辑回归输出的系数。

如何用多个指标来评估模型效果。

如何在 python 里评估模型拟合效果。

你已经学到了很多了!恭喜你!祝你在项目中取得好成绩!

逻辑回归 课程中 抽样分布 的 notebook 方案和数据可见本页底部。

辅助材料

你可能感兴趣的:(python,逻辑回归,复杂抽样)