Com o novo dia vem nova força e novos pensamentos – Eleanor Roosevelt
We todos podem ter enfrentado este problema de identificar as características relacionadas a partir de um conjunto de dados e remover as características irrelevantes ou menos importantes com não contribuem muito para a nossa variável alvo, a fim de alcançar uma melhor precisão para o nosso modelo.
Selecção de características é um dos conceitos centrais na aprendizagem da máquina que tem um grande impacto no desempenho do seu modelo. As características de dados que você usa para treinar os seus modelos de aprendizagem da máquina têm uma enorme influência no desempenho que você pode alcançar.
As características relevantes ou parcialmente relevantes podem impactar negativamente o desempenho do modelo.
Selecção de características e limpeza de dados devem ser o primeiro e mais importante passo do seu modelo.
Neste post, você vai descobrir técnicas de selecção de características que você pode usar na aprendizagem da máquina.
Selecção de características é o processo onde selecciona automática ou manualmente as características que mais contribuem para a sua variável de previsão ou saída em que está interessado.
>
Disponibilizar características irrelevantes nos seus dados pode diminuir a precisão dos modelos e fazer o seu modelo aprender com base em características irrelevantes.
Como seleccionar características e quais são os benefícios de executar a selecção de características antes de modelar os seus dados?
– Reduz o sobreajuste: Menos dados redundantes significa menos oportunidades para tomar decisões baseadas no ruído.
– Melhora a Precisão: Menos dados enganosos significa que a precisão da modelagem melhora.
– Reduz o tempo de treinamento: menos pontos de dados reduzem a complexidade do algoritmo e os algoritmos treinam mais rápido.
Quero compartilhar minha experiência pessoal com isto.
Eu preparei um modelo seleccionando todas as funcionalidades e obtive uma precisão de cerca de 65% o que não é muito bom para um modelo preditivo e depois de fazer alguma selecção de funcionalidades e engenharia de funcionalidades sem fazer qualquer alteração lógica no código do meu modelo a minha precisão saltou para 81% o que é bastante impressionante
Agora você sabe porque é que eu digo que a selecção de funcionalidades deve ser o primeiro e mais importante passo do design do seu modelo.
Métodos de selecção de características:
Partilharei 3 técnicas de selecção de características que são fáceis de usar e que também dão bons resultados.
1. Seleção univariada
2. Importância do recurso
3.Matriz de Correlação com Heatmap
Vamos dar uma olhada nestas técnicas uma a uma com um exemplo
Pode baixar o conjunto de dados daquihttps://www.kaggle.com/iabhishekofficial/mobile-price-classification#train.csv
Descrição das variáveis no arquivo acima
battery_power: Energia total que uma bateria pode armazenar em um tempo medido em mAh
blue: Tem Bluetooth ou não
velocidade_do_relógio: a velocidade a que o microprocessador executa as instruções
dual_sim: Tem suporte duplo sim ou não
fc: Câmera frontal megapixels
four_g: Tem 4G ou não
int_memory: Memória Interna em Gigabytes
m_dep: Profundidade móvel em cm
mobile_wt: Peso do telemóvel em cm
n_cores: Número de núcleos do processador
pc: Câmera primária megapixels
px_altura
Altura da resolução pixel
px_largura: Largura da resolução pixel
>
ram: Memória de Acesso Aleatório em MegaBytes
sc_h: Altura da tela do celular em cm
sc_w: Largura da tela do celular em cm
talk_time: o maior tempo que uma única carga de bateria durará quando você estiver
three_g: Tem 3G ou não
touch_screen: Tem touch screen ou não
wifi: Tem wifi ou não
price_range: Esta é a variável alvo com valor 0(custo baixo), 1(custo médio), 2(custo alto) e 3(custo muito alto).
1. Seleção Univariada
Testes estatísticos podem ser usados para selecionar as características que têm a relação mais forte com a variável de saída.
A biblioteca scikit-learn fornece a classe SelectKBest que pode ser usada com um conjunto de testes estatísticos diferentes para selecionar um número específico de características.
O exemplo abaixo usa o teste estatístico chi-quadrado (chi²) para características não negativas para selecionar 10 das melhores características do conjunto de dados de previsão de faixa de preço móvel.
import pandas as pd
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2data = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range#apply SelectKBest class to extract top 10 best features
bestfeatures = SelectKBest(score_func=chi2, k=10)
fit = bestfeatures.fit(X,y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)
#concat two dataframes for better visualization
featureScores = pd.concat(,axis=1)
featureScores.columns = #naming the dataframe columns
print(featureScores.nlargest(10,'Score')) #print 10 best features
Importância das características
Pode obter a importância das características de cada característica do seu conjunto de dados usando a propriedade de importância das características do modelo.
A importância da característica dá-lhe uma pontuação para cada característica dos seus dados, quanto maior for a pontuação mais importante ou relevante é a característica para a sua variável de saída.
A importância da característica é uma classe incorporada que vem com os Classificadores Baseados em Árvore, vamos utilizar o Classificador Extra Árvore para extrair as 10 principais características para o conjunto de dados.
import pandas as pd
import numpy as np
data = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range
from sklearn.ensemble import ExtraTreesClassifier
import matplotlib.pyplot as plt
model = ExtraTreesClassifier()
model.fit(X,y)
print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers
#plot graph of feature importances for better visualization
feat_importances = pd.Series(model.feature_importances_, index=X.columns)
feat_importances.nlargest(10).plot(kind='barh')
plt.show()
3.Matriz de Correlação com o Heatmap
Correlação indica como as características estão relacionadas entre si ou com a variável alvo.
A correlação pode ser positiva (aumento em um valor de característica aumenta o valor da variável alvo) ou negativa (aumento em um valor de característica diminui o valor da variável alvo)
O mapa de calor facilita a identificação de quais características estão mais relacionadas com a variável alvo, vamos traçar o mapa de calor de características correlacionadas usando a biblioteca de origem do mar.
import pandas as pd
import numpy as np
import seaborn as snsdata = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range
#get correlations of each features in dataset
corrmat = data.corr()
top_corr_features = corrmat.index
plt.figure(figsize=(20,20))
#plot heat map
g=sns.heatmap(data.corr(),annot=True,cmap="RdYlGn")