{"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":"# Load the training data\ntrain = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")\n\n# Split the labels into one array and data into another\ntrain_labels = train['Survived']\ntrain_data = train.drop(['Survived'], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b7972d97fbe5eb3a5c648a71be676e8d2e4c5ff9"},"cell_type":"code","source":"# Split the dataset into train and test\n# Let's make training and test sets\nfrom sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(train_data, train_labels, test_size=0.2, random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"471be4f48b9e793f622804540e51c56ea20bcf00"},"cell_type":"code","source":"from sklearn.metrics import accuracy_score\nfrom sklearn.model_selection import cross_val_predict\nfrom sklearn.preprocessing import minmax_scale, MinMaxScaler\n\ndef convert_sex(sex):\n    return 0 if sex == 'male' else 1\n\ndef get_title(name):\n    return name.split(\",\")[1].split(\".\")[0][1:]\n\ndef get_title_code(name):\n    known_titles = ['Mr', 'Mrs', 'Miss', 'Master','Don','Rev','Dr','Mme','Ms','Major','Lady','Sir','Mlle','Col','Capt','the Countess','Jonkheer']\n    title = get_title(name)\n    if title in known_titles:\n        return known_titles.index(title)\n    return -1\n\ndef extract_features(df, scale):\n    feat = pd.DataFrame()\n    feat[\"sex\"] = df['Sex'].apply(convert_sex)\n    median_fare = df['Fare'].median()\n    feat[\"fare\"] = df[\"Fare\"].fillna(median_fare)\n    median_age = df['Age'].median()\n    feat[\"age_set\"] = df['Age'].notnull().apply(int)\n    feat[\"age\"] = df['Age'].fillna(median_age)\n    feat[\"class\"] = df[\"Pclass\"]\n    \n    # Scale all features together\n    feat[\"title_code\"] = df['Name'].apply(get_title_code)\n    if scale:\n        feat[feat.columns] = MinMaxScaler().fit_transform(feat[feat.columns])\n    return feat","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4f1795d6a517d3bb3fa01a45f861164c58a2c0f1"},"cell_type":"code","source":"# Make the feature extractor pipeline-able\nfrom sklearn.base import BaseEstimator, TransformerMixin\n\nclass FeatureExtractor(BaseEstimator, TransformerMixin):\n    def __init__(self, scale=True):\n        self.scale = scale\n    \n    def fit( self, X, y = None):\n        return self\n    \n    def transform( self, X):\n        return extract_features(X, self.scale)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"02729c7f0c8c329b9486bfb2d6c8f6bd977b958a"},"cell_type":"code","source":"import lightgbm as lgb\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.metrics import mean_squared_error\nfrom lightgbm.sklearn import LGBMClassifier\nfrom sklearn.model_selection import GridSearchCV\n\n# Find the best model\nlgb = Pipeline(\n    [('extract', FeatureExtractor(False)),\n     ('lgbmc', LGBMClassifier(random_state=42, boosting_type='goss', max_depth=4))])\n\n# parameters = {\n#     'lgbmc__boosting_type':['gbdt','dart','goss'],\n#     'lgbmc__max_depth':[-1,2,3,4,5,20],\n#     'lgbmc__n_estimators':[100,1000]\n# }\n# lgb = GridSearchCV(lgb, parameters, cv=10).fit(X_train, y_train)\n# print(lgb)\n# print(lgb.best_estimator_)\n# lgb=lgb.best_estimator_\n\n# cross-validate with default params\ny_train_pred = cross_val_predict(lgb, X_train, y_train, cv=10)\nprint('The training CV accuracy of prediction is:', accuracy_score(y_train, y_train_pred))\n\n# check against validation set\nlgb.fit(X_train, y_train)\ny_pred = lgb.predict(X_test)\nprint('The accuracy of prediction against validation set is:', accuracy_score(y_test, y_pred))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d63ce9ac0566b88687ae23027812eeff93d6a0e7"},"cell_type":"code","source":"# Prepare submission\nlgb.fit(train_data, train_labels)\ntest_pred = lgb.predict(test)\nresults = test[['PassengerId']]\nresults['Survived'] = test_pred[results.index]\nprint(results)\nresults.to_csv(\"submission.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"65b91d53b3c83588bfcc0e30f7a39a6f0f9adb81"},"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}