| File: Dynamic\DataOperations\LoadingSvmLight.cs | Web Access |
| Project: src\docs\samples\Microsoft.ML.Samples\Microsoft.ML.Samples.csproj (Microsoft.ML.Samples) |
using System; using System.IO; using System.Text; using Microsoft.ML; using Microsoft.ML.Data; namespace Samples.Dynamic.DataOperations { public static class LoadingSvmLight { // This examples shows how to load data with SvmLightLoader. public static void Example() { // Create a random SVM light format file. var random = new Random(42); var dataDirectoryName = "DataDir"; Directory.CreateDirectory(dataDirectoryName); var fileName = Path.Combine(dataDirectoryName, $"SVM_Data.csv"); using (var fs = File.CreateText(fileName)) { // Write random lines in SVM light format for (int line = 0; line < 10; line++) { var sb = new StringBuilder(); if (random.NextDouble() > 0.5) sb.Append("1 "); else sb.Append("-1 "); if (line % 2 == 0) sb.Append("cost:1 "); else sb.Append("cost:2 "); for (int i = 1; i <= 10; i++) { if (random.NextDouble() > 0.5) continue; sb.Append($"{i}:{random.NextDouble()} "); } fs.WriteLine(sb.ToString()); } } // Create an SvmLightLoader. var mlContext = new MLContext(); var file = new MultiFileSource(fileName); var loader = mlContext.Data.CreateSvmLightLoader(dataSample: file); // Load a single file from path. var svmData = loader.Load(file); PrintSchema(svmData); // Expected Output: // Column Label type Single // Column Weight type Single // Column GroupId type Key<UInt64, 0 - 18446744073709551613> // Column Comment type String // Column Features type Vector<Single, 10> PrintData(svmData); // Expected Output: // 1 1 0 0 0.2625927 0 0 0.7612506 0.2573214 0 0.3809696 0.5174511 // -1 1 0 0 0 0.7051522 0 0 0.7111546 0.9062127 0 0 // -1 1 0 0 0 0.535722 0 0 0.1491191 0.05100901 0 0 // -1 1 0 0.6481459 0.04449836 0 0 0.4203662 0 0 0.01325378 0.2674384 // -1 1 0 0 0.7978093 0.5134962 0.008952909 0 0.003074009 0.6541431 0.9135142 0 // -1 1 0 0.3727672 0.4369507 0 0 0.2973725 0 0 0 0.8816807 // 1 1 0 0.1031429 0.3332489 0 0.1346936 0.5916625 0 0 0 0 // 1 1 0 0 0 0.3454075 0 0.2197472 0.03848049 0.5923384 0.09373277 0 // -1 1 0 0.7511514 0 0.0420841 0 0 0.9262196 0 0.545344 0 // 1 1 0 0.02958358 0.9334617 0 0 0.8833956 0.2947684 0 0 0 // If the loader is created without a data sample we need to specify the number of features expected in the file. loader = mlContext.Data.CreateSvmLightLoader(inputSize: 10); svmData = loader.Load(file); PrintSchema(svmData); PrintData(svmData); } private static void PrintSchema(IDataView svmData) { foreach (var col in svmData.Schema) Console.WriteLine($"Column {col.Name} type {col.Type}"); } private static void PrintData(IDataView svmData) { using (var cursor = svmData.GetRowCursor(svmData.Schema)) { var labelGetter = cursor.GetGetter<float>(svmData.Schema["Label"]); var weightGetter = cursor.GetGetter<float>(svmData.Schema["Weight"]); var featuresGetter = cursor.GetGetter<VBuffer<float>>(svmData.Schema["Features"]); VBuffer<float> features = default; while (cursor.MoveNext()) { float label = default; labelGetter(ref label); float weight = default; weightGetter(ref weight); featuresGetter(ref features); Console.WriteLine($"{label} {weight} {string.Join(' ', features.DenseValues())}"); } } } } }