VB.NET 规范化数据 [1, -1]

VB.NET Normalizing Data [1, -1]

我目前正在使用以下代码规范化数据:

Public Function NormalizeData(values As Double()) As Double()
    Dim min = values.Min
    Dim max = values.Max
    Dim outList(values.Count - 1) As Double
    For i = 0 To values.Count - 1
        outList(i) = (values(i) - min) / (max - min)
    Next
    Return outList
End Function

此 returns 值相应地从 0 到 1。我对如何在 [1, -1] 而不是 [1, 0] 之间进行标准化感到困惑。

您已经知道如何归一化到 0 到 1 的范围。如果您希望范围为 -1 到 1,只需将归一化数据乘以 2 并减去 1。

正如我在评论中所说,您只需修改 For 循环中的语句即可调整数据:

outList(i) = 2 * (values(i) - min) / (max - min) - 1

对数据进行反规范化的等效语句是:

outList(i)= (values(i) + 1) * (max - min) / 2 + min

如果您需要对多个数据数组进行规范化和反规范化,我建议创建一个 NormalData class,它可以存储规范化数据以及最大值和最小值,并且具有以下属性: return 标准化或非标准化值。这是一个 class 的例子。您可以使用

创建它
  • 一组非规范化数据,或者...
  • 归一化数据数组以及最小值和最大值

NormalValuesValues 属性 return 分别是规范化和非规范化数据。

Public Class NormalData
    ''' <summary>Create a NormalData object from and unnormalised array of values</summary>
    ''' <param name="values">Unnormalised values</param>
    Sub New(values() As Double)
        Minimum = values.Min
        Maximum = values.Max
        NormalValues = values.Select(Function(val) 2 * (val - Minimum) / (Maximum - Minimum) - 1).ToArray
    End Sub

    ''' <summary>Create a NormalData object from and normalised array of values</summary>
    ''' <param name="normal">Normalised values</param>
    ''' <param name="min">Minimum value of unnormalised data</param>
    ''' <param name="max">Maximum value of unnormalised data</param>
    Sub New(normal() As Double, min As Double, max As Double)
        Minimum = min
        Maximum = max
        NormalValues = normal
    End Sub

    ReadOnly Property Minimum As Double
    ReadOnly Property Maximum As Double

    ReadOnly Property NormalValues As Double()

    ReadOnly Property Values As Double()
        Get
            Return NormalValues.Select(Function(norm) (norm + 1) * (Maximum - Minimum) / 2 + Minimum).ToArray
        End Get
    End Property
End Class