<jupyter_start><jupyter_text>Importando bibliotecas<jupyter_code>import pandas as pd
import numpy as np<jupyter_output><empty_output><jupyter_text>Carregando dados de treinamento e de teste<jupyter_code>train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
train.head()<jupyter_output><empty_output><jupyter_text>Importando bibliotecas do scikit-learn Será usada um modelo de árvore de decisão (random forest)<jupyter_code>from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
modelo = RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=0)
train['Sex'].value_counts()<jupyter_output><empty_output><jupyter_text>Transformando a variável "Sex", que aparece como texto, em variável binária<jupyter_code>def transformar_sexo(valor):
    if valor == 'female':
        return 1
    else:
        return 0

train['Sex_binario'] = train['Sex'].map(transformar_sexo)
train.head()<jupyter_output><empty_output><jupyter_text>Selecionando as variáveis preditoras (X) e a predita (y)  Novas variáveis<jupyter_code>variaveis = ['Sex_binario', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare']
X = train[variaveis]
y = train['Survived']
X.head()
y.head()<jupyter_output><empty_output><jupyter_text>Convertando dados faltantes (na) em "-1"<jupyter_code>X = X.fillna(-1)<jupyter_output><empty_output><jupyter_text>Treinando o modelo<jupyter_code>modelo.fit(X, y)
test['Sex_binario'] = test['Sex'].map(transformar_sexo)
X_prev = test[variaveis]
X_prev = X_prev.fillna(-1)
X_prev.head()<jupyter_output><empty_output><jupyter_text>Testando o modelo nos dados de teste<jupyter_code>p = modelo.predict(X_prev)
p
test.head()<jupyter_output><empty_output><jupyter_text>Criar submissão<jupyter_code>sub = pd.Series(p, index=test['PassengerId'], name='Survived')
sub.to_csv('primeiro_modelo.csv', header=True)
!head -n10 primeiro_modelo.csv<jupyter_output>PassengerId,Survived
892,0
893,0
894,1
895,1
896,0
897,0
898,0
899,0
900,1<jupyter_text>Incluindo validação Fazendo o split de treino e validação<jupyter_code>np.random.seed(0)
X_treino, X_valid, y_treino, y_valid = train_test_split(X, y, test_size=0.5)
X_treino.head()
X_treino.shape, X_valid.shape, y_treino.shape, y_valid.shape
modelo = RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=0)
modelo.fit(X_treino, y_treino)
p = modelo.predict(X_valid)
p.shape
np.mean(y_valid == p)<jupyter_output><empty_output><jupyter_text>Comparando com uma solução igual à "gender submission""<jupyter_code>p = (X_valid['Sex_binario'] == 1).astype(np.int64)
np.mean(y_valid == p)<jupyter_output><empty_output><jupyter_text>Conclusão: nosso modelo é pior do que a baseline O ponto importante da validação é poder comparar com o treino. No entanto, não necessariamente a relação será a mesma ao se aplicar o teste  Validação Cruzada<jupyter_code>from sklearn.model_selection import KFold
from sklearn.model_selection import RepeatedKFold
X
resultados = []
kf = RepeatedKFold(n_splits=2, n_repeats=10, random_state=10)

for linhas_treino, linhas_valid in kf.split(X):
    print("Treino:", linhas_treino.shape[0])
    print("Valid:", linhas_valid.shape[0])

    X_treino, X_valid = X.iloc[linhas_treino], X.iloc[linhas_valid]
    y_treino, y_valid = y.iloc[linhas_treino], y.iloc[linhas_valid]

    modelo = RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=0)
    modelo.fit(X_treino, y_treino)

    p = modelo.predict(X_valid)

    acc = np.mean(y_valid == p)
    resultados.append(acc)
    print("Acc:", acc)
    print()

%matplotlib inline
%pylab inline
np.mean(resultados)
pylab.hist(resultados)<jupyter_output><empty_output><jupyter_text>Retreinar o modelo<jupyter_code>X.head()
y.head()
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

train['Sex_binario'] = train['Sex'].map(transformar_sexo)
test['Sex_binario'] = test['Sex'].map(transformar_sexo)

variaveis = ['Sex_binario', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare']

X = train[variaveis].fillna(-1)
y = train['Survived']
test[variaveis].head()
modelo = RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=0)
modelo.fit(X, y)

