欢迎大家来到IT世界,在知识的湖畔探索吧!
在机器学习和数据处理过程中,对不同数量级的数据进行归一化是一项重要的预处理步骤。归一化可以将数据缩放到同一范围,避免某些特征因数值较大而主导模型训练。
Python 提供了多种方法对数据进行归一化,以下介绍一些常用的归一化方法以及python实现。
①MinMaxScaler:将所有数据缩放到0到1的范围,保留了每列数据的比例关系。
原理:通过线性变换将数据压缩到[0, 1]区间,公式为:
欢迎大家来到IT世界,在知识的湖畔探索吧!
优点:保留原始数据分布,简单直观。
缺点:对异常值非常敏感,异常值会极大地影响缩放效果。
②StandardScaler:对数据进行标准化,使其均值为0,标准差为1,适用于假设数据符合正态分布的情况。
原理:对数据进行标准化处理,使其均值为0,标准差为1,公式为:
其中,μ为均值,σ为标准差。
优点:适合正态分布数据,消除量纲影响。
缺点:对非正态分布的数据表现一般。
③MaxAbsScaler:按每列数据的最大绝对值进行缩放,保留了数据的稀疏性。
原理:根据每列数据的最大绝对值进行缩放,使数据范围在[-1, 1]之间,公式为:
优点:适合稀疏数据,保留稀疏性。
缺点:对异常值依然敏感。
④RobustScaler:对数据的中位数和四分位距进行缩放,减少异常值对归一化的影响。
原理:基于中位数和四分位间距(IQR)对数据进行缩放,公式为:
其中,IQR为第75百分位数减去第25百分位数。
优点:对异常值有较强的鲁棒性。
缺点:对于分布极端不均的数据,效果可能不理想。
下面是归一化的Python程序:
import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler, StandardScaler, MaxAbsScaler, RobustScaler # 生成不同数量级的数据 def generate_data(): np.random.seed(42) data1 = np.random.randint(1, 10, 100) # 数量级1-10 data2 = np.random.randint(100, 1000, 100) # 数量级100-1000 data3 = np.random.randint(10000, , 100) # 数量级10000- return np.vstack((data1, data2, data3)).T # 归一化方法 def apply_normalization(data): scalers = { "MinMaxScaler": MinMaxScaler(), # 将数据线性缩放到[0, 1]区间 "StandardScaler": StandardScaler(), # 标准化(z-score),均值为0,标准差为1 "MaxAbsScaler": MaxAbsScaler(), # 以最大绝对值缩放,范围[-1, 1] "RobustScaler": RobustScaler(), # 使用中位数和IQR缩放,减少异常值影响 } return {name: scaler.fit_transform(data) for name, scaler in scalers.items()} # 绘图函数 def plot_normalization(data, methods): fig, axs = plt.subplots(len(methods) + 1, 1, figsize=(12, 18)) # 原始数据 axs[0].plot(data, alpha=0.7) axs[0].set_title("Original Data (Different Scales)") axs[0].grid(True) # 绘制归一化后的数据 for i, (name, norm_data) in enumerate(methods.items(), start=1): axs[i].plot(norm_data, alpha=0.7) axs[i].set_title(f"Data Normalized with {name}") axs[i].grid(True) plt.tight_layout() plt.show() # 主程序 if __name__ == "__main__": data = generate_data() # 生成数据 normalized_data = apply_normalization(data) # 归一化处理 plot_normalization(data, normalized_data) # 显示结果
欢迎大家来到IT世界,在知识的湖畔探索吧!
效果如下:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/116006.html