大侠幸会,在下全网同名[算法金]
0 基础转 AI 上岸,多个算法赛 Top
[日更万日,让更多人享受智能乐趣]
直方图是一种将数据分割成若干区间并统计每个区间频数的图表。
绘制直方图时,数据被分成多个区间(称为箱),每个箱内的数据数量被绘制成柱状图。
直方图的形状通常能够反映数据的分布特征,包括峰度、偏度等。
下面是一个绘制直方图的示例代码:
import numpy as npimport matplotlib.pyplot as pltimport scipy.stats as stats# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100000)# 绘制直方图plt.hist(data, bins=30, density=True, alpha=0.6, color='g')plt.title('Histogram of Data')plt.xlabel('Value')plt.ylabel('Frequency')# 绘制正态分布的概率密度函数xmin, xmax = plt.xlim()x = np.linspace(xmin, xmax, 100)p = stats.norm.pdf(x, np.mean(data), np.std(data))plt.plot(x, p, 'k', linewidth=2)plt.show()
如果直方图近似呈现钟形曲线,并且与对应的正态分布曲线形状相似,那么数据可能符合正态分布。
当直方图的峰度和偏度接近于0时,说明数据的分布越接近正态分布。
优点: 直观、易于理解,能够直接展示数据的分布情况。
缺点: 受样本数量和箱数的影响,结果可能不够精确;对于小样本数据,容易受到随机性的影响。
确定合适的箱数:选择合适的箱数可以影响直方图的展示效果,过多或过少的箱数都可能影响结果的解读。
注意数据的分布特点:直方图展示的是数据的频数分布情况,需要根据数据的实际特点进行解读,避免片面的结论。
QQ Plot(Quantile-Quantile Plot)是一种用于检验数据分布是否符合正态分布的常用方法。
在QQ图中,将数据的分位数与标准正态分布的分位数进行比较。
如果数据分布接近正态分布,QQ图上的点将大致落在一条直线上。
以下是一个生成QQ Plot的示例代码:
import numpy as npimport scipy.stats as statsimport matplotlib.pyplot as plt# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 1000)# 绘制QQ图stats.probplot(data, dist="norm", plot=plt)plt.title('Q-Q Plot')plt.show()
如果QQ图上的点大致落在一条直线上,则说明数据分布与正态分布的分位数相符,表明数据可能符合正态分布。
如果点的分布偏离直线,可能表示数据分布存在偏差或者不服从正态分布。
优点: 直观易懂,能够直接观察数据是否符合正态分布。
缺点: 对数据量较大时,不易判断点的分布;对于小样本数据,容易受到随机性的影响。
注意解读直线:如果QQ图上的点大致分布在一条直线上,说明数据可能符合正态分布;但需要注意,即使点没有完全落在直线上,也不代表数据一定不符合正态分布,需要结合其他方法进行综合判断。
结合其他方法:QQ Plot是一种初步判断数据正态性的方法,最好结合其他方法进行分析,以提高准确性。
KDE Plot(Kernel Density Estimation Plot)是一种用于可视化数据分布的方法。它通过对数据的密度进行估计并绘制成一条平滑的曲线,从而帮助我们观察数据的分布形状。
在KDE Plot中,曲线的峰值通常对应着数据的主要分布区域。
以下是一个生成KDE Plot的示例代码:
import numpy as npimport seaborn as snsimport matplotlib.pyplot as plt# 生成随机数据np.random.seed(0)data = np.random.normal(loc=0, scale=1, size=1000)# 创建KDE Plotsns.kdeplot(data, shade=True, label='KDE Plot')# 添加正态分布曲线mu, sigma = np.mean(data), np.std(data)x = np.linspace(min(data), max(data), 100)y = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2)plt.plot(x, y, 'r--', label='Normal Distribution')# 显示图表plt.title('Kernel Density Estimation Plot')plt.xlabel('Value')plt.ylabel('Density')plt.legend()plt.show()
KDE Plot展示了数据的密度估计曲线,曲线的峰值通常对应着数据的主要分布区域。
如果曲线接近钟形并且单峰,那么数据可能是近似正态分布的。
优点: 能够直观地展示数据的分布形状,平滑的曲线有助于观察数据的整体趋势。
缺点: 对于小样本数据,估计的结果可能不够准确;曲线的平滑程度受到带宽参数的影响,需要进行调整以达到最佳效果。
调整带宽参数:KDE Plot中的平滑程度受到带宽参数的影响,需要根据数据的特点进行调整,以保证结果的准确性。
结合其他方法:KDE Plot是一种直观的方法,但最好结合其他方法进行分析,以提高判断的准确性。
1.4 Violin Plot
Violin Plot 是一种用于可视化数据分布形状的方法。
它结合了箱线图和核密度估计图的特点,能够同时展示数据的分布情况和概率密度。
Violin Plot通过展示数据的分布形状,帮助我们初步判断数据是否接近正态分布。
以下是一个生成Violin Plot的示例代码:
import numpy as npimport seaborn as snsimport matplotlib.pyplot as plt# 生成随机数据np.random.seed(0)data = np.random.normal(loc=0, scale=1, size=100)# 创建 Violin Plotsns.violinplot(data, inner="points")# 添加正态分布曲线mu, sigma = np.mean(data), np.std(data)x = np.linspace(min(data), max(data), 100)y = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2)plt.plot(x, y, 'r--', label='Normal Distribution')# 显示图表plt.title('Violin Plot')plt.xlabel('Value')plt.ylabel('Density')plt.show()
Violin Plot通过展示数据的分布形状,可以帮助我们初步判断数据是否接近正态分布。
如果 Violin Plot 呈现出类似钟形曲线的形状,那么数据可能是近似正态分布的。
如果 Violin Plot 偏斜严重或者有多个峰值,那么数据可能不是正态分布的。
优点: 直观地展示了数据的分布形状,能够同时观察到数据的中位数、四分位数以及分布的密度。
缺点: 对于小样本数据,可能不够准确;可能会受到异常值的影响。
结合其他方法:Violin Plot是一种初步判断数据正态性的方法,最好结合其他方法进行分析,以提高准确性。
注意异常值:Violin Plot展示的是数据的整体分布情况,需要注意异常值对结果的影响。
Shapiro-Wilk检验是一种用于检验数据是否满足正态分布的统计方法。
它基于样本数据与正态分布的期望值之间的相关性来计算统计量W,以及计算P值来表示观测到这种相关性的可能性。
当统计量W接近1且P值大于显著水平(通常为0.05)时,可以得出结论:观测数据可能来自正态分布。
准备数据:收集样本数据。
执行Shapiro-Wilk检验:使用统计软件或编程语言执行Shapiro-Wilk检验,输入样本数据。
解释结果:根据检验结果中的统计量W和P值来判断数据的正态性。若W接近1且P值大于显著水平,则可能符合正态分布。
统计量W越接近1,说明观测数据与正态分布的拟合程度越好。
P值表示观测到这种相关性的可能性,若P值大于显著水平,则观测数据可能来自正态分布。
from scipy import statsimport numpy as np# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 10000)# 执行Shapiro-Wilk检验stat, p = stats.shapiro(data)print('Shapiro-Wilk Statistic:', stat)print('P-value:', p)# 根据P值判断正态性alpha = 0.05if p > alpha:print('可能来自正态分布')else:print('样本不符合正态分布')
Shapiro-Wilk Statistic: 0.9997864961624146
P-value: 0.4349559545516968可能来自正态分布
当样本数据量较小(通常小于50)时,Shapiro-Wilk检验效果较好。
适用于需要进行正态性检验的情景,如在进行假设检验或建模前。
样本量:对于较小的样本量,Shapiro-Wilk检验效果较好,但对于大样本量,可能会导致结果的过度敏感。
显著水平的选择:需要根据具体情况选择适当的显著水平,通常为0.05。
假设检验的前提:Shapiro-Wilk检验基于正态分布的假设,因此在执行检验前需要确保样本数据符合检验的假设前提。
KS检验(Kolmogorov-Smirnov test)是一种用于检验数据是否符合特定分布(如正态分布)的统计方法。
它通过测量观测数据与特定理论分布的累积分布函数(CDF)之间的最大差异来评估二者是否来自同一分布。
基本步骤包括对两个样本数据进行排序,计算两个样本的经验累积分布函数(ECDF),计算两个累积分布函数之间的差异,并根据显著性水平和样本大小使用参考表计算P值来判断两个样本是否来自同一分布。
准备数据:收集样本数据。
执行KS检验:使用统计软件或编程语言执行KS检验,输入样本数据和理论分布(如正态分布)。
解释结果:根据检验结果中的统计量和P值来判断样本数据是否符合理论分布。通常,若P值大于显著水平(通常为0.05),则接受原假设,认为观测数据可能来自于理论分布。
统计量:KS检验统计量表示两个累积分布函数之间的最大差异。
P值:P值表示观测到这种差异的可能性。若P值大于显著水平,则接受原假设,认为观测数据可能来自于理论分布。
from scipy import statsimport numpy as np# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 10000)# 执行KS检验statistic, p_value = stats.kstest(data, 'norm')print('KS Statistic:', statistic)print('P-value:', p_value)# 根据P值判断正态性alpha = 0.05if p_value > alpha:print('可能来自正态分布')else:print('样本不符合正态分布')
KS Statistic: 0.005691688659427374
P-value: 0.9004006146387155
可能来自正态分布
适用于连续型数据的正态性检验。
适用于需要对比观测数据与理论分布之间差异的情景。
样本大小:KS检验对样本大小不敏感,可用于小样本和大样本。
显著水平的选择:需要根据具体情况选择适当的显著水平,通常为0.05。
假设检验的前提:KS检验基于数据独立同分布的假设,因此在执行检验前需要确保样本数据满足此假设。
Anderson-Darling检验是一种用于检验数据是否来自特定分布(如正态分布)的统计方法。
它特别强调观察值在分布尾部的差异,因此在检测极端值的偏差方面非常有效。
该检验基于样本数据与理论分布之间的差异来计算统计量,并根据统计量与临界值的比较来判断样本数据是否来自于理论分布。
准备数据:收集样本数据。
执行Anderson-Darling检验:使用统计软件或编程语言执行Anderson-Darling检验,输入样本数据和理论分布(如正态分布)。
解释结果:根据检验结果中的统计量和临界值的比较来判断样本数据是否来自理论分布。若统计量小于临界值,则接受原假设,认为观测数据可能来自理论分布。
统计量:Anderson-Darling检验统计量表示样本数据与理论分布之间的差异程度。
临界值:临界值用于判断统计量是否足够小,以接受原假设。
from scipy import statsimport numpy as np# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 10000)# 执行Anderson-Darling检验result = stats.anderson(data, dist='norm')print('Anderson-Darling Statistic:', result.statistic)print('Critical Values:', result.critical_values)print('Significance Level:', result.significance_level)# 判断正态性if result.statistic < result.critical_values[2]:print('可能来自正态分布')else:print('样本不符合正态分布')
Anderson-Darling Statistic: 0.6069479699817748
Critical Values: [0.576 0.656 0.787 0.918 1.092]
Significance Level: [15. 10. 5. 2.5 1. ]
可能来自正态分布
适用于连续型数据的正态性检验。
适用于需要较为精确判断数据是否来自特定分布的情景。
样本大小:Anderson-Darling检验对样本大小敏感,对于小样本数据效果较好。
显著水平的选择:需要根据具体情况选择适当的显著水平,通常为0.05。
假设检验的前提:Anderson-Darling检验基于数据独立同分布的假设,因此在执行检验前需要确保样本数据满足此假设。
2.4 Lilliefors检验
Lilliefors检验(也称为Kolmogorov-Smirnov-Lilliefors检验)是一种用于检验数据是否符合正态分布的统计检验方法,它是Kolmogorov-Smirnov检验的一种变体,专门用于小样本情况。
与K-S检验不同,Lilliefors检验不需要假定数据的分布类型,而是基于观测数据来评估是否来自正态分布。
它通过比较观测数据的经验分布函数(ECDF)与正态分布的累积分布函数(CDF)之间的最大差异来进行检验。
准备数据:收集样本数据。
执行Lilliefors检验:使用统计软件或编程语言执行Lilliefors检验,输入样本数据。
解释结果:根据检验结果中的统计量和P值来判断样本数据是否来自正态分布。若P值大于显著水平(通常为0.05),则接受原假设,认为观测数据可能来自正态分布。
统计量:Lilliefors检验统计量表示观测数据与正态分布的拟合程度。
P值:P值表示观测到这种拟合程度的可能性。若P值大于显著水平,则接受原假设,认为观测数据可能来自正态分布。
import numpy as npfrom statsmodels.stats.diagnostic import lilliefors# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 10000)# 执行Lilliefors检验statistic, p_value = lilliefors(data)print('Lilliefors Statistic:', statistic)print('P-value:', p_value)# 根据P值判断正态性alpha = 0.05if p_value > alpha:print('可能来自正态分布')else:print('样本不符合正态分布')
Lilliefors Statistic: 0.008483593470550388
P-value: 0.07431088764953267
可能来自正态分布
适用于小样本数据的正态性检验,通常用于样本量较小的情况。
适用于需要对数据是否来自正态分布进行较为精确的判断的情景。
样本大小:Lilliefors检验对小样本数据效果较好,但对于大样本数据可能不够准确。
显著水平的选择:需要根据具体情况选择适当的显著水平,通常为0.05。
假设检验的前提:Lilliefors检验不需要假定数据的分布类型,但在执行检验前需要确保样本数据满足检验的假设前提。
巴氏距离(Bhattacharyya distance)是一种用于比较两个概率分布之间的相似性的距离度量方法。
它衡量了两个概率分布之间的重叠程度,通常被解释为两个分布之间的接近程度。
巴氏距离的计算基于概率密度函数,通过计算两个分布的重叠部分的面积来度量它们之间的相似性。
巴氏距离的计算涉及概率密度函数的积分运算,可以通过以下公式进行计算:
其中,p(x) 和 q(x) 分别表示两个概率分布的概率密度函数。
优点:巴氏距离提供了一种直观的方式来比较两个概率分布之间的相似性,适用于连续型数据。
缺点:巴氏距离对数据的分布假设敏感,需要满足一定的条件才能准确计算。
适用场景:适用于需要比较两个概率分布之间相似性的情景,如模式识别、图像处理等领域。
巴氏距离的结果越小,表示两个概率分布之间的重叠程度越大,相似性越高;反之,巴氏距离越大,表示两个概率分布之间的差异越大,相似性越低。
数据分布的假设:巴氏距离的计算基于概率密度函数,需要确保数据满足相应的分布假设。
数据维度:巴氏距离对于高维数据的计算可能会比较复杂,需要考虑计算效率和准确性的权衡。
海林格距离(Hellinger distance)是一种用于比较两个概率分布之间的相似性的距离度量方法。
它衡量了两个概率分布之间的相对差异程度,类似于巴氏距离。
海林格距离的计算基于概率密度函数,通过计算两个分布之间每个点的平方根差的平均值来度量它们之间的相似性。
海林格距离的计算可以使用以下公式进行:
其中,
pi 和 qi个观测值上的概率。
优点:海林格距离提供了一种直观的方式来比较两个概率分布之间的相似性,适用于连续型数据。
缺点:海林格距离对数据的分布假设敏感,需要满足一定的条件才能准确计算。
适用场景:适用于需要比较两个概率分布之间相似性的情景,如模式识别、图像处理等领域。
海林格距离的结果越小,表示两个概率分布之间的差异越小,相似性越高;反之,海林格距离越大,表示两个概率分布之间的差异越大,相似性越低。
数据分布的假设:海林格距离的计算基于概率密度函数,需要确保数据满足相应的分布假设。
数据维度:海林格距离对于高维数据的计算可能会比较复杂,需要考虑计算效率和准确性的权衡。
进入免费知识星球一起交流 ↑
关注公众号,围观日更万日 ↓
- 科研为国分忧,创新与民造福 -
- 本文含算法金广告,大侠且看且细品 -