ML.NET сочетает прогноз и предсказаниеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ML.NET сочетает прогноз и предсказание

Сообщение Anonymous »

Я делаю простое приложение для обнаружения сетевых аномалий в .NET.
Приложение собирает необработанные пакеты, затем анализирует их и определяет, произошла ли потенциальная атака (с помощью статического алгоритма). На данный момент я реализовал алгоритм для обнаружения атаки TCP Flood на основе флагов SYN и ACK в TCP-пакетах. Помимо анализа, приложение сохраняет данные в файл по указанной схеме:
SOURCE_IP | DESTINATION_IP | TIMESTAMP (TIMEVAL) | SYN | ACK
10.0.0.5 | 10.0.0.10 | 1726332243,275925 | 1 | 1

Я хочу реализовать модель машинного обучения (с помощью ML.NET), которая прогнозирует и предсказывает, произошла ли атака, на основе данных, которые уже были собраны в текущем «сеансе».
Я попробовал добавить еще один столбец «IsAttack», который был моим ярлыком. После этого я смоделировал атаку TCP Flood и подготовил данные для обучения, заполнив последний столбец. Но модель ml также включает в себя предыдущие метки, все которые в текущем сеансе равны «0», поэтому она не работает должным образом. С другой стороны, когда я пытался спрогнозировать сценарий, ML брал данные только из одной строки. Есть идеи, как я могу совместить предсказание и прогноз? Или любое другое решение?
Сгенерированная модель машинного обучения:
public partial class TCPFloodMLDetector
{
///
/// model input class for TCPFloodMLDetector.
///
#region model input class
public class ModelInput
{
[LoadColumn(0)]
public string SourceAddress { get; set; }

[LoadColumn(1)]
public string DestinationAddress { get; set; }

[LoadColumn(2)]
public double Timeval { get; set; }

[LoadColumn(3)]
public bool SYN { get; set; }

[LoadColumn(4)]
public bool ACK { get; set; }

[LoadColumn(5)]
[ColumnName(@"col5")]
public Single IsAttack { get; set; }
}

#endregion

///
/// model output class for TCPFloodMLDetector.
///
#region model output class
public class ModelOutput
{
[ColumnName(@"col5")]
public float[] Col5 { get; set; }

[ColumnName(@"col5_LB")]
public float[] Col5_LB { get; set; }

[ColumnName(@"col5_UB")]
public float[] Col5_UB { get; set; }

}

#endregion

private static string MLNetModelPath = Path.GetFullPath(@"D:\Projects\NetworkAnalyzer\\Models\TCPFloodMLDetector.mlnet");

public static readonly Lazy PredictEngine = new Lazy(() => CreatePredictEngine(), true);

///
/// Use this method to predict on .
///
///
model input.
///
public static ModelOutput Predict(ModelInput? input = null, int? horizon = null)
{
var predEngine = PredictEngine.Value;
return predEngine.Predict(input, horizon);
}

private static TimeSeriesPredictionEngine CreatePredictEngine()
{
var mlContext = new MLContext();
ITransformer mlModel = mlContext.Model.Load(MLNetModelPath, out var schema);
return mlModel.CreateTimeSeriesEngine(mlContext);
}
}

Я использую это в функции обнаружения, которая запускается каждую секунду:
public async Task Detect()
{
try
{
var context = new MLContext();
var data = context.Data.LoadFromTextFile("tcpflood.txt",
hasHeader: false, separatorChar: '|');

TCPFloodMLDetector.LoadIDataViewFromFile(context, "tcpflood.txt",
'|', false, true);

// predict with default option.
var modelOutput = TCPFloodMLDetector.Predict();
Console.WriteLine(string.Join(",", modelOutput.Col5));

// predict next 5 periods
modelOutput = TCPFloodMLDetector.Predict(horizon: 5);
Console.WriteLine(string.Join(",", modelOutput.Col5));
}
catch (Exception ex)
{

}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... nd-predict
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»