Skip to main content

· One min read

pivot

Alt text

df.pivot(index='foo', columns='bar', values='baz')
df.pivot_table(index='foo', columns='bar', values='baz', aggfunc='sum')

melt

Alt text

df3.melt(id_vars=['first', 'last'], var_name='variable', 
value_name='value')
df3.melt(id_vars=['first', 'last'], var_name='variable',
value_name='value', value_vars=['height', 'weight'])

Wide to long

Alt text

pd.wide_to_long(df, stubnames=['age', 'weight'], i=['name'], 
j='year')
# format age_2019
pd.wide_to_long(df, stubnames=['age', 'weight'], i=['name'],
j='year', sep='_', suffix='\w+')

· One min read

Probando el componente CheatSheet con diferentes lenguajes de programación y latex.

Titulo

Contenido de la cheat sheet

import CheatSheet from '@site/src/components/CheatSheet';
<CheatSheet header='Titulo'>
Contenido de la cheat sheet
</CheatSheet>

Contenido de latext

Formula en latex abx2dx\int_{a}^{b} x^2 dx

$$\int_{a}^{b} x^2 dx$$

Multiples lenguajes

Contenido de la cheat sheet

def foo():
print('Hello world!')
foo <- function() {
print('Hello world!')
}

Fomulas y codigo

Formula en latex abx2dx\int_{a}^{b} x^2 dx

def foo():
print('Hello world!')

Imagenes

Alt text

Sin titulo

<CheatSheet>
Sin titulo
</CheatSheet>

Header

Texto en latex

\int_{a}^{b} x^2 dx

abx2dx\int_{a}^{b} x^2 dx

Header

Código python

def foo():
print('Hello world!')

· 3 min read
Darvin Cotrina

Linear Model

The following linear models are available in scikit-learn for regression and classification tasks, if yy is the target variable, xx is the feature vector, and ww is the weight vector

  • y=w0+w1x1+w2x2+...+wpxpy = w_0 + w_1x_1 + w_2x_2 + ... + w_px_p
  • w0w_0 is the intercept_
  • w1,w2,...,wpw_1, w_2, ..., w_p are the coef_

Linear Regression

Fits a linear model with coefficients w=(w1,,wp)w = (w1, …, wp) to minimize the residual sum of squares between the observed targets in the dataset, and the targets predicted by the linear approximation.

  • minwXwy22\min_{w} || X w - y||_2^2
from sklearn.linear_model import LinearRegression
lr = LinearRegression()

Ridge Regression

Applies L2 regularization to reduce the complexity of the model and prevent overfitting.

  • minwXwy22+αw22\min_{w} || X w - y||_2^2 + \alpha ||w||_2^2
  • Hyperparameter α\alpha
  • if α=0\alpha = 0, then the model is the same as Linear Regression
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1.0)

from sklearn.linear_model import RidgeCV

Lasso Regression

Applies L1 regularization to reduce the complexity of the model and prevent overfitting.

  • minwXwy22+αw1\min_{w} || X w - y||_2^2 + \alpha ||w||_1
  • Hyperparameter α\alpha
  • if α=0\alpha = 0, then the model is the same as Linear Regression
from sklearn.linear_model import Lasso
lasso = Lasso(alpha=1.0)

Elastic Net Regression

Applies both L1 and L2 regularization to reduce the complexity of the model and prevent overfitting.

  • minwXwy22+αρw1+α(1ρ)2w22\min_{w} || X w - y||_2^2 + \alpha \rho ||w||_1 + \frac{\alpha(1-\rho)}{2} ||w||_2^2
  • Hyperparameter α\alpha and l1_ratiol1\_ratio
  • if α=0\alpha = 0, and l1_ratio=0l1\_ratio = 0, then the model is the same as Linear Regression
from sklearn.linear_model import ElasticNet
elastic_net = ElasticNet(alpha=1.0, l1_ratio=0.5)

Polynomial Regression

Generates polynomial features and fits a linear model to the transformed data.

  • y=w0+w1x1+w2x2+w3x12+w4x1x2+w5x22+...y = w_0 + w_1x_1 + w_2x_2 + w_3x_1^2 + w_4x_1x_2 + w_5x_2^2 + ...
  • Hyperparameter degree
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline

