在 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)和特征贡献计算