Min-Max函数应用:机器学习数据归一化代码运行问题
解决行级Min-Max归一化的问题
问题分析
你的代码存在几个关键问题导致归一化未生效:
- 函数
df_normalize默认参数i=3,但你的DataFrame仅2列(索引0、1),df.iloc[:,i:]会选中空列,无法处理任何数据 - 未调用定义好的
df_normalize函数,归一化逻辑从未执行 - 行级归一化的实现可更简洁,无需反复转置的复杂操作
修正后的代码
# 导入库 import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler # 数据 data = {"1":[1,2,3,4], "2":[20,60,70,34]} # 构建DataFrame tr_df = pd.DataFrame(data) # 定义行级Min-Max归一化函数 def df_normalize(df, start_col=0): scaler = MinMaxScaler() # 对指定起始列后的所有列按行归一化(scikit-learn 1.2+支持axis=1参数) df.iloc[:, start_col:] = scaler.fit_transform(df.iloc[:, start_col:], axis=1) return df # 调用函数执行归一化 normalized_df = df_normalize(tr_df) # 查看归一化结果与统计信息 print(normalized_df) print(normalized_df.describe().round(2))
关键改进点
- 调整默认参数
start_col=0,确保能选中需要处理的列 - 使用
fit_transform的axis=1参数直接按行归一化,省去手动转置步骤 - 函数返回处理后的DataFrame,便于后续使用
- 添加函数调用逻辑,保证归一化代码执行
手动实现行级归一化(无scikit-learn依赖)
如果不想依赖第三方库,可手动实现逻辑:
def manual_row_normalize(df, start_col=0): cols = df.columns[start_col:] # 按行计算最值并归一化 row_min = df[cols].min(axis=1).values.reshape(-1,1) row_max = df[cols].max(axis=1).values.reshape(-1,1) df[cols] = (df[cols] - row_min) / (row_max - row_min) return df normalized_df_manual = manual_row_normalize(tr_df) print(normalized_df_manual)
内容的提问来源于stack exchange,提问作者Toy L
相关产品推荐
相关产品推荐