poly = PolynomialFeatures(degree=2)
poly_reg = make_pipeline(poly, LinearRegression())

Logistic Regression

Use when you want to predict a binary outcome (0 or 1, yes or no, true or false) given a set of independent variables.

  • y=11+e(w0+w1x1+w2x2+...+wpxp)y = \frac{1}{1 + e^{-(w_0 + w_1x_1 + w_2x_2 + ... + w_px_p)}}
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()

Stocastic Gradient Descent

Use when you want to train large datasets.

  • wt+1=wtηQi(wt)w_{t+1} = w_t - \eta \nabla Q_i(w_t)
  • Hyperparameter eta0 is the learning rate
from sklearn.linear_model import SGDClassifier, SGDRegressor
sgd_clf = SGDClassifier()
sgd_reg = SGDRegressor()

Bayesian Ridge Regression

Bayesian Ridge Regression is similar to Ridge Regression, but it introduces a prior on the weights ww.

  • Original Algorithm is detailed in the book Bayesian learning for neural networks
  • Hyperparameter alpha_1, alpha_2, lambda_1, lambda_2
from sklearn.linear_model import BayesianRidge
bayesian_ridge = BayesianRidge()

Passive Aggressive

Passive Aggressive algorithms are a family of algorithms for large-scale learning

from sklearn.linear_model import PassiveAggressiveClassifier, PassiveAggressiveRegressor
passive_aggressive_clf = PassiveAggressiveClassifier()
passive_aggressive_reg = PassiveAggressiveRegressor()

RANSAC Regression

RANSAC (RANdom SAmple Consensus) is an iterative algorithm for the robust estimation of parameters from a subset of inliers from the complete data set.

from sklearn.linear_model import RANSACRegressor
ransac_reg = RANSACRegressor()

· 2 min read
Darvin Cotrina
import numpy as np
import pandas as pd
from scipy import stats

Muestreo aleatorio

np.random.random(10)
np.random.randint(0, 100, 10)
colors = ['red', 'blue', 'green']
np.random.choice(colors, 10)

Con reemplazo

np.random.choice(colors, 10, replace=True)

Distribucion normal

parametros: μ\mu media, σ\sigma desviacion estandar y nn tamaño de la muestra

np.random.normal(0, 1, 10)
stats.norm.rvs(0, 1, 10)

Distribucion uniforme

parametros: aa minimo, bb maximo y nn tamaño de la muestra

np.random.uniform(0, 1, 10)
stats.uniform.rvs(0, 1, 10)

Distribucion binomial

parametros: nn numero de ensayos, pp probabilidad de exito y nn tamaño de la muestra

np.random.binomial(10, 0.5, 10)
stats.binom.rvs(10, 0.5, 10)

Distribucion poisson

parametros: λ\lambda tasa de ocurrencia y nn tamaño de la muestra

np.random.poisson(10, 10)
stats.poisson.rvs(10, 10)

Distribucion exponencial

parametros: λ\lambda tasa de ocurrencia y nn tamaño de la muestra

np.random.exponential(10, 10)
stats.expon.rvs(10, 10)

Muestreo estratificado

df = pd.DataFrame({
'sexo': np.random.choice(['M', 'F'], 100),
'edad': np.random.randint(18, 65, 100),
'estado_civil': np.random.choice(['S', 'C', 'D', 'V'], 100),
'ingreso': np.random.randint(1000, 10000, 100)
})

df.groupby('sexo').apply(lambda x: x.sample(10))

Muestreo sistematico

df = pd.DataFrame({
'sexo': np.random.choice(['M', 'F'], 100),
'edad': np.random.randint(18, 65, 100),
'estado_civil': np.random.choice(['S', 'C', 'D', 'V'], 100),
'ingreso': np.random.randint(1000, 10000, 100)
})

df.iloc[::10] # selecciona cada 10 filas

· 2 min read
Darvin Cotrina

Flat files

CSV

import pandas as pd
# puede ser un file o una url
pd.read_csv('file.csv')
pd.read_csv('file.txt', sep='\t')

Excel

import pandas as pd
# puede ser un file o una url
# en caso de que sheetname, no este asignado, se lee la primera hoja
xls = pd.ExcelFile('file.xlsx', sheetname=None) # Leer todas las hojas
xls.keys() # Nombre de las hojas
xls['sheet'] # Leer hoja

