摘要:本文介绍了机器学习中常用的数据分布概念和统计方法。重点讲解了百分位数的计算及其应用,演示了使用NumPy和Pandas计算百分位数的Python实现。同时详细阐述了机器学习中常见的四种数据分布类型:正态分布(钟形曲线)、偏态分布(左偏/右偏)、均匀分布(等概率)和双峰分布(双峰模式),并提供了相应的Python代码示例和可视化图表。这些统计概念和分布类型在数据预处理、探索性分析和模型训练中具有重要作用。
目录
机器学习——百分位数
使用NumPy计算百分位数
示例
使用Panda计算百分位数
示例
机器学习——数据分发
正态分布
示例
偏向分布
示例
均匀分布
示例
双峰分布
示例
机器学习——百分位数
百分位数是机器学习中用来描述数据集分布的统计概念。百分位是一种度量值,表示一组观察值中给定百分比的值低于该值。
例如,第25个百分位(也称为第一个四分位)是数据集中25%的观测值低于的值,而第75个百分位(也称为第三个四分位)是数据集中75%的观测值低于的值。
百分位数可用于汇总数据集的分布并识别异常值。在机器学习中,百分位数通常用于数据预处理和探索性数据分析,以获得对数据的洞察。
Python提供了几个用于计算百分位数的库,包括NumPy和Pandas。
使用NumPy计算百分位数
以下是使用 NumPy − 计算百分位数的一个示例
示例
import numpy as np data = np.array([1, 2, 3, 4, 5]) p25 = np.percentile(data, 25) p75 = np.percentile(data, 75) print('25th percentile:', p25) print('75th percentile:', p75)在这个例子中,我们用NumPy创建样本数据集,然后用np.percentile()函数计算第25和第75百分位。
输出
输出显示数据集的百分位数值。
25th percentile: 2.0 75th percentile: 4.0
使用Panda计算百分位数
以下是使用Pandas计算百分位数的示例 −
示例
import pandas as pd data = pd.Series([1, 2, 3, 4, 5]) p25 = data.quantile(0.25) p75 = data.quantile(0.75) print('25th percentile:', p25) print('75th percentile:', p75)在这个例子中,我们创建一个 Pandas 级数对象,然后用该级数对象的分位数(quantile()方法计算第 25 和第 75 百分位数。
输出
输出显示数据集的百分位数值。
25th percentile: 2.0 75th percentile: 4.0
机器学习——数据分发
在机器学习中,数据分布指的是数据点在数据集上的分布或分布方式。理解数据集中数据的分布非常重要,因为这会显著影响机器学习算法的性能。
数据分布可以通过多种统计指标来表征,包括均值、中位数、模式、标准差和方差。这些指标有助于描述数据的中心趋势、分布和形状。
机器学习中常见的数据分布类型如下 −
正态分布
正态分布,也称为高斯分布,是一种在机器学习和统计学中广泛使用的连续概率分布。它是一条钟形曲线,描述了一个随机变量在均值周围对称的概率分布。正态分布有两个参数,均值(μ)和标准差(σ)。
在机器学习中,正态分布常用于建模线性回归和其他统计模型中误差项的分布。它也被用作各种假设检验和置信区间的基础。
正态分布的一个重要性质是经验规则,也称为68-95-99.7规则。该规则指出,大约68%的观测值落在均值的一个标准差范围内,95%的观测值落在均值的两个标准差以内,99.7%的观测值落在均值的三个标准差以内。
Python 提供了多种库,可用于处理正态分布。其中一个库是scipy.stats,它提供了计算概率密度函数(PDF)、累积分布函数(CDF)、百分点函数(PPF)以及正态分布的随机变量的函数。
示例
这里是一个使用scipy.stats生成并可视化正态分布 − 的示例
import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # Generate a random sample of 1000 values from a normal distribution mu = 0 # Mean sigma = 1 # Standard deviation sample = np.random.normal(mu, sigma, 1000) # Calculate the PDF for the normal distribution x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100) pdf = norm.pdf(x, mu, sigma) # Plot the histogram of the random sample and the PDF of the normal distribution plt.figure(figsize=(7.5, 3.5)) plt.hist(sample, bins=30, density=True, alpha=0.5) plt.plot(x, pdf) plt.show()在此示例中,我们首先从均值为0、标准差为1的正态分布中,使用np.random.normal生成一个1000个随机样本。然后我们用norm.pdf计算正态分布的PDF,并用np.linspace生成一个由100个均匀间距的数组组成,范围介于μ-3σ到μ+3σ之间
最后,我们用plt.hist绘制随机样本的直方图,并用plt.plot叠加正态分布的PDF。
输出
结果图显示了正态分布的钟形曲线和近似正态分布的随机样本直方图。
偏向分布
机器学习中的偏态分布指的是数据集在其均值或平均值周围分布不均匀的状态。在偏斜分布中,大多数数据点倾向于集中在分布的一端,而在另一端的数据点较少。
偏态分布有两种类型:左偏分布和右偏分布。左偏分布,也称为负偏分布,其尾部较长,分布左侧,大多数数据点位于右侧。相比之下,右偏分布(也称为正偏分布)在分布的右侧有长尾,而大多数数据点则朝向左侧。
偏斜分布可能出现在许多不同类型的数据集中,如财务数据、社交媒体指标或医疗记录。在机器学习中,识别和处理偏态分布非常重要,因为它们会影响某些算法和模型的性能。例如,数据偏斜可能导致预测偏差和结果不准确,可能需要预处理技术如归一化或数据转换以提升模型性能。
示例
这里是一个使用 Python 的 NumPy 和 Matplotlib 库生成并绘制偏分布的示例 −
import numpy as np import matplotlib.pyplot as plt # Generate a skewed distribution using NumPy's random function data = np.random.gamma(2, 1, 1000) # Plot a histogram of the data to visualize the distribution plt.figure(figsize=(7.5, 3.5)) plt.hist(data, bins=30) # Add labels and title to the plot plt.xlabel('Value') plt.ylabel('Frequency') plt.title('Skewed Distribution') # Show the plot plt.show()输出
执行该代码后,输出为如下图 −
均匀分布
机器学习中的均匀分布指的是一种概率分布,其中所有可能的结果发生的可能性相等。换句话说,数据集中的每个值被观测到的概率相同,且数据点不会围绕某个值进行聚类。
均匀分布常被用作与其他分布比较的基线,因为它代表了对数据的随机且无偏的抽样。它在某些类型的应用中也很有用,比如生成随机数或从集合中无偏选择项目。
在概率论中,连续均匀分布的概率密度函数定义为−
$$f\左(x \right)=\left\{\begin{matrix} 1 和 for\: a\leq x\leq b \\ 0 及其他 \\ \结束{矩阵}\对。$$
其中a和b分别是分布的最小值和最大值。均匀分布的均值为$\frac{a+b}{2} $,方差为$\frac{\left ( b-a \right )^{2}}{12}$
示例
在 Python 中,NumPy 库提供了从均匀分布生成随机数的函数,例如numpy.random.uniform()。这些函数以分布的最小值和最大值为参数,可用于生成均匀分布的数据集。
这里是一个使用 Python 的 NumPy 库生成均匀分布的示例 −
import numpy as np import matplotlib.pyplot as plt # Generate 10,000 random numbers from a uniform distribution between 0 and 1 uniform_data = np.random.uniform(low=0, high=1, size=10000) # Plot the histogram of the uniform data plt.figure(figsize=(7.5, 3.5)) plt.hist(uniform_data, bins=50, density=True) # Add labels and title to the plot plt.xlabel('Value') plt.ylabel('Frequency') plt.title('Uniform Distribution') # Show the plot plt.show()输出
它将生成以下图作为输出−
双峰分布
在机器学习中,双峰分布是一种具有两种不同模式或峰值的概率分布。换句话说,分布中有两个区域,这些区域最有可能出现数据,中间有一个谷地或谷地,数据较少出现。
双峰分布可能出现在各种类型的数据中,如生物识别测量、经济指标或社交媒体指标。它们可以代表数据集中不同的亚种群,或是不同的行为模式或随时间的趋势。
双峰分布可以通过多种统计方法识别和分析,如直方图、核密度估计或假设检验。在某些情况下,双峰分布可以拟合到特定的概率分布上,例如高斯混合模型,该模型允许对底层子群体单独建模。
示例
在 Python 中,NumPy、SciPy 和 Matplotlib 等库提供了生成和可视化双峰分布的函数。
例如,以下代码生成并绘制一个双峰分布 −
import numpy as np import matplotlib.pyplot as plt # Generate 10,000 random numbers from a bimodal distribution bimodal_data = np.concatenate((np.random.normal(loc=-2, scale=1, size=5000), np.random.normal(loc=2, scale=1, size=5000))) # Plot the histogram of the bimodal data plt.figure(figsize=(7.5, 3.5)) plt.hist(bimodal_data, bins=50, density=True) # Add labels and title to the plot plt.xlabel('Value') plt.ylabel('Frequency') plt.title('Bimodal Distribution') # Show the plot plt.show()输出
执行该代码后,输出为如下图 −