Análise de Sobrevivência no Titanic com Algoritmos de Ensemble

Amostra de Dados

PassengerId,Sobreviveu,Classe,Nome,Sexo,Idade,Irmaos,Parentes,Bilhete,Tarifa,Cabine,Embarque
1,0,3,"Braund, Sr. Owen Harris",masculino,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Sra. John Bradley",feminino,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Srta. Laina",feminino,26,0,0,STON/O2.3101282,7.925,,S
4,1,1,"Futrelle, Sra. Jacques Heath",feminino,35,1,0,113803,53.1,C123,S

Análise de Características

Classe: Passageiros de classes superiores podem ter prioridade
Sexo: Mulheres possuem maior probabilidade de sobrevivência
Idade: Adultoss jovens podem ter vantagem
Parentes: Quentidade de familiares a bordo

Estatísticas com Pandas

import pandas
dados = pandas.read_csv("titanic.csv")
print(dados.describe())

Pré-processamento

Preenchimento de Valores Ausentes

dados["Idade"] = dados["Idade"].fillna(dados["Idade"].median())

Codificação de Categorias

dados.loc[dados["Sexo"] == "masculino", "Sexo"] = 0
dados.loc[dados["Sexo"] == "feminino", "Sexo"] = 1

Regressão Linear

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold

variaveis = ["Classe","Sexo","Idade","Irmaos","Parentes","Tarifa","Embarque"]
modelo = LinearRegression()
kf = KFold(n_splits=3)

for treino, teste in kf.split(dados):
    X_treino = dados[variaveis].iloc[treino]
    y_treino = dados["Sobreviveu"].iloc[treino]
    modelo.fit(X_treino, y_treino)

Floresta Aleatória

from sklearn.ensemble import RandomForestClassifier

modelo_rf = RandomForestClassifier(
    n_estimators=50, 
    min_samples_split=4,
    min_samples_leaf=2,
    random_state=1
)

Engenharia de Características

dados["TamanhoFamilia"] = dados["Irmaos"] + dados["Parentes"]
dados["ComprimentoNome"] = dados["Nome"].apply(len)

Importância de Características

from sklearn.feature_selection import SelectKBest

seletor = SelectKBest(k=5)
seletor.fit(dados[variaveis], dados["Sobreviveu"])

Modelo Ensemble

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression

algoritmos = [
    [GradientBoostingClassifier(), variaveis],
    [LogisticRegression(), variaveis]
]

previsoes = []
for modelo, vars in algoritmos:
    modelo.fit(dados[vars], dados["Sobreviveu"])
    proba = modelo.predict_proba(dados_teste[vars])[:,1]
    previsoes.append(proba)

previsao_final = (previsoes[0] + previsoes[1]) / 2

Tags: aprendizado-de-máquina floresta-aleatoria preprocessamento-dados regressao-logistica engenharia-caracteristicas

Publicado em 7-11 09:53