Они говорят данные это новый нефть , но мы не используем масло непосредственно из своего источника. Он должен быть обработан и очищен, прежде чем использовать его для разных целей.
То же самое относится и к данным, мы не используем его непосредственно из своего источника. Это также должно быть обработано.
Это может быть проблемой для начинающих в машинном обучении и науке о данных, потому что данные поступают из разных источников с разными типами данных. Поэтому вы не можете применять тот же метод очистки и обработки на разные типы данных.
Вы должны учиться и применять методы в зависимости от имеющих вас данных. Затем вы можете получить понимание или использовать его для обучения в машинном обучении или в глубоких алгоритмах обучения.
Прочитав эту статью, вы узнаете:
- Что такое особенность и выбор функций.
- Разные методы для обработки недостающих данных в вашем наборе данных.
- Разные методы для обработки непрерывных особенностей.
- Разные методы для обработки категорических функций.
- Разные методы для выбора функций.
Давайте начнем.
Функция инженерии относится к процессу выбора и Преобразование Переменные/функции в вашем наборе данных при создании Предсказательная модель Использование машинного обучения.
Поэтому вы должны извлечь функции из Сырой набор данных Вы собрали перед тренировкой ваших данных в алгоритмах машинного обучения. В противном случае будет трудно получить хорошие идеи в ваших данных.
Особенность инженерии имеет два гола:
- Подготовка правильного входного набора данных, совместимого с требованиями алгоритма обучения машины.
- Улучшение Производительность моделей машинного обучения.
Согласно опросу 80 данных ученых, проводимых Crowdflower, данные ученые тратят 60% их временного уборки и организации данных. Вот почему навыки навыков в области функции и отбора очень важны.
Вы можете прочитать его статью из следующей ссылки: « Несколько полезных вещей, которые нужно знать о машине обучения » Отказ
Теперь, когда вы знаете, почему вам нужно изучать различные методы для разработки функций, давайте начнем с учета различных методов для обработки недостающих данных.
Как обрабатывать недостающие данные
Обработка отсутствия данных очень важно, так как многие алгоритмы машин изучения не поддерживают данные с отсутствующими значениями. Если у вас отсутствуют значения в наборе данных, он может вызвать ошибки и плохую производительность с некоторыми алгоритмами машинного обучения. Вот список распространенных недостающих значений, которые вы можете найти в вашем наборе данных.
- N/A.
- ноль
- Пустой
- ?
- никто
- пустой
- –
- Нан
Давайте узнаем разные методы для решения проблемы отсутствующих данных.
Переменная удаление
Переменная удаление включает в себя переменные переменные (столбцы) с отсутствующими значениями в каждом конкретном случае. Этот метод имеет смысл, когда в переменной есть много недостающих значений, и если переменная имеет относительно меньшее значение.
Единственный случай, когда он стоит удалить переменную, заключается в том, когда его недостающие значения больше, чем 60% замечаний.
# import packages import numpy as np import pandas as pd # read dataset data = pd.read_csv('path/to/data') #set threshold threshold = 0.7 # dropping columns with missing value rate higher than threshold data = data[data.columns[data.isnull().mean() < threshold]]
В приведенном выше фрагменте кода вы можете посмотреть, как я использую NUMPY и PANDAS, чтобы загрузить набор данных и установить порог на 0,7 Отказ Это означает любой столбец, который имеет недостающие значения более чем 70% Из наблюдений будут сброшены из набора данных.
Я рекомендую вам установить свое пороговое значение в зависимости от размера вашего набора данных.
Среднее или среднее вменение
Другая общая техника заключается в использовании среднего или медиана не пропущенных наблюдений. Эта стратегия может быть применена к функции, которая имеет числовые данные.
# filling missing values with medians of the columns data = data.fillna(data.median())
В приведенном выше примере мы используем Средний метод заполнить недостающие значения в наборе данных.
Самое распространенное значение
Этот метод заменяет недостающие значения с помощью максимально произошло значение в столбце/функции. Это хороший вариант для обработки категорично столбцы/функции.
# filling missing values with medians of the columns data['column_name'].fillna(data['column_name'].value_counts().idxmax(). inplace=True)
Здесь мы используем value_counts () Способ от Pands для подсчета возникновения каждого уникального значения в столбце, а затем заполните отсутствующее значение с наиболее распространенным значением.
Как обрабатывать непрерывные функции
Непрерывные функции в наборе данных имеют другой диапазон значений. Общие примеры непрерывных особенностей являются возраст, зарплата, цены и высоты.
Очень важно обрабатывать непрерывные функции в вашем наборе данных до того, как вы поедите алгоритмы обучения машины. Если вы тренируете свою модель с другим диапазоном значений, модель не будет хорошо работать.
Что я имею в виду, когда я говорю в другом диапазоне ценностей? Допустим, у вас есть набор данных, который имеет две непрерывные функции, возраст и зарплата Отказ Диапазон возраста будет отличаться от диапазона зарплаты, и это может вызвать проблемы.
Вот некоторые общие методы для обработки непрерывных особенностей:
Нормализация Min-Max
Для каждого значения в функции нормализация MIN MAX вычитает минимальное значение в функции, а затем делится на его диапазон. Диапазон – это разница между оригинальным максимальным и оригинальным минимумом.
Наконец, он масштабирует все значения в фиксированном диапазоне между 0 и 1
Вы можете использовать Minmaxscaler Метод от Scikit – Узнайте, что преобразует функции путем масштабирования каждую функцию до данного диапазона:
from sklearn.preprocessing import MinMaxScaler import numpy as np # 4 samples/observations and 2 variables/features data = np.array([[4, 6], [11, 34], [10, 17], [1, 5]]) # create scaler method scaler = MinMaxScaler(feature_range=(0,1)) # fit and transform the data scaled_data = scaler.fit_transform(data) print(scaled_data) # [[0.3 0.03448276] # [1. 1. ] # [0.9 0.4137931 ] # [0. 0. ]]
Как видите, наши данные были преобразованы, и диапазон между 0 и 1 Отказ
Стандартизация
Стандартизация гарантирует, что каждая функция имеет среднее значение 0 и стандартное отклонение 1 принося все особенности на одинаковую величину.
Если стандартное отклонение функций является разные Их ассортимент также будет отличаться.
Вы можете использовать Стандартный планшет Метод от Scikit – научитесь стандартизировать особенности, удалив среднее и масштабирование к стандартному отклонению 1 :
from sklearn.preprocessing import StandardScaler import numpy as np # 4 samples/observations and 2 variables/features data = np.array([[4, 1], [11, 1], [10, 4], [1, 11]]) # create scaler method scaler = StandardScaler() # fit and transform the data scaled_data = scaler.fit_transform(data) print(scaled_data) # [[-0.60192927 -0.79558708] # [ 1.08347268 -0.79558708] # [ 0.84270097 -0.06119901] # [-1.32424438 1.65237317]]
Давайте проверим, что среднее значение для каждой функции (столбец) – 0 :
print(scaled_data.mean(axis=0))
[0. 0.]
И что стандартное отклонение каждой функции (столбец) является 1 :
print(scaled_data.std(axis=0))
[1. 1.]
Как обрабатывать категориальные функции
Категорические функции Представляют типы данных, которые могут быть разделены на группы. Например, положители и уровни образования.
Любые не численные значения должны быть преобразован целые числа или плавать, чтобы использовать в большинстве библиотек машинного обучения.
Общие методы для обработки категориальных особенностей:
Кодировка на этикетке
Кодировка на этикетке просто преобразует каждая категорическое значение в столбце на номер.
Рекомендуется использовать кодировку этикетки для преобразования их в двоичные переменные.
В следующем примере вы узнаете, как использовать Lableencoder От Scikit – научитесь преобразовывать категориальные значения в двоичный:
# import packages import numpy as np import pandas as pd from sklearn.preprocessing import LabelEncoder # intialise data of lists. data = {'Gender':['male', 'female', 'female', 'male','male'], 'Country':['Tanzania','Kenya', 'Tanzania', 'Tanzania','Kenya']} # Create DataFrame data = pd.DataFrame(data) # create label encoder object le = LabelEncoder() data['Gender']= le.fit_transform(data['Gender']) data['Country']= le.fit_transform(data['Country']) print(data)
Одностороннее кодирование
Настоящим наиболее распространенным способом представления категориальных переменных используют одно горячие кодировки или односторонние методы кодирования, также известные как фиктивные переменные.
Идея фиктивных переменных – это заменить категорическую переменную одним или несколькими новыми функциями, которые могут иметь значения 0 и 1.
В следующем примере мы будем использовать энкодеры из библиотеки Scikit-Learn. LabelenCoder поможет нам создать целочисленное кодирование этикеток из наших данных и Одинhotencoder создаст одно горячее кодирование целочисленных закодированных значений.
# import packages import numpy as np from sklearn.preprocessing import OneHotEncoder, LabelEncoder # define example data = np.array(['cold', 'cold', 'warm', 'cold', 'hot', 'hot', 'warm', 'cold', 'warm', 'hot']) # integer encode label_encoder = LabelEncoder() #fit and transform the data integer_encoded = label_encoder.fit_transform(data) print(integer_encoded) # one-hot encode onehot_encoder = OneHotEncoder(sparse=False) #reshape the data integer_encoded = integer_encoded.reshape(len(integer_encoded), 1) #fit and transform the data onehot_encoded = onehot_encoder.fit_transform(integer_encoded) print(onehot_encoded)
Это выход целочисленные закодированы По LabelenCoder Метод:
[0 0 2 0 1 1 2 0 2 1]
И это выход Onehot_encoded По Одинhotencoder Метод:
[[1. 0. 0.] [1. 0. 0.] [0. 0. 1.] [1. 0. 0.] [0. 1. 0.] [0. 1. 0.] [0. 0. 1.] [1. 0. 0.] [0. 0. 1.] [0. 1. 0.]]
Выбор функций – это процесс, в котором вы автоматически или вручную выбираете функции, которые вносят наибольшее значение для вашей переменной прогнозирования или вывода.
Наличие нерелевантных функций в ваших данных может уменьшить Точность моделей обучения машины.
Основные причины использования выбора функций:
- Это позволяет алгоритму обучения машине тренироваться быстрее.
- Это уменьшает сложность модели и облегчает интерпретацию.
- Он улучшает точность модели, если выбрано правильное подмножество.
- Это уменьшает переопределение.
Обычные методы для выбора функций являются:
Univariate Selection
Статистические тесты могут помочь выбрать независимые функции, которые имеют самые сильные отношения с целевой функцией в вашем наборе данных. Например, тест в квадрату Chi.
Библиотека Scikit-Learn предоставляет Selectkbest Класс, который можно использовать с набором различных статистических тестов, чтобы выбрать определенное количество функций.
В следующем примере мы используем Selectkbest Класс с тестом Chi-Squipped, чтобы найти лучшую функцию для набора данных IRIS:
# Load packages from sklearn.datasets import load_iris from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 # Load iris data iris_dataset = load_iris() # Create features and target X = iris_dataset.data y = iris_dataset.target # Convert to categorical data by converting data to integers X = X.astype(int) # Two features with highest chi-squared statistics are selected chi2_features = SelectKBest(chi2, k = 2) X_kbest_features = chi2_features.fit_transform(X, y) # Reduced features print('Original feature number:', X.shape[1]) print('Reduced feature number:', X_kbest_features.shape[1])
Оригинальный номер функции: 4 Снижение номера функции: 2
Как вы можете видеть, что Chi-Squared тест помогает нам выбрать Два важных независимых особенности Из оригинала 4, которые имеют самые сильные отношения с целевой особенностью.
Вы можете узнать больше о Chi-Squared Test здесь: ” Нежное введение в тест в квадрату Chi для изучения машины “ Отказ
Важность особенности
Важность функции дает вам счет для каждой особенности ваших данных. Чем выше оценка, тем больше важно или актуально Эта функция заключается в вашей целевой функции.
Важность функции – это встроенный класс, который поставляется с классификаторами на основе деревьев, таких как:
- Случайные классификаторы лесов
- Дополнительные классификаторы дерева
В следующем примере мы будем обучать дополнительное классификатор дерева в набор данных IRIS и используете встроенный класс .feature_imports_ вычислить важность каждой особенности:
# Load libraries from sklearn.datasets import load_iris import matplotlib.pyplot as plt from sklearn.ensemble import ExtraTreesClassifier # Load iris data iris_dataset = load_iris() # Create features and target X = iris_dataset.data y = iris_dataset.target # Convert to categorical data by converting data to integers X = X.astype(int) # Building the model extra_tree_forest = ExtraTreesClassifier(n_estimators = 5, criterion ='entropy', max_features = 2) # Training the model extra_tree_forest.fit(X, y) # Computing the importance of each feature feature_importance = extra_tree_forest.feature_importances_ # Normalizing the individual importances feature_importance_normalized = np.std([tree.feature_importances_ for tree in extra_tree_forest.estimators_], axis = 0) # Plotting a Bar Graph to compare the models plt.bar(iris_dataset.feature_names, feature_importance_normalized) plt.xlabel('Feature Labels') plt.ylabel('Feature Importances') plt.title('Comparison of different Feature Importances') plt.show()
Вышеуказанный график показывает, что наиболее важные особенности являются Длина лепестки (см) и Ширина лепесток (см) , и что наименее важная особенность – Ширина Sepal (CMS) Отказ Это означает, что вы можете использовать самые важные функции для тренировки вашей модели и получить лучшую производительность.
Корреляционная матричная тепломапа
Корреляция показывает, как функции связаны друг с другом или целевой функцией.
Корреляция может быть положительной (увеличение одного значения объекта увеличивает значение целевой переменной) или отрицательной (увеличение одного значения элемента уменьшается значение целевой переменной).
В следующем примере мы будем использовать набор данных в Бостон-Хаусе из библиотеки Scikit-Learn и Корр () Метод из пандов, чтобы найти попарную корреляцию всех функций в DataFrame:
# Load libraries from sklearn.datasets import load_boston import matplotlib.pyplot as plt import seaborn as sns # load boston data boston_dataset = load_boston() # create a daframe for boston data boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names) # Convert to categorical data by converting data to integers #X = X.astype(int) #ploting the heatmap for correlation ax = sns.heatmap(boston.corr().round(2), annot=True)
Коэффициент корреляции колеблется от -1 до 1. Если значение находится близко к 1, это означает, что существует сильная положительная корреляция между двумя особенностями. Когда он близок к -1, особенности имеют сильную отрицательную корреляцию. На рисунке выше, вы можете увидеть, что Налог и Рад Особенности имеют S Тронская положительная корреляция и Дес и Нокс Особенности есть Сильная негативная корреляция.
Если вы узнаете, что в вашем наборе данных есть некоторые функции, которые коррелируют друг с другом, означает, что они передают ту же информацию. Рекомендуется удалить один из них.
Вы можете узнать больше об этом здесь: В надзоренном обучении, почему плохо иметь коррелированные особенности?
Заключение
Методы, которые я объяснил в этой статье, поможет вам подготовить большую часть Структурированные наборы данных у тебя есть. Но если вы работаете над неструктурированными набором данных, такими как изображения, текст и аудио, вам придется изучать различные методы, которые не объяснены в этой статье.
Следующие статьи помогут вам узнать, как приготовить изображения или текстовые наборы данных для ваших проектов обучения машин:
- Лучшие практики для приготовления и увеличения данных изображения для CNNS-JASON Brownleee
- Изображение Предварительная обработка – князь Canuma
- Предварительная обработка текста NLP: практическое руководство и шаблон – Jiao Weng
- Как использовать TextHero для подготовки текстового набора данных для вашего NLP Project-Davis David
Поздравляем 👏👏 , Вы доверяли до конца этой статьи! Я надеюсь, что вы узнали что-то новое, что помогут вам на вашем следующем проекте по изучению машин или науки о данных.
Если вы узнали что-то новое или наслаждались чтением этой статьи, пожалуйста, поделитесь этим, чтобы другие могли его увидеть. До этого увидимся в следующем посте!
Вы также можете найти меня в Twitter @Davis_mcdavid Отказ
И вы можете прочитать больше статей, как это здесь.