成功解决ValueError: Input contains infinity or a value too large for dtype(‘float64‘).

使用最大最小归一化对数据进行归一化处理

# 创建MinMaxScaler对象
scaler = MinMaxScaler()

# 对数据每个特征进行归一化(该行意思是针对每一列数据进行归一化,而不是全局)
normalized_dataset = scaler.fit_transform(dataset)

出现以下错误:

ValueError: Input contains infinity or a value too large for dtype('float64').

如何解决:

个人尝试了很多方法,如异常值替换、数据元素缩放(均缩小10000倍等)均没有成功!

最后只能放弃调用  scaler = MinMaxScaler()  对象,手动编写函数,如下所示:
 

def manual_min_max_scaling(dataset):
    """
    手动实现最大最小归一化处理二维列表的每一列。
    """
    # 初始化一个新的空列表来存放归一化后的数据
    normalized_dataset = []

    # 遍历二维列表的每一列
    for col in zip(*dataset):  # 使用zip(*dataset)转置列表,以便遍历列
        min_val = min(col)  # 计算当前列的最小值
        max_val = max(col)  # 计算当前列的最大值

        # 如果最大值和最小值相等(即没有变化),则直接复制该列,避免除以零错误
        if max_val == min_val:
            normalized_col = [min_val] * len(col)
        else:
            # 对当前列的每个元素进行归一化处理
            normalized_col = [(x - min_val) / (max_val - min_val) for x in col]

        # 将归一化后的列添加到结果列表中
        normalized_dataset.append(normalized_col)

    # 将归一化后的列表转置回来,恢复原始的二维列表结构
    return [list(i) for i in zip(*normalized_dataset)]

上述问题得以解决!!!!!!!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值