p = modelo.predict(test[variaveis].fillna(-1))
p
sub = pd.Series(p, index=test['PassengerId'], name='Survived')
sub.shape
sub.to_csv('modelo_video5.csv', header=True)
!ls
!head -n10 modelo_video5.csv<jupyter_output>PassengerId,Survived
892,0
893,0
894,1
895,1
896,0
897,0
898,0
899,0
900,1<jupyter_text>Aula 6<jupyter_code>X_valid_check = train.iloc[linhas_valid].copy()
X_valid_check['p'] = p
X_valid_check.head()
X_valid_check.shape
erros = X_valid_check[X_valid_check['Survived'] != X_valid_check['p']]
erros = erros[['PassengerId', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'Sex_binario', 'p', 'Survived']]
erros.head()
mulheres = erros[erros['Sex'] == 'female']
homens = erros[erros['Sex'] == 'male']
mulheres.sort_values("Survived")
homens.sort_values("Survived")<jupyter_output><empty_output><jupyter_text>Novas variáveis<jupyter_code>train['Embarked_S'] = (train['Embarked'] == 'S').astype(int)
train['Embarked_C'] = (train['Embarked'] == 'C').astype(int)
#train['Embarked_Q'] = (train['Embarked'] == 'Q').astype(int)

train['Cabine_nula'] = train['Cabin'].isnull().astype(int)

train['Nome_contem_Miss'] = train['Name'].str.contains("Miss").astype(int)
train['Nome_contem_Mrs'] = train['Name'].str.contains("Mrs").astype(int)
train['Nome_contem_Master'] = train['Name'].str.contains("Master").astype(int)
train['Nome_contem_Col'] = train['Name'].str.contains("Col").astype(int)
train['Nome_contem_Major'] = train['Name'].str.contains("Major").astype(int)
train['Nome_contem_Mr'] = train['Name'].str.contains("Mr").astype(int)

variaveis = ['Sex_binario', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare', 'Embarked_S', 'Embarked_C', 'Cabine_nula', 'Nome_contem_Miss',
       'Nome_contem_Mrs', 'Nome_contem_Master', 'Nome_contem_Col',
       'Nome_contem_Major', 'Nome_contem_Mr']
X = train[variaveis].fillna(-1)
y = train['Survived']
from sklearn.linear_model import LogisticRegression
resultados2 = []
kf = RepeatedKFold(n_splits=2, n_repeats=10, random_state=10)

for linhas_treino, linhas_valid in kf.split(X):
    print("Treino:", linhas_treino.shape[0])
    print("Valid:", linhas_valid.shape[0])

    X_treino, X_valid = X.iloc[linhas_treino], X.iloc[linhas_valid]
    y_treino, y_valid = y.iloc[linhas_treino], y.iloc[linhas_valid]

    #modelo = RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=0)
    modelo = LogisticRegression()
    modelo.fit(X_treino, y_treino)

    p = modelo.predict(X_valid)

    acc = np.mean(y_valid == p)
    resultados2.append(acc)
    print("Acc:", acc)
    print()

pylab.hist(resultados2), pylab.hist(resultados,alpha=0.8)
np.mean(resultados2)
test['Embarked_S'] = (test['Embarked'] == 'S').astype(int)
test['Embarked_C'] = (test['Embarked'] == 'C').astype(int)
#test['Embarked_Q'] = (test['Embarked'] == 'Q').astype(int)

test['Cabine_nula'] = test['Cabin'].isnull().astype(int)

test['Nome_contem_Miss'] = test['Name'].str.contains("Miss").astype(int)
test['Nome_contem_Mrs'] = test['Name'].str.contains("Mrs").astype(int)
test['Nome_contem_Master'] = test['Name'].str.contains("Master").astype(int)
test['Nome_contem_Col'] = test['Name'].str.contains("Col").astype(int)
test['Nome_contem_Major'] = test['Name'].str.contains("Major").astype(int)
test['Nome_contem_Mr'] = test['Name'].str.contains("Mr").astype(int)

modelo = LogisticRegression()
modelo.fit(X, y)

p = modelo.predict(test[variaveis].fillna(-1))<jupyter_output>/Users/sergio/opt/anaconda3/lib/python3.8/site-packages/sklearn/linear_model/_logistic.py:762: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

Increase the number of iterations (max_iter) or scale the data as shown in:
    https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
  n_iter_i = _check_optimize_result(<jupyter_text>Criar submissão<jupyter_code>sub = pd.Series(p, index=test['PassengerId'], name='Survived')
sub.shape
sub.to_csv("modelo_video6_lr.csv", header=True)
!ls<jupyter_output>gender_submission.csv              test.csv
modelo_video5.csv                  train.csv
modelo_video6.csv                  tutorial_titanic_mario_filho.ipynb
primeiro_modelo.csv
{'fraction_non_alphanumeric': 0.1579381929700401, 'fraction_numerical': 0.017574899740504836, 'mean_word_length': 7.052231718898385, 'pattern_counts': {'":': 0, '<': 61, '<?xml version=': 0, '>': 61, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '16', 'dir': 'jupyter-structured-clean-dedup', 'id': '236378', 'license': 'MIT', 'n_tokens_mistral': 3532, 'n_tokens_neox': 3389, 'n_words': 516, 'path': 'material/tutorial_titanic_mario_filho.ipynb', 'repo_name': 'sergiodealencar/courses', 'size': '8478'}