In [1]:
# configuramos matplotlib para incluir las gráficas en jupyter e importamos pandas
%matplotlib inline
import pandas as pd
In [2]:
# cargamos los datos en un data frame de pandas
url = 'http://mlr.cs.umass.edu/ml/machine-learning-databases/iris/iris.data'
names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']
df = pd.read_csv(url, names=names)
# veamos como lucen las primeras observaciones
df.head()
Out[2]:
In [3]:
# obtenemos los valores del data frame, esto nos regresará
# arreglos de numpy
X = df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']].values
y = df['class'].values
from sklearn.model_selection import train_test_split
# partimos los datos en entrenamiento y evaluación
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7)
In [4]:
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X_train, y_train)
Out[4]:
In [5]:
print("Test set accuracy: {:.2f}".format(clf.score(X_test, y_test)))
In [6]:
y_pred = clf.predict(X_test)
y_score = clf.predict_proba(X_test)
from sklearn_evaluation import ClassifierEvaluator
ce = ClassifierEvaluator(clf, y_test, y_pred, y_score,
df.columns,
['setosa', 'versicolor', 'virginica'])
In [7]:
cm = ce.confusion_matrix
In [8]:
ce.precision_recall
Out[8]:
In [18]:
df = pd.read_csv("titanic.csv")
df.head()
Out[18]:
In [16]:
# Tenemos algunos datos faltantes
df.isnull().sum()
Out[16]:
PassenderId
pues no nos da información útil para el modelo (el dato es único para cada pasajero), vemos que también tenemos
In [20]:
# Obtenemos un subconjunto de las columnas
df = df[['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Embarked']]
df.head()
Out[20]:
In [30]:
# Tenemos ahora que trabajar con los datos faltantes en Embarked y Age
# para el caso de Embarked (variable categórica) usaremos la moda como el valor imputado
# para Age usaremos la media como valor inputado
df.loc[df.Age.isnull(), 'Age'] = df.Age.mean()
In [36]:
df.Embarked.value_counts()
Out[36]:
In [35]:
df.loc[df.Embarked.isnull(), 'Embarked'] = 'S'
In [40]:
# Ahora que tenemos datos completos tenemos que convertir las variables expresadas como strings a numéros
# pues muchos algoritmos solo aceptan este tipo de entrada, en nuestro caso hay que convertir Sex y Embarked
print('Sex values: ', df.Sex.unique())
print('Embarked values: ', df.Embarked.unique())
In [45]:
df.Sex.replace({'male': 0, 'female': 1}, inplace=True)
df.Embarked.replace({'S': 0, 'C': 1, 'Q': 2}, inplace=True)
In [46]:
print('Sex values: ', df.Sex.unique())
print('Embarked values: ', df.Embarked.unique())
In [50]:
X = df[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Embarked']].values
y = df['Survived'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7)
clf = LogisticRegression()
clf.fit(X_train, y_train)
print("Test set accuracy: {:.2f}".format(clf.score(X_test, y_test)))
In [51]:
from sklearn.model_selection import cross_val_score
clf = LogisticRegression()
scores = cross_val_score(clf, X_train, y_train, cv=5)
scores
Out[51]:
In [52]:
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
In [ ]:
from sklearn.ensemble import AdaBoostClassifier, BaggingClassifier, RandomForestClassifier, ExtraTreesClassifier
Cross-validation: evaluating estimator performance. http://scikit-learn.org/stable/modules/cross_validation.html