DataOperationsCatalog.ShuffleRows Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Embaralhar as linhas de input
.
public Microsoft.ML.IDataView ShuffleRows (Microsoft.ML.IDataView input, int? seed = default, int shufflePoolSize = 1000, bool shuffleSource = true);
member this.ShuffleRows : Microsoft.ML.IDataView * Nullable<int> * int * bool -> Microsoft.ML.IDataView
Public Function ShuffleRows (input As IDataView, Optional seed As Nullable(Of Integer) = Nothing, Optional shufflePoolSize As Integer = 1000, Optional shuffleSource As Boolean = true) As IDataView
Parâmetros
- input
- IDataView
Os dados de entrada.
A semente aleatória. Se não for especificado, o estado aleatório será derivado do MLContext.
- shufflePoolSize
- Int32
O número de linhas a serem retenção no pool. Definir isso como 1 desativará o embaralhamento de pool e ShuffleRows(IDataView, Nullable<Int32>, Int32, Boolean) executará apenas um embaralhamento lendo input
em uma ordem aleatória.
- shuffleSource
- Boolean
Se false
, a transformação não tentará ler input
em uma ordem aleatória e usará apenas o agrupamento para embaralhar. Esse parâmetro não terá efeito se a CanShuffle propriedade for input
false
.
Retornos
Exemplos
using System;
using System.Collections.Generic;
using Microsoft.ML;
namespace Samples.Dynamic
{
public static class ShuffleRows
{
// Sample class showing how to shuffle rows in
// IDataView.
public static void Example()
{
// Create a new context for ML.NET operations. It can be used for
// exception tracking and logging, as a catalog of available operations
// and as the source of randomness.
var mlContext = new MLContext();
// Get a small dataset as an IEnumerable.
var enumerableOfData = GetSampleTemperatureData(5);
var data = mlContext.Data.LoadFromEnumerable(enumerableOfData);
// Before we apply a filter, examine all the records in the dataset.
Console.WriteLine($"Date\tTemperature");
foreach (var row in enumerableOfData)
{
Console.WriteLine($"{row.Date.ToString("d")}" +
$"\t{row.Temperature}");
}
Console.WriteLine();
// Expected output:
// Date Temperature
// 1/2/2012 36
// 1/3/2012 36
// 1/4/2012 34
// 1/5/2012 35
// 1/6/2012 35
// Shuffle the dataset.
var shuffledData = mlContext.Data.ShuffleRows(data, seed: 123);
// Look at the shuffled data and observe that the rows are in a
// randomized order.
var enumerable = mlContext.Data
.CreateEnumerable<SampleTemperatureData>(shuffledData,
reuseRowObject: true);
Console.WriteLine($"Date\tTemperature");
foreach (var row in enumerable)
{
Console.WriteLine($"{row.Date.ToString("d")}" +
$"\t{row.Temperature}");
}
// Expected output:
// Date Temperature
// 1/4/2012 34
// 1/2/2012 36
// 1/5/2012 35
// 1/3/2012 36
// 1/6/2012 35
}
private class SampleTemperatureData
{
public DateTime Date { get; set; }
public float Temperature { get; set; }
}
/// <summary>
/// Get a fake temperature dataset.
/// </summary>
/// <param name="exampleCount">The number of examples to return.</param>
/// <returns>An enumerable of <see cref="SampleTemperatureData"/>.</returns>
private static IEnumerable<SampleTemperatureData> GetSampleTemperatureData(
int exampleCount)
{
var rng = new Random(1234321);
var date = new DateTime(2012, 1, 1);
float temperature = 39.0f;
for (int i = 0; i < exampleCount; i++)
{
date = date.AddDays(1);
temperature += rng.Next(-5, 5);
yield return new SampleTemperatureData
{
Date = date,
Temperature =
temperature
};
}
}
}
}
Comentários
ShuffleRows(IDataView, Nullable<Int32>, Int32, Boolean) embaralhará as linhas de qualquer entrada IDataView usando uma abordagem de streaming. Para não carregar todo o conjunto de dados na memória, um pool de shufflePoolSize
linhas será usado para selecionar aleatoriamente linhas para saída. O pool é construído a partir das primeiras shufflePoolSize
linhas em input
. Em seguida, as linhas serão geradas aleatoriamente do pool e substituídas pela próxima linha de input
até que todas as linhas tenham sido geradas, resultando em uma nova IDataView do mesmo tamanho, input
mas com as linhas em uma ordem aleatória. Se a CanShuffle propriedade for input
verdadeira, ela também será lida no pool em uma ordem aleatória, oferecendo duas fontes de aleatoriedade.