将特征转换为正态分布的一种方法示例

正态(高斯)分布在机器学习中起着核心作用,线性回归模型中要假设随机误差等方差并且服从正态分布,如果变量服从正态分布,那么更容易建立理论结果。

统计学领域的很大一部分研究都是假设数据是正态分布的,所以如果我们的数据具有是正态分布,那么么则可以获得更好的结果。但是一般情况下我们的数据都并不是正态分布,所以 如果我们能将这些数据转换成正态分布那么对我们建立模型来说是一件非常有帮助的事情。

  1. standard_normal = np.random.normal(0, 1, size=1_000_000)
  2. fontdict = {'family':'serif', 'color':'darkgreen', 'size':16}
  3. fig, axs = plt.subplots(1, 1, figsize=(8, 8))
  4. axs.hist(standard_normal, bins=1000, density=True, fc=(0,0,1,0.4))
  5. axs.set_title('Standard Normal Distribution', fontdict=fontdict, fontweight='bold', pad=12)
  6. axs.set_xlabel('X', fontdict=fontdict, fontweight='normal', labelpad=12)
  7. axs.set_ylabel('Density', fontdict=fontdict, fontweight='normal', labelpad=12)
  8. axs.grid()

如果你正在处理一个密度(大约)呈线性下降的特性(见下图)。

  1. x = np.linspace(0, 1, 1001)
  2. sample = (3 - np.sqrt(9 - 8 * np.random.uniform(0, 1, 1_000_000))) / 2fontdict = {'family':'serif', 'color':'darkgreen', 'size':16}
  3. fig, axs = plt.subplots(1, 1, figsize=(8, 8))
  4. axs.hist(sample, bins=1000, density=True, fc=(0,0,1,0.4))
  5. axs.scatter(x, np.full_like(x, 0.01), c=x, cmap=cmap)
  6. axs.set_title('Original Feature Distribution', fontdict=fontdict, fontweight='bold', pad=12)
  7. axs.set_xlabel('X', fontdict=fontdict, fontweight='normal', labelpad=12)
  8. axs.set_ylabel('Density', fontdict=fontdict, fontweight='normal', labelpad=12)
  9. axs.grid()

要将这个特征转换为具有钟形分布的变量,可能没有那么简单

完整文章:

https://avoid.overfit.cn/post/3774e5c55c1845c0a53ff65a4dfbec55

 

posted @   deephub  阅读(162)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示