0

我相信我了解何时需要调用 Concatenate,了解哪些数据以及原因。我想了解的是调用 Concatenate 时输入列数据的物理变化。

这是某种哈希函数,它对列中的所有输入数据进行哈希处理并生成结果?

换句话说,我想知道这在技术上是否可以从 Concatenate 生成的值中恢复原始值?

传递到 Concatenate 的数据列的顺序是否会影响结果模型以及以何种方式?

为什么我要问这一切。我试图了解哪些输入参数以及以何种方式影响所生成模型的质量。我有很多输入数据列。它们都相当重要,重要的是这些价值观之间的关系。如果 Concatenate 做了一些简单的事情并失去了值之间的关系,我会尝试一种方法来提高模型的质量。如果它相当复杂并且保留了值的详细信息,我会使用其他方法。

4

1 回答 1

2

在 ML.NET 中,Concatenate采用单个特征(相同类型)并创建一个特征向量

在模式识别和机器学习中,特征向量是代表某个对象的数值特征的 n 维向量。机器学习中的许多算法都需要对象的数字表示,因为这样的表示有助于处理和统计分析。在表示图像时,特征值可能对应于图像的像素,而在表示文本时,特征可能是文本术语的出现频率。特征向量等价于线性回归等统计过程中使用的解释变量向量。

据我了解,不涉及散列。从概念上讲,您可以将其想象为String.Join方法,您可以在其中获取单个元素并将它们合并为一个。在这种情况下,该单个组件是一个特征向量,它作为一个整体将基础数据表示为一个类型数组,T其中T是各个列的数据类型。

因此,您始终可以访问各个组件,顺序无关紧要。

下面是一个使用 F# 的示例,它获取数据、使用连接变换创建特征向量并访问各个组件:

#r "nuget:Microsoft.ML"

open Microsoft.ML
open Microsoft.ML.Data

// Raw data
let housingData = 
    seq {
        {| NumRooms = 3f; NumBaths = 2f ; SqFt = 1200f|}
        {| NumRooms = 2f; NumBaths = 1f ; SqFt = 800f|}
        {| NumRooms = 6f; NumBaths = 7f ; SqFt = 5000f|}
    }

// Initialize MLContext
let ctx = new MLContext()

// Load data into IDataView
let dataView = ctx.Data.LoadFromEnumerable(housingData)

// Get individual column names (NumRooms, NumBaths, SqFt)
let columnNames = 
    dataView.Schema 
    |> Seq.map(fun col -> col.Name)
    |> Array.ofSeq

// Create pipeline with concatenate transform
let pipeline = ctx.Transforms.Concatenate("Features", columnNames)

// Fit data to pipeline and apply transform
let transformedData = pipeline.Fit(dataView).Transform(dataView)

// Get "Feature" column containing the result of applying Concatenate transform
let features = transformedData.GetColumn<float32 array>("Features")

// Deconstruct feature vector and print out individual features
printfn "Rooms | Baths | Sqft"
for [|rooms;baths;sqft|] in features do
    printfn $"{rooms} | {baths} | {sqft}"

输出到控制台的结果是:

Rooms | Baths | Sqft
2 | 3 | 1200
1 | 2 | 800
7 | 6 | 5000

如果您想了解单个特征对模型的影响,我建议您查看排列特征重要性 (PFI)特征贡献计算

于 2021-12-20T22:18:31.920 回答