Su primer paso en ciencia de datos. Titánico

Una pequeña introduccion


Creo que podríamos hacer más cosas si recibiéramos instrucciones paso a paso que indiquen qué y cómo hacer. Yo mismo recuerdo en mi vida aquellos momentos en que un negocio no podía comenzar debido al hecho de que era simplemente difícil entender por dónde empezar. Quizás, alguna vez en Internet viste las palabras "Ciencia de datos" y decidiste que estás lejos de eso, y las personas que están haciendo esto en algún lugar, en otro mundo. Entonces no, están justo aquí. Y, tal vez, gracias a personas de esta esfera, ha aparecido un artículo en su feed. Hay muchos cursos que te ayudarán a sentirte cómodo con este oficio, aquí te ayudaré a dar el primer paso.

Bueno, estas listo? Debo decir de inmediato que tendrá que conocer Python 3, ya que lo usaré aquí. Y también le aconsejo que preinstale en el Jupyter Notebook o vea cómo usar google colab.

Paso uno


imagen

Kaggle es tu asistente importante en este asunto. En principio, puedes prescindir de él, pero hablaré de esto en otro artículo. Esta es la plataforma que alberga la competencia Data Science. En cada competencia de este tipo en las primeras etapas, recibirá una cantidad irreal de experiencia en la resolución de diversos problemas, experiencia de desarrollo y experiencia de trabajo en equipo, lo cual es importante en nuestro tiempo.

Tomaremos nuestra tarea desde allí. Se llama así: "Titanic". La condición es esta: predecir que cada persona individual sobrevivirá. En términos generales, la tarea de la persona involucrada en DS es la recopilación de datos, su procesamiento, capacitación de modelos, pronósticos, etc. En kaggle, se nos permite omitir la etapa de recopilación de datos: se presentan en la plataforma. ¡Necesitamos descargarlos y puedes comenzar!

Puede hacer esto de la siguiente manera:

en la pestaña Datos están los archivos que contienen los datos Datos

imagen

imagen

descargados, preparamos nuestros cuadernos Jupyter y ...

Segundo paso


¿Cómo descargamos estos datos ahora?

Primero, importamos las bibliotecas necesarias:

import pandas as pd
import numpy as np

Pandas nos permitirá descargar archivos .csv para su posterior procesamiento.

Numpy es necesario para presentar nuestra tabla de datos como una matriz con números.
Siga adelante. Tome el archivo train.csv y cárguelo a nosotros:

dataset = pd.read_csv('train.csv')

Nos referiremos a nuestra muestra de datos train.csv a través de la variable del conjunto de datos. Echemos un vistazo a lo que se encuentra allí:

dataset.head()

imagen

La función head () nos permite ver las primeras líneas del marco de datos.

Las columnas sobrevividas son solo nuestros resultados, que se conocen en este marco de datos. Sobre el problema, necesitamos predecir la columna Sobrevivido para los datos de test.csv. Estos datos almacenan información sobre otros pasajeros del Titanic, para quienes nosotros, los tomadores de decisiones, no conocemos los resultados.

Entonces, dividiremos nuestra tabla en datos dependientes e independientes. Todo es simple aquí. Los datos dependientes son aquellos que son independientes de lo que hay en los resultados. Los datos independientes son datos que influyen en el resultado.

Por ejemplo, tenemos un conjunto de datos de este tipo:

“Vova enseñó ciencias de la computación - no.
Vova recibió en informática 2. "

La evaluación en informática depende de la respuesta a la pregunta: ¿Vova enseñó ciencias de la computación? ¿Está limpio? Continuando, ¡estamos más cerca de la meta!

La variable tradicional para datos independientes es X. Para dependientes, y.

Hacemos lo siguiente:

X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]

¿Lo que es? Con la función iloc [:, 2:], le decimos a la pitón: quiero ver en la variable X los datos que comienzan desde la segunda columna (inclusive y siempre que el recuento comience desde cero). En la segunda fila decimos que queremos ver en los datos de la primera columna.

[a: b, c: d] es una construcción de lo que usamos entre paréntesis. Si no especifica ninguna variable, permanecerán predeterminadas. Es decir, podemos especificar [:,: d] y luego obtendremos en el marco de datos todas las columnas, excepto las que van, comenzando por el número d y más. Las variables a y b definen cadenas, pero todos las necesitamos, por lo que dejamos este valor predeterminado.

Vamos a ver que pasó:

X.head()

imagen

y.head()

imagen

Para simplificar esta pequeña lección, eliminaremos las columnas que requieren un "cuidado" especial o que no afectan en absoluto la supervivencia. Contienen datos de tipo str.

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)

¡Súper! Vamos al siguiente paso.

Tercer paso


Aquí necesitamos codificar nuestros datos para que la máquina comprenda mejor cómo estos datos afectan el resultado. Pero no codificaremos todo, sino solo los datos de tipo str que dejamos. Columna "Sexo". ¿Cómo queremos codificar? Imagine los datos sobre el género humano por el vector: 10 - masculino, 01 - femenino.

Para comenzar, traduciremos nuestras tablas a la matriz NumPy:

X = np.array(X)
y = np.array(y)

Y ahora miramos:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X = np.array(ct.fit_transform(X))

La biblioteca sklearn es una biblioteca tan genial que nos permite hacer el trabajo completo en Data Science. Contiene una gran cantidad de modelos interesantes de aprendizaje automático y también nos permite hacer la preparación de datos.

OneHotEncoder nos permitirá codificar el género de la persona en esa representación, como describimos. Se crearán 2 clases: hombre, mujer. Si la persona es un hombre, se escribirá 1 en la columna "masculino" y 0, respectivamente.

Después de OneHotEncoder (), cuesta [1], esto significa que queremos codificar la columna número 1 (contando desde cero).

Súper. ¡Nos movemos aún más!

Como regla, esto sucede que algunos datos permanecen vacíos (es decir, NaN, no un número). Por ejemplo, hay información sobre una persona: su nombre, género. Pero no hay datos sobre su edad. En este caso, utilizaremos este método: encontramos la media aritmética de todas las columnas y, si faltan algunos datos en la columna, rellenamos el vacío con la media aritmética.

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)

Ahora tomemos en cuenta que tales situaciones ocurren cuando los datos están muy dispersos. Algunos datos están en el intervalo [0: 1], y algunos pueden ir por cientos y miles. Para excluir dicha propagación y la computadora fue más precisa en los cálculos, escalaremos los datos, los escalaremos. Que todos los números no excedan de tres. Para hacer esto, use la función StandartScaler.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])

Ahora nuestros datos se ven así:

imagen

Clase. Estamos cerca de nuestra meta!

Cuarto paso


¡Entrena a nuestro primer modelo! Desde la biblioteca de sklearn podemos encontrar una gran cantidad de cosas interesantes. Apliqué el modelo Clasificador de refuerzo de gradiente a esta tarea. Usamos un clasificador, ya que nuestra tarea es una tarea de clasificación. Es necesario atribuir el pronóstico a 1 (sobrevivido) o 0 (no sobrevivió).

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)

La función de ajuste le dice a python: deje que el modelo busque dependencias entre X e y.

Menos de un segundo y el modelo está listo.

imagen

¿Cómo aplicarlo? ¡Ya veremos ahora!

Paso cinco Conclusión


Ahora necesitamos cargar la tabla con nuestros datos de prueba, para lo cual debemos hacer un pronóstico. Con esta tabla, haremos las mismas acciones que hicimos para X.

X_test = pd.read_csv('test.csv', index_col=0)

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(count, inplace=True, axis=1)

X_test = np.array(X_test)

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])

¡Aplicaremos nuestro modelo ya!

gbc_predict = gbc.predict(X_test)

Todas. Hicimos un pronóstico. Ahora debe registrarse en csv y enviarse al sitio.

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')

Hecho. Tengo un archivo que contiene predicciones para cada pasajero. Queda por cargar estas decisiones en el sitio y obtener una estimación del pronóstico. Una solución tan primitiva da no solo el 74% de las respuestas correctas al público, sino también un impulso a Data Science. Los más curiosos pueden en cualquier momento escribirme en mensajes privados y hacer una pregunta. ¡Gracias a todos!

All Articles