[Sklearn] procesamiento de reducción de dimensionalidad PCA y SVD

Uno, el algoritmo de reducción de dimensionalidad en sklearn

Los algoritmos de reducción de dimensionalidad en sklearn están todos incluidos en la descomposición del módulo, que es esencialmente un módulo de descomposición matricial. En los últimos diez años, si desea hablar sobre el pionero del progreso de los algoritmos, se puede decir que la descomposición de matrices es única. La descomposición matricial se puede utilizar en reducción de dimensionalidad, aprendizaje profundo, análisis de clústeres, preprocesamiento de datos, aprendizaje de características de baja latitud, sistemas de recomendación, análisis de big data y otros campos.
Inserte la descripción de la imagen aquí

2. PCA y SVD

Hay una variedad de métodos de selección de características importantes en la ingeniería de características: filtrado de varianza. Si la varianza de una característica es pequeña, significa que es probable que una gran cantidad de valores de esta característica sean iguales (por ejemplo, el 90% son 1, solo el 10% son 0 o incluso el 100% son 1), entonces el valor de esta característica Para la muestra, no hay discriminación y esta función no contiene información válida. A partir de esta aplicación de la varianza, se puede inferir que si una característica tiene una gran varianza, significa que la característica contiene mucha información .
Por lo tanto, en la reducción de dimensionalidad,El indicador de medición de información utilizado por PCA es la varianza de la muestra, también conocida como varianza interpretable. Cuanto mayor es la varianza, más información lleva la característica.
Inserte la descripción de la imagen aquí
Var representa la varianza de una característica, n representa el tamaño de la muestra, xi representa el valor de cada muestra en una característica y xhat representa la media de esta lista de muestras.

2.1 Realización de la reducción de dimensionalidad

Inserte la descripción de la imagen aquí
En el paso 3, la técnica que usamos para encontrar n nuevos vectores de características para que los datos puedan comprimirse en algunas características sin perder demasiada información total esdescomposición de la matriz. PCA y SVD son dos algoritmos de reducción de dimensionalidad diferentes, pero ambos siguen el proceso anterior para lograr la reducción de dimensionalidad, pero los métodos de descomposición de la matriz en los dos algoritmos son diferentes y los indicadores de medición de la cantidad de información son diferentes.

1. PCA

PCA usa la varianza como una medida de la cantidad de información y la descomposición de los valores propios para encontrar el espacio V.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2.SVD

Inserte la descripción de la imagen aquí

3. La diferencia entre PCA y tecnología de selección de funciones

  • PCA es para comprimir las características existentes, y las características después de la reducción de dimensionalidad no son ninguna de la matriz de características original, sino una combinación de características.
  • Tecnología de selección de características: seleccione la característica con mayor contenido de información de las características existentes, y las características después de la selección aún se pueden interpretar.
    Por lo tanto: puedes imaginar,PCAgeneralNo aplicaenExplore la relación entre características y etiquetasModelo (como regresión lineal) porque la relación entre la nueva característica inexplicable y la etiqueta no es significativa. En los modelos de regresión lineal, utilizamos la selección de características.

Tres, implementación de código sklearn

3.1 PCA realiza una visualización de reducción de dimensionalidad en el conjunto de datos del iris

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA

iris = load_iris()
X=iris.data
y=iris.target
X.shape

Inserte la descripción de la imagen aquí

import pandas as pd
pd.DataFrame(X).head()

Inserte la descripción de la imagen aquí

# 使用PCA降到两维
tr_X = PCA(2).fit_transform(X)
tr_X

Inserte la descripción de la imagen aquí

color=['red','black','orange']
iris

Inserte la descripción de la imagen aquí

plt.figure()
for i in [0,1,2]:
    plt.scatter(tr_X[y==i, 0]
               , tr_X[y==i, 1]
               , c=color[i]
               , label=iris.target_names[i])
plt.legend()
plt.title('PCA of IRIS')
plt.show()

Inserte la descripción de la imagen aquí

#属性explained_variance_,查看降维后每个新特征向量上所带的信息量大小(可解释性方差的大小)
pca.explained_variance_#查看方差是否从大到小排列,第一个最大,依次减小

Inserte la descripción de la imagen aquí

#属性explained_variance_ratio,查看降维后每个新特征向量所占的信息量占原始数据总信息量的百分比
#又叫做可解释方差贡献率
pca.explained_variance_ratio_

Inserte la descripción de la imagen aquí

import numpy as np
pca_line = PCA().fit(X)
# pca_line.explained_variance_ratio_#array([0.92461872, 0.05306648, 0.01710261, 0.00521218])
plt.plot([1,2,3,4],np.cumsum(pca_line.explained_variance_ratio_))
plt.xticks([1,2,3,4]) #这是为了限制坐标轴显示为整数
plt.yticks([0,1])
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance ratio")
plt.show()

Inserte la descripción de la imagen aquí

3.2 PCA utiliza un algoritmo de bosque aleatorio para encontrar parámetros óptimos después de la reducción de dimensionalidad

from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data = pd.read_csv(r".\digit recognizor.csv")
X=data.iloc[:,1:]
y=data.iloc[:,0]
pca_line=PCA().fit(X)
print(pca_line.explained_variance_ratio_)

Datos después de la reducción de dimensionalidad:
Inserte la descripción de la imagen aquí

plt.figure()
plt.plot(np.cumsum(pca_line.explained_variance_ratio_))
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance ratio")
plt.show()

Inserte la descripción de la imagen aquí
Juzgando que es mejor reducir a un modelo de pocas dimensiones

score=[]
for i in range(1,101,10):
    tr_X=PCA(i).fit_transform(X)
    once = cross_val_score(RFC(n_estimators=10,random_state=0)
                           ,tr_X,y,cv=5).mean()
    score.append(once)
plt.figure(figsize=[20,5])
plt.plot(range(1,101,10),score)
plt.show()

Inserte la descripción de la imagen aquí
Encontrado entre 10-25:
método de validación cruzada!

score = []
for i in range(10,25):
    X_dr = PCA(i).fit_transform(X)
    once = cross_val_score(RFC(n_estimators=10,random_state=0),X_dr,y,cv=5).mean()
    score.append(once)
plt.figure(figsize=[20,5])
plt.plot(range(10,25),score)
plt.show()

Inserte la descripción de la imagen aquí
Descubrió que la reducción de dimensionalidad a 25 es la mejor

X_dr = PCA(22).fit_transform(X)
 
#======【TIME WARNING:1mins 30s】======#
cross_val_score(RFC(n_estimators=100,random_state=0),X_dr,y,cv=5).mean()#0.946524472295366

3.3 Utilice KNN para encontrar parámetros óptimos después de la reducción de dimensionalidad de PCA

¡El uso de validación cruzada!

#======【TIME WARNING: 】======#

score = []
for i in range(10):
    X_dr = PCA(22).fit_transform(X)
    once = cross_val_score(KNN(i+1),X_dr,y,cv=5).mean()
    score.append(once)
plt.figure(figsize=[20,5])
plt.plot(range(10),score)
plt.show()

Inserte la descripción de la imagen aquí
El parámetro óptimo es 2

Supongo que te gusta

Origin blog.csdn.net/qq_45617555/article/details/112412712
Recomendado
Clasificación