使用最大最小归一化对数据进行归一化处理
# 创建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)]
上述问题得以解决!!!!!!!!!!