ML com Python - Seleção de recursos de dados

No capítulo anterior, vimos em detalhes como pré-processar e preparar dados para aprendizado de máquina. Neste capítulo, vamos entender em detalhes a seleção de recursos de dados e vários aspectos envolvidos nela.

Importância da seleção de recursos de dados

O desempenho do modelo de aprendizado de máquina é diretamente proporcional aos recursos de dados usados ​​para treiná-lo. O desempenho do modelo de ML será afetado negativamente se os recursos de dados fornecidos a ele forem irrelevantes. Por outro lado, o uso de recursos de dados relevantes pode aumentar a precisão do seu modelo de ML, especialmente a regressão linear e logística.

Agora surge a pergunta: o que é seleção automática de recursos? Pode ser definido como o processo com a ajuda do qual selecionamos os recursos em nossos dados que são mais relevantes para a variável de saída ou de predição na qual estamos interessados. Também é chamado de seleção de atributos.

A seguir estão alguns dos benefícios da seleção automática de recursos antes de modelar os dados -

  • Executar a seleção de recursos antes da modelagem de dados reduzirá o sobreajuste.

  • Realizar a seleção de recursos antes da modelagem de dados aumentará a precisão do modelo de ML.

  • Realizar a seleção de recursos antes da modelagem de dados reduzirá o tempo de treinamento

Técnicas de seleção de recursos

As seguintes são técnicas de seleção automática de recursos que podemos usar para modelar dados de ML em Python -

Seleção Univariada

Esta técnica de seleção de recursos é muito útil na seleção desses recursos, com a ajuda de testes estatísticos, tendo relação mais forte com as variáveis ​​de predição. Podemos implementar a técnica de seleção de recursos univariada com a ajuda de SelectKBest0class da biblioteca Python scikit-learn.

Example

Neste exemplo, usaremos o conjunto de dados Pima Indians Diabetes para selecionar 4 dos atributos com melhores características com a ajuda do teste estatístico do qui-quadrado.

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

Em seguida, vamos separar a matriz em componentes de entrada e saída -

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

As seguintes linhas de código selecionarão os melhores recursos do conjunto de dados -

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

Também podemos resumir os dados de saída de acordo com nossa escolha. Aqui, estamos definindo a precisão para 2 e mostrando os 4 atributos de dados com as melhores características junto com a melhor pontuação de cada atributo -

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. ]
]

Eliminação de recurso recursivo

Como o nome sugere, a técnica de seleção de recursos RFE (Eliminação de recurso recursivo) remove os atributos recursivamente e constrói o modelo com os atributos restantes. Podemos implementar a técnica de seleção de recursos RFE com a ajuda da classe RFE da biblioteca Python scikit-learn.

Exemplo

Neste exemplo, usaremos RFE com algoritmo de regressão logística para selecionar os 3 melhores atributos com as melhores características do conjunto de dados de Diabetes dos índios Pima a.

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

A seguir, separaremos a matriz em seus componentes de entrada e saída -

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

As seguintes linhas de código selecionarão os melhores recursos de um conjunto de dados -

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

Resultado

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

Podemos ver na saída acima, o RFE escolhe preg, mass e pedi como as 3 primeiras melhores características. Eles são marcados como 1 na saída.

Análise de Componentes Principais (PCA)

PCA, geralmente chamada de técnica de redução de dados, é uma técnica de seleção de recursos muito útil, pois usa álgebra linear para transformar o conjunto de dados em uma forma compactada. Podemos implementar a técnica de seleção de recursos do PCA com a ajuda da classe PCA da biblioteca Python scikit-learn. Podemos selecionar o número de componentes principais na saída.

Exemplo

Neste exemplo, usaremos o PCA para selecionar os melhores 3 componentes principais do conjunto de dados de Diabetes dos índios 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

Em seguida, vamos separar a matriz em componentes de entrada e saída -

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

As linhas de código a seguir extrairão recursos do conjunto de dados -

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

Resultado

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
   ]
]

Podemos observar a partir da saída acima que três componentes principais têm pouca semelhança com os dados de origem.

Importância do recurso

Como o nome sugere, a técnica de importância do recurso é usada para escolher os recursos de importância. Ele basicamente usa um classificador supervisionado treinado para selecionar recursos. Podemos implementar essa técnica de seleção de recursos com a ajuda da classe ExtraTreeClassifier da biblioteca Python scikit-learn.

Exemplo

Neste exemplo, usaremos ExtraTreeClassifier para selecionar recursos do conjunto de dados 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

Em seguida, vamos separar a matriz em componentes de entrada e saída -

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

As linhas de código a seguir extrairão recursos do conjunto de dados -

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

Resultado

[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]

A partir da saída, podemos observar que existem pontuações para cada atributo. Quanto maior a pontuação, maior é a importância desse atributo.