Учебники

Машинное обучение — выбор характеристик данных

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

Важность выбора функции данных

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

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

Ниже приведены некоторые преимущества автоматического выбора функций перед моделированием данных.

  • Выполнение выбора функции перед моделированием данных уменьшит перенастройку.

  • Выбор функции перед моделированием данных повысит точность модели ML.

  • Выбор функций перед моделированием данных сократит время обучения

Выполнение выбора функции перед моделированием данных уменьшит перенастройку.

Выбор функции перед моделированием данных повысит точность модели ML.

Выбор функций перед моделированием данных сократит время обучения

Методы выбора функций

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

Одномерный выбор

Этот метод выбора функций очень полезен при выборе этих функций с помощью статистического тестирования, которые наиболее тесно связаны с переменными прогнозирования. Мы можем реализовать метод выбора одномерного объекта с помощью SelectKBest0class библиотеки Python scikit-learn.

пример

В этом примере мы будем использовать набор данных Pima Indians Diabetes, чтобы выбрать 4 из атрибутов, имеющих лучшие характеристики, с помощью статистического критерия хи-квадрат.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Далее мы разделим массив на компоненты ввода и вывода —

X = array[:,0:8]
Y = array[:,8]

Следующие строки кода выберут лучшие функции из набора данных —

test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)

Мы также можем суммировать данные для вывода по нашему выбору. Здесь мы устанавливаем точность до 2 и показываем 4 атрибута данных с лучшими характеристиками вместе с лучшим показателем каждого атрибута —

set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])

Выход

[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[[148.  0. 33.6 50. ]
[  85.  0. 26.6 31. ]
[ 183.  0. 23.3 32. ]
[  89. 94. 28.1 21. ]]

Удаление рекурсивных функций

Как следует из названия, метод выбора функций RFE (рекурсивное исключение объектов) рекурсивно удаляет атрибуты и строит модель с оставшимися атрибутами. Мы можем реализовать метод выбора функций RFE с помощью класса RFE библиотеки Python scikit-learn .

пример

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

from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Далее мы разделим массив на входные и выходные компоненты —

X = array[:,0:8]
Y = array[:,8]

Следующие строки кода выберут лучшие функции из набора данных —

model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")

Выход

Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]

В приведенном выше выводе видно, что RFE выбирает preg, mass и pedi в качестве первых 3 лучших функций. Они отмечены как 1 на выходе.

Анализ основных компонентов (PCA)

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

пример

В этом примере мы будем использовать PCA, чтобы выбрать 3 лучших компонента из набора данных диабета индейцев Pima.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Далее мы разделим массив на компоненты ввода и вывода —

X = array[:,0:8]
Y = array[:,8]

Следующие строки кода извлекут функции из набора данных —

pca = PCA(n_components = 3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)

Выход

Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[[ -2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02
9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
[ 2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02
-9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01]
[ -2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01
2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]]

Из вышеприведенного вывода мы можем наблюдать, что 3 главных компонента мало похожи на исходные данные.

Важность функции

Как следует из названия, техника важности функций используется для выбора важных функций. Он в основном использует обученный контролируемый классификатор для выбора функций. Мы можем реализовать эту технику выбора функций с помощью класса ExtraTreeClassifier библиотеки Python scikit-learn.

пример

В этом примере мы будем использовать ExtraTreeClassifier для выбора функций из набора данных диабета индейцев Pima.

from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values

Далее мы разделим массив на компоненты ввода и вывода —

X = array[:,0:8]
Y = array[:,8]

Следующие строки кода извлекут функции из набора данных —

model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)

Выход

[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]

Из результатов мы можем наблюдать, что есть оценки для каждого атрибута. Чем выше оценка, тем выше важность этого атрибута.