Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
API'yi kullanarak işleme ve eğitim için ML.NET'a veri yüklemeyi öğrenin. Veriler başlangıçta dosyalarda veya veritabanları, JSON, XML veya bellek içi koleksiyonlar gibi diğer veri kaynaklarında depolanır.
Model Oluşturucusu kullanıyorsanız bkz . Eğitim verilerini Model Oluşturucusuna yükleme.
Veri modelini oluşturma
ML.NET, sınıflar aracılığıyla veri modelleri tanımlamanızı sağlar. Örneğin, aşağıdaki giriş verileri göz önünde bulundurulduğunda:
Size (Sq. ft.), HistoricalPrice1 ($), HistoricalPrice2 ($), HistoricalPrice3 ($), Current Price ($)
700, 100000, 3000000, 250000, 500000
1000, 600000, 400000, 650000, 700000
Aşağıdaki kod parçacığını temsil eden bir veri modeli oluşturun:
public class HousingData
{
[LoadColumn(0)]
public float Size { get; set; }
[LoadColumn(1, 3)]
[VectorType(3)]
public float[] HistoricalPrices { get; set; }
[LoadColumn(4)]
[ColumnName("Label")]
public float CurrentPrice { get; set; }
}
Veri modeline sütun öznitelikleriyle açıklama ekleme
Öznitelikler ML.NET veri modeli ve veri kaynağı hakkında daha fazla bilgi verir.
LoadColumn özniteliği, özelliklerinizin sütun dizinlerini belirtir.
Önemli
LoadColumn yalnızca bir dosyadan veri yüklenirken gereklidir.
Sütunları şu şekilde yükleyin:
- sınıfındaki
HousingDataveCurrentPricesgibiSizetek tek sütunlar. - Bir kerede vektör biçiminde, örneğin sınıfındaki
HousingDatagibiHistoricalPricesbirden çok sütun.
Vektör özelliğine sahipseniz, özniteliğini veri modelinizdeki özelliğe uygulayın VectorType . Vektördeki tüm öğeler aynı türde olmalıdır. Sütunların ayrı tutulması özellik mühendisliğinin kolay ve esnek olmasına olanak tanır, ancak çok sayıda sütun için tek tek sütunlar üzerinde çalışma, eğitim hızı üzerinde bir etkiye neden olur.
ML.NET sütun adları aracılığıyla çalışır. Bir sütunun adını özellik adından farklı bir adla değiştirmek istiyorsanız özniteliğini ColumnName kullanın. Bellek içi nesneler oluştururken, yine de özellik adını kullanarak nesneler oluşturursunuz. Ancak, veri işleme ve makine öğrenmesi modelleri derleme için ML.NET geçersiz kılar ve özniteliğinde sağlanan değerle özelliğine ColumnName başvurur.
Tek bir dosyadan veri yükleme
Bir dosyadan veri yüklemek için, yüklenecek verilerin veri modeliyle yöntemini kullanın LoadFromTextFile . separatorChar Parametre varsayılan olarak sekmeyle sınırlandırıldığından, bunu veri dosyanız için gerektiği gibi değiştirin. Dosyanızın üst bilgisi varsa, parametresini hasHeader true dosyasındaki ilk satırı yoksayacak şekilde ayarlayın ve ikinci satırdan veri yüklemeye başlayın.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("my-data-file.csv", separatorChar: ',', hasHeader: true);
Birden çok dosyadan veri yükleme
Verilerinizin birden çok dosyada depolanması durumunda, veri şeması aynı olduğu sürece ML.NET aynı dizinde veya birden çok dizinde bulunan birden çok dosyadan veri yüklemenize olanak tanır.
Tek bir dizindeki dosyalardan yükleme
Tüm veri dosyalarınız aynı dizinde olduğunda yönteminde LoadFromTextFile joker karakterler kullanın.
//Create MLContext
MLContext mlContext = new MLContext();
//Load Data File
IDataView data = mlContext.Data.LoadFromTextFile<HousingData>("Data/*", separatorChar: ',', hasHeader: true);
Birden çok dizindeki dosyalardan yükleme
Birden çok dizinden veri yüklemek için yöntemini kullanarak CreateTextLoader bir TextLoaderoluşturun. Ardından yöntemini kullanın TextLoader.Load ve tek tek dosya yollarını belirtin (joker karakterler kullanılamaz).
//Create MLContext
MLContext mlContext = new MLContext();
// Create TextLoader
TextLoader textLoader = mlContext.Data.CreateTextLoader<HousingData>(separatorChar: ',', hasHeader: true);
// Load Data
IDataView data = textLoader.Load("DataFolder/SubFolder1/1.txt", "DataFolder/SubFolder2/1.txt");
İlişkisel veritabanından veri yükleme
ML.NET SQL Server, Azure SQL Veritabanı, Oracle, SQLite, PostgreSQL, Progress, IBM DB2 ve daha birçok ilişkisel veritabanından System.Data veri yüklemeyi destekler.
Not
kullanmak DatabaseLoaderiçin System.Data.SqlClient NuGet paketine başvurun.
adlı House bir tablo ve aşağıdaki şemaya sahip bir veritabanı verilir:
CREATE TABLE [House] (
[HouseId] INT NOT NULL IDENTITY,
[Size] INT NOT NULL,
[NumBed] INT NOT NULL,
[Price] REAL NOT NULL
CONSTRAINT [PK_House] PRIMARY KEY ([HouseId])
);
Veriler gibi HouseDatabir sınıf tarafından modellenebilir:
public class HouseData
{
public float Size { get; set; }
public float NumBed { get; set; }
public float Price { get; set; }
}
Ardından, uygulamanızın içinde bir DatabaseLoaderoluşturun.
MLContext mlContext = new MLContext();
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<HouseData>();
veritabanında yürütülecek SQL komutunun yanı sıra bağlantı dizesi tanımlayın ve bir DatabaseSource örnek oluşturun. Bu örnek, dosya yolu olan bir LocalDB SQL Server veritabanı kullanır. Ancak DatabaseLoader, şirket içi ve buluttaki veritabanları için diğer geçerli bağlantı dizesi destekler.
Önemli
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Azure SQL'e bağlanıyorsanız önerilen kimlik doğrulama yöntemi Azure kaynakları için Yönetilen Kimlikler'dir.
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=<YOUR-DB-FILEPATH>;Database=<YOUR-DB-NAME>;Integrated Security=True;Connect Timeout=30";
string sqlCommand = "SELECT CAST(Size as REAL) as Size, CAST(NumBed as REAL) as NumBed, Price FROM House";
DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, sqlCommand);
Türünde Real olmayan sayısal verilerin olarak dönüştürülmesi Realgerekir. Tür Real , tek duyarlıklı kayan nokta değeri veya SingleML.NET algoritmalar tarafından beklenen giriş türü olarak temsil edilir. Bu örnekte ve Size NumBed sütunları veritabanındaki tamsayılardır. CAST Yerleşik işlevi kullanılarak işlevine Realdönüştürülür. Price Özelliği zaten türünde Realolduğundan olduğu gibi yüklenir.
Load yöntemini kullanarak verileri içine IDataViewyükleyin.
IDataView data = loader.Load(dbSource);
Görüntüleri yükleme
Bir dizinden görüntü verilerini yüklemek için önce görüntü yolunu ve etiketi içeren bir model oluşturun. ImagePath , veri kaynağı dizinindeki görüntünün mutlak yoludur. Label , gerçek görüntü dosyasının sınıfı veya kategorisidir.
public class ImageData
{
[LoadColumn(0)]
public string ImagePath;
[LoadColumn(1)]
public string Label;
}
public static IEnumerable<ImageData> LoadImagesFromDirectory(string folder,
bool useFolderNameAsLabel = true)
{
string[] files = Directory.GetFiles(folder, "*", searchOption: SearchOption.AllDirectories);
foreach (string file in files)
{
if (Path.GetExtension(file) != ".jpg")
continue;
string label = Path.GetFileName(file);
if (useFolderNameAsLabel)
label = Directory.GetParent(file).Name;
else
{
for (int index = 0; index < label.Length; index++)
{
if (!char.IsLetter(label[index]))
{
label = label.Substring(0, index);
break;
}
}
}
yield return new ImageData()
{
ImagePath = file,
Label = label
};
}
}
Ardından görüntüyü yükleyin:
IEnumerable<ImageData> images = LoadImagesFromDirectory(
folder: "your-image-directory-path",
useFolderNameAsLabel: true
);
Dizinden bellek içi ham görüntüleri yüklemek için ham görüntü bayt dizisini ve etiketini tutacak bir model oluşturun:
public class InMemoryImageData
{
[LoadColumn(0)]
public byte[] Image;
[LoadColumn(1)]
public string Label;
}
static IEnumerable<InMemoryImageData> LoadInMemoryImagesFromDirectory(
string folder,
bool useFolderNameAsLabel = true
)
{
string[] files = Directory.GetFiles(folder, "*",
searchOption: SearchOption.AllDirectories);
foreach (string file in files)
{
if (Path.GetExtension(file) != ".jpg")
continue;
string label = Path.GetFileName(file);
if (useFolderNameAsLabel)
label = Directory.GetParent(file).Name;
else
{
for (int index = 0; index < label.Length; index++)
{
if (!char.IsLetter(label[index]))
{
label = label.Substring(0, index);
break;
}
}
}
yield return new InMemoryImageData()
{
Image = File.ReadAllBytes(file),
Label = label
};
}
}
Diğer kaynaklardan veri yükleme
ML.NET, dosyalarda depolanan verileri yüklemeye ek olarak şunları içeren kaynaklardan veri yüklemeyi de destekler:
- Bellek için koleksiyonlar
- JSON/XML
Akış kaynaklarıyla çalışırken ML.NET girişin bellek içi koleksiyon biçiminde olmasını bekler. Bu nedenle, JSON/XML gibi kaynaklarla çalışırken verileri bellek içi bir koleksiyonda biçimlendirdiğinizden emin olun.
Aşağıdaki bellek içi koleksiyon göz önünde bulundurulduğunda:
HousingData[] inMemoryCollection = new HousingData[]
{
new HousingData
{
Size =700f,
HistoricalPrices = new float[]
{
100000f, 3000000f, 250000f
},
CurrentPrice = 500000f
},
new HousingData
{
Size =1000f,
HistoricalPrices = new float[]
{
600000f, 400000f, 650000f
},
CurrentPrice=700000f
}
};
yöntemiyle LoadFromEnumerable bellek içi koleksiyonu içine IDataView yükleyin:
Önemli
LoadFromEnumerable öğesinin IEnumerable yüklendiği iş parçacığı güvenli olduğunu varsayar.
// Create MLContext
MLContext mlContext = new MLContext();
//Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);