Cómo crear tu primer proyecto de Machine Learning con Python

April 08, 2022

Tags: Tecnologías

python

 

Python es uno de los lenguajes de programación más populares del mundo, no solo entre desarrolladores e ingenieros de software, sino también entre matemáticos, analistas de datos, científicos e incluso contadores, debido a su gran facilidad de uso.

 

Las personas dentro de estos diferentes campos usan Python para múltiples tareas, como análisis y visualización de datos, creación de inteligencia artificial y automatización de diferentes máquinas, quizás este último es su uso más popular.

 

Otros usos que se le dan a Python, entre personas que no son desarrolladores, son: automatizar las acciones de copiar y pegar archivos y carpetas, subirlos a un servidor. Incluso con Python, puede automatizar sus tareas en archivos de Excel, PDF y CSV.

 

Entre todos estos usos que tiene Python, el más popular en este momento es el de aprendizaje automático, o machine learning, y en este blog te vamos a enseñar cómo comenzar tu primer proyecto de aprendizaje automático.

 

Proyecto de aprendizaje automático con Python

 

1. Descarga e instala Python SciPy

 

Descarga e instala Python y SciPy. Luego de que tengas ambos instalados, debes instalar las siguientes librerías: scipy, numpy, matplotlib, pandas y sklearn. La página de instalación de scipy tiene excelentes instrucciones paso a paso para instalar las librerías, si acaso presentas alguna duda.

 

Luego de instalado todo, ejecuta Python y revisa las versiones. Para hacer esto, abre una línea de comando e inicia el interprete de Python, luego pega el siguiente script: 

 

# Check the versions of libraries
 
# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))

 

Deberia darte este resultado:

 

Python: 3.6.11 (default, Jun 29 2020, 13:22:26) 
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)]
scipy: 1.5.2
numpy: 1.19.1
matplotlib: 3.3.0
pandas: 1.1.0
sklearn: 0.23.2

 

2. Carga la data

 

Vamos a utilizar el conjunto de datos de flores de iris. Este conjunto de datos es famoso porque prácticamente todo el mundo lo utiliza como el conjunto de datos de "hola mundo" en el aprendizaje automático y las estadísticas.

 

Primero, vamos a importar los módulos, funciones y objetos que usaremos en este tutorial:

 

# Load libraries
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
...

 

Siguiente, cargar el dataset. Esto se hará directo desde el repositorio de la UCI machine learning.

 

...
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)

 

3. Resumir el conjunto de datos

 

Este es el paso en el que vamos a dar un vistazo a la data, esto lo haremos en cuatro diferentes maneras: dimensiones del conjunto de daros, vistazo a la data y un resumen estadístico de los atributos.

 

Dimensiones del conjunto de datos

 

...
# shape
print(dataset.shape)

 

Debería arrojar como resultado 150 instancias y 5 atributos.

 

Vistazo a la data

 

...
# head
print(dataset.head(20))

 

Debe arrojar este resultado:

 

    sepal-length  sepal-width  petal-length  petal-width        class
0            5.1          3.5           1.4          0.2  Iris-setosa
1            4.9          3.0           1.4          0.2  Iris-setosa
2            4.7          3.2           1.3          0.2  Iris-setosa
3            4.6          3.1           1.5          0.2  Iris-setosa
4            5.0          3.6           1.4          0.2  Iris-setosa
5            5.4          3.9           1.7          0.4  Iris-setosa
6            4.6          3.4           1.4          0.3  Iris-setosa
7            5.0          3.4           1.5          0.2  Iris-setosa
8            4.4          2.9           1.4          0.2  Iris-setosa
9            4.9          3.1           1.5          0.1  Iris-setosa
10           5.4          3.7           1.5          0.2  Iris-setosa
11           4.8          3.4           1.6          0.2  Iris-setosa
12           4.8          3.0           1.4          0.1  Iris-setosa
13           4.3          3.0           1.1          0.1  Iris-setosa
14           5.8          4.0           1.2          0.2  Iris-setosa
15           5.7          4.4           1.5          0.4  Iris-setosa
16           5.4          3.9           1.3          0.4  Iris-setosa
17           5.1          3.5           1.4          0.3  Iris-setosa
18           5.7          3.8           1.7          0.3  Iris-setosa
19           5.1          3.8           1.5          0.3  Iris-setosa

 

Resumen estadístico

 

...
# descriptions
print(dataset.describe())

 

Podemos ver que todos los valores numéricos tienen la misma escala (centímetros) y rangos similares entre 0 y 8 centímetros.

 

4. Visualización de la data

 

Al tener una idea básica de la data, necesitamos seguir explirándola en este caso con una visualización. Veremos unas Gráficas univariadas para comprender mejor cada atributo. Escribe:

 

...
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
pyplot.show()

 

5. Evaluar algunos algoritmos

 

Crear un conjunto de datos de validación

 

Necesitamos verificar que el modelo creado es bueno. Vamos a dividir el conjunto de datos cargados en dos: 80% lo usaremos para entrenar, evaluar y seleccionar entre nuestros modelos, y el 20% lo aguantaremos como un conjunto de datos de validación.

 

# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)

 

Construir modelos

 

No sabemos cual algoritmo funcionará o cuál configuración utilizar. Vamos a probar seis algoritmos distintos:

 

...
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
    kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)
    cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
    results.append(cv_results)
    names.append(name)
    print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))

 

Ejecutando estos algoritmos, debemos obtener estos resultados:

 

LR: 0.960897 (0.052113)
LDA: 0.973974 (0.040110)
KNN: 0.957191 (0.043263)
CART: 0.957191 (0.043263)
NB: 0.948858 (0.056322)
SVM: 0.983974 (0.032083)

 

Completar el ejemplo

 

# compare algorithms
from pandas import read_csv
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1, shuffle=True)
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
    kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)
    cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
    results.append(cv_results)
    names.append(name)
    print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))
# Compare Algorithms
pyplot.boxplot(results, labels=names)
pyplot.title('Algorithm Comparison')
pyplot.show()

 

Te recomendamos en video