万物皆数学。
近期计划汇总整理些实际工作中会用到分析方法、模型和算法,计划从方法/模型/算法适用的情况、实现原理、结果及其检验标准、Python调用方法、以及可视化呈现这几个方面入手来整理。
希望能对数据科学分析和挖掘有个系统全面的方法论认识。也起到一个方法参考手册的作用。
方法/模型名称 | 什么情况下适用 | 实现方法/模型 | 得到什么系数或结果 | 如何检验方法或模型是好的,标准如何,如何解读输出 | Python实现调用的模型或接口方法 | Python方法调用如何解读输出结果、评价效果优劣 | 可视化呈现 | 大类 | 有无监督 | 备注 |
参数估计 Parameter Estimation | 用样本统计量去估计总体参数的方法(如均值、方差)等。 | |||||||||
假设检验 Hypothesis Testing | ||||||||||
Z检验 | ||||||||||
F检验(见方差分析 ANOVA) | 在两样本t检验中要用到F检验。其中要判断两总体方差是否相等,就可以用F检验。 | from sklearn.feature_selection import SelectKBest sklearn.feature_selection.univariate_selection import f_classif model1 = SelectKBest(f_classif, k=2)#选择k个最佳特征 model1.fit_transform(X,y) | ||||||||
T检验 | 比较样本均值是否有明显差异或者来自同一样本总体。 T检验,越接近于0,样本均值越不同,P值越接近于1,样本均值越相同。 注意:配对样本用ttest_rel,不可用ttest_ind,两者结果P值相差很大。 | stats.ttest_ind(a,b) 独立样本检验 stats.ttest_rel(a,b) 配对样本检验或者相关样本检验 stats.ttest_1samp(data, E) 比较样本的均值是否显著为E。 stats.ttest_rel(d1, d2) 等同于stats.ttest_1samp(d1- d2, 0) 注意:两个样本的方差不同时,如果样本量相差较大,equal_var设置True和False时,P值差异可能会很大。比较时抽样样本量尽量相同。 | 结果解读:T统计量和P值 1)T统计量的绝对值小于等于置信度对应的T分布临界值时,接受原假设,否则拒绝原假设 2)P值小于置信度alpha时,拒绝原假设,否则接受原假设 | scipy.stats.ttest_ind() scipy.stats.ttest_rel() scipy.stats.ttest_1samp() | 当样本量相差较大时,如果方差也不同,此时T检验的P值很有可能反映不出样本均值的真实差异情况。所以,取样样本量要尽可能一致。 | |||||
极大似然估计法- MLE (Maximum Likelihood Estimate) | 估计均值、估计方差、估计概率密度函数 | |||||||||
非参数检验方法 | 总体分布不要求服从正态分布或总体分布情况不明时,用来检验样本数据是否来自同一总体的统计检验方法 | |||||||||
皮尔逊Pearson卡方检验 (Pearson's Chi-Square Statistic) | 主要用于对两个定类变量之间关系的分析,一般是对检验问题进行转化,通过考察频数与其期望频数之间的吻合程度,达到检查目的。检验还依赖于卡方分布的自由度,自由度定义为类别数量与限制数量之差。 应用场景:(注意每种情况的条件) (1)四格表资料的卡方检验 (2)行*列表资料的卡方检验 (3)R*C列联表资料的卡方检验 | 要求满足条件: 1、每个单元格中的数据都是确切的频数而非占比 2、类别不可相互交织 3、所有的期望频数应都不小于1 4、至少80%的期望频数都不小于5 否则,要么用蒙特卡洛(Monte Carlo)模拟的方法来计算P值,要么对数据进行重新分类。 | P值<0.05拒绝原假设 | from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 model1 = SelectKBest(chi2, k=2)#选择k个最佳特征 model1.fit_transform(X,y) | ||||||
费希尔Fisher确切检验 | stats.fisher_exact(table) , table是2*2的表 | P值<0.05拒绝原假设 | ||||||||
Mann-Whitney秩检验 (又称 U检验) | 它假设两个样本分别来自除了总体均值以外完全相同的两个总体,目的是检验这两个总体的均值是否有显著的差别。 使用条件: 比较没有配对的两个独立样本,样本可具有不同的大小。 仅在每个样本中的观察次数> 20且有2个独立的等级样本时使用。 | stats.mannwhitneyu(x, y[, use_continuity, alternative]) 思想: 首先,混合两组数据,对所有数据排序。 按照数值大小给定一个值叫做秩。最小的值秩为1,最大的为N(假定两个样本总共有N个观察值)。 如果有相同的值,就得到相同的秩。相同的值的秩是他们的秩的平均值。 如果两组的秩的和差距比较大,就会得出较小的p值,认为这两组间有显著差异。 | ||||||||
符号检验 | P值<0.05拒绝原假设 | |||||||||
威尔科克森Wilcoxon符号秩检验 | 使用条件: 由于正态近似用于计算,因此使用的样本应该很大。一般是要求n> 20。 成对检验,数据是配对的。(x,y长度一致)。 | stats.wilcoxon(x,y,zero_method='wilcox', correction=False) 注意:当样本量太少<=20,或者当两个样本的长度即样本量不同时,都会报错 | P值<0.05拒绝原假设 | |||||||
威尔科克森Wilcoxon的秩和检验(又称为Mann-Whitney-Wilconxon Test),简称 MWW检验 | P值<0.05拒绝原假设 | |||||||||
克鲁斯卡尔-沃利斯Kruskal-Wallis检验 (又称 H检验) | 使用条件: 具有卡方分布的假设,每组中的样本数量不能太小。(n>5) 比较没有配对的两个独立样本,样本可具有不同的大小。(x,y长度可以不一致) | stats.kruskal(x, y) 假设两个分布的样本中位数相等,用于检验样本是否来源于相同的分布。它用于比较两个或多个相同或不同样本大小的独立样本。它扩展了Mann-Whitney U检验,该检验仅用于比较两组。Kruskal-Wallis检验的参数等价物是单因素方差分析 (ANOVA)。 | P值<0.10拒绝原假设 | stats.kruskal(x, y) | ||||||
Kolmogorov-Smirnov test (又称 KS检验) | 适用:连续分布,拟合优度 单样本检验时,常用作拟合优度检验,检验样本是否符合期望的分布。两个样本检验时,用作检查两个样本是否来自同一个连续分布。 | 1、检验一个样本是否符合某种分布,比如正态分布 stats.kstest(sample, 'norm',alternative='greater') alternative可选'two-sided','less','greater' 2、检验2个样本是否来自同一个连续分布 stats.ks_2samp(rvs1,rvs2) | 统计量D值相当于实际值与拟合的函数值之间的距离。 P值小于0.05时拒绝alternative设置的原假设 | |||||||
方差分析法-ANOVA (Analysis of Variance) | 分类型自变量对数值型因变量是否有显著影响的统计检验方法。最初有Fisher 提出,也称为F检验。 虽然分析变化的指标是均值,但判断均值是否有差异时需要借助于方差。通过对数据误差的考察来判断不同总体的均值是否相等,进而明确数据误差从何而来。 差异可分解为:组间变异误差、组内变异误差。组间变异,反应处理因素的作用;组内变异误差,反应随机误差的作用。反应全体数据误差大小的成为总变异。 方差分析前应保证: 1、每个总体服从正态分布,即对每个自变量,它的观察值都是正态分布的。 2、各个观察数据值都是相互独立的。 3、各组总体方差相等,即方差齐性,即各观察值都是具有相同方差σ²的正态分布。 通过均值、方差判断正态分布。 | 按照类别将数据分组,统计判断类别对数据的均值是否有影响。如果每个分组的均值相等,说明分组变量对数据没有显著影响,否则说明对数据有显著影响。要检验的对象成为因子,因子的具体表现,称为水平或处理。每个因子具体表现处理下的数据称为观察值 或总体。比如城市水平对电商人群的消费是否有影响,城市水平就是待研究的因子,城市水平的一线、二线、三线、四线就是因子的具体表现,而按照表现划分出的数据就是观察值,这样就得到4个总体。 总变异SS(T)(总离均差平方和),组间变异SS(A)(组间离均差平方和),组内变异SSE(组内离均差平方和)。 关系:SS(T)=SS(A)+SS(E)。 离均差平方和只能反映变异的绝对大小,变异程度还和自由度有关,各部分离均差平方和须除以相应的自由度才能比较,称为均方差(MS(A)=SS(A)/df(A) , MS(E)=SS(E)/df(E)),反映各部分变异的平均大小。 dfT(总自由度) = dfA(各组间自由度)+dfE(组内自由度) | F =MSA/MSE。 方差检验的P值。 如果因子对数据没有影响,那么组间误差就只包含随机误差,那么就和组内误差很接近,比值F接近于1。 如果因子对数据的影响很大,那么组间误差就会包含系统误差和随机误差,这样组间均方差就会大于组内均方差,比值F就会>1,当F大于一定程度时,就认为因子的不同处理/水平间存在明显的差异,即自变量对因变量有显著影响。 借助F分布可推断各研究因素对实验结果有无影响。 | 方差分析表: SS、df、MS、F值、P值 当P值小于多少时,认为差异有统计学上的意义,接受该因子变量。 F统计量F=MSA/MSE,显著水平a下的临界值Fa, 如 F>Fa,小概率事件发生了,拒绝原假设,变量的差异是显著的。F<Fa,不拒绝原假设,没有证据表明各个均值间有显著差异。 两个变量间的关系强度用R^2表示,R^2 = SSA/SST。 | AOV() | |||||
单因素方差分析 (One Way ANOVA) | 只有一个因子的方差分析。涉及两个变量:一个是分类型的自变量,一个是数值型的因变量。 | 强度测量:经过方差分析发现自变量对因变量有显著影响,如何定量评判影响的强度。 判断系数R^2=SS(A)/SS(T)。组间离均差平方和/总离均差平方和 作为自变量和因变量之间的关系强度。这个百分比的大小可以看作这个自变量对因变量差异解释的比例。 | import scipy from scipy import stats stats.f_oneway(A1,A2,A3,A4) | |||||||
双因素方差分析-无交互作用的分析 | 涉及两个分类型自变量时,两个影响因素对于因变量的作用是独立的。 设计实验时主动地对实验对象进行配伍,即运用随机区组设计方案。做法:先按影响试验结果的自变量(非处理因素)将实验对象配成区组,再将各区组内的对象随机分配到不同的处理组,实验对比各组均值差异有无统计学意义,以推断处理因素的效应。 | SS(T)=SS(A)+SS(B)+SS(E) 总离均差平方和 =列因素A导致的组间离均差平方和 + 行因素B导致的区块组间离均值平方和 +随机误差平方和。 df(T)=df(A)+df(B)+df(E), F(A)=MS(A)/MS(E),对自变量A构造F统计值, F(B) =MS(B)/MS(E),对自变量B构造F统计值。 | from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm formula = '销量~ 广告+价格' anova_results = anova_lm(ols(formula,df).fit()) print(anova_results) | 当P值小于0.05时有显著影响水平,认为该自变量对因变量有影响。 | AOV(x~A+B) | |||||
双因素方差分析-有交互作用的分析 | 自变量除了独自的作用外,它们的组合也会对因变量产生新的影响。 如何从统计学的意义上看两个因素是相互影响的?交互作用图。 交互作用图用于描述多因素间相互影响的一种非常有用的统计图形。交互作用图中,如果两个因素间没有交互作用,结果是两条不相交的折线或分段平行线,否则如果两条直线有交点,表示它们之间存在交互作用,而且两条折线越不平行,表示它们之间的交互作用越大 | SS(T)=SS(E)+SS(A)+SS(B)+SS(A*B) F(A)=MS(A)/MS(E) F(B)=MS(B)/MS(E) F(A*B)=MS(A*B)/MS(E) 分成4部分,主要因素、交互因素、随机误差。 | formula = '射程~ 燃料*推进器' #等同于: formula = '射程~ 燃料+推进器+燃料*推进器' anova_results = anova_lm(ols(formula,df).fit()) print(anova_results) | AOV(x~A*B) interation.plot() 交互作用图 采用基于线性回归的双因素方差分析,函数lm() | ||||||
多重比较 (Multiple Comparison Procedure) | 通过对总体均值之间的配对比较来进一步检验到底哪些均值间存在差异。 | |||||||||
多重t检验 | 对自变量的每个可能处理下的数据均值进行两两比较 | pairwise.t.test() p.adjust.method 不同P值修正方法对应的效果比较及适用场景。 | ||||||||
Dunnett检验 | 进行多个实验组与一个对照组均值差别的多重比较。 | 引入multcomp包 glht()函数 | 图形化展示Dunnett检验结果 | |||||||
Tukey的HSD检验 | HSD检验比多重t检验保守,但要求所有的样本均值来自容量相等的样本。 | from statsmodels.stats.multicomp import pairwise_tukeyhsd print(pairwise_tukeyhsd(df.销量, df.广告)) | TukeyHSD()函数 | |||||||
Newman-Keuls检验 (或简称 SNK检验法) | SNK是对HSD检验的一种修正。 | 将g个样本均值从小到大排列,对步长为r的两个均值Xi,Xj,距离r步的均值间的临界值是W(r),如果满足|Xi - Xj| >= W(r) 就认为两者有显著差异。 | SNK.test() | |||||||
方差齐性检验 | 方差分析的一个前提是相互比较的样本总体方差相等,即具有方差齐性。所以方法分析前都要做一个方差齐性检验。 | |||||||||
Bartlett检验法 | 对于正态分布总体,采用Bartlett法检验齐方差性 | stats.bartlett() | ||||||||
Levene检验法 | levene检验检验所有输入样本来自具有相同方差的总体。与Bartlett法相比,Levene检验法在多样本方差齐性检验时,所分析的资料可不具有正态性。即当样本与正态性有明显的偏差时,Levene检验是Bartlett检验的一种替代方法。该检验法的本质是对由随机变量Y的均值(或中位数、或切位均值)离差构成的新分组数据进行单因素方差分析 | stats.levene() | P值小于0.05时方差有明显差异,样本来自不同的总体。 | levene.test() | ||||||
回归分析法 | 判断系数R^2=回归平方和/总离差平方和。 比值越小,说明回归线和样本拟合的越好,反之,拟合的不好。 | |||||||||
一元线性回归 | 总体回归方程 Y_i=E(Y)+e_i =b0 + b1*X_i + u_i 线性回归模型的基本假定: 1、零均值假定 2、同方差假定 3、相互独立性 4、因变量和自变量间满足线性关系 | 线性回归模型的4张统计图形。 1、残差对拟合值的散点图。(横坐标是拟合值,纵坐标是残差值) 该图用于检验回归模型是否合理、是否有异方差性以及是否存在异常值。附加线是采用局部加权回归散点修云法绘制的(Lowess,locally weighted scatterplot smoothing)。如果残差的分布大致围绕X轴,则模型基本是无偏的。另外,如果残差的分布范围不随预测值的改变而大幅变化,则可以认为同方差假设成立。 2、标准化残差的QQ图。即将每个残差都除以残差标准差,然后再将结果与正态分布做比较。理想的结果是QQ图中的散点排列成一条直线。如果图中散点的分布较大的偏离了直线,表明残差的分布是非正态的或不满足同方差性,那么随机干扰的正态性也不满足。 3、作用与图1大致相同。X轴是拟合值,Y轴是相应的标准化残差值绝对值的平方根,如果平方根大于1.5,则说明该样本点位于95%置信区间外。中间的线偏离水平直线的程度较大,意味着异方差性。 4、标准化残差对杠杆值的散点图,作用是检查样本点中是否有异常值。如果删除样本点中的一条数据,由此造成回归系数变化过大,就表明这条数据对回归系数的计算产生了明显的影响,这条数据就是异常值。需要好好考虑是否在模型中使用这条数据。帽子矩阵对角线元素就是杠杆值(Leverage)。杠杆值用于评估第i个观测值离其余n-1个观测值的距离有多远。对于一元回归来说,杠杆值h_ii = 1/n +(X_i - avg(X))^2 / sum(X_i - avg(X))^2。图中还有LOWESS曲线和库克距离曲线。库克距离用于诊断各种回归分析中是否存在异常数据。库克距离太大的样本点可能是模型的强影响点或异常值点,需要进一步检验。通常当库克距离大于1时就需要引起注意。 最小残差平方和 来确定参数 b0,b1 | 回归模型基本假定随机扰动符合一个均值时0,方差为sigma^2的正态分布,又称为总体方差。 对总体方差的无偏估计:从残差e_i平方和来估计,sigma^2=(sum(e_i ^2)) /(n-2) 估计参数b0,b1的概率分布和95%置信区间。 平方和除以相应的自由度称为均方差。 | 验证模型优劣的评估方法: 1、拟合优度的检验 总离差平方和(Total Sum of Squares),即SS_total 残差平方和(Residual Sum of Squares),即SS_residual 回归平方和(Regression Sum of Squares),即SS_regression 总离差平方和公式: SS_total = SS_residual + SS_regression 回归平方和/总离差平方和之比称为样本判定系数:R^2 = SS_regression/SS_total 判断系数R^2是一个回归直线与样本观察值拟合优度的指标,值越大拟合度越好,值越小拟合度越差。 注意两个值:Multiple R-squared ,和 Adjusted R-squared。一般认为调整判定系数会比判定系数更好的反映回归直线与样本点的拟合优度。 2、整体性假定检验 此处定义的自由度是平方和中独立观察值的个数,总离差平方和的自由度是 n-1,回归平方和的自由度是1。SS_total的自由度 = SS_regresion自由度 + SS_residual自由度 均方差之比服从相应自由度的F分布,利用F统计量对总体线性的显著性进行检验。也可以查看F统计量对应的P值。如果F大于给定的显著水平的临界值,或者P值小于显著水平,则说明解释变量对因变量是有影响的,即回归总体是显著线性的。反之,回归总体不存在线性关系,即解释变量对因变量没有显著的影响关系。 3、单个参数的检验 检验自变量对因变量的影响是否是显著的,即线性关系是不是显著的。通过P值判断。 预测--回归模型的应用:对于给定的点,估计它的取值,或者预测可能取值的区间。 1、点预测, 2、区间预测 | 绘制图形的代码:plot(Std_Residuals ~ Leverage) lines(lowess(Std_Residuals ~Leverage)) 得到P值 得到F值 判定系数、调整判定系数 参数的置信区间 总体方差无偏估计 预测predict | |||||
多元线性回归 (是变量线性、参数也线性的回归模型) | 多个解释变量的回归模型。 Y=Xb + u 用矩阵形式表示的多元线性总体回归模型 要求多元线性回归模型满足线性关系外需要遵守以下假定: 1、零均值假定 2、同方差假定 3、相互独立性 , cov(u_i,u_j) =0 ,i!=j 4、无多重共线性假定 | 第一步:使用散点图阵列来考察变量与被解释变量之间的线性关系。注意解释变量之间线性关系是否显著,是否有多重共线性的可能。 第二步:构建多元线性回归模型,解读结果。 第三步:参数估计 第四步:多元回归模型检验 (1)线性回归的显著性检验,F值,P值检验 (2)回归系数的显著性检验,T值,P值检验 第五步:利用回归方程进行预测 (1)个别值的区间预测 (2)总体均值的区间预测 | 回归模型拟合优度R^2,调整判定系数R^2_adj | 多元回归模型检验: 如果解释变量的个数为k,则回归平方和的自由度为k。 1、线性回归的显著性 2、回归系数的显著性 多元线性回归模型预测 | ||||||
双对数模型以及生产函数 (变量非线性的回归模型) | ||||||||||
倒数模型与菲利普斯曲线 (变量间非线性的模型) | ||||||||||
多项式回归模型 (Polynomial Regression Model) | ||||||||||
岭回归 | ||||||||||
Lasso回归 | ||||||||||
逻辑回归 | 梯度、逻辑函数 | |||||||||
回归模型的评估与选择 | ||||||||||
嵌套模型选择 | ||||||||||
赤池信息准则 | ||||||||||
逐步回归方法 | ||||||||||
梯度下降 | ||||||||||
聚类分析-也称无监督的分类 | 聚类分为划分聚类、层次聚类。划分聚类是将数据集划分成不重叠的子集,层次聚类是允许划分子集中有子子集。依据数据特性和期望的结果定义分簇个数。取决于数据中发现的描述特征及其关系。 | 相似取决于选取的相似度计算方法 | 将相似对象归于同一簇中,不相似对象归到不同簇中 | 组内的相似性越大,组间差别越大,聚类越好 | 聚类 | 无监督的 | ||||
k-means聚类 | 不能处理非球形簇、不同尺寸和不同密度的簇。对包含离群点的数据聚类也会有问题,需要检测和删除离群点。 | k-means均值算法。 1、随机K个质心位置初始化,初始位置会影响迭代次数。初始质心可以选平均值或中位数。 2、停止迭代方法:(1)仅有1%的点发生簇的改变(2)总距离值达到一个最小值,或者变化极小。(3)质心不再改变 相似度度量方法: 1、闵科夫斯基距离:包括欧式距离、曼哈顿距离。数值越小,距离越近。 2、夹角余弦距离:夹角越小,余弦越大,越相近,1时方向相同。夹角越大,余弦越小,-1时完全相反。 3、Jaccard相似系数:衡量两个集合的相似度,即重合度。交集/并集。可用在社交网络分析中,通过共同好友,为另一人推荐可能认识的人的分析。 | K个质心的位置和每个元素距离哪个质心最近。 | 如何解读这K个质心所聚成的类是什么意思呢?或者怎么挖掘这K个簇是什么特征或有什么描述呢? | 聚类 | 无监督的 | ||||
EM方法-最大期望算法(Expectation Maximization) | 清楚数据应该有几个不同的类别,每个类别有自己的分布,希望找出每个类别的分布参数是什么,并且判断每个用户属于哪个分布。 EM算法是解决存在隐含变量优化问题的有效方法。 | EM算法: 1、本质思想:在各个类别中随机猜一个类别的分布参数,基于这个猜测将每个元素分组归类,根据极大似然估计重新得到各类别的分布参数,重复上述步骤迭代,直到参数基本不改变。实践中,当似然函数L变化很小时可停止迭代。 问题:算法能否迭代到参数不变?即参数是否可收敛? 如何确定有几类?如何知道每个类别符合什么分布,又有什么样的参数可以用来定义这个类别,和判断数据元素在这样的参数下如何属于和不属于这个类别? | 得到各个分类的参数,及每个元素属于哪个分类。 | 似然函数L变化很小时停止迭代,如何解读似然函数的数值大小的含义。 | Mclust() | 用不同的颜色和形状二维图呈现聚类效果; | ||||
高斯混合模型-GMM (Gaussian Mixture Model) | EM算法的一种现实应用。实践应用中常假设数据是具有不同参数控制的数个符合正态分布的数据。高斯混合模型是假设数据样本符合高斯分布? 指的是正态分布和多项式分布? | 用不同的颜色和形状二维图呈现聚类效果; 绘制二维概率密度图; 绘制三维概率密度图; | ||||||||
支持向量机-有监督的 | ||||||||||
线性可分的支持向量机 | ||||||||||
近似线性可分、非线性可分、核函数 | ||||||||||
SVM算法 | ||||||||||
分类-有监督的分类 | 分类的目标已知 | |||||||||
神经网络-有监督的 | ||||||||||
adaboost算法 | ||||||||||
决策树 | ||||||||||
关键指标 | ||||||||||
贝叶斯分类 | ||||||||||
全概率公式 | ||||||||||
贝叶斯定理 | ||||||||||
随机森林 | ||||||||||
常见损失函数 | ||||||||||
常用的距离函数 | ||||||||||
K最近邻算法(KNN) (K-Nearest Neighbor) | 有两种形式:回归法,分类法 选择未知样本一定范围内确定个数的K个样本,该K个样本大多数属于某一类型,则未知样本判定为该类型。 k近邻法最简单的实现是线性扫描(穷举搜索),即要计算输入实例与每一个训练实例的距离。计算并存储好以后,再查找K近邻。 | 算法基本步骤: 1)计算待分类点与已知类别的点之间的距离 2)按照距离递增次序排序 3)选取与待分类点距离最小的k个点 4)确定前k个点所在类别的出现次数 5)返回前k个点出现次数最高的类别作为待分类点的预测分类 如何选择K? 1、猜测K。2、使用启发式选择K 3、使用算法优化 | from scipy.spatial import KDTree from sklearn.metrics import mean_absolute_error from sklearn import neighbors knn = neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform') | 分类 | 有监督的 | |||||
隐马尔可夫模型 | ||||||||||
特征选择 | ||||||||||
特征转换 | ||||||||||
群集 | ||||||||||
Bagging算法 | ||||||||||