将特征转换为正态分布的一种方法示例
正态(高斯)分布在机器学习中起着核心作用,线性回归模型中要假设随机误差等方差并且服从正态分布,如果变量服从正态分布,那么更容易建立理论结果。
统计学领域的很大一部分研究都是假设数据是正态分布的,所以如果我们的数据具有是正态分布,那么么则可以获得更好的结果。但是一般情况下我们的数据都并不是正态分布,所以 如果我们能将这些数据转换成正态分布那么对我们建立模型来说是一件非常有帮助的事情。
standard_normal = np.random.normal(0, 1, size=1_000_000)
fontdict = {'family':'serif', 'color':'darkgreen', 'size':16}
fig, axs = plt.subplots(1, 1, figsize=(8, 8))
axs.hist(standard_normal, bins=1000, density=True, fc=(0,0,1,0.4))
axs.set_title('Standard Normal Distribution', fontdict=fontdict, fontweight='bold', pad=12)
axs.set_xlabel('X', fontdict=fontdict, fontweight='normal', labelpad=12)
axs.set_ylabel('Density', fontdict=fontdict, fontweight='normal', labelpad=12)
axs.grid()
如果你正在处理一个密度(大约)呈线性下降的特性(见下图)。
x = np.linspace(0, 1, 1001)
sample = (3 - np.sqrt(9 - 8 * np.random.uniform(0, 1, 1_000_000))) / 2fontdict = {'family':'serif', 'color':'darkgreen', 'size':16}
fig, axs = plt.subplots(1, 1, figsize=(8, 8))
axs.hist(sample, bins=1000, density=True, fc=(0,0,1,0.4))
axs.scatter(x, np.full_like(x, 0.01), c=x, cmap=cmap)
axs.set_title('Original Feature Distribution', fontdict=fontdict, fontweight='bold', pad=12)
axs.set_xlabel('X', fontdict=fontdict, fontweight='normal', labelpad=12)
axs.set_ylabel('Density', fontdict=fontdict, fontweight='normal', labelpad=12)
axs.grid()
要将这个特征转换为具有钟形分布的变量,可能没有那么简单
完整文章:
https://avoid.overfit.cn/post/3774e5c55c1845c0a53ff65a4dfbec55
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)