{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nfrom gensim.models import KeyedVectors\nfrom sklearn.model_selection import train_test_split\nfrom tqdm import tqdm\nfrom nltk.corpus import stopwords\nimport keras.preprocessing.text as T\nfrom keras.preprocessing.text import Tokenizer\nimport nltk\nnltk.download('stopwords')\nfrom sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!ls ../input/quora-insincere-questions-classification","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/quora-insincere-questions-classification/train.csv\")\ntest = pd.read_csv(\"../input/quora-insincere-questions-classification/test.csv\")\nprint(\"Train shape : \",train.shape)\nprint(\"Test shape : \",test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train_all = train[\"question_text\"].values\nx_test = test[\"question_text\"].values\ny_train_all = train[\"target\"].values\n\nx_train, x_val, y_train, y_val = train_test_split(x_train_all, y_train_all, test_size=0.2, random_state=42)\n\ntrain_len = len(x_train)\nval_len = len(x_val)\ntest_len = len(x_test)\nprint(train_len)\nprint(val_len)\nprint(test_len)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"doc = np.concatenate((x_train, x_val, x_test))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"vectorizer = TfidfVectorizer(stop_words='english', min_df=10, ngram_range=(1, 3))\n# vectorizer = CountVectorizer(stop_words='english', min_df=5, ngram_range=(1, 3))\ntfidf_model = vectorizer.fit(doc)\ntrain_vector = tfidf_model.transform(x_train)\nval_vector = tfidf_model.transform(x_val)\ntest_vector = tfidf_model.transform(x_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.naive_bayes import MultinomialNB\nmnb = MultinomialNB()\nmnb.fit(train_vector, y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_pred_val = mnb.predict(val_vector)\nfrom sklearn.metrics import accuracy_score, precision_score, f1_score\nacc_val = accuracy_score(y_val, y_pred_val)\npre_val = precision_score(y_val, y_pred_val)\nf1_val = 2 / (1 / acc_val + 1 / pre_val)\nprint(acc_val, pre_val, f1_val)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_pred_val_prob = mnb.predict_proba(val_vector)[:, 1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_pred_val_prob","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import f1_score\nthreshold_optimal = 0\nf1_max = 0\ndivide_count = 100\nfor i in range(divide_count - 1):\n    threshold = (i + 1) / divide_count\n    y_pred_val = np.where(y_pred_val_prob > threshold, 1, 0)\n    f1 = f1_score(y_val, y_pred_val)\n    if f1 >= f1_max:\n        threshold_optimal = threshold\n        f1_max = f1\n    # print(threshold, f1)\nprint(threshold_optimal, f1_max)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_pred_test = np.where(mnb.predict_proba(test_vector)[:, 1] > threshold_optimal, 1, 0)\nout_df = pd.DataFrame({\"qid\":test[\"qid\"].values})\nout_df['prediction'] = y_pred_test\nout_df.to_csv(\"submission.csv\", index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.4"}},"nbformat":4,"nbformat_minor":4}