Removendo colunas com poucas observações
Depois de fazer bastante feature engineering, vale a pena dar um passo atrás e olhar o que você criou. Se você usou alguma técnica de automação nos seus recursos categóricos, como explodir valores ou OneHot Encoding, pode descobrir que agora tem centenas de novos recursos binários. Embora seleção de features seja assunto para outro curso inteiro, há alguns passos rápidos que você pode seguir para reduzir a dimensionalidade do seu conjunto de dados.
Neste exercício, vamos remover colunas que tenham menos de 30 observações. Trinta é um número mínimo comum de observações para significância estatística. Qualquer valor menor que isso e os relacionamentos causam overfitting por pura coincidência!
OBSERVAÇÃO: Os dados estão disponíveis no dataframe df.
Este exercício faz parte do curso
Feature Engineering com PySpark
Instruções do exercício
- Usando o
forfornecido que itera pela lista de colunas binárias, calcule asumdos valores na coluna usando a funçãoagg. Usecollect()para executar o cálculo imediatamente e salve o resultado emobs_count. - Compare
obs_countcomobs_threshold; a instruçãoifdeve ser verdadeira seobs_countfor menor ou igual aobs_threshold. - Remova as colunas que foram adicionadas à lista
cols_to_removeusandodrop(). Lembre-se de que*permite descompactar a lista. - Imprima as dimensões iniciais e finais dos dataframes do PySpark usando
count()para o número de registros elen()emdf.columnsounew_df.columnspara encontrar o número de colunas.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
obs_threshold = 30
cols_to_remove = list()
# Inspect first 10 binary columns in list
for col in binary_cols[0:10]:
# Count the number of 1 values in the binary column
obs_count = df.____({col: ____}).____()[0][0]
# If less than our observation threshold, remove
if ____ ____ ____:
cols_to_remove.append(col)
# Drop columns and print starting and ending dataframe shapes
new_df = df.____(*____)
print('Rows: ' + str(df.____()) + ' Columns: ' + str(____(df.____)))
print('Rows: ' + str(new_df.____()) + ' Columns: ' + str(____(new_df.____)))