Создавайте результаты машинного обучения с помощью ML.Net и Python с примером кода.

Машинное обучение стало неотъемлемой частью многих предприятий и отраслей, позволяя организациям использовать данные и идеи для принятия более эффективных решений. Одной из самых популярных сред для машинного обучения является Python благодаря простоте использования и обилию мощных библиотек. Однако для тех, кто предпочитает среду .NET, Microsoft разработала ML.Net, платформу машинного обучения, которая легко интегрируется с языками .NET, такими как C# и F#.

В этом сообщении блога мы рассмотрим, как использовать ML.Net и Python вместе для создания моделей машинного обучения, которые могут анализировать и прогнозировать данные.

Требования

  • Импорт данных
  • Чистые данные
  • Создать модель
  • Модель поезда
  • Сделать прогноз
  • Улучшать

Иды

Для начала вам понадобятся приведенные ниже IDE, и позже вы сможете установить зависимости с ними.

Python для машинного обучения

Откройте терминал в VSCode (Ctrl + Shift + ~) и выполните приведенную ниже команду.

python -m pip install -U pandas
python -m pip install -U scikit-learn

Это должно установить библиотеки pandas и scikit-learn, написанные для языка программирования Python для обработки и анализа данных.

Импорт данных

Затем нужно импортировать набор данных для анализа. Я создал простой набор с клиентами, покупающими некоторые продукты, где он получил возраст, пол и продукт, и это только образец.

Далее мы напишем код на Python.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Import data from the CSV file
data = pd.read_csv("sales_data.csv")

# Clean data by removing missing values and outliers
data.dropna(inplace=True)
data = data[(data["age"] > 18) & (data["age"] < 65)]

# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(data.drop("gender", axis=1), data["target"], test_size=0.2)

# Build logistic regression model
model = LogisticRegression()

# Train model on training data
model.fit(X_train, y_train)

# Make predictions on testing data
y_pred = model.predict(X_test)

# Evaluate model performance using accuracy score
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy)

Сначала мы импортируем необходимые библиотеки для нашего проекта. Мы используем pandas для загрузки и обработки наших данных, а scikit-learn — для выполнения операций машинного обучения.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

Затем мы загружаем наши данные из файла CSV с помощью pandas. Результирующий фрейм данных имеет три столбца: Age, Gender и Product (это столбец, который мы хотим предсказать).

