Создавайте результаты машинного обучения с помощью ML.Net и Python с примером кода.
Машинное обучение стало неотъемлемой частью многих предприятий и отраслей, позволяя организациям использовать данные и идеи для принятия более эффективных решений. Одной из самых популярных сред для машинного обучения является Python благодаря простоте использования и обилию мощных библиотек. Однако для тех, кто предпочитает среду .NET, Microsoft разработала ML.Net, платформу машинного обучения, которая легко интегрируется с языками .NET, такими как C# и F#.
В этом сообщении блога мы рассмотрим, как использовать ML.Net и Python вместе для создания моделей машинного обучения, которые могут анализировать и прогнозировать данные.
Требования
- Импорт данных
- Чистые данные
- Создать модель
- Модель поезда
- Сделать прогноз
- Улучшать
Иды
Для начала вам понадобятся приведенные ниже IDE, и позже вы сможете установить зависимости с ними.
Python для машинного обучения
Откройте терминал в VSCode (Ctrl + Shift + ~) и выполните приведенную ниже команду.
python -mpip install -U
pandas python -mpip 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 и найдите прекрасную работу