Рубрики
Без рубрики

Учебное пособие машинного обучения – Функция инженерии и отбор функций для начинающих

Автор оригинала: Davis David.

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

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

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

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

Прочитав эту статью, вы узнаете:

  • Что такое особенность и выбор функций.
  • Разные методы для обработки недостающих данных в вашем наборе данных.
  • Разные методы для обработки непрерывных особенностей.
  • Разные методы для обработки категорических функций.
  • Разные методы для выбора функций.

Давайте начнем.

Функция инженерии относится к процессу выбора и Преобразование Переменные/функции в вашем наборе данных при создании Предсказательная модель Использование машинного обучения.

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

Особенность инженерии имеет два гола:

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

Согласно опросу 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 Тронская положительная корреляция и Дес и Нокс Особенности есть Сильная негативная корреляция.

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

Вы можете узнать больше об этом здесь: В надзоренном обучении, почему плохо иметь коррелированные особенности?

Заключение

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

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

Поздравляем 👏👏 , Вы доверяли до конца этой статьи! Я надеюсь, что вы узнали что-то новое, что помогут вам на вашем следующем проекте по изучению машин или науки о данных.

Если вы узнали что-то новое или наслаждались чтением этой статьи, пожалуйста, поделитесь этим, чтобы другие могли его увидеть. До этого увидимся в следующем посте!

Вы также можете найти меня в Twitter @Davis_mcdavid Отказ

И вы можете прочитать больше статей, как это здесь.