Skip to content

Instantly share code, notes, and snippets.

@kiwamizamurai
Created February 28, 2019 04:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kiwamizamurai/a20b3b144be85e7bfc3942909582b369 to your computer and use it in GitHub Desktop.
Save kiwamizamurai/a20b3b144be85e7bfc3942909582b369 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "glm_logistic.ipynb",
"version": "0.3.2",
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"metadata": {
"id": "LfOGYjK9Dpho",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# GLM をやってみる\n",
"\n",
"- http://hosho.ees.hokudai.ac.jp/~kubo/stat/2018/Ees/e/HOkubostat2018e.pdf\n",
"\n",
"\n",
"### 先に結果と感想\n",
"Poisson Regressionに引き続き今回はLogisticだ。\n",
"\n",
"- Python3で実装した\n",
"- Logisticの場合もちろんやけど、出力は[0,1]に止める必要がある\n",
"- 今回もOK\n"
]
},
{
"metadata": {
"id": "zrH9pvOcDiuo",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"import pandas as pd\n",
"df = pd.read_csv('http://hosho.ees.hokudai.ac.jp/~kubo/stat/2018/Fig/binomial/data4a.csv')"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "oJvfkLtqECkJ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"- N: 観察種子数\n",
"- y: 生存種子数\n",
"- f: 肥料(有=T, 無=T)\n",
"- x: 体サイズ"
]
},
{
"metadata": {
"id": "iDL7Uim7D_8H",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 170
},
"outputId": "14c7d8b6-d0c1-40e7-fa7a-4d129c99d39c"
},
"cell_type": "code",
"source": [
"from __future__ import print_function\n",
"df.columns = ['number', 'alive', 'body_size', 'status']\n",
"print(df.head())\n",
"print('\\n')\n",
"print(df.isnull().sum()[df.isnull().sum() != 0])"
],
"execution_count": 103,
"outputs": [
{
"output_type": "stream",
"text": [
" number alive body_size status\n",
"0 8 1 9.76 C\n",
"1 8 6 10.48 C\n",
"2 8 5 10.83 C\n",
"3 8 6 10.94 C\n",
"4 8 1 9.37 C\n",
"\n",
"\n",
"Series([], dtype: int64)\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "Av08PtWYG-5t",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 170
},
"outputId": "02e183a2-6866-444e-a8ae-758794a4449f"
},
"cell_type": "code",
"source": [
"print(df.describe())"
],
"execution_count": 104,
"outputs": [
{
"output_type": "stream",
"text": [
" number alive body_size\n",
"count 100.0 100.000000 100.000000\n",
"mean 8.0 5.080000 9.967200\n",
"std 0.0 2.743882 1.088954\n",
"min 8.0 0.000000 7.660000\n",
"25% 8.0 3.000000 9.337500\n",
"50% 8.0 6.000000 9.965000\n",
"75% 8.0 8.000000 10.770000\n",
"max 8.0 8.000000 12.440000\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "Z_AKaMPKEK2q",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 136
},
"outputId": "2f40ef52-00b0-497a-a6fb-9051ec6231ec"
},
"cell_type": "code",
"source": [
"from sklearn.preprocessing import LabelEncoder\n",
"# 前回は関数書いたけどよく考えたら既存のがある\n",
"\n",
"Lenco = LabelEncoder()\n",
"df[\"label\"] = Lenco.fit_transform(df[\"status\"])\n",
"\n",
"import collections\n",
"\n",
"print(collections.Counter(df[\"label\"]))\n",
"print(df.head())"
],
"execution_count": 105,
"outputs": [
{
"output_type": "stream",
"text": [
"Counter({0: 50, 1: 50})\n",
" number alive body_size status label\n",
"0 8 1 9.76 C 0\n",
"1 8 6 10.48 C 0\n",
"2 8 5 10.83 C 0\n",
"3 8 6 10.94 C 0\n",
"4 8 1 9.37 C 0\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "cuVJXkPlF7U0",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('seaborn-darkgrid')\n",
"plt.rcParams['figure.figsize'] = 14, 6\n",
"import seaborn as sns\n",
"import statsmodels.api as sm"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "6lge0d6_GnOg",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
},
"outputId": "bfca3fa1-64a9-4dfa-a530-cc7fe019a0a5"
},
"cell_type": "code",
"source": [
"df.groupby(['status']).mean().unstack()"
],
"execution_count": 107,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" status\n",
"number C 8.0000\n",
" T 8.0000\n",
"alive C 4.6800\n",
" T 5.4800\n",
"body_size C 10.2650\n",
" T 9.6694\n",
"label C 0.0000\n",
" T 1.0000\n",
"dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 107
}
]
},
{
"metadata": {
"id": "ohqgbKLWGtH1",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 410
},
"outputId": "e3893323-9604-4748-99c8-d508482720ea"
},
"cell_type": "code",
"source": [
"mask_T = df[\"label\"] == 1\n",
"mask_C = df[\"label\"] == 0\n",
"\n",
"plt.plot(df[df.columns[2]][mask_T], df[df.columns[1]][mask_T], 'o', color='r', label='T', alpha=0.5)\n",
"plt.plot(df[df.columns[2]][mask_C], df[df.columns[1]][mask_C], 'o', color='g', label='C', alpha=0.5)\n",
"\n",
"plt.xlabel(\"{}\".format(df.columns[2]), size=17)\n",
"plt.ylabel(\"{}\".format(df.columns[1]), size=17)\n",
"plt.legend()"
],
"execution_count": 108,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f310169f6d8>"
]
},
"metadata": {
"tags": []
},
"execution_count": 108
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n4poTAAAAAEai2AEAAABgJIodAAAAAEai2AEAAABgJIodAAAAAEai2AEAAABgJIodAEBEJ510kubM\nmZOUvuvq6nTYYYdpxYoVSem/N7NmzdJZZ51l+7gAAPu5Uh0AAAB2Wrp0qfgv5gBgYKDYAQAMKAce\neGCqQwAA2ITL2AAAvVq+fLmmTp2q8ePH69RTT9XatWu7Xtu8ebPmzp2rY445RuPHj9cpp5yi++67\nTx0dHV3b+P1+zZ8/X9/61rdUUVGhOXPmqKGhoev15557TocddpheeeWVHmN/5zvf0cUXXxxXvA89\n9JBOO+00/eM//qOOPvpozZ49W3/729+6Xu9+Gdtrr72mww47LOK/+fPnd+2zdetWzZs3TyeeeKKO\nOOIInXHGGXriiSfiigsAYD/O7AAAoqqtrVVHR4fuvvtuZWdn6+6779bVV1+tQw45RCUlJZo5c6ZG\njBih++67Tx6PRy+99JL+8z//Uz6fT9ddd50kadGiRVq7dq1uvvlmHXnkkXrzzTd16623do1x4okn\navjw4Vq+fLkmTpy439gff/yxrrnmmpjjXb58ue644w7dcsstqqysVEtLi/7whz/owgsv1PPPP6/S\n0tL9tq+oqNDLL7+8X9uTTz6ppUuX6rTTTpMk7dmzRzNnzpTb7datt96qYcOG6dlnn9VNN92kcDis\n6dOnx51XAIA9KHYAAFHt3r1bd911l9xutyRp8eLFqqqqUnV1tQoKCtTc3Kwnn3xSBx10kCRp9OjR\n2rBhgx5//HHNmzdPHR0deuaZZ3Teeed1nU0ZPXq06uvrtWTJEklSVlaWvv/97+u+++7Trl27ui4z\ne/rppzV06FBNnjw55njfe+895efn6+yzz5bLte9X3I033qhzzjmn6xi6y8nJkcfj6Xr+5ptv6r77\n7tOVV16pb3/725KkZcuWaceOHVq1apXGjh0rSbr44ov1/vvv67777tN5550nh8MRT1oBADbhMjYA\nQFTl5eX7FQmFhYUqKyvTRx99pPfee09lZWVdhU6niooKBQIBbd68WZ9++qn27t2r8ePH77fNUUcd\ntd/zc889V+FwWNXV1ZKkcDisNWvW6Hvf+56ysrJijvfkk09WMBjUeeedpz/+8Y/66KOPlJ2drYqK\niojFTnfbt2/X5ZdfrilTpux36dzbb78tj8fTVeh0mjhxourr6+X1emOODwBgL87sAACiGjJkSI82\nt9utlpYWSdLgwYN7vN7Z5vf7u+56lp+f36OP7kpKSnTKKado2bJlmjVrlt588001NDTo3HPPjSve\nSZMm6Y9//KN+//vf695779WuXbs0cuRIzZkzR9OmTYu6XzAY1KWXXqqSkhItXrx4v9d8Pp8aGxtV\nUVGxX3vn95Lq6+t7XB4HAEgPFDsAgKj8fn/EttGjR8vpdOrjjz/u8brP55O0r1Dau3evJHUVR1/f\nprsZM2Zo5syZqqur09NPP61JkyaprKws7pgrKipUUVGhUCikd999Vw8++KCuv/56jRgxQscee2zE\nfW644QZt27ZNy5cv16BBg/Z7bciQIRo2bJgeeeSRiPsOHTo07hgBAPbgMjYAQFTvv/++vvjii67n\njY2N+vzzzzVmzBhNmDBBO3bs0GeffbbfPm+++aYKCgp08MEHa/To0XK5XHr33Xf326b73dE6fetb\n39KYMWO0cuVKrV27Vuedd17c8b700kt67733JElOp1NHHnmkbrnlFknSO++8E3Gf3/zmN/qf//kf\nLVmypMcledK+S+68Xq/y8vI0evTorn+DBg1SQUGB8vLy4o4TAGAPih0AQFSDBw/Wtddeq7q6Om3Y\nsEHXXXedXC6XzjzzTH33u9+Vx+PRvHnz9Pbbb+uTTz7Rww8/rNWrV+tHP/qRsrOzNXjwYE2dOlUr\nVqzQmjVr9Omnn+rJJ5/UmjVrIo53/vnn69FHH1VeXl7XDQLisXz5cs2ZM0fPPfectm3bps2bN+v+\n+++Xy+XSMccc02P7v/71r7r77rv1ox/9SP/wD/8gr9fb9W/nzp2SpGnTpsnj8eiyyy7Ta6+9pm3b\ntumvf/2rLrjgAl199dVxxwgAsI8jzH8jDQCI4KSTTlJFRYUqKyv1wAMPaMeOHRo5cqSuueYanXTS\nSZKkTz75RL/4xS/0+uuvq6WlRaNGjdL06dM1e/bsrn52796tn/3sZ3rhhRckSccee6wuuugizZgx\nQ4sXL97vuzS7d+/Wscceq7lz52ru3LlxxxwIBHTXXXfp+eefl9frldvt1qGHHqof//jHXXd1mzVr\nlvbs2aNVq1Zp/vz5euqppyL2NWLECP3f//2fJGnbtm2688479corr8jn86mkpETf+c53dPnll0f8\n3hIAID1Q7AAA0saTTz6pW265RS+88IKKiopSHQ4AIMNxgwIAQMrt2LFDb7/9thYvXqxLLrmEQgcA\nYAnO7AAAUu7www9XYWGhvve97+myyy7b7//WeeONN3TRRRf12ceZZ56pm2++OZlhAgAyDMUOACCt\nBYNB1dfX97nd4MGDVVxcbENEAIBMQbEDAAAAwEjcehoAAACAkSh2AAAAABiJYgcAAACAkSh2AAAA\nABjp/wEU0/ExAbIeVAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 1008x432 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "rP8KWetQH3TF",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# Logistic Regression"
]
},
{
"metadata": {
"id": "5IXEdGEuHmV4",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"肥料あり(T)の方が生存個体数(alive)が多いっぽい"
]
},
{
"metadata": {
"id": "-F7Evg8eH9YY",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 306
},
"outputId": "c19a8499-971b-445c-9942-538dc9b71e64"
},
"cell_type": "code",
"source": [
"X = sm.add_constant(df[['body_size','label']], prepend=False)\n",
"print(X.head())\n",
"print('\\n')\n",
"print(X.describe())"
],
"execution_count": 109,
"outputs": [
{
"output_type": "stream",
"text": [
" body_size label const\n",
"0 9.76 0 1.0\n",
"1 10.48 0 1.0\n",
"2 10.83 0 1.0\n",
"3 10.94 0 1.0\n",
"4 9.37 0 1.0\n",
"\n",
"\n",
" body_size label const\n",
"count 100.000000 100.000000 100.0\n",
"mean 9.967200 0.500000 1.0\n",
"std 1.088954 0.502519 0.0\n",
"min 7.660000 0.000000 1.0\n",
"25% 9.337500 0.000000 1.0\n",
"50% 9.965000 0.500000 1.0\n",
"75% 10.770000 1.000000 1.0\n",
"max 12.440000 1.000000 1.0\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "d7I6s6L_HUvQ",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 85
},
"outputId": "c6ed47e9-65c1-40d1-b41e-0275f085871c"
},
"cell_type": "code",
"source": [
"model = sm.GLM(df.iloc[:, 0], X, family=sm.families.Binomial(sm.families.links.logit))\n",
"#glm_result = model.fit()\n",
"\n",
"#print('Residual of GLM: \\n', glm_result.resid_deviance)\n",
"print('\\n')\n",
"#print('Parameters: ', glm_result.params)\n",
"print('\\n')\n",
"#print(glm_result.summary())"
],
"execution_count": 110,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
"\n",
"\n",
"\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "lkcJVqdYIbke",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 476
},
"outputId": "6f7cce74-f725-404b-99db-ddce120f6a2c"
},
"cell_type": "code",
"source": [
"glm_reslt = model.fit()"
],
"execution_count": 111,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/statsmodels/genmod/families/family.py:895: RuntimeWarning: invalid value encountered in log\n",
" np.log(1 - mu + 1e-200)) * freq_weights)\n"
],
"name": "stderr"
},
{
"output_type": "error",
"ename": "ValueError",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-111-92d767d9f838>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mglm_reslt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/usr/local/lib/python3.6/dist-packages/statsmodels/genmod/generalized_linear_model.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, start_params, maxiter, method, tol, scale, cov_type, cov_kwds, use_t, full_output, disp, max_start_irls, **kwargs)\u001b[0m\n\u001b[1;32m 901\u001b[0m return self._fit_irls(start_params=start_params, maxiter=maxiter,\n\u001b[1;32m 902\u001b[0m \u001b[0mtol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscale\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mscale\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcov_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcov_type\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 903\u001b[0;31m cov_kwds=cov_kwds, use_t=use_t, **kwargs)\n\u001b[0m\u001b[1;32m 904\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 905\u001b[0m return self._fit_gradient(start_params=start_params,\n",
"\u001b[0;32m/usr/local/lib/python3.6/dist-packages/statsmodels/genmod/generalized_linear_model.py\u001b[0m in \u001b[0;36m_fit_irls\u001b[0;34m(self, start_params, maxiter, tol, scale, cov_type, cov_kwds, use_t, **kwargs)\u001b[0m\n\u001b[1;32m 977\u001b[0m \u001b[0mdev\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfamily\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdeviance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mendog\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfreq_weights\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 978\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misnan\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdev\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 979\u001b[0;31m raise ValueError(\"The first guess on the deviance function \"\n\u001b[0m\u001b[1;32m 980\u001b[0m \u001b[0;34m\"returned a nan. This could be a boundary \"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 981\u001b[0m \" problem and should be reported.\")\n",
"\u001b[0;31mValueError\u001b[0m: The first guess on the deviance function returned a nan. This could be a boundary problem and should be reported."
]
}
]
},
{
"metadata": {
"id": "H6hcmG-NLg6T",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# は?エラーだと?\n",
"- https://stackoverflow.com/questions/25534414/glm-in-statsmodel-returning-error \n",
"\n",
"\n",
"詳しく調べるとLogisticの場合、応答変数が\n",
"- バイナリ\n",
"- [0,1]\n",
"のどちらかの必要があるよう\n",
"\n",
"ということでスケーリングしてみる"
]
},
{
"metadata": {
"id": "03ACBDcbJHD-",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 125
},
"outputId": "ccff0546-4ab5-4321-ecf1-d90b4c32e8ee"
},
"cell_type": "code",
"source": [
"from sklearn.preprocessing import MinMaxScaler\n",
"\n",
"scaler = MinMaxScaler()\n",
"\n",
"\n",
"y = df['alive'].reshape(-1, 1)\n",
"scaled = scaler.fit_transform(y)"
],
"execution_count": 112,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:6: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead\n",
" \n",
"/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py:595: DataConversionWarning: Data with input dtype int64 was converted to float64 by MinMaxScaler.\n",
" warnings.warn(msg, DataConversionWarning)\n"
],
"name": "stderr"
}
]
},
{
"metadata": {
"id": "W-n0tGw7L0Ni",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1530
},
"outputId": "4021f990-cf2f-41b6-e180-d27aef9de978"
},
"cell_type": "code",
"source": [
"model = sm.GLM(scaled, X, family=sm.families.Binomial(sm.families.links.logit))\n",
"glm_result = model.fit()\n",
"\n",
"print('Parameters: \\n', glm_result.params)\n",
"print('\\n')\n",
"print(glm_result.summary())\n",
"print('\\n')\n",
"print('Residual of GLM: \\n', glm_result.resid_deviance)"
],
"execution_count": 113,
"outputs": [
{
"output_type": "stream",
"text": [
"Parameters: \n",
" body_size 1.952406\n",
"label 2.021506\n",
"const -19.536066\n",
"dtype: float64\n",
"\n",
"\n",
" Generalized Linear Model Regression Results \n",
"==============================================================================\n",
"Dep. Variable: y No. Observations: 100\n",
"Model: GLM Df Residuals: 97\n",
"Model Family: Binomial Df Model: 2\n",
"Link Function: logit Scale: 1.0\n",
"Method: IRLS Log-Likelihood: -42.112\n",
"Date: Thu, 28 Feb 2019 Deviance: 153.08\n",
"Time: 04:14:39 Pearson chi2: 13.7\n",
"No. Iterations: 7 \n",
"==============================================================================\n",
" coef std err z P>|z| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"body_size 1.9524 0.393 4.971 0.000 1.183 2.722\n",
"label 2.0215 0.654 3.090 0.002 0.739 3.304\n",
"const -19.5361 3.999 -4.886 0.000 -27.373 -11.699\n",
"==============================================================================\n",
"\n",
"\n",
"Residual of GLM: \n",
" 0 -0.981278\n",
"1 1.586884\n",
"2 -1.892603\n",
"3 -1.986439\n",
"4 -0.712337\n",
"5 0.429824\n",
"6 0.788909\n",
"7 -2.053705\n",
"8 -0.192863\n",
"9 0.309571\n",
"10 -0.769231\n",
"11 -0.775751\n",
"12 -0.391409\n",
"13 -1.534036\n",
"14 -1.222374\n",
"15 -2.036971\n",
"16 -1.131227\n",
"17 0.808939\n",
"18 1.393811\n",
"19 0.381340\n",
"20 0.988897\n",
"21 0.745003\n",
"22 -0.700134\n",
"23 1.172317\n",
"24 -0.815694\n",
"25 0.189588\n",
"26 0.921534\n",
"27 -2.297506\n",
"28 -1.586884\n",
"29 -1.490060\n",
" ... \n",
"70 0.585286\n",
"71 -0.386070\n",
"72 1.486012\n",
"73 -0.633300\n",
"74 0.754323\n",
"75 0.299294\n",
"76 -1.965577\n",
"77 1.494797\n",
"78 -2.372046\n",
"79 -1.749797\n",
"80 0.047816\n",
"81 0.428584\n",
"82 1.450924\n",
"83 0.164684\n",
"84 1.311973\n",
"85 -1.031679\n",
"86 -0.627718\n",
"87 -2.270100\n",
"88 0.145166\n",
"89 0.226588\n",
"90 0.199868\n",
"91 0.889191\n",
"92 1.991000\n",
"93 0.134311\n",
"94 0.348487\n",
"95 -2.425809\n",
"96 -1.152019\n",
"97 1.152019\n",
"98 0.440730\n",
"99 -0.819352\n",
"Length: 100, dtype: float64\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "cGK1KP0ONoY7",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# 最後にPlot"
]
},
{
"metadata": {
"id": "DUopDEsHMtgi",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 410
},
"outputId": "4e8fa928-ce4a-48b2-d2e4-a506bf0973cd"
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"\n",
"mask_T = df[\"label\"] == 1\n",
"mask_C = df[\"label\"] == 0\n",
"\n",
"plt.plot(df[df.columns[2]][mask_T], scaled[mask_T], 'o', color='r', label='T', alpha=0.5)\n",
"plt.plot(df[df.columns[2]][mask_C], scaled[mask_C], 'o', color='g', label='C', alpha=0.5)\n",
"\n",
"# Logistic Regression\n",
"predict = model.predict(glm_result.params)\n",
"plt.scatter(df['body_size'], predict, color='black', label='Logistic Regression')\n",
"\n",
"def function(x1, x2, a, b, c):\n",
" linear = c + a * x1 + b * x2\n",
" return 1 / (1 + np.exp(-linear))\n",
"\n",
"yy = function(df[\"body_size\"], df[\"label\"], *glm_result.params)\n",
"plt.scatter(df['body_size'], yy, color='blue', label='Manual')\n",
"\n",
"plt.xlabel(\"{}\".format(df.columns[2]), size=17)\n",
"plt.ylabel(\"{}\".format(df.columns[1]), size=17)\n",
"plt.legend()"
],
"execution_count": 114,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f31016d54e0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 114
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
"<Figure size 1008x432 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "XmO-GUS_OFvX",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "Z9yK-Pv-OIUA",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment