Análisis de datos Proceso completo de Python

Tabla de contenido

1. Lectura de datos

1.1 Llamada

1.2 Lectura de archivos comunes

2. Preprocesamiento de datos

2.1 Procesamiento de valores perdidos

2.2 Procesamiento de valor duplicado

 2.3 Codificación de características

 2.4 Reducción de dimensionalidad (opcional)

2.5 Escalado de características

2.6 Otras funciones clave

3. Construcción de un modelo

3.1 Modelos lineales

3.1.1 Método de mínimos cuadrados

3.1.2 Regresión de cresta

 3.1.3. Lazo

3.1.4 Regresión bayesiana BayesianRidge

3.1.5 regresión logística logística

3.2 Máquina de vectores de soporte (SVM)

3.3 Descenso de gradiente estocástico SGD 


1. Lectura de datos

1.1 Llamada

#调用pandas库
import pandas as pd

1.2 Lectura de archivos comunes

Archivo CSV: un archivo tabular con diferentes valores de características separados por comas.

df_origin=pd.read_csv(filepath_or_buffer)

Archivos comunes: Admite archivos de formato común.

df_origin=pd.read_table(filepath_or_buffer)

archivo de salmuera

df_origin=pd.read_pickle(filepath_or_buffer)

Otros archivos: como Excel, Json, Html, etc.

Referencia: pandas.read_pickle — documentación de pandas 1.4.3

2. Preprocesamiento de datos

2.1 Procesamiento de valores perdidos

#查看缺失值
df_origin.isna()

#删除缺失值
df_nona=df_origin.dropna()

#填补缺失值
#缺失值变为数值
df_nona=df_origin.fillna(0)

#缺失值由字典填补,a、b、c为特征即a特征的缺失值都变为0
df_nona=df_origin.fillna('a':0,'b':1,'c':2)

#缺失值变为同一特征上一对象的记录
df_nona=df_origin.fillna(method='ffill')

Referencia:  pandas.DataFrame.fillna — documentación de pandas 1.4.3

2.2 Procesamiento de valor duplicado

#查看重复值: 表格自上而下第一个会显示False,出现和上面重复的值会显示True
df_nona.duplicated()

#去除重复值
df_nodup=df_nona.drop_duplicates()

#去除特定列有重复值的行
df_nodup=df.nona.drop_duplicates(subset=['Price'])

Se debe prestar atención al procesamiento de valores duplicados: debido a que la eliminación violenta de valores duplicados provocará cambios en la distribución de datos, puede optar por agregar peso a los datos de valores duplicados después de eliminar los valores duplicados. Por ejemplo, si no hay registros y se eliminan 18 valores duplicados, trae el original, Peso=19.

Referencia:

pandas.DataFrame.drop_duplicates — documentación de pandas 1.4.3 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html

 2.3 Codificación de características

Dado que la máquina solo puede reconocer valores numéricos, es necesario cambiar la característica categórica característica nominal (String u otros tipos) en códigos enteros de tipo numérico.

#OrdinalEncoder是将特征值bian为0到n_categories - 1的范围内
enc = preprocessing.OrdinalEncoder()
enc.fit(df_nudup.X)  #X是特征名
enc


Dado que OrdinalEncoder convierte los datos no numéricos en numéricos ordenados, lo que afectará el establecimiento del modelo, se puede usar uno de K, también conocido como codificación one-hot o codificación ficticia.

Convierta n valores propios en vectores propios binarios de longitud n, cada valor tiene solo un bit que es 1, y el resto son 0

enc = preprocessing.OneHotEncoder()
enc.fit(df_nodup.X)  
df_nodup

#可查看转换值
enc.transform([['female', 'from US', 'uses Safari'],
...                ['male', 'from Europe', 'uses Safari']]).toarray()
array([[1., 0., 0., 1., 0., 1.],
       [0., 1., 1., 0., 0., 1.]])

 Referencia:  https://www.sklearncn.cn/40/

 2.4 Reducción de dimensionalidad (opcional)

Para datos bidimensionales, creamos un nuevo espacio bidimensional, de modo que los puntos de datos originales caigan en uno de los nuevos vectores propios, entonces el valor propio del vector propio del otro espacio nuevo es 0, y el vector propio no tiene sentido, 2D El vector se convierte en un vector unidimensional. Lo mismo es cierto para la dimensión N.

Dado que la reducción de dimensionalidad combinará múltiples funciones originales, no es adecuada para modelos que exploran la relación entre funciones y etiquetas (como la regresión lineal)

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca=pca.fit(df_nodup)
df_dr=transform(df_nodup)#获得新的矩阵

print(pca.explained_variance_ratio_)
print(pca.singular_values_)

2.5 Escalado de características

 Escale todas las características a [0, 1] o [-1, 1] para que la media sea 0 y la varianza sea 1.

#特征缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train) # Don’t cheat - fit only on training data
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test) # apply same transformation to test data

2.6 Otras funciones clave

#添加行,df2是相同特征的列表
df_nodup.append(df2)

#数组(series)的组合行是concat
s1 = pd.Series(['a', 'b'])
s2 = pd.Series(['c', 'd'])
pd.concat([s1, s2])

3. Construcción de un modelo

3.1 Modelos lineales

3.1.1 Método de mínimos cuadrados

Se ajusta a un modelo lineal que minimiza la suma de los errores al cuadrado.

from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit (X,Y)
reg.coef_
>>> array([ 0.5,  0.5])

3.1.2 Regresión de cresta

Se impone una penalización a la magnitud de los coeficientes para abordar el problema de sobreajuste de los mínimos cuadrados ordinarios.

from sklearn import linear_model
reg = linear_model.Ridge (alpha = .5)
reg.fit (X,Y)

 3.1.3. Lazo

 La diferencia con Ridge es que se agrega un paradigma L1 después de la función de pérdida regular.

from sklearn import linear_model
reg = linear_model.Lasso(alpha = 0.1)
reg.fit(X,Y)
reg.predict(test_X)

3.1.4 Regresión bayesiana BayesianRidge

La regresión bayesiana se puede utilizar para la regularización de parámetros durante la fase de estimación.

from sklearn import linear_model
reg = linear_model.BayesianRidge()
reg.fit(X, Y)

3.1.5 regresión logística logística

3.2 Máquina de vectores de soporte (SVM)

Adecuado para espacios de alta dimensión.

#分类问题
from sklearn import svm
clf = svm.SVC(gamma='scale')
clf.fit(X, y)
#回归问题
from sklearn import svm
clf = svm.SVR()
clf.fit(X, y)

3.3 Descenso de gradiente estocástico SGD 

Aplicable a problemas de aprendizaje automático dispersos y a gran escala, se recomienda encarecidamente escalar todas las características a [0, 1] o [-1, 1] para que la media sea 0 y la varianza sea 1.

#特征缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train) # Don’t cheat - fit only on training data
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test) # apply same transformation to test data
from sklearn.linear_model import SGDClassifier
clf = SGDClassifier(loss="hinge", penalty="l2")
clf.fit(X, y)

3.4 Vecino más cercano

from sklearn.neighbors import NearestNeighbors
import numpy as np
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
distances, indices = nbrs.kneighbors(X)

3.5 Bayesiano ingenuo gaussiano

Se supone que la verosimilitud (probabilidad) de una característica es una distribución gaussiana.

from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)

3.6 Árbol de decisión

#分类
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
clf.predict(X)
clf.predict_proba(X)#样本中Y各分类的概率
#回归
from sklearn import tree
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X, y)
clf.predict(test_X)

 3.7 Métodos de conjunto

3.7.1. Harpillera

from sklearn.ensemble import BaggingClassifier
from sklearn.neighbors import KNeighborsClassifier
bagging = BaggingClassifier(KNeighborsClassifier(),
...                             max_samples=0.5, max_features=0.5)

3.7.2 Bosque aleatorio

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=10)
clf = clf.fit(X, Y)

3.7.3 Árboles aleatorios extremos

El umbral distintivo de cada nodo se genera aleatoriamente y el mejor umbral se selecciona como regla de segmentación.

Efecto: Puede reducir un poco la varianza del modelo, a costa de aumentar ligeramente el sesgo

from sklearn.model_selection import cross_val_score
>>> from sklearn.datasets import make_blobs
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.ensemble import ExtraTreesClassifier
>>> from sklearn.tree import DecisionTreeClassifier

>>> X, y = make_blobs(n_samples=10000, n_features=10, centers=100,
...     random_state=0)

>>> clf = DecisionTreeClassifier(max_depth=None, min_samples_split=2,
...     random_state=0)
>>> scores = cross_val_score(clf, X, y, cv=5)
>>> scores.mean()                               
0.98...

>>> clf = RandomForestClassifier(n_estimators=10, max_depth=None,
...     min_samples_split=2, random_state=0)
>>> scores = cross_val_score(clf, X, y, cv=5)
>>> scores.mean()                               
0.999...

>>> clf = ExtraTreesClassifier(n_estimators=10, max_depth=None,
...     min_samples_split=2, random_state=0)
>>> scores = cross_val_score(clf, X, y, cv=5)
>>> scores.mean() > 0.999
True

Supongo que te gusta

Origin blog.csdn.net/xzhu4571/article/details/125490416
Recomendado
Clasificación