【问题标题】:Numpy - How do you normalize specific features in a dataset?Numpy - 你如何规范化数据集中的特定特征?
【发布时间】:2020-10-24 14:01:19
【问题描述】:

有一组数据混合了连续和符号数据,例如:

data = [[duration, protocol, bytes, rate],
        [0,        tcp,      215,   0.45],
        [4,        udp,      1474,  0.63],
        [63,       icmp,     30,    0.07]]

第 1、3、4 列是连续特征,而第 2 列是符号。

有没有办法在不触及第二列的情况下规范化第一列、第三列和第四列,并且不必从数据集中删除第二列?

编辑:对于这个问题,我想通过根据每列的最小值和最大值使每列介于 0 和 1 之间来规范化数据。

【问题讨论】:

  • 对您的问题的简短而轻率的回答是肯定的。关键是标准化是什么意思。术语“规范化数据”有许多不同的含义。您具体想对这些数据做什么?
  • 更新的问题,我正在使用数据来处理一些人工智能的东西。我将以不同的方式处理数据,并想看看是否有办法修改某些数据组,以便在忽略其他数据的同时更容易处理。

标签: python-3.x numpy


【解决方案1】:

您可以编写一个函数来以您想要的方式规范化特定列,然后在您想要的列上调用它。例如:

import numpy as np

data = np.array([['duration', 'protocol', 'bytes', 'rate'],
                [0,           'tcp',      215,     0.45],
                [4,           'udp',      1474,    0.63],
                [63,          'icmp',     30,      0.07]])

def normalize_column(col):
    values = [float(x) for x in data[1:, col]]
    minimum = np.min(values)
    maximum = np.max(values)
    r = maximum - minimum
    data[1:, col] = (values - minimum) / r
    
for col in (0, 2, 3):
    normalize_column(col)
    
data
array([['duration', 'protocol', 'bytes', 'rate'],
       ['0.0', 'tcp', '0.128116', '0.678571'],
       ['0.063492', 'udp', '1.0', '1.0'],
       ['1.0', 'icmp', '0.0', '0.0']], dtype='<U8')

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 2020-07-20
    • 2015-08-24
    • 2018-09-04
    • 1970-01-01
    • 2015-12-08
    • 2021-03-01
    • 2016-04-14
    • 2018-11-16
    相关资源
    最近更新 更多