diff options
| author | 崔一鸣 <[email protected]> | 2020-05-10 13:52:13 +0800 |
|---|---|---|
| committer | 崔一鸣 <[email protected]> | 2020-05-10 13:52:13 +0800 |
| commit | e49a688e23f7d1bf492e9a28421e870ff1b7a371 (patch) | |
| tree | 316bbc5bd3cc3014e6d1415265553d3c6e421836 /Experiment/MarkovModel/markov_tofig.ipynb | |
| parent | 01d5c4c872e30ad28ed613de7f9964eb8cce8f5e (diff) | |
Diffstat (limited to 'Experiment/MarkovModel/markov_tofig.ipynb')
| -rw-r--r-- | Experiment/MarkovModel/markov_tofig.ipynb | 344 |
1 files changed, 298 insertions, 46 deletions
diff --git a/Experiment/MarkovModel/markov_tofig.ipynb b/Experiment/MarkovModel/markov_tofig.ipynb index b2d8d27..09a3262 100644 --- a/Experiment/MarkovModel/markov_tofig.ipynb +++ b/Experiment/MarkovModel/markov_tofig.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 35, + "execution_count": 169, "metadata": {}, "outputs": [ { @@ -16,11 +16,11 @@ "source": [ "import pandas as pd\n", "import numpy as np\n", - "N = 20\n", - "date = '2019-12-20_21'\n", + "#date = '2019-12-20_21'\n", + "date = 'noProxy/All'\n", "root_dir = '/Users/Leo/Documents/github/GradProj/'\n", - "train_path = root_dir + 'Experiment/MarkovModel/CsvFile/' + date + '/train.csv'\n", - "test_path = root_dir + 'Experiment/MarkovModel/CsvFile/' + date + '/test.csv'\n", + "train_path = root_dir + 'Experiment/MarkovModel/CsvFile/' + date + '/train_15_0.8.csv'\n", + "test_path = root_dir + 'Experiment/MarkovModel/CsvFile/' + date + '/test_15_0.8.csv'\n", "train_df = pd.read_csv(train_path,index_col=0)\n", "test_df = pd.read_csv(test_path,index_col=0)\n", "print('end2')" @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 170, "metadata": { "collapsed": true }, @@ -50,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 171, "metadata": {}, "outputs": [ { @@ -58,18 +58,18 @@ "output_type": "stream", "text": [ " precision recall f1\n", - "LogisticRegression 0.682227 0.682227 0.682227\n", - "SVM 0.706852 0.706852 0.706852\n", - "GaussianNB 0.680086 0.680086 0.680086\n", - "tree 0.736188 0.736188 0.736188\n", - "RandomForest 0.736831 0.736831 0.736831\n" + "LogisticRegression 0.447211 0.447211 0.447211\n", + "SVM 0.451245 0.451245 0.451245\n", + "GaussianNB 0.371946 0.371946 0.371946\n", + "tree 0.623329 0.623329 0.623329\n", + "RandomForest 0.626095 0.626095 0.626095\n" ] }, { "data": { - "image/png": "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\nAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x1a10748940>" + "<matplotlib.figure.Figure at 0x1a1f0e6278>" ] }, "metadata": {}, @@ -132,7 +132,116 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 172, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LogisticRegression: \n", + "[ 0.81011609 0.86749717 0.9655914 0.46787479 0.75154004 0.72459016\n", + " 0.79276018 0.80684327 0.95348837 0.94557097]\n", + "[ 0.92782526 0.91408115 0.90707071 0.52592593 0.4187643 0.88844221\n", + " 0.89296636 0.73246493 0.95571096 0.848659 ]\n", + "[ 0.86498451 0.89018013 0.93541667 0.49520488 0.53783982 0.79819413\n", + " 0.83988495 0.76785714 0.95459837 0.89449773]\n", + "0.808587244328\n", + "0.801191080311\n", + "0.797865832655\n", + "SVM: \n", + "[ 0.85129118 0.8948626 0.91411043 0.4501992 0.43452958 0.62978723\n", + " 0.80304472 0.80848749 0.96424315 0.95048439]\n", + "[ 0.90788224 0.89379475 0.9030303 0.62777778 0.51258581 0.44623116\n", + " 0.86034659 0.74448898 0.94289044 0.84578544]\n", + "[ 0.87867647 0.89432836 0.90853659 0.52436195 0.47034121 0.52235294\n", + " 0.83070866 0.77516954 0.95344726 0.89508363]\n", + "0.770103998261\n", + "0.768481348614\n", + "0.765300659766\n", + "GaussianNB: \n", + "[ 0.76221198 0.76582278 0.86720322 0.2641844 0.36886633 0.83389831\n", + " 0.84943538 0.78398983 0.83895539 0.82690406]\n", + "[ 0.78537512 0.86634845 0.87070707 0.27592593 0.74828375 0.24723618\n", + " 0.69011213 0.61823647 0.8986014 0.80076628]\n", + "[ 0.77362021 0.81298992 0.86895161 0.26992754 0.49414431 0.38139535\n", + " 0.76152981 0.69131653 0.86775464 0.8136253 ]\n", + "0.716147167538\n", + "0.680159278335\n", + "0.673525522188\n", + "DecisionTree: \n", + "[ 0.79748823 0.86084142 0.95974576 0.48046875 0.91911765 0.95440085\n", + " 0.74148472 0.90111643 0.92674806 0.96805112]\n", + "[ 0.9648623 0.9522673 0.91515152 0.68333333 0.71510297 0.90452261\n", + " 0.86544343 0.56613226 0.97319347 0.87068966]\n", + "[ 0.87322733 0.90424929 0.9369183 0.56422018 0.8043758 0.92879257\n", + " 0.79868297 0.69538462 0.94940307 0.91679274]\n", + "0.850946297765\n", + "0.841069885565\n", + "0.837204688097\n", + "RandomForest: \n", + "[ 0.79686275 0.85353003 0.97494781 0.55539568 0.92587209 0.95278069\n", + " 0.77433628 0.92671756 0.94038245 0.97300104]\n", + "[ 0.9648623 0.96658711 0.94343434 0.71481481 0.72883295 0.91256281\n", + " 0.89194699 0.60821643 0.97435897 0.89750958]\n", + "[ 0.87285223 0.90654729 0.95893224 0.62510121 0.815621 0.93223819\n", + " 0.828991 0.73442226 0.95706926 0.93373194]\n", + "0.867382638472\n", + "0.860312631327\n", + "0.856550662602\n" + ] + } + ], + "source": [ + "#type+length markov\n", + "\n", + "\n", + "def classify(classifer, name):\n", + " f1_score_list = list()\n", + " recall_score_list = list()\n", + " precision_score_list = list()\n", + " classifer.fit(x_train, y_train)\n", + " y_pred = classifer.predict(x_test)\n", + " precision_score_list.append(precision_score(y_test, y_pred, average=None))\n", + " recall_score_list.append(recall_score(y_test, y_pred, average=None))\n", + " f1_score_list.append(f1_score(y_test, y_pred, average=None))\n", + " scores = [np.mean(precision_score_list, axis=0), np.mean(recall_score_list, axis=0), np.mean(f1_score_list, axis=0)]\n", + " print(name + \": \")\n", + " for score in scores:\n", + " print(score)\n", + " print(np.mean(np.mean(precision_score_list, axis=0)))\n", + " print(np.mean(np.mean(recall_score_list, axis=0)))\n", + " print(np.mean(np.mean(f1_score_list, axis=0)))\n", + " \n", + " \n", + "x_train = train_df.iloc[:,0:15].values.copy()\n", + "y_train = train_df['label'].values.copy()\n", + "x_test = test_df.iloc[:,0:15].values.copy()\n", + "y_test = test_df['label'].values.copy()\n", + "\n", + "\n", + "classifer = LogisticRegression()\n", + "classify(classifer, \"LogisticRegression\")\n", + "\n", + "classifer = SVC()\n", + "classify(classifer, \"SVM\")\n", + "\n", + "classifer = GaussianNB()\n", + "classify(classifer, \"GaussianNB\")\n", + "\n", + "classifer = tree.DecisionTreeClassifier()\n", + "classify(classifer, \"DecisionTree\")\n", + "\n", + "classifer = RandomForestClassifier()\n", + "classify(classifer, \"RandomForest\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 173, "metadata": {}, "outputs": [ { @@ -140,18 +249,123 @@ "output_type": "stream", "text": [ " precision recall f1\n", - "LogisticRegression 0.833619 0.833619 0.833619\n", - "SVM 0.817773 0.817773 0.817773\n", - "GaussianNB 0.738116 0.738116 0.738116\n", - "tree 0.967452 0.967452 0.967452\n", - "RandomForest 0.967452 0.967452 0.967452\n" + "LogisticRegression 0.767174 0.767174 0.767174\n", + "SVM 0.759451 0.759451 0.759451\n", + "GaussianNB 0.657561 0.657561 0.657561\n", + "tree 0.837137 0.837137 0.837137\n", + "RandomForest 0.843707 0.843707 0.843707\n" + ] + } + ], + "source": [ + "#type+burst markov\n", + "x_train = np.append(train_df.iloc[:,0:5].values.copy(), train_df.iloc[:,10:15].values.copy(), axis = 1)\n", + "y_train = train_df['label'].values.copy()\n", + "x_test = np.append(test_df.iloc[:,0:5].values.copy(), test_df.iloc[:,10:15].values.copy(), axis = 1)\n", + "y_test = test_df['label'].values.copy()\n", + "\n", + "\n", + "lr_classifer = LogisticRegression()\n", + "lr_classifer.fit(x_train, y_train)\n", + "y_pred = lr_classifer.predict(x_test)\n", + "lr_precision = precision_score(y_test, y_pred, average='micro')\n", + "lr_recall = recall_score(y_test, y_pred, average='micro')\n", + "lr_f1 = f1_score(y_test, y_pred, average='micro')\n", + "\n", + "svm_classifer = SVC()\n", + "svm_classifer.fit(x_train, y_train)\n", + "y_pred = svm_classifer.predict(x_test)\n", + "svm_precision = precision_score(y_test, y_pred, average='micro')\n", + "svm_recall = recall_score(y_test, y_pred, average='micro')\n", + "svm_f1 = f1_score(y_test, y_pred, average='micro')\n", + "\n", + "gn_classifer = GaussianNB()\n", + "gn_classifer.fit(x_train, y_train)\n", + "y_pred = gn_classifer.predict(x_test)\n", + "gn_precision = precision_score(y_test, y_pred, average='micro')\n", + "gn_recall = recall_score(y_test, y_pred, average='micro')\n", + "gn_f1 = f1_score(y_test, y_pred, average='micro')\n", + "\n", + "tr_classifer = tree.DecisionTreeClassifier()\n", + "tr_classifer.fit(x_train, y_train)\n", + "y_pred = tr_classifer.predict(x_test)\n", + "tr_precision = precision_score(y_test, y_pred, average='micro')\n", + "tr_recall = recall_score(y_test, y_pred, average='micro')\n", + "tr_f1 = f1_score(y_test, y_pred, average='micro')\n", + "\n", + "rf_classifer = RandomForestClassifier()\n", + "rf_classifer.fit(x_train, y_train)\n", + "y_pred = rf_classifer.predict(x_test)\n", + "rf_precision = precision_score(y_test, y_pred, average='micro')\n", + "rf_recall = recall_score(y_test, y_pred, average='micro')\n", + "rf_f1 = f1_score(y_test, y_pred, average='micro')\n", + "\n", + "score_df = pd.DataFrame(np.zeros((5,3)),index = ['LogisticRegression', 'SVM', 'GaussianNB', 'tree', 'RandomForest'], \\\n", + " columns = ['precision', 'recall', 'f1'])\n", + "score_df.loc['LogisticRegression'] = [lr_precision, lr_recall, lr_f1]\n", + "score_df.loc['SVM'] = [svm_precision, svm_recall, svm_f1]\n", + "score_df.loc['GaussianNB'] = [gn_precision, gn_recall, gn_f1]\n", + "score_df.loc['tree'] = [tr_precision, tr_recall, tr_f1]\n", + "score_df.loc['RandomForest'] = [rf_precision, rf_recall, rf_f1]\n", + "print(score_df)\n", + "#ax = score_df.plot.bar(title='type+length markov')\n", + "#fig = ax.get_figure()\n", + "#fig.savefig('../figure/type_length.svg')\n", + "#print(score_df.loc['RandomForest']) " + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.83686527 0.72249169 0.65245721 0.71014108 0.63185015 0.69424787\n", + " 0.68489078 0.52464035 0.82587551 0.84851884]\n", + "[ 0.83686527 0.72249169 0.65245721 0.71014108 0.63185015 0.42307153\n", + " 0. 0.15176948 0. 0. ]\n" + ] + } + ], + "source": [ + "\n", + "x_train = train_df.iloc[:,0:10].values.copy()\n", + "y_train = train_df['label'].values.copy()\n", + "x_test = test_df.iloc[:,0:15].values.copy()\n", + "y_test = test_df['label'].values.copy()\n", + "\n", + "x1_train = np.append(train_df.iloc[:,0:5].values.copy(), train_df.iloc[:,10:15].values.copy(), axis = 1)\n", + "y1_train = train_df['label'].values.copy()\n", + "\n", + "print(x_train[10])\n", + "print(x1_train[10])" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1\n", + "LogisticRegression 0.509336 0.509336 0.509336\n", + "SVM 0.501153 0.501153 0.501153\n", + "GaussianNB 0.413439 0.413439 0.413439\n", + "tree 0.624020 0.624020 0.624020\n", + "RandomForest 0.627593 0.627593 0.627593\n" ] }, { "data": { - "image/png": "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\nMtwjYngTxwM4s2oVWSE42DeeXzurhO9QNaui/ffff4PHjzjiCN55550WqsaKzMvsWea6nf+3qj7f\n/F//r6o8z8qVK6mrq2vW9zz11FMbPD5hwoSPU1KzNee1nd/hGxW33bt7l4rbPn/y8xW33ZSK9lr4\nzN0Kaf78+eyxxx6cfPLJ9OrVi+OOO46lS5fSrVs3LrroIg488EBuv/12Xn75ZQ4//HD69+/PQQcd\nxIsvvgjAG2+8wTHHHEPv3r3p3bv36lDfcstkvevXX3+dwYMH06dPH3r27Mnjjz8OJHdmv/XWWwBc\neuml9OzZk549e3L55ZevrmvPPffk9NNPZ6+99uLLX/4yH3zwQUu/PJYDDncrrDlz5jBixAhmzJhB\nx44dueqqq4BkqOETTzzBsGHDGDFiBL///e+ZMmUKl1xyCSNHjgTg7LPP5vOf/zzTp09n6tSp7LXX\nXms9980338xhhx3GtGnTmD59On369Fnr+JQpUxg9ejTPPvsszzzzDNdddx3PPfccAP/4xz8488wz\nmTlzJttssw133HFHC7waljfulrHC2nHHHTnggAMAOOGEE7jiiisAGDp0KADvv/8+Tz31FF//+po1\nvD/6KFli9eGHH+bGG5Pplurq6th6663Xeu599tmHU089leXLl3P00UevE+5PPPEExxxzDFtssQUA\nxx57LI8//jhDhgyhe/fuq9v379+f+fPnV/k3tyLwmbsVVsNRJ6XtUuCuWrWKbbbZhmnTpq3+mj17\ndkXPPXjwYB577DF22GEHTjzxxNVvBCUbWiRns802W/24rq6OFStWVPQzzco53K2wXn31VZ5++mkA\nxo0bx4EHrrXWNx07dqR79+7cfvvtQBLI06dPB+CQQw7h6quvBpILr++9995a3/vKK6+w3Xbbcfrp\np3Paaacxderas2APHjyYu+66i6VLl7JkyRLuvPNODjrooE3ye1oxOdytsPbcc0/GjBlDr169+Pe/\n/80ZZ5yxTpuxY8dy/fXX07t3b/baay/++tdkidVRo0YxceJE9t57b/r378/MmTPX+r5HHnmEPn36\n0LdvX+644w7OOeectY7369ePU045hYEDB7Lvvvvy7W9/m759+266X9YKJ7M1VAcMGBCez72YZs+e\nzZ577plpDfPnz+fII4/khRdeyLSOjVXpa1i04X8bkpfXQtKUiBjQVDufuZuZ5ZDD3QqpW7durfas\n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\n", + "image/png": "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\nbmaWM/8frXR72wnhVkcAAAAASUVORK5CYII=\n", "text/plain": [ - "<matplotlib.figure.Figure at 0x1a1deb3438>" + "<matplotlib.figure.Figure at 0x1135ff390>" ] }, "metadata": {}, @@ -164,6 +378,34 @@ "y_train = train_df['label'].values.copy()\n", "x_test = test_df.iloc[:,0:10].values.copy()\n", "y_test = test_df['label'].values.copy()\n", + "\n", + "\n", + "# x_test = np.append(test_df.iloc[:,0:5].values.copy(), test_df.iloc[:,5:10].values.copy(), axis = 1)\n", + "# y_test = test_df['label'].values.copy()\n", + "\n", + "def my_pred(y_pred, y_test, proba):\n", + " y_pred1 = list()\n", + " y_test1 = list()\n", + " [rows, clos] = proba.shape\n", + " print([rows, clos])\n", + " for i in range(rows):\n", + " temp = max(proba[i])\n", + " if temp < 0.5:\n", + " continue\n", + " y_pred1.append(y_pred[i])\n", + " y_test1.append(y_test[i])\n", + " f1 = f1_score(y_test1, y_pred1, average=None)\n", + " recall = recall_score(y_test1, y_pred1, average=None)\n", + " precision = precision_score(y_test1, y_pred1, average=None)\n", + " print(precision)\n", + " print(recall)\n", + " print(f1)\n", + " print(np.mean(precision))\n", + " print(np.mean(recall))\n", + " print(np.mean(f1))\n", + " print(str(len(y_test)) + \": \" + str(len(y_test1)) + \": \" + str(len(y_test1) / len(y_test)))\n", + " \n", + "\n", "lr_classifer = LogisticRegression()\n", "lr_classifer.fit(x_train, y_train)\n", "y_pred = lr_classifer.predict(x_test)\n", @@ -192,13 +434,17 @@ "tr_recall = recall_score(y_test, y_pred, average='micro')\n", "tr_f1 = f1_score(y_test, y_pred, average='micro')\n", "\n", + "\n", "rf_classifer = RandomForestClassifier()\n", "rf_classifer.fit(x_train, y_train)\n", "y_pred = rf_classifer.predict(x_test)\n", + "proba = rf_classifer.predict_proba(x_test)\n", + "#my_pred(y_pred, y_test, proba)\n", + "\n", + "\n", "rf_precision = precision_score(y_test, y_pred, average='micro')\n", "rf_recall = recall_score(y_test, y_pred, average='micro')\n", "rf_f1 = f1_score(y_test, y_pred, average='micro')\n", - "\n", "score_df = pd.DataFrame(np.zeros((5,3)),index = ['LogisticRegression', 'SVM', 'GaussianNB', 'tree', 'RandomForest'], \\\n", " columns = ['precision', 'recall', 'f1'])\n", "score_df.loc['LogisticRegression'] = [lr_precision, lr_recall, lr_f1]\n", @@ -206,37 +452,38 @@ "score_df.loc['GaussianNB'] = [gn_precision, gn_recall, gn_f1]\n", "score_df.loc['tree'] = [tr_precision, tr_recall, tr_f1]\n", "score_df.loc['RandomForest'] = [rf_precision, rf_recall, rf_f1]\n", - "print(score_df)\n", - "ax = score_df.plot.bar(title='type+length markov')\n", + "ax = score_df.plot.bar(title='type+length+burst markov')\n", "fig = ax.get_figure()\n", - "#fig.savefig('../figure/type_length.svg')" + "print(score_df)\n", + "fig.savefig('type_length_burst.svg')" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 176, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[4670, 5]\n", - "0.32762312633832974\n", - "0.998692810458\n", - "0.998692810458\n", - "0.998692810458\n" + " precision recall f1\n", + "LogisticRegression 0.811319 0.811319 0.811319\n", + "SVM 0.767865 0.767865 0.767865\n", + "GaussianNB 0.683956 0.683956 0.683956\n", + "tree 0.826418 0.826418 0.826418\n", + "RandomForest 0.850161 0.850161 0.850161\n" ] }, { "data": { + "image/png": "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\n", "text/plain": [ - "\"\\nrf_precision = precision_score(y_test, y_pred, average='micro')\\nrf_recall = recall_score(y_test, y_pred, average='micro')\\nrf_f1 = f1_score(y_test, y_pred, average='micro')\\nscore_df = pd.DataFrame(np.zeros((5,3)),index = ['LogisticRegression', 'SVM', 'GaussianNB', 'tree', 'RandomForest'], columns = ['precision', 'recall', 'f1'])\\nscore_df.loc['LogisticRegression'] = [lr_precision, lr_recall, lr_f1]\\nscore_df.loc['SVM'] = [svm_precision, svm_recall, svm_f1]\\nscore_df.loc['GaussianNB'] = [gn_precision, gn_recall, gn_f1]\\nscore_df.loc['tree'] = [tr_precision, tr_recall, tr_f1]\\nscore_df.loc['RandomForest'] = [rf_precision, rf_recall, rf_f1]\\nax = score_df.plot.bar(title='type+length+burst markov')\\nfig = ax.get_figure()\\nprint(score_df)\\n#fig.savefig('../figure/type_length_burst.svg')\\n\"" + "<matplotlib.figure.Figure at 0x1a1f919da0>" ] }, - "execution_count": 37, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -246,6 +493,10 @@ "x_test = test_df.iloc[:,0:15].values.copy()\n", "y_test = test_df['label'].values.copy()\n", "\n", + "\n", + "# x_test = np.append(test_df.iloc[:,0:5].values.copy(), test_df.iloc[:,5:10].values.copy(), axis = 1)\n", + "# y_test = test_df['label'].values.copy()\n", + "\n", "def my_pred(y_pred, y_test, proba):\n", " y_pred1 = list()\n", " y_test1 = list()\n", @@ -253,19 +504,22 @@ " print([rows, clos])\n", " for i in range(rows):\n", " temp = max(proba[i])\n", - " if temp < 0.95:\n", + " if temp < 0.5:\n", " continue\n", " y_pred1.append(y_pred[i])\n", " y_test1.append(y_test[i])\n", - " f1 = f1_score(y_test1, y_pred1, average='micro')\n", - " recall = recall_score(y_test1, y_pred1, average='micro')\n", - " precision = precision_score(y_test1, y_pred1, average='micro')\n", - " print(len(y_test1) / len(y_test))\n", + " f1 = f1_score(y_test1, y_pred1, average=None)\n", + " recall = recall_score(y_test1, y_pred1, average=None)\n", + " precision = precision_score(y_test1, y_pred1, average=None)\n", " print(precision)\n", " print(recall)\n", " print(f1)\n", + " print(np.mean(precision))\n", + " print(np.mean(recall))\n", + " print(np.mean(f1))\n", + " print(str(len(y_test)) + \": \" + str(len(y_test1)) + \": \" + str(len(y_test1) / len(y_test)))\n", + " \n", "\n", - "'''\n", "lr_classifer = LogisticRegression()\n", "lr_classifer.fit(x_train, y_train)\n", "y_pred = lr_classifer.predict(x_test)\n", @@ -293,16 +547,15 @@ "tr_precision = precision_score(y_test, y_pred, average='micro')\n", "tr_recall = recall_score(y_test, y_pred, average='micro')\n", "tr_f1 = f1_score(y_test, y_pred, average='micro')\n", - "'''\n", + "\n", "\n", "rf_classifer = RandomForestClassifier()\n", "rf_classifer.fit(x_train, y_train)\n", "y_pred = rf_classifer.predict(x_test)\n", "proba = rf_classifer.predict_proba(x_test)\n", - "my_pred(y_pred, y_test, proba)\n", + "#my_pred(y_pred, y_test, proba)\n", "\n", "\n", - "'''\n", "rf_precision = precision_score(y_test, y_pred, average='micro')\n", "rf_recall = recall_score(y_test, y_pred, average='micro')\n", "rf_f1 = f1_score(y_test, y_pred, average='micro')\n", @@ -316,8 +569,7 @@ "ax = score_df.plot.bar(title='type+length+burst markov')\n", "fig = ax.get_figure()\n", "print(score_df)\n", - "#fig.savefig('../figure/type_length_burst.svg')\n", - "'''" + "fig.savefig('type_length_burst.svg')" ] }, { |
