{"cells":[{"metadata":{"_uuid":"854f40bab9f5759f796dce7d2d11c26825d8977c"},"cell_type":"markdown","source":"# This is my first public kernel which will introduce you the useful tool to visualize your preds.\n\n"},{"metadata":{"_uuid":"6ba59471c5ddbcf90870b22cf45a7b40908bbfba"},"cell_type":"markdown","source":"cf : https://www.kaggle.com/c/PLAsTiCC-2018/discussion/74564"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport lightgbm as lgb\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ae7bdfa3711bf4eb7eef1eb4c0114e59fcbf5419"},"cell_type":"code","source":"print('Train')\ntrain = pd.read_csv(\"../input/train/train.csv\")\nprint(train.shape)\n\ntarget = train['AdoptionSpeed']\ntrain_id = train['PetID']\ntrain.drop(['AdoptionSpeed', 'PetID'], axis=1, inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aa3f388ba2d8e3a291758d6a291d5e8a5d820efb"},"cell_type":"code","source":"# drop categorical features to simplify\ntrain.drop(['Name', 'RescuerID', 'Description'], axis=1, inplace=True)\ntrain.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0dd5ccdcd4e7b67c1f47a6fde0d729f266e128e2"},"cell_type":"code","source":"# 5 classes classificasion\n\nlgb_params = {'objective':'multiclass',\n              'num_class': 5, \n              'learning_rate': 0.1,\n              'boosting': 'gbdt',\n              'n_estimators': 10000, \n              'random_state': 2019}","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aa80cf64cec1a6e466090e009268166c132179ef"},"cell_type":"code","source":"from sklearn.model_selection import KFold\n\nfolds = KFold(n_splits=3, shuffle=True, random_state=15)\n\nclasses = sorted(target.unique())\noof_preds = np.zeros((len(train), len(classes)))\n\nfeatures = [c for c in train.columns if c not in ['target']]\n\nfor fold_, (trn_, val_) in enumerate(folds.split(train.values, target.values)):\n    trn_x, trn_y = train.iloc[trn_][features], target.iloc[trn_]\n    val_x, val_y = train.iloc[val_][features], target.iloc[val_]\n    \n    clf = lgb.LGBMClassifier(**lgb_params)\n    clf.fit(\n        trn_x, trn_y,\n        eval_set=[(trn_x, trn_y), (val_x, val_y)],\n        verbose=100,\n        early_stopping_rounds=100,\n    )\n    oof_preds[val_] = clf.predict_proba(val_x, num_iteration=clf.best_iteration_)\n    \nprint(oof_preds.shape)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b4f8003a084c3f653b73c6cf2b29b33cfb48338c"},"cell_type":"markdown","source":"# We got probabilities of each classes"},{"metadata":{"trusted":true,"_uuid":"a9054dbb9302bedc2237d57a72577aaff4370e9a"},"cell_type":"code","source":"oof_preds[:5]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"41e609deec1ecc5ecd17fb907268bbb79f86f144"},"cell_type":"code","source":"# http://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html\ndef plot_confusion_matrix(cm, classes,\n                          normalize=False,\n                          title='Confusion matrix',\n                          cmap=plt.cm.Blues):\n    if normalize:\n        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n        print(\"Normalized confusion matrix\")\n    else:\n        print('Confusion matrix, without normalization')\n\n    print(cm)\n\n    plt.imshow(cm, interpolation='nearest', cmap=cmap)\n    plt.title(title)\n    plt.colorbar()\n    tick_marks = np.arange(len(classes))\n    plt.xticks(tick_marks, classes, rotation=45)\n    plt.yticks(tick_marks, classes)\n\n    fmt = '.2f' if normalize else 'd'\n    thresh = cm.max() / 2.\n    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n        plt.text(j, i, format(cm[i, j], fmt),\n                 horizontalalignment=\"center\",\n                 color=\"white\" if cm[i, j] > thresh else \"black\")\n\n    plt.ylabel('True label')\n    plt.xlabel('Predicted label')\n    plt.tight_layout()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b3a94495d68ded4acb499ec0437dfd5fa8ac380c"},"cell_type":"code","source":"unique_y = np.unique(target)\nclass_map = dict()\nfor i,val in enumerate(unique_y):\n    class_map[val] = i\n        \ny_map = np.zeros((target.shape[0],))\ny_map = np.array([class_map[val] for val in target])\ny_map.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"65040b65cecec0b158f0786ea4663b4aad6880b4"},"cell_type":"code","source":"import itertools\nfrom sklearn.metrics import confusion_matrix\n\n# Compute confusion matrix\ncnf_matrix = confusion_matrix(y_map, np.argmax(oof_preds,axis=-1))\nnp.set_printoptions(precision=2)\n\nclass_names = classes # list [0, 1, 2, 3, 4]\n\n# Plot non-normalized confusion matrix\nplt.figure(figsize=(7,7))\nfoo = plot_confusion_matrix(cnf_matrix, classes=class_names,normalize=True,\n                      title='Confusion matrix')","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"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}