SAS

from sas7bdat import SAS7BDAT
with SAS7BDAT('file.sas7bdat') as file:
df_sas = file.to_data_frame()

Stata

import pandas as pd
# puede ser un file o una url
df = pd.read_stata('file.dta')

HDF5

Los archivos HDF5 son una buena opción para guardar grandes cantidades de datos. Se pueden leer con la librería h5py

import h5py
data = h5py.File('file.hdf5', 'r')
data.keys() # Nombre de los grupos

group = data['group'] # Leer grupo
group.keys() # Nombre de los datasets

dataset = group['dataset'] # Leer dataset
dataset.shape # Dimensiones
dataset.value # Valores

Matlab

import scipy.io
mat = scipy.io.loadmat('file.mat')

Pickled files

Los archivos pickled son archivos binarios de Python. Se pueden leer con la librería pickle

import pickle
with open('file.pkl', 'rb') as file:
data = pickle.load(file)

SQL

from sqlalchemy import create_engine
engine = create_engine('sqlite:///file.sqlite')
table_names = engine.table_names() # Nombre de las tablas

with engine.connect() as con:
rs = con.execute('SELECT * FROM table')
df = pd.DataFrame(rs.fetchall())
df.columns = rs.keys()

Con Pandas

import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('sqlite:///file.sqlite')

df = pd.read_sql_query('SELECT * FROM table', engine)

· 3 min read
Darvin Cotrina

Missing data

Es importante tener en cuenta que los modelos de machine learning no pueden trabajar con valores nulos, por lo que es necesario reemplazarlos por algún valor.

Eliminar

Si hay muchos valores nulos, se puede eliminar la columna o fila, tener en cuenta que se puede perder información importante.

df.dropna()

Imputar

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
imputer.fit_transform(X)

crear columna indicadora

from sklearn.impute import MissingIndicator
indicator = MissingIndicator()
indicator.fit_transform(X)

Encoder data

Dummy

VariableDummy
colorcolor_rojocolor_verdecolor_azul
rojo100
verde010
azul001
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
encoder.fit_transform(X)
import pandas as pd
pd.get_dummies(X)

Label

VariableLabel
rojo0
verde1
azul2
```python from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() encoder.fit_transform(X) ```
import pandas as pd
df = pd.DataFrame({'color': ['rojo', 'verde', 'azul']})
df['color'].astype('category').cat.codes

Scaling and Centering Data

StandardScaler

  • xμσ\frac{x - \mu}{\sigma}
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(X)

MinMaxScaler

  • xminmaxmin\frac{x - min}{max - min}
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit_transform(X)

RobustScaler

  • xQ1Q3Q1\frac{x - Q_1}{Q_3 - Q_1}
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
scaler.fit_transform(X)

Normalizer

  • L1: xi=1nxi\frac{x}{\sum_{i=1}^n |x_i|}
  • L2: xi=1nxi2\frac{x}{\sqrt{\sum_{i=1}^n x_i^2}}
  • max: xmax(x)\frac{x}{max(x)}

from sklearn.preprocessing import Normalizer
# L1, L2, max
scaler = Normalizer(norm='l2')
scaler.fit_transform(X)

Feature engineering

PolynomialFeatures

  • x1,x2x12,x1x2,x22x_1, x_2 \rightarrow x_1^2, x_1x_2, x_2^2
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
poly.fit_transform(X)

Binning

Este proceso se utiliza para discretizar variables continuas, es decir, convertir variables continuas en variables categóricas, agrupando los valores en intervalos.

  • x{0,1,2,...,n}x \rightarrow \{0, 1, 2,..., n\}
from sklearn.preprocessing import KBinsDiscretizer
discretizer = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
discretizer.fit_transform(X)

Feature selection

VarianceThreshold


from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold(threshold=0.1)
selector.fit_transform(X)

SelectKBest

from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
selector = SelectKBest(chi2, k=2)
selector.fit_transform(X, y)

SelectFromModel

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
selector = SelectFromModel(estimator=LogisticRegression())
selector.fit_transform(X, y)

RFE


from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
selector = RFE(estimator=LogisticRegression(), n_features_to_select=2)
selector.fit_transform(X, y)

