{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"train = pd.read_csv('../input/train.csv')\ntest = pd.read_csv('../input/test.csv')\nprint(train.shape, test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"31afa840602bbcca2723f7d2dd6211975e114bda"},"cell_type":"code","source":"df = pd.concat([train.drop('Survived', axis=1), test])\ndf.reset_index(inplace=True, drop=True)\nprint(df.iloc[891:].shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"becd636c6fd7d5f184a585484618df5568e018dc"},"cell_type":"code","source":"def get_title(name):\n    if '.' in name:\n        return name.split(',')[1].split('.')[0].strip()\n    else:\n        return\n\ndf['Title'] = df['Name'].apply(get_title)\n\ndef replace_titles(x):\n    title = x['Title']\n    if title in ['Capt', 'Col', 'Don', 'Jonkheer', 'Major', 'Rev', 'Sir']:\n        return 'Mr'\n    elif title in ['the Countess', 'Mme', 'Lady']:\n        return 'Mrs'\n    elif title in ['Mlle', 'Ms']:\n        return 'Miss'\n    elif title is 'Dr':\n        if x['Sex'] is 'male':\n            return 'Mr'\n        else:\n            return 'Mrs'\n    else:\n        return title\n\ndf['Title'] = df.apply(replace_titles, axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"209eb6ec35c109741881cd050af79640572d1092"},"cell_type":"code","source":"df['Age'] = df.groupby(['Title', 'Sex'])['Age'].transform(lambda x: x.fillna(x.mean()))\ndf['AgeBin'] = pd.qcut(df['Age'], q=5, labels=range(5))\n\ndf['Embarked'].fillna(df['Embarked'].mode(), inplace=True)\n\ndf['FamilySize'] = df['SibSp'] + df['Parch'] + 1\ndf['IsAlone'] = 1 \ndf.loc[df['FamilySize'] > 1, 'IsAlone'] = 0\ndf['IsAlone'].value_counts()\n\ndf['Fare'].fillna(df.groupby('Pclass')['Fare'].transform(np.mean), inplace=True)\ndf['FareBin'] = pd.qcut(df['Fare'], 5, labels=range(5))\n\ncabins = df[['Cabin']].copy()\ncabins['CabinData'] = cabins['Cabin'].isnull().apply(lambda x: not x)\ncabins['Deck'] = cabins['Cabin'].str.slice(0, 1)\ncabins['Room'] = cabins['Cabin'].str.slice(1, 5).str.extract('([0-9]+)', expand=False).astype('float')\ncabins[cabins['CabinData']]\ncabins[cabins['Deck'] == 'F']\ncabins.drop(['Cabin', 'CabinData'], axis=1, inplace=True, errors='ignore')\ncabins['Deck'] = cabins['Deck'].fillna('N')\ncabins['Room'] = cabins['Room'].fillna(cabins['Room'].mean())\n\ndef one_hot_column(df, label, drop_col=False):\n    one_hot = pd.get_dummies(df[label], prefix=label)\n    if drop_col:\n        df = df.drop(label, axis=1)\n    df = df.join(one_hot)\n    return df\n\ndef one_hot(df, labels, drop_col=False):\n    for label in labels:\n        df = one_hot_column(df, label, drop_col)\n    return df\n\ncabins = one_hot(cabins, ['Deck'], drop_col=True)\n\ndf['Cabin'] = np.argmax(cabins.drop('Room', axis=1).values, axis=1)\ndf[['Sex', 'Embarked', 'Title']] = df[['Sex', 'Embarked', 'Title']].astype('category')\ndf['Sex'] = df['Sex'].cat.codes\ndf['Embarked'] = df['Embarked'].cat.codes\ndf['Title'] = df['Title'].cat.codes\n\ndf['FareBin'] = df['FareBin'].astype(int)\ndf['Age'] = df['Age'].astype(int)\ndf['AgeBin'] = df['AgeBin'].astype(int)\n\ndf.drop(['PassengerId', 'Name', 'Ticket'], axis=1, inplace=True) # 'Cabin'\n\ny = train['Survived'].copy()\nX = df.iloc[:891].copy()\nX_new = df.iloc[891:].copy()\nprint(X.shape, y.shape, X_new.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"52532ab553d5f84aa08cb1f2223f623664cabdbe"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6f2afd2b745daf8adfc4889770177aa48c1fbc29"},"cell_type":"code","source":"from gplearn.genetic import SymbolicRegressor\nfrom sklearn.ensemble import RandomForestRegressor\nfrom gplearn.functions import make_function","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0a32a4ea7e63f260f7578be15b2af422718950c5"},"cell_type":"code","source":"def _protected_division(x1, x2):\n    with np.errstate(divide='ignore', invalid='ignore'):\n        return np.where(np.abs(x2) > 0.001, np.divide(x1, x2), 1.)\n    \nprotected_division = make_function(function=_protected_division,\n                                   name='protected_division', arity=2)\n\nfunction_set = ['add', 'sub', 'mul', 'div', 'sqrt', 'log',\n                'abs', 'neg', 'inv', 'max', 'min', 'cos', 'sin', 'tan', protected_division]\n\nest_gp = SymbolicRegressor(population_size=2000,\n                           generations=30, \n                           stopping_criteria=0.01,\n                           p_crossover=0.7, \n                           function_set=function_set,\n                           p_subtree_mutation=0.1,\n                           p_hoist_mutation=0.05, \n                           p_point_mutation=0.1,\n                           max_samples=0.9, \n                           verbose=1,\n                           parsimony_coefficient=0.01, \n                           random_state=42)\n\nest_gp.fit(X_train.values, y_train.values)\nprint(est_gp.score(X_train.values, y_train.values))\nprint(est_gp.score(X_test.values, y_test.values))\nprint(est_gp._program)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1bec63a03efa3cb2995b73b99da8f1d9c5da590c"},"cell_type":"code","source":"X_pred = est_gp.predict(X_new)\nX_pred = X_pred.astype(np.int8)\n\nsubmission = pd.DataFrame({'PassengerId': test['PassengerId'],\n                           'Survived': X_pred})\n\nsubmission.to_csv('./submission-gp.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4e9c656e41ee1ec136d6bd4e2b548fb3763a7dc7"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}