8月18日(周六)成都源创会火热报名中,四位一线行业大牛与你面对面,探讨区块链技术热潮下的冷思考。
Watch Star Fork

Cynhard85 / MachineLearningTutorial

加入码云
与超过 300 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
暂无描述
一键复制 编辑 原始数据 按行查看 历史
机器学习 - 模型评估指标.ipynb 104.86 KB liuxinyang 提交于 2018-07-06 16:43 . modify names
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 加载数据"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.read_csv('diamonds.csv', index_col=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 审查数据"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" carat cut color clarity depth table price x y z\n",
"1 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43\n",
"2 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31\n",
"3 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31\n",
"4 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63\n",
"5 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75\n"
]
}
],
"source": [
"print(df.head())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 整理数据"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" carat cut color clarity depth table price x y z\n",
"1 0.23 2 1 3 61.5 55.0 326 3.95 3.98 2.43\n",
"2 0.21 3 1 2 59.8 61.0 326 3.89 3.84 2.31\n",
"3 0.23 1 1 4 56.9 65.0 327 4.05 4.07 2.31\n",
"4 0.29 3 5 5 62.4 58.0 334 4.20 4.23 2.63\n",
"5 0.31 1 6 3 63.3 58.0 335 4.34 4.35 2.75\n"
]
}
],
"source": [
"for attr in ('cut', 'color', 'clarity'):\n",
" df[attr] = df[attr].astype('category').cat.codes\n",
"print(df.head())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 准备数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 拆分数据\n",
"- 将整体数据拆分为特征和标签"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"target: [0 0 0 ... 0 0 0]\n"
]
},
{
"data": {
"text/plain": [
"18823"
]
},
"execution_count": 190,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sr_target = df['price']\n",
"target = (sr_target.values > 10000).astype(int)\n",
"print(\"target: \", target)\n",
"sr_target.max()"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" carat cut color clarity depth table x y z\n",
"1 0.23 2 1 3 61.5 55.0 3.95 3.98 2.43\n",
"2 0.21 3 1 2 59.8 61.0 3.89 3.84 2.31\n",
"3 0.23 1 1 4 56.9 65.0 4.05 4.07 2.31\n",
"4 0.29 3 5 5 62.4 58.0 4.20 4.23 2.63\n",
"5 0.31 1 6 3 63.3 58.0 4.34 4.35 2.75\n"
]
}
],
"source": [
"df_data = df.drop(['price'], axis=1)\n",
"print(df_data.head())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 特征归一化处理"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(53940, 9)"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import MinMaxScaler\n",
"scaler = MinMaxScaler()\n",
"data = scaler.fit_transform(df_data)\n",
"data.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 准备训练集和测试集"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"np.random.seed(42)\n",
"\n",
"dataset_size = df.shape[0]\n",
"indices = np.random.permutation(dataset_size)\n",
"\n",
"data_shuffled = data[indices]\n",
"target_shuffled = target[indices]\n",
"\n",
"train_data_ratio = 0.8\n",
"train_data_size = int(dataset_size * train_data_ratio)\n",
"\n",
"train_data = data_shuffled[:train_data_size]\n",
"train_target = target_shuffled[:train_data_size]\n",
"test_data = data_shuffled[train_data_size:]\n",
"test_target = target_shuffled[train_data_size:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 训练"
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1,\n",
" eta0=0.0, fit_intercept=True, l1_ratio=0.15,\n",
" learning_rate='optimal', loss='hinge', max_iter=10, n_iter=None,\n",
" n_jobs=1, penalty='l2', power_t=0.5, random_state=42, shuffle=True,\n",
" tol=None, verbose=0, warm_start=False)"
]
},
"execution_count": 194,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import SGDClassifier\n",
"\n",
"sgd_clf = SGDClassifier(random_state=42, max_iter=10)\n",
"sgd_clf.fit(train_data, train_target)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 模型评估\n",
"## 交叉验证"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.96503059 0.96822859 0.9689238 ]\n"
]
}
],
"source": [
"from sklearn.model_selection import cross_val_score\n",
"\n",
"cv_scores = cross_val_score(sgd_clf, train_data, train_target, cv=3, scoring=\"accuracy\")\n",
"print(cv_scores)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 混淆矩阵"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import cross_val_predict\n",
"\n",
"train_pred = cross_val_predict(sgd_clf, train_data, train_target, cv=3)"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[38483 472]\n",
" [ 935 3262]]\n"
]
}
],
"source": [
"from sklearn.metrics import confusion_matrix\n",
"\n",
"conf_matrix = confusion_matrix(train_target, train_pred)\n",
"print(conf_matrix)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 准确率和召回率"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"scores_pred: [-6.34049245 -3.10004451 -4.01247489 ... -4.38889259 -0.85862535\n",
" -6.63857549]\n"
]
},
{
"data": {
"text/plain": [
"(43152,)"
]
},
"execution_count": 198,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scores_pred = cross_val_predict(sgd_clf, train_data, train_target, cv=3, method=\"decision_function\")\n",
"print(\"scores_pred: \", scores_pred)\n",
"scores_pred.shape"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.09870417 0.09868297 0.09868529 ... 1. 1. 1. ]\n",
"[1.00000000e+00 9.99761735e-01 9.99761735e-01 ... 4.76530855e-04\n",
" 2.38265428e-04 0.00000000e+00]\n",
"[-7.18120863 -7.18097096 -7.18092187 ... 8.01341 8.65199784\n",
" 10.34020722]\n"
]
}
],
"source": [
"from sklearn.metrics import precision_recall_curve\n",
"\n",
"precisions, recalls, thresholds = precision_recall_curve(train_target, scores_pred)\n",
"print(precisions)\n",
"print(recalls)\n",
"print(thresholds)"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x128618219b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):\n",
" plt.plot(thresholds, precisions[:-1], \"b--\", label=\"Precision\")\n",
" plt.plot(thresholds, recalls[:-1], \"g-\", label=\"Recall\")\n",
" plt.xlabel(\"Thredshold\")\n",
" plt.legend(loc=\"upper left\", fontsize=18)\n",
" plt.ylim([0, 1])\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"plot_precision_recall_vs_threshold(precisions, recalls, thresholds)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 201,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12863ddbcc0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def plot_precision_vs_recall(precisions, recalls):\n",
" plt.plot(recalls, precisions, \"b-\", linewidth=2)\n",
" plt.xlabel(\"Recall\", fontsize=16)\n",
" plt.ylabel(\"Precision\", fontsize=16)\n",
" plt.axis([0, 1, 0, 1])\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"plot_precision_vs_recall(precisions, recalls)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ROC 曲线"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AkOGDKFZs2bMnz+f1NRUryMBZbjI95y69L/mfp85vL0KvIiInJYuXbowdOhQnnrqKSpVquR1nB+Vyfu/nv1o848FvlalZDY81JU2jWp4nEpERPxkzpw53H777TjnaNq0Kc8991xUFXgoo0X+5eVbgeAAuzUPXEmVcro1TkREwpORkcGIESPo27cv6enpHDoU/oqgpa3MFfn3Pv+BHw5nArB43P94G0ZERHzliy++4JJLLuHZZ59l3LhxLFu2rMRXjitJZeqa/HcHMxjxSnCimwbVy2tyGxERCVtOTg7du3fn2LFjLFiwgKuvvtrrSMUqM0V+39EsOj7+LwAS4oy5Izt6nEhERPzg8OHDVKxYkcTERF599VUaNWpE3bp1vY4VljLTXd9r2rIfH//1V22oWSnZwzQiIuIHK1eupGXLljz22GMAtG/f3jcFHspIkd93NIsdBzIA6H5RXS47v47HiUREJJoFAgEef/xxLr30UgCuvPJKjxOdnjLRXf/h/+3+8fHU66NjggIREYlOO3fu5KabbuLDDz9kwIABTJ8+PaoH1xWlTBT5B+YGZ7W7pWMjzMzjNCIiEs22bdvG6tWr+etf/8ptt93m67oR80U+IzuP7NwAALd0aOxxGhERiUbZ2dksXLiQXr160a5dO7Zt2+bb1nt+MX9N/nehVnyl5ATOqlnB4zQiIhJtNm3aRMeOHenduzeffvopQEwUeIjxIu+c4+307wHo0bKex2lERCTavPLKK6SmprJ582Zmz57NRRdd5HWkEhXTRf6jjXvICnXV//7a5h6nERGRaDJy5EhuvPFGUlJSSEtLo0+fPl5HKnExXeTf2bATgJoVkyifFO9xGhERiSatWrXi97//PYsXL+ass87yOk5ExPTAu5lrdwBw/zUXeJxERES85pxjypQp1KxZkxtvvJHbbrvN60gRF7Mt+d2hRWgAul/sn9mJRESk5O3du5eePXsyZswYFixY4HWcUhOzRX7xV8EJcM6uWYFyieqqFxEpqz766CNatmzJe++9x5QpU3jllVe8jlRqYra7/tPvguv7Dm4bm9dZRESkeF9++SVXXHEFzZo145133iElJcXrSKUqZlvyc9OCt841qVXR4yQiIlLaMjKC65Wcf/75vPzyy6xZs6bMFXiI0SJ/JDOHI5m5ALSoX9XjNCIiUppmz55N48aNWbt2LQA3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qVevHgsXLiQhQZfwRPIrtiXvnFvlnDvinPvWOXeTc64nsC2cnTvnFjjnznXOneOc+2Potd+HCjwuaKxzrrlz7iLnXDjX+vl69xEAkrTUrEiZtH//fvr168fQoUN59tlnAVTgRQpQ5P8KM/sFwRHxS51ze82sBfBb4HKC19g9USEpGDs7N6w5eUQkhixdupTrr7+eH374gaeeeoq7777b60giUavQprCZPQa8AtwALDKzCcBiIJ3gtXPPnBhwV6uSVqETKUtmz55Nly5dSEpKYvny5YwbN444TYolUqiiWvK9gJbOuQwzq0FwZHxL59xXpROtcCda8MnqrhcpUy677DLuuusuHn74YapUqeJ1HJGoV1SVzHTOZQA45/YDX0ZDgQdYs+0AoGvyImXB22+/Tbdu3cjOzqZ69epMnjxZBV4kTEVVySZmNjv0NQdolO/57NIKWJD61YK30JVPivcyhohEUFZWFqNHj6Znz57s2rWLvXv3eh1JxHeK6q7vd9LzqZEMciryAsEZ76qUS/Q4iYhEwldffcWgQYNIS0tj9OjRPPHEEyQnawyOyKkqaoGaD0szyKn44XBwvRwtNSsSe5xz3HzzzWzfvp23336ba6+91utIIr7l6xtLT9xKJyL+d/jwYeLi4qhUqRIvvfQSlSpVon79k9e0EpFT4buRawH3nzVuKmmBGpGYsHr1alq1asWoUaMAOO+881TgRUpA2EXezKLigljocrwWpxGJAYFAgKeeeooOHTqQk5PD7bff7nUkkZhSbJE3s7Zm9inwdeh5SzP7c8STFeJEQ756xSSvIohICdi9ezfXXHMN9957Lz179iQtLY2OHTt6HUskpoTTkp8CXAvsA3DOpRPeUrMR4UJVPined1caRCSf48ePs2HDBp599llmzpxJ9erVvY4kEnPCuagd55zbFlxt9kd5EcpTrBMt+USNrBfxnZycHF555RV+/etf06hRIzZv3kz58uW9jiUSs8JpDm83s7aAM7N4MxsDbIxwrkLlhap8Zd0jL+Ir33zzDZ06deKWW27hww+Dd+iqwItEVjhF/g5gLHAWsAtoF3rNEye668slqrtexC9ef/11UlJS+PLLL3n99de58sorvY4kUiaE012f65wbFPEkYcoNDa8PuGI2FJGocP/99/PYY4/Rrl07/vnPf9KoUSOvI4mUGeEU+dVm9hXw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21xKWcKmlrxEi2+//ZazzjqLDh06sHz5ctq1a6epaUUkahRV5Gub2djC3nTOPR2BPGHR4HrxWnZ2Ng888AB/+tOfWL58OW3atKF9+/ZexxIR+S9FFfl4oBIFz1znKa0nL17asmULgwYNYvXq1QwfPpwWLVp4HUlEpEBFFfmdzrk/lFqSU6AiL1557bXXGDp0KPHx8cycOZN+/fp5HUlEpFDFXpOPRlqgRryyadMmLrroIl599VXOPjuc2Z1FRLxT1NXtK0otxSlSkZfSlJ6ezkcffQTA+PHj+fe//60CLyK+UGiRd87tL80gp+L7gxleR5AywDnH1KlTadu2LXfffTfOOeLj40lI0AJJIuIPvhynflaNCl5HkBi3b98+evfuzahRo7jyyit57733dGuciPiOL5skibqHTiLo+++/p23btuzevZvJkyczevRoFXgR8SVfFnmNrpdIqlu3LgMHDuSGG26gVauoWrZBROSU+LJJrBovJW379u10796dTZs2YWZMmjRJBV5EfM+XRV6D66UkvfXWW7Rs2ZKPP/6Yr776yus4IiIlxpdFXtdHpSRkZmYycuRI+vTpQ5MmTVi3bh3du3f3OpaISInxZZEXKQkTJ07kL3/5C2PHjmX58uU0a9bM60giIiVKA++kTHHOsX//fmrWrMk999xDx44dueKKqJ33SUTkZ/FlS141Xk7HoUOHGDx4MB06dODYsWNUqFBBBV5EYpovi7wG3smpWrVqFampqcycOZObb76ZcuXKeR1JRCTifFnkLXrXzpEoEwgEeOKJJ7j00ksJBAIsWbKE8ePHEx8f73U0EZGI82eRV42XMOXl5TF37lz69OlDWloa7du39zqSiEip8eXAO91CJ8V5//33SU1NpVatWixatIjKlSvr+0ZEyhx/tuS9DiBRKzs7m3vvvZeuXbvyyCOPAFClShUVeBEpk3zZktfAOynI5s2bGTx4MKtXr2b48OE89thjXkcSEfGUL4u8WmVysn/961/07t2b+Ph4Zs6cSb9+/byOJCLiOV921+86nOl1BIkyF154IVdddRVpaWkq8CIiIb4s8vWrl/c6gkSBtLQ0brnlFnJzc6lTpw6zZs3i7LPP9jqWiEjU8GWR133yZZtzjilTpnDJJZfw3nvvsXXrVq8jiYhEJX8WedX4Mmvv3r306tWL0aNH07VrV9LT02natKnXsUREopI/B955HUA8079/f1asWMEzzzzDqFGjNAhTRKQI/izy+rlepuTm5pKXl0dycjKTJ08GIDU11eNUIiLRz5/d9WrLlxnbt2/nsssuY+zYsUCwuKvAi4iEx5dFXjW+bHjrrbdo2bIlaWlpdOjQwes4IiK+48sirxof2zIyMhg5ciR9+vShSZMmrF+/nhtuuMHrWCIivuPPIq+L8jHtu+++429/+xvjxo1j+fLlGj0vInKa/DnwzusAUuKcc3z44YdcccUVNG3alE2bNnHGGWd4HUtExNd82pL3OoGUpEOHDjF48GCuuuoq5s+fD6ACLyJSAvzZkleRjxkrV65k8ODBbN++nUcffZTu3bt7HUlEJGb4syWvDvuYMG3aNDp16oRzjiVLljB+/Hji4nz5LSkiEpV8+RNVLfnYcPbZZ9O3b1/S0tJo376913FERGKOL4u8+NeiRYuYNm0aANdeey2vv/461apV8ziViEhs8mWR1y10/pOdnc0999zD1VdfzQsvvEBOTo7XkUREYp4/i7zXAeSUbNq0iY4dOzJp0iRGjBjBsmXLSExM9DqWiEjM0+h6iaiDBw/Stm1bnHPMnj2bPn36eB1JRKTM8GWRj1OVj3q5ubkkJCRQrVo1pkyZQufOnTnrrLO8jiUiUqaou15KXFpaGhdddBGLFi0C4MYbb1SBFxHxgD+LvKp8VHLOMWXKFC655BIOHz5MhQoVvI4kIlKm+bLIqy0fffbu3UuvXr0YPXo0v/zlL0lPT6dz585exxIRKdN8WeTVko8+8+bN49133+WZZ55h7ty51KpVy+tIIiJlni8H3qnGR4fc3Fw+//xzWrZsyS233ELnzp21LKyISBTxZUtevPftt99y2WWX0alTJ3bv3o2ZqcCLiEQZXxb549l5Xkco0+bMmUNKSgrp6ek8++yz1KlTx+tIIiJSAF8W+arlNVuaFwKBACNGjKBv376cc845rF+/nhtuuMHrWCIiUghfFnldlPdGXFwcubm5jBs3jmXLlnHOOed4HUlERIqggXdSJOcczz//PG3atCE1NZXp06drgSAREZ+IaEvezLqZ2VdmtsnM7ivg/bFm9oWZbTCzD83s7EjmkVNz8OBBBg4cyNChQ5k+fTqgFQBFRPwkYkXezOKBacDVQHNgsJk1P2mz9UAb59zFwExgYpj7LsmoUoAVK1aQkpLCnDlzePzxx/nLX/7idSQRETlFkeyubwtscs5tATCz14BewBcnNnDOLc63/UrgxnB2rBIfWR999BFXXnklDRs2ZMmSJbRr187rSCIichoi2V1fH9ie7/mO0GuFuQ1YGME8UgznHAAdO3ZkwoQJrF+/XgVeRMTHIlnkC2pwuwI3NLsRaAM8Wcj7Q81sjZmtCT4vsYwSsnDhQlq3bs2+fftITEzk4Ycfplq1al7HEhGRnyGSRX4H0DDf8wbA9ydvZGZXAhOAns65rIJ25Jyb4Zxr45xrA2DqsC8x2dnZjBs3jmuuuYbc3FwOHjzodSQRESkhkSzyq4FmZtbYzJKAQcC8/BuYWSownWCB3x3BLFKATZs20bFjR55++mlGjBjBqlWrdO+7iEgMidjAO+dcrpndCbwLxAMvOuc+N7M/AGucc/MIds9XAt4MjZj/1jnXs7h9q7u+ZNx///1s3ryZ2bNn06dPH6/jiIhICbMTg638IrluM/evJSvo2FRLmZ6Oo0ePcvToUc4880x2795NZmYmZ511ltexRESkEGa29sTl6lPly2lt1ZA/PevXr6d169YMGjQI5xx16tRRgRcRiWG+LPKq8qfGOcczzzxDu3btOHbsGA8//LAmFBIRKQN8OXe9hG///v3cfPPNvP322/To0YMXX3yRWrV0qUNEpCzwZUtet9CFLyEhgc2bNzNlyhTmzp2rAi8iUob4siWvnuai5ebmMm3aNIYNG0aVKlVIS0sjMTHR61giIlLKfNmSl8Jt27aNLl26MGbMGGbOnAmgAi8iUkb5ssirIV+wWbNmkZKSwqeffsqrr77KjTeGtd6PiIjEKH8WefXX/8STTz5J//79adasGevXr2fw4MFeRxIREY/58pq8/FTPnj05cOAADz30EElJSV7HERGRKODTlrzXCbznnGPGjBnceuutOOc477zzePTRR1XgRUTkR/4s8l4H8NjBgwcZOHAgw4YNY/v27WRkZHgdSUREopAvi3xZtmLFClJSUpgzZw6PP/447777LhUqVPA6loiIRCFfXpMvq931GRkZ9OnThwoVKrB06VIuueQSryOJiEgU82WRL2sd9nv27KFmzZqUL1+eefPmcd5551G1alWvY4mISJRTd32UW7hwIS1atGDSpEkAtG3bVgVeRETC4ssiXxa667Ozsxk3bhzXXHMNdevW5dpr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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12863de52e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import roc_curve\n",
"\n",
"fpr, tpr, thresholds = roc_curve(train_target, scores_pred)\n",
"\n",
"def plot_roc_curve(fpr, tpr, label=None):\n",
" plt.plot(fpr, tpr, linewidth=2, label=label)\n",
" plt.plot([0, 1], [0, 1], 'k--')\n",
" plt.axis([0, 1, 0, 1])\n",
" plt.xlabel('False Positive Rate')\n",
" plt.ylabel('True Positive Rate')\n",
" \n",
"plt.figure(figsize=(8, 6)) \n",
"plot_roc_curve(fpr, tpr)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 203,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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czqWiIjkMVe25NWUP7tt27bRunVrhg0bxtSpUwFU4EVECilXFnmjKp+ladOm4fV6WbNmDR9//DG33BLQej8iIlJAubPIq8af4eWXX6ZHjx7UqlWLuLg4+vTp43QkERFxmCvH5FXjz9SpUyf279/PU089RXh4uNNxREQkH3BpS15l3lrLxIkT6devH9ZaLr30Up5//nkVeBEROc6lRd7pBM46cOAAvXv3ZuDAgSQkJJCYmOh0JBERyYdcWeQLs6VLl+L1epkxYwYvvvgiX331FcWKFXM6loiI5EMak3eRxMREunbtSrFixVi0aBGNGzd2OpKIiORj7izyhazK7969m7Jly1K0aFFmzZrFpZdeSsmSJZ2OJSIi+ZxLu+sLT5WfO3cuderU4dVXXwWgUaNGKvAiIhIQVxb5wtCST0lJYcSIEdxwww1UrFiRG2+80elIIiLiMu7srnc6QJBt2rSJ2NhYVq5cyb333ssrr7xCkSJFnI4lIiIu48oiX9D9+eefbN++nRkzZtClSxen44iIiEu5tLu+4LXljxw5wmeffQZAy5Yt+f3331XgRUTkH3FnkXc6QC5btWoV9evX56abbmLLli0AFC9e3OFUIiLidu4s8gWkyltree2112jSpAnHjh1j/vz51KhRw+lYIiJSQLhyTL4gLDVrraVXr15MnTqVTp068e6771K2bFmnY4mISAHiziLv/hqPMYZ27drRunVr7r333gI5z0BEnJGamsqOHTtISkpyOoqcgyJFilClShXCwsJy7ZiuLPJulZaWxlNPPUWdOnXo06cPAwYMcDqSiBRAO3bsIDIykmrVqqkB4RLWWvbu3cuOHTuoXr16rh3XlWPybrRt2zZat27Nc889x08//eR0HBEpwJKSkihbtqwKvIsYYyhbtmyu9764siXvtp/badOm0b9/f9LT0/n444/p06eP05FEpIBTgXefYHzPXNmSd9PEu5UrV9KjRw9q1apFXFycCryIFArPPfccderU4corr8Tr9bJs2TLS0tJ45JFHqFWrFl6vF6/Xy3PPPXf8NR6PB6/XS506dYiOjmb06NH4fD4Hvwr3U0s+SA4fPkxkZCQNGjRgypQpdOrUifDwcKdjiYgE3dKlS5k9ezarVq0iIiKCPXv2kJKSwmOPPcZff/3FmjVrKFKkCIcPHz6++BZA0aJFiY+PB2DXrl3c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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12866279cc0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"forest_clf = RandomForestClassifier(random_state=42)\n",
"y_proba_forest = cross_val_predict(forest_clf, train_data, train_target, cv=3, method=\"predict_proba\")\n",
"scores_forest = y_proba_forest[:, 1] # socre = proba of positive class\n",
"fpr_forest, tpr_forest, thresholds_forest = roc_curve(train_target, scores_forest)\n",
"\n",
"plt.figure(figsize=(8, 6))\n",
"plt.plot(fpr, tpr, \"b:\", label=\"SGD\")\n",
"plot_roc_curve(fpr_forest, tpr_forest, \"Random Forest\")\n",
"plt.legend(loc=\"lower right\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 测试模型"
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test accuracy of SGD: 0.9683908045977011\n"
]
}
],
"source": [
"sgd_clf.fit(test_data, test_target)\n",
"accuracy = sgd_clf.score(test_data, test_target)\n",
"print(\"Test accuracy of SGD: \", accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 205,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test accuracy of Random Forest: 0.9978680014831294\n"
]
}
],
"source": [
"forest_clf.fit(test_data, test_target)\n",
"accuracy = forest_clf.score(test_data, test_target)\n",
"print(\"Test accuracy of Random Forest: \", accuracy)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}

评论 ( 0 )

你可以在登录后,发表评论