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.