分享

高斯变换简介及Python示例

 taotao_2016 2019-06-07

高斯变换简介及Python示例

线性回归和逻辑回归等机器学习模型假设变量是正态分布的。如果一个变量不是正态分布,有时可以找到一个数学变换来把一个变量按照高斯分布进行变换。

遵循高斯分布的变量变换:

这些是一些数学方法来转换变量,使它们遵循高斯分布。没有一个比另一个好。它们主要取决于变量的原始分布。

  1. 对数变换
  2. 倒数变换
  3. 平方根变换
  4. 指数变换

在本文中,我们将使用比较著名的泰坦尼克号机器学习数据集(https://www./c/titanic/data)的“Age”变量进行这些变换。

让我们从导入Python包并加载机器学习数据集开始

#Importing Packagesimport numpy as np import pandas as pdimport matplotlib.pyplot as pltimport pylabimport scipy.stats as stats#Importing datasetdata = pd.read_csv('train.csv', usecols = ['Age'])

高斯变换简介及Python示例

然后让我们检查是否有任何缺失值并使用dropna方法删除它们

data.apply(lambda x: sum(x.isnull()),axis=0)

高斯变换简介及Python示例

'Age'中的Null值数

data = data.dropna()

原始分布:

让我们从Titanic机器学习数据集中可视化变量的分布开始,我们绘制直方图来可视化钟形图和Q-Q图(两者都用于可视化变量是否服从高斯分布)。记住,如果变量是正态分布的,我们应该看到在理论分位数上有一条45度的直线。也就是说,实际分位数应该与理论值完全一致。

def diagnostic_plots(df, variable):   plt.figure(figsize=(15,6)) plt.subplot(1,2,1) df[variable].hist() #plt.xlim((0, 100))  plt.subplot(1,2,2) stats.probplot(df[variable], dist='norm', plot = pylab)  plt.show() diagnostic_plots(data, 'Age')

高斯变换简介及Python示例

在这里,我们创建一个函数diagnostic_plots来可视化变量是否遵循高斯分布。它将data frame和目标变量作为输入参数。函数的第一部分是直方图,第二部分是Q-Q图。我们在变量'Age'上调用函数。

高斯变换简介及Python示例

原始分布

该变量遵循近似高斯分布。它略微偏斜,这解释了与下端的45度线(红线)的偏差。

现在让我们应用Age变量的所有上述变换并评估结果。

对数变换:

让我们应用Numpy中的log函数并绘制诊断图。

data['Age_log'] = np.log(data.Age)diagnostic_plots(data, 'Age_log')

高斯变换简介及Python示例

对数变换

我们可以看到这个变换并没有使Age服从高斯分布。记住log0没有定义。因此,如果您的数据包含0 -给它一个偏移量或使用另一种变换方法。

倒数变换:

data['Age_reciprocal'] = 1 / data.Agediagnostic_plots(data, 'Age_reciprocal')

高斯变换简介及Python示例

倒数变换

我们可以看到这种变换也没有帮助。

平方根变换:

接下来,我们将尝试平方根变换。

data['Age_sqrt'] = data.Age**(1/2)diagnostic_plots(data, 'Age_sqrt')

高斯变换简介及Python示例

平方根变换

结果比其他好一点,但仍然不是高斯。开始和结束都有一些偏差。最后,让我们尝试指数变换。

指数变换:

在这里,我们可以尝试任何我们想要的指数。我选择了1.2作为指数。但是你可以尝试不同的指数,看看分布如何变化。

data['Age_exp'] = data.Age**(1/1.2)diagnostic_plots(data, 'Age_exp')

高斯变换简介及Python示例

指数变换

正如你在直方图中看到的那样,这种变换使得“Age”变量遵循几乎高斯分布。直方图中的峰值更加居中,并且Q-Q图中的下端值附近仅有一些偏差。因此,在这种特殊情况下,我们可以看到指数变换效果最好。

应该对变量进行变换吗?

这取决于你的最终目标。在业务环境中,最好使用变量的原始分布来训练机器学习模型,因为在使用机器学习模型进行预测时,模型更容易解释,将来可能出现的问题也更少。另一方面,在竞赛的情况下,最好选择一个表现最好的变量。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多