· 3 min read
Darvin Cotrina

Classification Metrics

Confusion Matrix

Predicted
Actual classPositiveNegative
PositiveTrue Positive (TP)False Negative (FN)
NegativeFalse Positive (FP)True Negative (TN)
from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)

Accuaracy

Usar Accuaracy cuando quieres medir la performance de un modelo de clasificacion. Es la proporcion de predicciones correctas sobre el total de predicciones realizadas.

  • Accuracy = TP+TNTP+TN+FP+FN\frac{TP + TN}{TP + TN + FP + FN}
from sklearn.metrics import accuracy_score
accuracy_score(y_true, y_pred)

Precision

Usar Precision cuanto quieres minimizar los falsos positivos (Errores de tipo I). Es la proporcion de predicciones correctas sobre el total de predicciones realizadas.

  • Precision = TPTP+FP\frac{TP}{TP + FP}
from sklearn.metrics import precision_score
precision_score(y_true, y_pred)

Recall

Usar Recall cuando quieres minimizar los falsos negativos (Errores de tipo II). Es la proporcion de predicciones correctas sobre el total de predicciones realizadas.

  • Recall = TPTP+FN\frac{TP}{TP + FN}
from sklearn.metrics import recall_score
recall_score(y_true, y_pred)

F1 Score

Usar F1 Score cuando quieres minimizar los falsos negativos y falsos positivos. Es la media armonica entre Precision y Recall.

  • F1 Score = 2PrecisionRecallPrecision+Recall\frac{2 * Precision * Recall}{Precision + Recall}
from sklearn.metrics import f1_score
f1_score(y_true, y_pred)

ROC Curve

Usar ROC Curve cuando quieres evaluar el rendimiento de un modelo de clasificacion binaria. Es una grafica de la tasa de verdaderos positivos (TPR) frente a la tasa de falsos positivos (FPR) para diferentes umbrales de probabilidad de clasificacion.

  • TPR = TPTP+FN\frac{TP}{TP + FN}
  • FPR = FPFP+TN\frac{FP}{FP + TN}
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt

fpr, tpr, thresholds = roc_curve(y_true, y_pred)
auc = roc_auc_score(y_true, y_pred)

plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.show()

Classification Report

Usar Classification Report cuando quieres evaluar el rendimiento de un modelo de clasificacion. Es un resumen de las metricas de clasificacion para cada clase del problema.

from sklearn.metrics import classification_report
print(classification_report(y_true, y_pred))

Regression Metrics

Mean Absolute Error (MAE)

Usar MAE cuando quieres medir el error medio de un modelo de regresion. Es la media de la diferencia absoluta entre las predicciones y los valores reales.

  • MAE = 1ni=1nyiy^i\frac{1}{n} \sum_{i=1}^{n} |y_{i} - \hat{y}_{i}|
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_true, y_pred)

Mean Squared Error (MSE)

Usar MSE cuando quieres penalizar los errores mas grandes. Es la mejor metrica cuando le preocupa las grandes desviaciones en los errores.

  • MSE = 1ni=1n(yiy^i)2\frac{1}{n} \sum_{i=1}^{n} (y_{i} - \hat{y}_{i})^{2}
from sklearn.metrics import mean_squared_error
mean_squared_error(y_true, y_pred)

Root Mean Squared Error (RMSE)

Usar RMSE cuando quieres penalizar los errores mas grandes. Es la mejor metrica cuando desea una medida que sea menos sensible a los valores atipicos.

  • RMSE = 1ni=1n(yiy^i)2\sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_{i} - \hat{y}_{i})^{2}}
from sklearn.metrics import mean_squared_error
mean_squared_error(y_true, y_pred, squared=False)
# or
import numpy as np
np.sqrt(mean_squared_error(y_true, y_pred))

R-Squared (R2)

Usar R2 cuando quieres medir la varianza de los errores. Es la proporcion de la varianza de los errores y la varianza de los valores reales
  • R2 = 1i=1n(yiy^i)2i=1n(yiyˉi)21 - \frac{\sum_{i=1}^{n} (y_{i} - \hat{y}_{i})^{2}}{\sum_{i=1}^{n} (y_{i} - \bar{y}_{i})^{2}}
from sklearn.metrics import r2_score
r2_score(y_true, y_pred)