data = pd.read_csv(‘sales_data.csv')

Чтобы очистить наши данные, мы удаляем все строки с отсутствующими значениями, используя метод dropna панд. Мы также фильтруем наши данные, чтобы удалить все строки, в которых столбец Age выходит за пределы диапазона от 18 до 65, используя логическое индексирование.

data = data.dropna()
data = data[(data['Age'] >= 18) & (data['Age'] <= 65)]

Мы разделили наши данные на наборы для обучения и тестирования, используя train_test_split метод scikit-learn. По умолчанию этот метод разбивает данные на 75 % обучающих данных и 25 % тестовых данных.

train_data, test_data, train_target, test_target = train_test_split(data[['Age', 'Gender', 'Product']], data['Target'], test_size=0.25)

Затем мы определяем нашу модель, используя класс LogisticRegression scikit-learn. В этом примере мы используем гиперпараметры по умолчанию для модели логистической регрессии.

model = LogisticRegression()

Мы подгоняем модель к нашим обучающим данным, используя метод fit. Это обучает модель на обучающих данных и возвращает обученную модель, которую можно использовать для прогнозирования.

model.fit(train_data, train_target)

Мы используем обученную модель, чтобы делать прогнозы на основе данных тестирования, используя метод predict. При этом создается набор прогнозируемых целевых значений, которые можно сравнить с фактическими целевыми значениями для оценки производительности модели.

predictions = model.predict(test_data)

Наконец, мы используем различные функции scikit-learn для вычисления показателей производительности модели, включая точность, достоверность, полноту и оценку F1.

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

accuracy = accuracy_score(test_target, predictions)
precision = precision_score(test_target, predictions)
recall = recall_score(test_target, predictions)
f1 = f1_score(test_target, predictions)

Эти показатели можно использовать для оценки производительности модели и внесения улучшений, если это необходимо.

ML.Net для машинного обучения

А вот пример кода для импорта и очистки данных в ML.Net, построения и обучения модели с использованием API ModelBuilder и прогнозирования новых данных:

using Microsoft.ML;
using Microsoft.ML.Data;

// Define data class
public class Data
{
    [LoadColumn(0)] public float Age;
    [LoadColumn(1)] public float Gender;
    [LoadColumn(2)] public float Product;
}

// Import data from CSV file
var mlContext = new MLContext();
var data = mlContext.Data.LoadFromTextFile<Data>("sales_data.csv", separatorChar: ',');

// Clean data by removing missing values and outliers
var pipeline = mlContext.Transforms.DropMissingValues()
    .Append(mlContext.Transforms.FilterByColumn("Age", lowerBound: 18, upperBound: 65));

// Split data into training and testing sets
var trainTestSplit = mlContext.Data.TrainTestSplit(data);
var trainData = trainTestSplit.TrainSet;
var testData = trainTestSplit.TestSet;

// Build logistic regression model
var modelBuilder = mlContext.Model;
var model = modelBuilder
    .SelectColumns("Target")
    .Append(mlContext.Transforms.Concatenate("Gender", "Age", "Product"))
    .Append(mlContext.BinaryClassification.Trainers.LogisticRegression())
    .Fit(trainData);

// Make predictions on testing data
var predictions = model.Transform(testData);

// Evaluate model performance using accuracy metric
var metrics = mlContext.BinaryClassification.Evaluate(predictions);
Console.WriteLine($"Accuracy: {metrics.Accuracy}");

Во-первых, мы определяем класс C# Data для представления данных, с которыми мы будем работать. В этом случае наши данные имеют три столбца: Age, Gender и Product (это столбец, который мы хотим предсказать). Мы используем атрибут LoadColumn, чтобы указать индекс каждого столбца в файле CSV.

public class Data
{
    [LoadColumn(0)] public float Age;
    [LoadColumn(1)] public float Gender;
    [LoadColumn(2)] public float Product;
}

Затем мы используем класс MLContext для создания экземпляра контекста ML.Net. Этот контекст используется для выполнения операций машинного обучения, таких как загрузка данных, преобразование данных, обучение моделей и создание прогнозов.

var mlContext = new MLContext();

Затем мы загружаем наши данные из файла CSV, используя метод LoadFromTextFile. Определенный ранее класс Data используется в качестве аргумента типа для указания схемы данных.

var data = mlContext.Data.LoadFromTextFile<Data>("sales_data.csv", separatorChar: ',');

Чтобы очистить наши данные, мы создаем конвейер преобразований данных, используя свойство Transforms файла MLContext. В этом примере мы используем метод DropMissingValues для удаления всех строк с отсутствующими значениями и метод FilterByColumn для удаления всех строк, в которых столбец Age выходит за пределы диапазона от 18 до 65.

var pipeline = mlContext.Transforms.DropMissingValues()
    .Append(mlContext.Transforms.FilterByColumn("Age", lowerBound: 18, upperBound: 65));

Мы разделяем наши данные на наборы для обучения и тестирования, используя метод TrainTestSplit свойства Data массива MLContext. По умолчанию этот метод разбивает данные на 80 % обучающих данных и 20 % тестовых данных.

var trainTestSplit = mlContext.Data.TrainTestSplit(data);
var trainData = trainTestSplit.TrainSet;
var testData = trainTestSplit.TestSet;

Затем мы определяем нашу модель, используя ModelBuilder API класса MLContext. В этом примере мы используем метод SelectColumns для выбора столбца Target, метод Concatenate для объединения столбцов Age, Gender и Product в один столбец признаков и метод LogisticRegression для определения модели бинарной классификации.

var modelBuilder = mlContext.Model;
var model = modelBuilder
    .SelectColumns("Target")
    .Append(mlContext.Transforms.Concatenate("Age", "Gender", "Product"))
    .Append(mlContext.BinaryClassification.Trainers.LogisticRegression())
    .Fit(trainData);

Мы подгоняем модель к нашим обучающим данным, используя метод Fit. Это обучает модель на обучающих данных и возвращает обученную модель, которую можно использовать для прогнозирования.

var model = modelBuilder
    // ...
    .Fit(trainData);

Мы используем обученную модель, чтобы делать прогнозы на основе данных тестирования, используя метод Transform. При этом создается набор прогнозируемых целевых значений, которые можно сравнить с фактическими целевыми значениями для оценки производительности модели.

var predictions = model.Transform(testData);

Наконец, мы используем метод BinaryClassification.Evaluate the для вычисления различных показателей производительности модели, включая точность, точность и полноту.

Заключение

В Python мы использовали pandas для загрузки и обработки наших данных, а scikit-learn — для выполнения операций машинного обучения. Мы загрузили наши данные из CSV-файла, очистили их, отбросив пропущенные значения и отфильтровав строки с недопустимыми возрастами, разделили их на наборы для обучения и тестирования, определили и обучили нашу модель логистической регрессии, сделали прогнозы на наших данных тестирования и оценили производительность. нашей модели с использованием различных показателей.

В ML.NET мы использовали те же данные, но выполняли немного другие операции, чтобы подготовить их к машинному обучению. Мы определили схему данных с помощью класса C#, загрузили наши данные из CSV-файла, очистили их, отбрасывая недостающие значения, разделили их на наборы для обучения и тестирования с помощью встроенной функции, определили и обучили нашу модель логистической регрессии, сделали прогнозы на наши данные тестирования и оценили производительность нашей модели с помощью метода Evaluate.

И Python, и ML.NET предлагают мощные и гибкие инструменты для выполнения машинного обучения, и каждый из них имеет свои сильные и слабые стороны. Понимая основы машинного обучения и доступные нам инструменты, мы можем принимать обоснованные решения о том, какие инструменты использовать для конкретной задачи, и получать точные и надежные прогнозы.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу