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.
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
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)
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.
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()
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()