Предварительная обработка данных для машинного обучения на Python

Опубликовано: 26 Июля, 2021

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

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

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

The Pima Indian diabetes dataset is used in each technique.
This is a binary classification problem where all of the attributes are numeric and have different scales.
It is a great example of a dataset that can benefit from pre-processing.
You can find this dataset on the UCI Machine Learning Repository webpage.
Note that the program might not run on Geeksforgeeks IDE, but it can run easily on your local python interpreter, provided, you have installed the required libraries.

1. Изменить масштаб данных
• Когда наши данные состоят из атрибутов с разным масштабом, многие алгоритмы машинного обучения могут выиграть от изменения масштаба атрибутов, чтобы все они имели одинаковый масштаб.
• Это полезно для алгоритмов оптимизации, используемых в ядре алгоритмов машинного обучения, таких как градиентный спуск.
• Это также полезно для алгоритмов, взвешивающих входные данные, таких как регрессия и нейронные сети, и алгоритмов, использующих меры расстояния, например, K-ближайших соседей.
• Мы можем масштабировать ваши данные с помощью scikit-learn, используя класс MinMaxScaler.

После масштабирования убедитесь, что все значения находятся в диапазоне от 0 до 1.

Выход
[[0,353 0,744 0,59 0,354 0,0 0,501 0,234 0,483]
 [0,059 0,427 0,541 0,293 0,0 0,396 0,117 0,167]
 [0,471 0,92 0,525 0. 0,0 0,347 0,254 0,183]
 [0,059 0,447 0,541 0,232 0,111 0,419 0,038 0,0]
 [0,0 0,688 0,328 0,354 0,199 0,642 0,944 0,2]]

2. Бинаризовать данные (сделать двоичными)
• Мы можем преобразовать наши данные, используя двоичный порог. Все значения выше порога помечены 1, а все равные или меньшие - 0.
• Это называется бинаризацией ваших данных или пороговым значением ваших данных. Это может быть полезно, когда у вас есть вероятность того, что вы хотите получить четкие значения. Это также полезно при разработке функций, и вы хотите добавить новые функции, которые указывают на что-то значимое.
• Мы можем создавать новые двоичные атрибуты в Python, используя scikit-learn с классом Binarizer.




# Python code for binarization
from sklearn.preprocessing import Binarizer
import pandas
import numpy
names = [ 'preg' , 'plas' , 'pres' , 'skin' , 'test' , 'mass' , 'pedi' , 'age' , 'class' ]
dataframe = pandas.read_csv(url, names = names)
array = dataframe.values
# separate array into input and output components
X = array[:, 0 : 8 ]
Y = array[:, 8 ]
binarizer = Binarizer(threshold = 0.0 ).fit(X)
binaryX = binarizer.transform(X)
# summarize transformed data
numpy.set_printoptions(precision = 3 )
print (binaryX[ 0 : 5 ,:])

Мы видим, что все значения, равные или меньшие 0, помечены 0, а все значения выше 0 помечены 1.

Выход
[[1. 1. 1. 1. 0. 1. 1. 1.]
 [1. 1. 1. 1. 0. 1. 1. 1.]
 [1. 1. 1. 0. 0. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 1. 1. 1. 1. 1. 1. 1.]]

3. Стандартизация данных
• Стандартизация - полезный метод преобразования атрибутов с гауссовым распределением и различными средними и стандартными отклонениями в стандартное гауссовское распределение со средним значением 0 и стандартным отклонением 1.
• Мы можем стандартизировать данные с помощью scikit-learn с классом StandardScaler.




# Python code to Standardize data (0 mean, 1 stdev)
from sklearn.preprocessing import StandardScaler
import pandas
import numpy
names = [ 'preg' , 'plas' , 'pres' , 'skin' , 'test' , 'mass' , 'pedi' , 'age' , 'class' ]
dataframe = pandas.read_csv(url, names = names)
array = dataframe.values
# separate array into input and output components
X = array[:, 0 : 8 ]
Y = array[:, 8 ]
scaler = StandardScaler().fit(X)
rescaledX = scaler.transform(X)
# summarize transformed data
numpy.set_printoptions(precision = 3 )
print (rescaledX[ 0 : 5 ,:])

Значения для каждого атрибута теперь имеют среднее значение 0 и стандартное отклонение 1.

Выход
[[0,64 0,848 0,15 0,907 -0,693 0,204 0,468 1,426]
 [-0,845 -1,123 -0,161 0,531 -0,693 -0,684 -0,365 -0,191]
 [1,234 1,944 -0,264 -1,288 -0,693 -1,103 0,604 -0,106]
 [-0,845 -0,998 -0,161 0,155 0,123 -0,494 -0,921 -1,042]
 [-1,142 0,504 -1,505 0,907 0,766 1,41 5,485 -0,02]]

Рекомендации :
https://www.analyticsvidhya.com/blog/2016/07/practical-guide-data-preprocessing-python-scikit-learn/
https://www.xenonstack.com/blog/data-preprocessing-data-wrangling-in-machine-learning-deep-learning

Эта статья предоставлена Абхишеком Шармой. Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.