ML с Python - выбор функций данных

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

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

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

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

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

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

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

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

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

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

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

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

Example

В этом примере мы будем использовать набор данных диабета индейцев пима, чтобы выбрать 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])

Output

[ 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 лучших атрибута с лучшими характеристиками из набора данных Pima Indians Diabetes до.

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 в качестве первых трех лучших характеристик. На выходе они отмечены цифрой 1.

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

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

пример

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

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 Indians Diabetes.

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]

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