You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:48:28