última atualização em 17 de agosto de 2020
a redução de dimensionalidade é uma técnica de aprendizagem não supervisionada.
no entanto, ele pode ser usado como um passo de pré-processamento de transformação de dados para algoritmos de aprendizagem de máquina sobre classificação e regressão de dados de modelagem preditiva com algoritmos de Aprendizagem Supervisionados.
Existem muitos algoritmos de redução de dimensionalidade para escolher e nenhum melhor algoritmo para todos os casos. Em vez disso, é uma boa ideia explorar uma gama de algoritmos de redução de dimensionalidade e diferentes configurações para cada algoritmo.
neste tutorial, você vai descobrir como ajustar e avaliar algoritmos de redução de dimensionalidade de topo em Python.
Após completar este tutorial, você saberá:
- redução de dimensionalidade procura uma representação de menor dimensão dos dados de entrada numéricos que preservam as relações salientes nos dados.
- Existem muitos algoritmos de redução de dimensionalidade diferentes e nenhum método único melhor para todos os conjuntos de dados.
- Como implementar, ajustar e avaliar a redução de dimensionalidade de topo em Python com a biblioteca de aprendizagem de máquinas scikit-learn.
kick-start o seu projecto com a minha nova preparação de dados do livro para a aprendizagem por máquina, incluindo tutoriais passo-a-passo e os ficheiros de código-fonte Python para todos os exemplos.vamos começar.
Redução de Dimensionalidade Algoritmos Com a linguagem Python
Foto por Bernard Spragg. NZ, alguns direitos reservados.
- tutorial Overview
- Redução de Dimensionalidade
- deseja começar com a preparação de dados?
- algoritmos de redução da dimensionalidade
- Métodos de Álgebra Linear
- Colector de Métodos de Aprendizagem
- exemplos de redução de dimensionalidade
- Scikit-Learn Library Installation
- dataset de classificação
- Principal Component Analysis
- Singular Value Decomposition
- Linear Discriminant Analysis
- Isomap Embedding
- Locally Linear Embedding
- Modified Locally Linear Embedding
- Further Reading
- Tutoriais
- APIs
- resumo
- Get a Handle on Modern Data Preparation!
- preparar os dados de aprendizagem por máquina em minutos
- Bring Modern Data Preparation Techniques to Your Machine Learning Projects
tutorial Overview
este tutorial é dividido em três partes; eles são:
- Redução de Dimensionalidade
- Redução de Dimensionalidade Algoritmos
- Exemplos de Redução de Dimensionalidade
- Scikit-Aprender Instalação da Biblioteca
- Classificação do conjunto de dados
- Análise de Componente Principal
- Decomposição em valores Singulares
- Linear Discriminant Analysis
- Isomap Incorporação
- Localmente Linear Incorporação
- Modificado Localmente Linear Incorporação
Redução de Dimensionalidade
redução de Dimensionalidade refere-se a técnicas para reduzir o número de variáveis de entrada nos dados de treinamento.
ao lidar com dados dimensionais elevados, é frequentemente útil reduzir a dimensionalidade projetando os dados para um subespaço dimensional inferior que captura a “essência” dos dados. Isto é chamado redução de dimensionalidade.
— Page 11, Machine Learning: a Probabilistic Perspective, 2012.
high-dimensionality might mean hundreds, thousands, or even millions of input variables.
menos dimensões de entrada muitas vezes significa, correspondentemente, menos parâmetros ou uma estrutura mais simples no modelo de aprendizagem da máquina, referido como graus de liberdade. Um modelo com demasiados graus de liberdade é susceptível de sobrecarregar o conjunto de dados de formação e pode não funcionar bem com novos dados.
é desejável ter modelos simples que generalizem bem, e por sua vez, dados de entrada com poucas variáveis de entrada. Isto é particularmente verdadeiro para modelos lineares onde o número de Entradas e os graus de liberdade do modelo são muitas vezes intimamente relacionados.
redução de dimensionalidade é uma técnica de preparação de dados realizada em dados antes da modelagem. Ele pode ser realizado após a limpeza de dados e escala de dados e antes de treinar um modelo preditivo.
… a redução da dimensionalidade produz uma representação mais compacta e mais facilmente interpretável do conceito-alvo, focando a atenção do utilizador nas variáveis mais relevantes.
— Page 289, Data Mining: Practical Machine Learning Tools and Techniques, 4th edition, 2016.
Como tal, qualquer redução de dimensionalidade realizada em dados de treinamento também deve ser realizada em novos dados, tais como um conjunto de dados de teste, um conjunto de dados de validação e dados ao fazer uma previsão com o modelo final.
deseja começar com a preparação de dados?
tome o meu curso livre de estoiro de e-mail de 7 dias agora (com o código de exemplo).
Clique para se inscrever e também obter uma versão ebook PDF livre do curso.
baixe o seu Mini-curso gratuito
algoritmos de redução da dimensionalidade
Existem muitos algoritmos que podem ser usados para a redução da dimensionalidade.
duas classes principais de métodos são aqueles extraídos da álgebra linear e aqueles extraídos da aprendizagem múltipla.
Métodos de Álgebra Linear
métodos de fatoração de matriz desenhados a partir do campo da álgebra linear podem ser usados para a dimensionalidade.
para mais informações sobre a factorização da matriz, consulte o tutorial:
- Uma Suave Introdução ao Matrix Factorization para Machine Learning
Alguns dos métodos mais populares incluem:
- Análise de Componentes Principais
- Decomposição em valores Singulares
- Não Negativo Matrix Factorization
Colector de Métodos de Aprendizagem
Colector de métodos de aprendizagem procurar um tridimensional projeção de alta dimensional de entrada que captura as principais propriedades dos dados de entrada.alguns dos métodos mais populares incluem::
- Isomap Incorporação
- Localmente Linear Incorporação
- Escalonamento Multidimensional
- Espectral Incorporação
- t-distribuídos Estocástico Vizinho Incorporação
Cada algoritmo oferece uma abordagem diferente para o desafio de descobrir relações naturais em dados em dimensões inferiores.
não há melhor algoritmo de redução de dimensionalidade, e nenhuma maneira fácil de encontrar o melhor algoritmo para seus dados sem usar experimentos controlados.
neste tutorial, vamos rever como usar cada subconjunto destes algoritmos de redução de dimensionalidade populares da biblioteca scikit-learn.
os exemplos irão fornecer a base para que você copie os exemplos e teste os métodos em seus próprios dados.
não vamos mergulhar na teoria por trás de como os algoritmos funcionam ou compará-los diretamente. Para um bom ponto de partida sobre este tópico, veja:
- sinais em decomposição em componentes, scikit-learn API.aprendizagem múltipla, API de scikit-learn.vamos mergulhar.
exemplos de redução de dimensionalidade
nesta secção, vamos rever como usar algoritmos de redução de dimensionalidade populares em scikit-learn.
isto inclui um exemplo de usar a técnica de redução de dimensionalidade como uma transformação de dados em um pipeline de modelagem e avaliar um modelo adequado nos dados.
os exemplos são projetados para você copiar-colar em seu próprio projeto e aplicar os métodos para seus próprios dados. Existem alguns algoritmos disponíveis na biblioteca scikit-learn que não são demonstrados porque eles não podem ser usados como uma transformação de dados diretamente dada a natureza do algoritmo.como tal, vamos usar um conjunto de dados de classificação sintética em cada exemplo.
Scikit-Learn Library Installation
First, let’s install the library.
não salte este passo, pois terá de garantir que tem a versão mais recente instalada.
pode instalar a biblioteca scikit-learn usando o instalador Pip Python, como se segue:
1sudo pip install scikit-learnFor additional installation instructions specific to your platform, see:
- Installing scikit-learn
Next, let’s confirm that the library is installed and you are using a modern version.
Run the following script to print the library version number.
123# check scikit-learn versionimport sklearnprint(sklearn.__version__)Running the example, you should see the following version number or higher.
10.23.0dataset de classificação
usaremos a função make_classification() para criar um conjunto de dados de classificação binário de teste.
O conjunto de dados terá 1000 exemplos com 20 funcionalidades de entrada, 10 das quais são informativas e 10 das quais redundantes. Isto oferece uma oportunidade para cada técnica de identificar e remover recursos de entrada redundantes.
A semente aleatória fixa para o gerador de números pseudorandom garante que geramos o mesmo conjunto de dados sintéticos cada vez que o código é executado.
An example of creating and summarizing the synthetic classification dataset is listed below.
123456# synthetic classification datasetfrom sklearn.conjuntos de dados de importação make_classification# define conjunto de dadosX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# resumir o conjunto de dadosprint(X. forma, y.forma)Executando o exemplo cria o conjunto de dados e informa o número de linhas e colunas correspondentes as nossas expectativas.
1(1000, 20) (1000,)It is a binary classification task and we will evaluate a LogisticRegression model after each dimensionality reduction transform.
o modelo será avaliado utilizando o padrão-ouro de 10 vezes a validação cruzada estratificada repetida. A precisão da classificação média e do desvio-padrão em todas as dobras e repetições será comunicada.
o exemplo abaixo avalia o modelo no conjunto de dados brutos como um ponto de comparação.
12345678910111213141516# avaliar o modelo de regressão logística em matérias de dadosfrom numpy import significafrom numpy importar o stddo sklearn.os conjuntos de dados importam a make_classificaçãodo sklearn.model_selection import cross_val_scorefrom sklearn.model_ selection importar Repetedstratifiedkfolddo sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# define the modelmodel = LogisticRegression()# evaluate modelcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)# report performanceprint(‘Accuracy: %.3f (%.3f)’ % (média(n_scores), std(n_scores)))Executando o exemplo avalia a regressão logística sobre as matérias conjunto de dados com todos os 20 colunas, obtendo uma classificação de precisão de cerca de 82,4 por cento.
uma transformação de redução de dimensionalidade bem sucedida nestes dados deve resultar num modelo com maior precisão do que esta linha de base, embora isso possa não ser possível com todas as técnicas.
nota: Nós não estamos tentando “resolver” este conjunto de dados, apenas fornecer exemplos de trabalho que você pode usar como ponto de partida.
1Accuracy: 0.824 (0.034)Next, we can start looking at examples of dimensionality reduction algorithms applied to this dataset.
I have made some minimal attempts to tune each method to the dataset. Cada método de redução de dimensionalidade será configurado para reduzir as 20 colunas de entrada para 10, sempre que possível.
usaremos um Pipeline para combinar a transformação de dados e o modelo em uma unidade atômica que pode ser avaliada usando o procedimento de validação cruzada; por exemplo:
1234…# define the pipelinesteps =model = Pipeline(steps=steps)Let’s get started.
Can you get a better result for one of the algorithms?
Let me know in the comments below.Principal Component Analysis
Principal Component Analysis, or PCA, might be the most popular technique for dimensionality reduction with denso data (few zero values).
para mais informações sobre como o PCA funciona, consulte o tutorial:
- Como calcular a análise Principal do componente (PCA) a partir do zero em Python
a biblioteca scikit-learn fornece a implementação da classe PCA da principal Análise do componente que pode ser usada como uma transformação de dados de redução de dimensionalidade. O argumento “n_components” pode ser definido para configurar o número de dimensões desejadas na saída da transformada.
o exemplo completo de avaliação de um modelo com redução de dimensionalidade PCA está listado abaixo.
12345678910111213141516171819# avaliar pca com regressão logística algoritmo para classificaçãoda média das importações numpyda DST das importações numpyda sklearn.os conjuntos de dados importam a make_classificaçãodo sklearn.model_selection import cross_val_scorefrom sklearn.model_ selection importar Repetedstratifiedkfolddo sklearn.gasoduto de importaçãode sklearn.decomposição importar PCAde sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# define the pipelinesteps =model = Pipeline(steps=steps)# evaluate modelcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)# report performanceprint(‘Accuracy: %.3f (%.3f)’ % (média(n_scores), std(n_scores)))Executando o exemplo avalia a modelagem de pipeline com redução de dimensionalidade e uma regressão logística modelo de previsão.Nota: os seus resultados podem variar, dada a natureza estocástica do algoritmo ou procedimento de avaliação, ou diferenças na precisão numérica. Considere executar o exemplo algumas vezes e compare o resultado médio.
neste caso, não vemos qualquer elevação no desempenho do modelo ao usar a transformação PCA.
1Accuracy: 0.824 (0.034)Singular Value Decomposition
Singular Value Decomposition, or SVD, is one of the most popular techniques for dimensionality reduction for sparse data (data with many zero values).
para mais informações sobre como a SVD funciona, veja o tutorial:
- Como calcular a SVD a partir do zero com Python
a biblioteca scikit-learn fornece a implementação truncada da classe SVD de decomposição do valor Singular que pode ser usada como uma transformação de dados de redução de dimensionalidade. O argumento “n_components” pode ser definido para configurar o número de dimensões desejadas na saída da transformada.
o exemplo completo de avaliar um modelo com redução de dimensionalidade SVD está listado abaixo.
12345678910111213141516171819# avaliar svd com regressão logística algoritmo para classificaçãoda média das importações numpyda DST das importações numpyda sklearn.os conjuntos de dados importam a make_classificaçãodo sklearn.model_selection import cross_val_scorefrom sklearn.model_ selection importar Repetedstratifiedkfolddo sklearn.gasoduto de importaçãode sklearn.decomposition import TruncatedSVDfrom sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# define the pipelinesteps =model = Pipeline(steps=steps)# evaluate modelcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)# report performanceprint(‘Accuracy: %.3f (%.3f)’ % (média(n_scores), std(n_scores)))Executando o exemplo avalia a modelagem de pipeline com redução de dimensionalidade e uma regressão logística modelo de previsão.Nota: os seus resultados podem variar, dada a natureza estocástica do algoritmo ou procedimento de avaliação, ou diferenças na precisão numérica. Considere executar o exemplo algumas vezes e compare o resultado médio.
neste caso, não vemos qualquer elevação no desempenho do modelo usando a transformação SVD.
1Accuracy: 0.824 (0.034)Linear Discriminant Analysis
Linear Discriminant Analysis, or LDA, is a multi-class classification algorithm that can be used for dimensionality reduction.
O número de dimensões para a projecção é limitado a 1 E C-1, sendo C O número de classes. Neste caso, nosso conjunto de dados é um problema de classificação binária (duas classes), limitando o número de dimensões a 1.
Para mais LDA para redução de dimensionalidade, veja o tutorial:
- Análise Discriminante Linear para Redução de Dimensionalidade em Python
O scikit-aprender biblioteca fornece o LinearDiscriminantAnalysis classe aplicação de Análise Discriminante Linear que pode ser usado como uma redução de dimensionalidade de transformação de dados. O argumento “n_components” pode ser definido para configurar o número de dimensões desejadas na saída da transformada.
o exemplo completo de avaliação de um modelo com redução de dimensionalidade LDA está listado abaixo.
12345678910111213141516171819# avaliar lda algoritmo regressão logística para classificaçãoda média das importações numpyda DST das importações numpyda sklearn.os conjuntos de dados importam a make_classificaçãodo sklearn.model_selection import cross_val_scorefrom sklearn.model_ selection importar Repetedstratifiedkfolddo sklearn.gasoduto de importaçãode sklearn.discriminant_analysis importar LinearDiscriminantAnalysisa partir de sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# define the pipelinesteps =model = Pipeline(steps=steps)# evaluate modelcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)# report performanceprint(‘Accuracy: %.3f (%.3f)’ % (média(n_scores), std(n_scores)))Executando o exemplo avalia a modelagem de pipeline com redução de dimensionalidade e uma regressão logística modelo de previsão.Nota: os seus resultados podem variar, dada a natureza estocástica do algoritmo ou procedimento de avaliação, ou diferenças na precisão numérica. Considere executar o exemplo algumas vezes e compare o resultado médio.
neste caso, podemos ver um ligeiro aumento no desempenho em comparação com o ajuste de base nos dados brutos.
1Accuracy: 0.825 (0.034)Isomap Embedding
Isomap Embedding, or Isomap, creates an embedding of the dataset and attempts to preserve the relationships in the dataset.
a biblioteca scikit-learn fornece a implementação da classe Isomap de incorporação de Isomap que pode ser usada como uma transformada de dados de redução de dimensionalidade. O argumento “n_components” pode ser definido para configurar o número de dimensões desejadas na saída da transformada.
o exemplo completo de avaliar um modelo com redução de dimensionalidade SVD está listado abaixo.
12345678910111213141516171819# avaliar isomap com regressão logística algoritmo para classificaçãoda média das importações numpyda DST das importações numpyda sklearn.os conjuntos de dados importam a make_classificaçãodo sklearn.model_selection import cross_val_scorefrom sklearn.model_ selection importar Repetedstratifiedkfolddo sklearn.gasoduto de importaçãode sklearn.manifold import Isomapfrom sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# define the pipelinesteps =model = Pipeline(steps=steps)# evaluate modelcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)# report performanceprint(‘Accuracy: %.3f (%.3f)’ % (média(n_scores), std(n_scores)))Executando o exemplo avalia a modelagem de pipeline com redução de dimensionalidade e uma regressão logística modelo de previsão.Nota: os seus resultados podem variar, dada a natureza estocástica do algoritmo ou procedimento de avaliação, ou diferenças na precisão numérica. Considere executar o exemplo algumas vezes e compare o resultado médio.
neste caso, podemos ver uma elevação no desempenho com a transformação de dados do Isomap em comparação com o ajuste de base nos dados brutos.
1Accuracy: 0.888 (0.029)Locally Linear Embedding
Locally Linear Embedding, or LLE, creates an embedding of the dataset and attempts to preserve the relationships between neighborhoods in the dataset.
a biblioteca scikit-learn fornece a implementação de classe Locallylinearmbedding de incorporação localmente Linear que pode ser usada como uma transformação de dados de redução de dimensionalidade. O argumento “n_components” pode ser definido para configurar o número de dimensões desejadas na saída da transformada
O exemplo completo de avaliar um modelo com redução de dimensionalidade LLE está listado abaixo.
12345678910111213141516171819# avaliar lle e regressões logísticas para a taxonomiade numpy import mean
de numpy import stdde sklearn.os conjuntos de dados importam a make_classificaçãodo sklearn.model_selection import cross_val_scorefrom sklearn.model_ selection importar Repetedstratifiedkfolddo sklearn.gasoduto de importaçãode sklearn.manifold import Locallylinearmbeddingfrom sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# define the pipelinesteps =model = Pipeline(steps=steps)# evaluate modelcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)# report performanceprint(‘Accuracy: %.3f (%.3f)’ % (média(n_scores), std(n_scores)))Executando o exemplo avalia a modelagem de pipeline com redução de dimensionalidade e uma regressão logística modelo de previsão.Nota: os seus resultados podem variar, dada a natureza estocástica do algoritmo ou procedimento de avaliação, ou diferenças na precisão numérica. Considere executar o exemplo algumas vezes e compare o resultado médio.
neste caso, podemos ver uma elevação no desempenho com a transformação de dados LLE em comparação com o ajuste de base nos dados brutos.
1Accuracy: 0.886 (0.028)Modified Locally Linear Embedding
Modified Locally Linear Embedding, or Modified LLE, is an extension of Locally Linear Embedding that creates multiple weighting vectors for each neighborhood.
a biblioteca scikit-learn fornece a implementação de classe LocallyLinearEmbedding de incorporação localmente Linear modificada que pode ser usada como uma transformação de dados de redução de dimensionalidade. O argumento” método “deve ser definido como” modificado “e o argumento” n_componentes “pode ser definido para configurar o número de dimensões desejadas na saída da transformada que deve ser menor que o argumento “n_ vizinhos”.
o exemplo completo de avaliação de um modelo com redução de dimensionalidade lle modificada está listado abaixo.
12345678910111213141516171819# avaliar modificado lle e regressões logísticas para classificaçãoda média das importações numpyda DST das importações numpyda sklearn.os conjuntos de dados importam a make_classificaçãodo sklearn.model_selection import cross_val_scorefrom sklearn.model_ selection importar Repetedstratifiedkfolddo sklearn.gasoduto de importaçãode sklearn.manifold import Locallylinearmbeddingfrom sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=7)# define the pipelinesteps =model = Pipeline(steps=steps)# evaluate modelcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)# report performanceprint(‘Accuracy: %.3f (%.3f)’ % (média(n_scores), std(n_scores)))Executando o exemplo avalia a modelagem de pipeline com redução de dimensionalidade e uma regressão logística modelo de previsão.Nota: os seus resultados podem variar, dada a natureza estocástica do algoritmo ou procedimento de avaliação, ou diferenças na precisão numérica. Considere executar o exemplo algumas vezes e compare o resultado médio.
neste caso, podemos ver uma elevação no desempenho com a transformação de dados lle modificada em comparação com o ajuste de base nos dados brutos.
1Accuracy: 0.846 (0.036)Further Reading
This section provides more resources on the topic if you are looking to go deeper.
Tutoriais
- Introdução à Redução de Dimensionalidade para Machine Learning
- Análise de Componentes Principais para Redução de Dimensionalidade em Python
- Decomposição em valores Singulares para Redução de Dimensionalidade em Python
- Análise Discriminante Linear para Redução de Dimensionalidade em Python
APIs
- sinais de Decomposição em componentes, scikit-aprender API.aprendizagem múltipla, API de scikit-learn.
resumo
neste tutorial, você descobriu como encaixar e avaliar algoritmos de redução de dimensionalidade de topo em Python.
especificamente, você aprendeu:
- redução da dimensionalidade procura uma representação de menor dimensão dos dados de entrada numéricos que preserva as relações salientes nos dados.
- Existem muitos algoritmos de redução de dimensionalidade diferentes e nenhum método único melhor para todos os conjuntos de dados.
- Como implementar, ajustar e avaliar a redução de dimensionalidade de topo em Python com a biblioteca de aprendizagem de máquinas scikit-learn.tem alguma pergunta?Faça suas perguntas nos comentários abaixo e farei o meu melhor para responder.
Get a Handle on Modern Data Preparation!
preparar os dados de aprendizagem por máquina em minutos
…with just a few lines of python code
Discover how in my new Ebook:
Data Preparation for Machine Learningit provides self-study tutorials with full working code on:
Feature Selection, RFE, Data Cleaning, Data Transforms, Scaling, Dimensionality Reduction, and much more…Bring Modern Data Preparation Techniques to
Your Machine Learning ProjectsSee What’s Inside
Tweet Share