From 547948736e484614afbf938df72fc266978de622 Mon Sep 17 00:00:00 2001 From: yuji96 Date: Sun, 26 Feb 2023 21:20:34 +0900 Subject: [PATCH] =?UTF-8?q?wip:=20=E4=B8=AD=E5=BF=83=E3=81=8B=E3=82=92?= =?UTF-8?q?=E7=94=A8=E3=81=84=E3=81=9F=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE?= =?UTF-8?q?=E6=84=8F=E7=BE=A9=E3=81=AE=E8=AA=AC=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ja-edited/class.ipynb | 376 +++++++++++++++++++++++++++++++++++++ scripts/ja-edited/class.py | 222 ++++++++++++++++++++++ 2 files changed, 598 insertions(+) create mode 100644 ja-edited/class.ipynb create mode 100644 scripts/ja-edited/class.py diff --git a/ja-edited/class.ipynb b/ja-edited/class.ipynb new file mode 100644 index 0000000..d5ee2d6 --- /dev/null +++ b/ja-edited/class.ipynb @@ -0,0 +1,376 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "身長 167cm という数字は、頭のてっぺんが 0cm から数えてプラスの方向に 167 cm のメモリと重なったことを意味しています。\n", + "しかし、分析する際は 0cm を基準にするよりも、平均的な身長 170 cm を基準として、平均より 3cm 低いと解釈するのが普通です。\n", + "このように基準をずらす操作を **中心化** といいます。\n", + "\n", + "*中心化の目的は、解釈性向上の他に、モデルの学習効率化や線形性の条件を満たすことなどがあります。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "\n", + "# 二十代前半男女の長座体前屈 (stretch) と 50m走 (sprint) の標本データ\n", + "np.random.seed(2)\n", + "boys_stretch = np.random.normal(45.76, 10.01, 100)\n", + "girls_stretch = np.random.normal(45.92, 9.94, 86)\n", + "boys_sprint = np.random.normal(7.27, 0.52, 100)\n", + "girls_sprint = np.random.normal(9.09, 0.79, 86)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAADdCAYAAABjR6FSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAciElEQVR4nO3de1RVZf7H8Y8gKFYiCoj9TDMrLZTBQiONQMsClhiNpq3RklLJ1OnipZoSL0OmY9Z4KVNKhayZyWymTMtbdUpLnM4ktphEm1SMygEBNeQWcH5/uDoTQXHbh+cg79dareXZe5/N9zntLx+efc7ep43D4XAIAAA0Kw/TBQAA0BoRwAAAGEAAAwBgAAEMAIABBDAAAAYQwK0QH3wHAPMI4PNMUFDQr64/evSobrnlFufjzMxMRUdH/+pzZsyYoX//+9/OxytWrNCqVauaVigA47p37266hFatrekCUNObb76pqVOnqkePHrWuT09PlyRt3rxZc+fOrbYuPz9foaGh1ZalpqY6l73//vsKDw9vUD3x8fFat26dnnnmGZWXl+u5557TRx99VGO7Y8eOKTQ0VH379q11PydOnNBjjz2mKVOmNOjnA8D5iABuYe644w7nvwsKChQfH6/58+fX+/mvv/665s2bV+d2f//73/XUU09VWxYWFiZJ6tixo0aMGOFcnpSUpNtuu02SFB4erm3bttW6z2XLltW7TqC1Wb58uf785z9Xm5U+8cQTiomJ0ebNm5WcnKyqqip16NBBq1evVnBwcIN/xtNPP63XXnvN+Tg3N9fZ15I0duxYzZ49u2kDQb0RwG4qMjJS06ZNq7H84osvrrGsuLhYycnJWrRokSIiIrR792795S9/0cUXX6yoqCjndtnZ2froo4/k6enpnBF/9913ys3NVf/+/eXp6SlJ2r17t377299qwIABys7Odj6/a9euuuqqq6rt7/Tp0woJCXEuS09PrzbD3rdvn/z8/HTllVdKkh599NHGvSDAeS47O1tJSUmaOHFiteUHDhxQYmKi9u7dq169emnLli2Ki4vT4cOH1bZtw36Fz549u1rAdu/eXXa73ZL60XAEsJsqKChQVlZWjeWenp667LLLnI/btGmjnTt36ptvvpEkff/995LOzTZ/PoNdunSpqqqqNGjQIGVkZEiShg4dqtLSUs2cOVMJCQnVtl+7dq2ys7PVp08f5ebmqqCgQK+88opCQ0Nlt9u1d+9eZWVlVQvg8PBwLV26VHv37tXkyZM1f/589e3bV3feeadWrFhRbVsA/5OdnV3tzNKP1q9fr/Hjx6tXr16SpBEjRuiPf/yjduzYodjYWF166aW6++679f777ysvL08vvPCC1qxZo6+++krdu3fXX//6V/n4+OiJJ57Q9u3bq+375zNgSbr11lu1cOFC1w0UTgSwG9myZYvmz5+vU6dOqaioSPn5+b+47bJly/TDDz+opKRECxcu1HXXXafHHntMkvT8888rODhYaWlpOnTokKZNm6asrCzZbDZ169bNuY8dO3bokksu0UUXXaQNGzYoPj5enTp1qvZzLrzwQnXq1EklJSUqKCj41frLy8vl5eWlkydP6sCBAzXWf/bZZxo8eHADXhGg9Th+/LhsNpuefvppnTlzRsOHD9fjjz+uQ4cOacyYMdW2vfrqq3Xo0CHFxsZKks6ePas9e/YoJSVFMTEx+vjjjxUWFqabbrpJGzdu1IQJE7Rw4UItXLhQR44ccf4Rf/nllzMDNohPQbuRESNGyG63a+nSpRo/frzsdruefPJJDRw4UHa7Xe+9954uu+wyLV++XDfccIPKysqUm5urxx9/XCtXrtTIkSMlSSUlJVq1apVefvll5ynjDh066MUXX1S7du0knTttPXfuXE2fPl0eHh6aOXOm7rnnHlVVVVWrqVu3brr88st/8QNhP3XmzBldeOGFkqRNmzYpPDxcL730kpKSkhQeHq6tW7da+XIB55WIiAiFh4fr3Xff1c6dO5WZmal58+bJy8tLbdq0qbbtzx+PHTtWknTFFVeod+/ezllt3759q72NJJ0763X27FkXjgT1RQC7uejoaH3zzTdatGiRIiMjNXz4cA0ZMkTSudNHN954oxYvXqywsDA98MADOnz4sP72t78pIiJCAwcO1H/+8x9JUo8ePZzvzVZVVemee+7R5MmT1blzZ0lSbGysgoKCNGnSJFVUVDh/fkZGhnbt2uX85PWvOXz4sHNGnZOTo/T0dE2aNEnJyclKT0/Xt99+W+MXB4Bznn32WeeMtkOHDpowYYJsNpv69OmjL774otq2Bw8eVJ8+fZyPPTzO/Spv06aN898/Pv7pH9UHDx7URRddpAsuuECSdPr0aYWFhTn/e/rpp102PtREALuxyspK7d27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t+gxubvajqN//etfhqtyrdqOs3nz5pkuq1n4+/vXCNu8vLxqs2R31ioCuLS0VAkJCUpJSVFMTIwkqXfv3ioqKlJmZqYkacOGDc517m7Lli3Ky8tTfHy84uPjlZmZqQULFrTY8UjS5ZdfruLiYn311VeSzv2Rcc0117ToMWVlZamsrMz5uLy8XBUVFS16TO6utuPofD0d+6PajrMvv/zSYEXNx9vbW/3799e2bdskSbt27VJwcLC8vLwMV1Y/reJGHFu2bNF9992nK664wrls2LBhGjlypO6//355eHioS5cuSktLk5+fn8FKGycqKko2m00ZGRktejyff/65HnroIf3www8KCgrS2rVrdeTIkRY7prNnz2rq1Kk6ePCgvLy85OPjo5deekmnTp1qsWNqCWo7jjp27Gi6LJf5pePs0ksvNV2aywQFBenEiROSzn2XdUJCgsrLy9WuXTutX79ePXv2NFxh/bSKAAYAwN20ilPQAAC4GwIYAAADCGAAAAwggAEAMIAABgDAAAL4PHbs2DEFBQVpzpw5jXr+pk2b1LdvX6WmplpbGIB6aWoP/9yePXsUGhqq+fPnW7I/NE1b0wXAtaKjo/Xkk0826rmjR49WUVGRxRUBaIim9PDP3XDDDVq2bJlsNpsl+0PTEMCtxFNPPaW33npLFRUVuu+++5SYmKiEhAR17NhRBw8elI+Pj4YPH6433nhDbdu21dtvv+388goAZn333XcaO3asPDw8FBISohUrVujEiROaOHGiioqK1LFjR6WmpqpLly565513tGDBAknSgAEDtGrVKnl4cLLTHfF/pRV47733ZLPZ9Mknn2jfvn2qqqpyrgsKCtLOnTtVWVmpwsJC2Ww29erVy3lrNwDmffbZZ7ruuutks9k0a9YsSdKsWbM0duxYffjhh5o0aZKSk5N1+vRpPfDAA9q6dav27duniIgInTp1ymzx+EXMgFuB/fv369Zbb5Wnp6ckacqUKc5111xzjSQpICBAgwYNknTuix1Onz7d/IUCqFVsbKxyc3N1//33a9iwYerRo4cyMjKUnZ2tdevWqaqqSoGBgfryyy911VVXOb+MYNy4cYYrx69hBtwKDBgwQNu3b3d+7d26detUWVlpuCoA9VVQUKD4+Hi98MILWrNmjU6dOqWQkBDNnTtXNptNO3fu1KxZs3TFFVfo4MGDzm/c2rJli7799lvD1eOXEMCtwE033aSoqCiFh4dr0KBBOnnypHM2DMD9ffvttxozZoyGDBkif39/+fr66tlnn9XKlSsVGRmpm2++WUVFRfL19dWKFSs0YsQIXX/99dq4caO6dOmi1NRULV682PQw8DN8GcN57NixY5o/f36TLiP68bkJCQmW1ASg/qzo4Z+z2Wyy2WxciuQGmAGfx9q2bSu73d6k64Cfe+45XXjhhRZXBqA+mtrDP7dnzx499thj6tSpkyX7Q9MwAwYAwABmwAAAGEAAAwBgAAEMAIABBDAAAAYQwAAAGPD/dUpyOiRd/w4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import japanize_matplotlib\n", + "\n", + "_ = None\n", + "\n", + "\n", + "def plot(b_st, g_st, b_sp, g_sp, range_st=None, range_sp=None):\n", + " fig, axes = plt.subplots(1, 2, figsize=[8, 3])\n", + " axes[0].hist(b_st, alpha=0.7, range=range_st)\n", + " axes[0].hist(g_st, alpha=0.7, range=range_st)\n", + " axes[0].set(xlabel=\"[cm]\", title=\"長座体前屈\", ylim=[0, 50])\n", + " axes[1].hist(b_sp, alpha=0.7, range=range_sp)\n", + " axes[1].hist(g_sp, alpha=0.7, range=range_sp)\n", + " axes[1].set(xlabel=\"[sec.]\", title=\"50m走\", ylim=[0, 50])\n", + "\n", + "\n", + "plot(\n", + " boys_stretch,\n", + " girls_stretch,\n", + " boys_sprint,\n", + " girls_sprint,\n", + " range_st=[10, 80],\n", + " range_sp=[5, 11],\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAADdCAYAAABjR6FSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAb90lEQVR4nO3de1RVdf7/8ZeQKHZBExQby7GLWCphHY00Am0oYURtdLT1VZO8kKVjKy/VlKhFlpWZl7KkUshqGqKZLlreslNZ4nRW4Rom0JkSTM0BASUEIWD//ujXGRGV24HPBp+PtVqLfTmb9zn53i8++3baWJZlCQAANCsv0wUAAHAuIoABADCAAAYAwAACGAAAAwhgAAAMIIDPQVz4DgDmEcCtTGBg4FmX79u3T7feeqt7OiMjQ8OGDTvra2bPnq1//etf7umVK1dq9erVjSsUgHHdu3c3XcI57TzTBaCmd999V/fee68uu+yy0y5PS0uTJL3//vtasGBBtWX5+fkKCQmpNi8pKck9b/v27QoNDa1XPaNGjdLatWv17LPPqry8XM8//7w+++yzGutlZ2crJCREvXv3Pu12Dh8+rIceekjTp0+v1+8HgNaIAG5h/vjHP7p/Ligo0KhRo7Ro0aI6v/7tt9/WwoULa13vb3/7m5544olq8xwOhyTpoosu0vDhw93z4+PjNXLkSElSaGioNm3adNptLl++vM51AueaFStW6Lnnnqs2Kn3kkUcUFRWl999/XwkJCaqqqlKHDh300ksvqU+fPvX+Hc8884z++te/uqdzc3PdfS1J48aN07x58xr3RlBnBLBNhYeHa8aMGTXmX3LJJTXmlZSUKCEhQU8++aTCwsL0+eef680339Qll1yiiIgI93o5OTn67LPP5O3t7R4R//jjj8rNzVW/fv3k7e0tSfr888/1hz/8Qf3791dOTo779V27dtXVV19dbXvHjh1TcHCwe15aWlq1EfauXbvUqVMn9erVS5L04IMPNuwDAVq5nJwcxcfHa8qUKdXm7969W3Fxcdq5c6d69uypDRs2KCYmRnv37tV559VvFz5v3rxqAdu9e3e5XC6P1I/6I4BtqqCgQFlZWTXme3t76/LLL3dPt2nTRlu3btXBgwclST/99JOkX0abp45gly5dqqqqKg0cOFDp6emSpCFDhujEiROaM2eOYmNjq63/6quvKicnR0FBQcrNzVVBQYFef/11hYSEyOVyaefOncrKyqoWwKGhoVq6dKl27typadOmadGiRerdu7fuuOMOrVy5stq6AP4nJyen2pGlX61bt04TJkxQz549JUnDhw/XY489pi1btig6Olq//e1vdeedd2r79u3Ky8vTiy++qDVr1ui7775T9+7d9Ze//EW+vr565JFHtHnz5mrbPnUELEm33XabFi9e3HRvFG4EsI1s2LBBixYt0tGjR1VcXKz8/Pwzrrt8+XL9/PPPKi0t1eLFi3XDDTfooYcekiS98MIL6tOnj5KTk7Vnzx7NmDFDWVlZcjqd6tatm3sbW7Zs0aWXXqoLL7xQ69ev16hRo9SxY8dqv+eCCy5Qx44dVVpaqoKCgrPWX15errZt2+rIkSPavXt3jeVff/21Bg0aVI9PBDh37N+/X06nU88884yKiooUGRmphx9+WHv27NHYsWOrrXvNNddoz549io6OliQdP35cO3bsUGJioqKiovTFF1/I4XDolltuUUpKiiZNmqTFixdr8eLF+v77791/xF955ZWMgA3iKmgbGT58uFwul5YuXaoJEybI5XLp8ccf14ABA+RyufTxxx/r8ssv14oVK3TTTTeprKxMubm5evjhh7Vq1SqNGDFCklRaWqrVq1frtddecx8y7tChg15++WW1a9dO0i+HrRcsWKCZM2fKy8tLc+bM0V133aWqqqpqNXXr1k1XXnnlGS8IO1lRUZEuuOACSVJqaqpCQ0P1yiuvKD4+XqGhodq4caMnPy6gVQkLC1NoaKg++ugjbd26VRkZGVq4cKHatm2rNm3aVFv31Olx48ZJkq666ipdccUV7lFt7969q51Gkn456nX8+PEmfCeoKwLY5oYNG6aDBw/qySefVHh4uCIjIzV48GBJvxw+uvnmm7VkyRI5HA7NmjVLe/fu1VtvvaWwsDANGDBA//nPfyRJl112mfvcbFVVle666y5NmzZNF198sSQpOjpagYGBmjp1qioqKty/Pz09Xdu2bXNfeX02e/fudY+oDxw4oLS0NE2dOlUJCQlKS0vToUOHauw4APxi2bJl7hFthw4dNGnSJDmdTgUFBenbb7+ttm5mZqaCgoLc015ev+zK27Rp4/751+mT/6jOzMzUhRdeqPPPP1+SdOzYMTkcDvd/zzzzTJO9P9REANtYZWWldu7cqfj4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def centerize(data):\n", + " return data - np.mean(data)\n", + "\n", + "\n", + "plot(\n", + " *map(centerize, [boys_stretch, girls_stretch, boys_sprint, girls_sprint]),\n", + " range_st=[-40, 40],\n", + " range_sp=[-3, 3],\n", + ")\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "もともと平均に差があったはずの男女の分布が混じってしまいました。\n", + "\n", + "ここで、平均を毎回変えずに男子の" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAADdCAYAAABjR6FSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAeD0lEQVR4nO3de1RVZf7H8Q+YKHZRUxQdzczykspgHo0sBDVLHDVKR1ujJnlBS8eWt3JKvESWY2ReypJMUbsaNV3UvGVYFlhnFa7FJNqkYpoOCKght4D9+8OfZ0RUbhueg75fa81anr33efju03zP5zz77LO3h2VZlgAAQLXyNF0AAABXIwIYAAADCGAAAAwggAEAMIAABgDAAAL4KsSJ7wBgHgF8hfH19b3s+oMHD+q+++5zPU5KSlK/fv0u+5ypU6fq3//+t+vx0qVLtXz58soVCsC4Fi1amC7hqnaN6QJQ0scff6zHH39cN91000XXJyQkSJI+/fRTzZ49u9i69PR0+fv7F1sWExPjWrZjxw4FBASUq57Q0FCtWrVKL730kvLz8/XKK6/oq6++KrHdoUOH5O/vr/bt2190nOPHj2vmzJmaMGFCuf4+AFyJCOAa5q9//avr3xkZGQoNDdXcuXPL/PwPPvhAc+bMKXW7jz76SM8//3yxZQ6HQ5J0ww03aMCAAa7lEREReuCBByRJAQEB2rx580XHXLx4cZnrBK42S5Ys0csvv1xsVvrMM88oJCREn376qSIjI1VUVKR69erp9ddfV8eOHcv9N1588UW9//77rsepqamuvpakYcOGacaMGZXbEZQZAeymgoKCNHHixBLLmzdvXmJZdna2IiMj9cILLygwMFBff/213nnnHTVv3lzBwcGu7VJSUvTVV1+pVq1arhnxsWPHlJqaqs6dO6tWrVqSpK+//loPPfSQunTpopSUFNfzmzZtqg4dOhQb79SpU/Lz83MtS0hIKDbD3r17txo2bKi2bdtKkp566qmKvSDAFS4lJUUREREaM2ZMseV79uxReHi44uPj1bp1a23YsEEDBw7U/v37dc015XsLnzFjRrGAbdGihZxOpy31o/wIYDeVkZGh5OTkEstr1aqlW265xfXYw8ND27Zt09GjRyVJv//+u6Szs80LZ7BRUVEqKipS9+7dlZiYKEnq1auXcnNzNW3aNIWFhRXb/s0331RKSoratWun1NRUZWRk6K233pK/v7+cTqfi4+OVnJxcLIADAgIUFRWl+Ph4jRs3TnPnzlX79u318MMPa+nSpcW2BfA/KSkpxY4snbN69WqNGDFCrVu3liQNGDBAzz77rLZu3ar+/fvr5ptv1iOPPKIdO3YoLS1Nr732mlasWKFffvlFLVq00Lvvvitvb28988wz2rJlS7GxL5wBS9L999+v+fPnV92OwoUAdiMbNmzQ3LlzdfLkSWVlZSk9Pf2S2y5evFh//PGHcnJyNH/+fN15552aOXOmJOnVV19Vx44dtWbNGu3bt08TJ05UcnKy4uLi1KxZM9cYW7duVcuWLXX99ddr3bp1Cg0NVYMGDYr9neuuu04NGjRQTk6OMjIyLlt/fn6+ateurRMnTmjPnj0l1v/www/q0aNHOV4R4Opx+PBhxcXF6cUXX9Tp06fVt29fPf3009q3b5+GDh1abNvbb79d+/btU//+/SVJZ86c0a5duxQdHa2QkBB98803cjgc6tOnj9avX69Ro0Zp/vz5mj9/vg4cOOD6EH/rrbcyAzaIs6DdyIABA+R0OhUVFaURI0bI6XTqueeeU7du3eR0OvXFF1/olltu0ZIlS3TPPfcoLy9Pqampevrpp7Vs2TINGjRIkpSTk6Ply5dr7dq1rkPG9erV0xtvvKE6depIOnvYevbs2Zo0aZI8PT01bdo0PfrooyoqKipWU7NmzXTrrbde8oSw850+fVrXXXedJCk2NlYBAQFauXKlIiIiFBAQoI0bN9r5cgFXlMDAQAUEBOjzzz/Xtm3blJSUpDlz5qh27dry8PAotu2Fj4cNGyZJuu2229SmTRvXrLZ9+/bFvkaSzh71OnPmTBXuCcqKAHZz/fr109GjR/XCCy8oKChIffv21d133y3p7OGjnj17asGCBXI4HJo8ebL279+v9957T4GBgerWrZv+85//SJJuuukm13ezRUVFevTRRzVu3DjdeOONkqT+/fvL19dXY8eOVUFBgevvJyYmavv27a4zry9n//79rhn1kSNHlJCQoLFjxyoyMlIJCQn67bffSrxxADhr0aJFrhltvXr1NGrUKMXFxaldu3b66aefim27d+9etWvXzvXY0/PsW7mHh4fr3+cen/+heu/evbr++ut17bXXSpJOnTolh8Ph+t+LL75YZfuHkghgN1ZYWKj4+HhFRETo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N23aVAcPHnQ9Pn78uJo2bVpiu/DwcIWHh5d5XIfDIafTWdGyjKHu6lVT65bcs/ay9HN5e9kkd3yNq8PVuN81eZ8rfAi6f//++te//qXff/9dkrRq1So98MADthUGoPrQz0D1q/AMuFmzZnr66afVs2dPeXl5KTAwUIMHD7azNgDVhH4Gql+lfoY0fPhwDR8+3K5aJKnGHOK6EHVXr5pat+S+tVdFP5virq9xVbsa97sm77OHZVmW6SIAALjacCUsAAAMIIABADDArQLYsiz17dtXc+fOdS1bv369unfvrq5du2ratGnmiruEZ555Rj169FC3bt0UGRnpWu7udUs1o8Zz1q9fr7vuukuBgYEaOnSosrOztWfPHgUFBSkgIEADBw5UZmam6TIvKTIyUsHBwZJUo+quSXJychQWFqbAwED5+flpyZIlrnWrVq1S9+7d1bNnT91///06evSowUrtdbn9zszM1PDhw9W7d2/16tVLX375pcFK7XO5fT5n3bp1at26tYHqysFyIy+//LI1YsQIa86cOZZlWdahQ4estm3bWidPnrSKioqsoUOHWrGxsWaLPM+GDRus0aNHW5ZlWQUFBdadd95p7dmzx+3rtiz3f23Pl56ebnXt2tXKzs62LMuypk+fbi1evNhq37699eOPP1qWZVmvvvqqNWnSJINVXtr3339vPfroo1ZQUJBVVFRUY+quab766itr7dq1lmVZVnZ2tnXzzTdbqamp1smTJ61WrVpZZ86csSzLshYvXmw9/vjjJku11aX227Isa8yYMdbOnTsty7Ks33//3fr111+N1Wmny+2zZVlWSkqKNWDAAKtnz56mSiwTt5kB//TTT9q8ebNGjx7tWubul8f7y1/+ouXLl7seFxUVqW7dum5ft+T+r+35brzxRu3atUve3t6SpIKCAtWtW1cNGzaUv7+/JGns2LHauHGjwSovLicnR1OmTNGCBQskSfv3768RdddEgYGBGjlypKSzFxJp3ry5GjRooDp16qhJkybKy8uTJOXl5alr164mS7XVpfbbsizt3r1b8fHx6tmzp8aPH+/qoZruUvssnX0fHj9+vBYuXCgPDw+DVZauUj9DKq8dO3bo2WefLbF83bp1euyxxxQTE6OUlBTX8rJe7rKqXaru9957T76+vjp69KjrKkFt27ZVbGysW9R9Oe7y2pZV3bp1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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mean = np.mean(boys_stretch)\n", + "\n", + "\n", + "def centerize(data):\n", + " return data - mean\n", + "\n", + "\n", + "boys_stretch_1 = centerize(boys_stretch)\n", + "girls_stretch_1 = centerize(girls_stretch)\n", + "\n", + "boys_sprint_1 = centerize(boys_sprint)\n", + "girls_sprint_1 = centerize(girls_sprint)\n", + "\n", + "plot(boys_stretch_1, girls_stretch_1, boys_sprint_1, girls_sprint_1, range_st=[-40, 40], range_sp=[-39, -33])\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "当たり前ですが、長座体前屈の平均を基準としているので 50m 走の結果が中心家できていませんね。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAADdCAYAAABjR6FSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAcAUlEQVR4nO3de1xUdf7H8begKHZBExRbzbWLWCphjUYagbaUsKK2utpj1SQvZOnaIy/VlqhFlhWVl7KkUshqi2i3i5a3bCpL3OZR+Fg20N0STM0FASUEIeD8/ujXrCMqt4HvgK/n49HjwZxz5stnxj7nzffMOWfaWJZlCQAANCsv0wUAAHAuIoABADCAAAYAwAACGAAAAwhgAAAMIIDPQZz4DgDmEcCtTGBg4FnX79u3TzfffLPzcWZmpkaMGHHW58ydO1f/+te/nI9Xrlyp1atXN65QAMb16NHDdAnntLamC0BN7777ru6++25dcsklp12fnp4uSXr//fe1aNEil3UFBQUKCQlxWZacnOxctn37doWGhtarnjFjxmjt2rV6+umnVVFRoeeee06fffZZje1ycnIUEhKivn37nnacw4cP64EHHtDMmTPr9fsBoDUigFuYP/7xj86fCwsLNWbMGC1ZsqTOz3/77be1ePHiWrf729/+pscee8xlmc1mkyRdeOGFGjlypHN5fHy8Ro8eLUkKDQ3Vpk2bTjvm8uXL61wncK5ZsWKFnn32WZdZ6UMPPaSoqCi9//77SkhIUHV1tTp27KgXX3xR/fr1q/fveOqpp/TWW285H+fl5Tn7WpImTJigBQsWNO6FoM4IYA8VHh6uWbNm1Vh+8cUX11hWWlqqhIQEPf744woLC9Pnn3+uN954QxdffLEiIiKc2+Xm5uqzzz6Tt7e3c0b8448/Ki8vTwMGDJC3t7ck6fPPP9cf/vAHDRw4ULm5uc7nd+vWTVdeeaXLeMeOHVNwcLBzWXp6ussMe9euXercubP69OkjSbr//vsb9oYArVxubq7i4+M1bdo0l+W7d+9WXFycdu7cqd69e2vDhg2KiYnR3r171bZt/XbhCxYscAnYHj16yOFwuKV+1B8B7KEKCwuVnZ1dY7m3t7cuvfRS5+M2bdpo69atOnjwoCTpp59+kvTLbPPUGWxiYqKqq6s1ePBgZWRkSJKGDRumEydOaN68eYqNjXXZ/pVXXlFubq6CgoKUl5enwsJCvfbaawoJCZHD4dDOnTuVnZ3tEsChoaFKTEzUzp07NWPGDC1ZskR9+/bVbbfdppUrV7psC+B/cnNzXY4s/WrdunWaNGmSevfuLUkaOXKkHnnkEW3ZskXR0dH67W9/q9tvv13bt29Xfn6+XnjhBa1Zs0bfffedevToob/+9a/y9fXVQw89pM2bN7uMfeoMWJJuueUWLV26tOleKJwIYA+yYcMGLVmyREePHlVJSYkKCgrOuO3y5cv1888/q6ysTEuXLtV1112nBx54QJL0/PPPq1+/fkpJSdGePXs0a9YsZWdny263q3v37s4xtmzZop49e+qCCy7Q+vXrNWbMGHXq1Mnl95x//vnq1KmTysrKVFhYeNb6Kyoq1K5dOx05ckS7d++usf7rr7/WkCFD6vGOAOeO/fv3y26366mnnlJxcbEiIyP14IMPas+ePRo/frzLtldddZX27Nmj6OhoSdLx48e1Y8cOJSUlKSoqSl988YVsNptuuukmpaamasqUKVq6dKmWLl2q77//3vlH/OWXX84M2CDOgvYgI0eOlMPhUGJioiZNmiSHw6FHH31UgwYNksPh0Mcff6xLL71UK1as0A033KDy8nLl5eXpwQcf1KpVqzRq1ChJUllZmVavXq1XX33Veci4Y8eOeumll9S+fXtJvxy2XrRokWbPni0vLy/NmzdPd9xxh6qrq11q6t69uy6//PIznhB2suLiYp1//vmSpLS0NIWGhurll19WfHy8QkNDtXHjRne+XUCrEhYWptDQUH300UfaunWrMjMztXjxYrVr105t2rRx2fbUxxMmTJAkXXHFFbrsssucs9q+ffu6fIwk/XLU6/jx4034SlBXBLCHGzFihA4ePKjHH39c4eHhioyM1NChQyX9cvjoxhtv1LJly2Sz2TRnzhzt3btXb775psLCwjRo0CD95z//kSRdcsklzs9mq6urdccdd2jGjBm66KKLJEnR0dEKDAzU9OnTVVlZ6fz9GRkZ2rZtm/PM67PZu3evc0Z94MABpaena/r06UpISFB6eroOHTpUY8cB4BfPPPOMc0bbsWNHTZkyRXa7XUFBQfr2229dts3KylJQUJDzsZfXL7vyNm3aOH/+9fHJf1RnZWXpggsu0HnnnSdJOnbsmGw2m/O/p556qsleH2oigD1YVVWVdu7cqfj4eH3wwQe69tprNXnyZOf6jIwMXXbZZUpPT5fD4ZDD4VCfPn2cPzscDsXFxdUY99FHH5Wfn58yMzM1duxY2e12hYaGavz48SouLta+ffuc20ZFRWnmzJkuh8D69et32iDdsmWLgoODNW/ePJWUlNRYf+zYMc2bN6+xbwvQ6lRVVWnu3LnOP5irqqqUlpamoUOHaurUqXrttdeUk5MjSfr444/13//+1+V6/rpKTk7Wjz/+6PyD2s/Pz2V/wRnQzYvPgD3M1q1b9d5772nLli369NNPNWzYMM2cOVOffvqpEhISFBwcrLFjx+ruu+9Wenq6Bg0aVO/fMXfuXPn6+srb21uZmZmaP3++89KhYcOGuWz76yHoEydOOJe9/vrrklzvqPXDDz/o7bffVmJiol5++WVFRkbK29tbBw4ckK+vr5YvX67KykrnIWoA/+Pt7a1hw4Zp4sSJqqqqkpeXl2644QYlJCTI19dXK1as0KhRo+Tr6ysfHx+9//779T4D+sCBA3r99df1j3/8Q1OmTNGoUaP0888/68SJE+rQoYNzu4qKCvn4+Lj7JeI02ljcl9CjPPfcc7rgggsUERGhXr161VhfVFSkd955R1dffbXWrl0ry7JqPTy8atUqhYWFSZL69++vzMxM57pTA/hkCxcuVGhoqIqLixUfH69x48bpiSee0K5duzRp0iQdP35cjz/+uKZMmaLjx48rMTFRixcvVkREhN59990aJ3QdOXJE48aNk91ur/8bA6BRbr/9dt18882aNGmSysvLtXr1am3evFn79u3T8ePHVVlZqaqqKoWHhystLc10uecEArgFq66udvm8x92Ki4vl4+Pj8tfxyaqqqpzXDgPwbEVFRercubPpMnCSOgVwbGyssrOznTviuXPnKiQkRHFxcc6ddEpKymlnbAA8B70MeI46fYjw6/VpJ8+EIiMjNWfOHMXExOjDDz/U7Nmz9cEHHzRZoQAaj14GPEedZsDXXHONgoOD9f333ys4OFhPPvmkgoKC9MMPPzi36d27t/bs2cOH94AHo5cBz1GnGbDNZlN8fLx69uyphx9+WLNmzVJAQIDLNl27dlVBQYHLnZYkKSkpSUlJSZKk7OzsM35TDoD/ycnJ0ZEjR9w+Lr0MNK+z9XK9T8L69ttvNWvWLH3//fcud1i59NJLtWfPHrVr1+6Mz7XZbNz2DKiD5ugVehloemfrlVpPoS0rK1N8fLwqKiokSR999JFsNpsGDBjgvHRl27Zt6tev31kbFoBZ9DLgWWo9BO3r6yt/f38NHjxYfn5++s1vfqM1a9aosLBQsbGxSkhIUPv27bVu3brmqBdAA9HLgGdp1uuAOWwF1I2n94qn1wd4ikYdggYAAO5HAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGtDVdAADAPaYlf+WWcV6JHeSWcXB29ZoBJyQkKCIiQpK0e/duhYeHKzQ0VDExMSoqKmqK+gA0AXoZMK/OAexwOLRv3z5JkmVZuu2227RixQqlp6crKipKixYtarIiAbgPvQx4hjoFcFlZme69914tW7ZMkrR371517txZISEhkqTp06dr48aNp31uUlKSbDabbDab8vPz3VM1gAahlwHPUacAXrBgge655x517dpVklRQUKDAwEDneh8fH1VWVp72uXFxcXI4HHI4HAoICHBDyQAail4GPEetAbx582YVFRVp3LhxzmXdunVTXl6e83F5ebl8fHyapkIAbkEvA56l1rOgN2zYoPz8fI0ZM0aSlJmZqYcfflglJSXKzMxU//79tX79ekVFRTV1rQAagV4GPEutAbxq1SqXxxEREXr11VeVkZGhGTNmyMvLS126dFFKSkqTFQmg8ehlwLPU+zpgu90uSQoJCdHOnTvdXQ+AZkIvA2ZxJywAAAwggAEAMIAABgDAAAIYAAADCGAAAAwggAEAMIAABgDAAAIYAAADCGAAAAwggAEAMIAABgDAgHrfCxoA4D7Tkr8yXQIMYQYMAIABBDAAAAYQwAAAGEAAAwBgAAEMAIABnAV9jnPnGZivxA5y21gA0NoxAwYAwAACGAAAAwhgAAAMIIABADCAAAYAwAACGAAAA+oUwE8++aSGDBmigQMHaurUqaqoqND+/fs1YsQIDRkyRBEREcrNzW3qWgE0Er0MeI5aA/jIkSM6duyYvvjiC33zzTcqLS3Ve++9p2nTpmnWrFn68ssvdd9992n27NnNUS+ABqKXAc9SawD7+/tr6dKlatOmjUpKSlRcXKyrrrpK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def centerize(data, mean=None):\n", + " if mean is None:\n", + " mean = np.mean(data)\n", + " return data - mean, mean\n", + " else:\n", + " return data - mean, mean\n", + "\n", + "\n", + "boys_stretch_1, boys_stretch_mean = centerize(boys_stretch)\n", + "girls_stretch_1, _ = centerize(girls_stretch, boys_stretch_mean)\n", + "\n", + "boys_sprint_1, boys_sprint_mean = centerize(boys_sprint)\n", + "girls_sprint_1, _ = centerize(girls_sprint, boys_sprint_mean)\n", + "\n", + "plot(\n", + " boys_stretch_1,\n", + " girls_stretch_1,\n", + " boys_sprint_1,\n", + " girls_sprint_1,\n", + " range_st=[-40, 40],\n", + " range_sp=[-3, 3],\n", + ")\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "左右の分布をどちらも男子の平均が中心となるようにスライドすることができました。\n", + "\n", + "ただ、(細かいく感じるかもしれまえんが、)この実装には 2 つの気になる点があります。\n", + "\n", + "- あるデータを入力として受け取り、中心化をしたデータを出力する処理なのに、データでない変数を受け取っている。\n", + " - 理想形は `Y = centerize(X)` だが、`Y = centerize(X, ?)` となっている。\n", + "- 2 つの標本を中心化する途中に、`_mean` で終わる 2 つの変数が関数の外(グローバルスコープ)に漏れている。\n", + " - 関数の内部の処理が、関数の外部の情報に依存している。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAADdCAYAAABjR6FSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAcAUlEQVR4nO3de1xUdf7H8begKHZBExRbzbWLWCphjUYagbaUsKK2utpj1SQvZOnaIy/VlqhFlhWVl7KkUshqi2i3i5a3bCpL3OZR+Fg20N0STM0FASUEIeD8/ujXrCMqt4HvgK/n49HjwZxz5stnxj7nzffMOWfaWJZlCQAANCsv0wUAAHAuIoABADCAAAYAwAACGAAAAwhgAAAMIIDPQZz4DgDmEcCtTGBg4FnX79u3TzfffLPzcWZmpkaMGHHW58ydO1f/+te/nI9Xrlyp1atXN65QAMb16NHDdAnntLamC0BN7777ru6++25dcsklp12fnp4uSXr//fe1aNEil3UFBQUKCQlxWZacnOxctn37doWGhtarnjFjxmjt2rV6+umnVVFRoeeee06fffZZje1ycnIUEhKivn37nnacw4cP64EHHtDMmTPr9fsBoDUigFuYP/7xj86fCwsLNWbMGC1ZsqTOz3/77be1ePHiWrf729/+pscee8xlmc1mkyRdeOGFGjlypHN5fHy8Ro8eLUkKDQ3Vpk2bTjvm8uXL61wncK5ZsWKFnn32WZdZ6UMPPaSoqCi9//77SkhIUHV1tTp27KgXX3xR/fr1q/fveOqpp/TWW285H+fl5Tn7WpImTJigBQsWNO6FoM4IYA8VHh6uWbNm1Vh+8cUX11hWWlqqhIQEPf744woLC9Pnn3+uN954QxdffLEiIiKc2+Xm5uqzzz6Tt7e3c0b8448/Ki8vTwMGDJC3t7ck6fPPP9cf/vAHDRw4ULm5uc7nd+vWTVdeeaXLeMeOHVNwcLBzWXp6ussMe9euXercubP69OkjSbr//vsb9oYArVxubq7i4+M1bdo0l+W7d+9WXFycdu7cqd69e2vDhg2KiYnR3r171bZt/XbhCxYscAnYHj16yOFwuKV+1B8B7KEKCwuVnZ1dY7m3t7cuvfRS5+M2bdpo69atOnjwoCTpp59+kvTLbPPUGWxiYqKqq6s1ePBgZWRkSJKGDRumEydOaN68eYqNjXXZ/pVXXlFubq6CgoKUl5enwsJCvfbaawoJCZHD4dDOnTuVnZ3tEsChoaFKTEzUzp07NWPGDC1ZskR9+/bVbbfdppUrV7psC+B/cnNzXY4s/WrdunWaNGmSevfuLUkaOXKkHnnkEW3ZskXR0dH67W9/q9tvv13bt29Xfn6+XnjhBa1Zs0bfffedevToob/+9a/y9fXVQw89pM2bN7uMfeoMWJJuueUWLV26tOleKJwIYA+yYcMGLVmyREePHlVJSYkKCgrOuO3y5cv1888/q6ysTEuXLtV1112nBx54QJL0/PPPq1+/fkpJSdGePXs0a9YsZWdny263q3v37s4xtmzZop49e+qCCy7Q+vXrNWbMGHXq1Mnl95x//vnq1KmTysrKVFhYeNb6Kyoq1K5dOx05ckS7d++usf7rr7/WkCFD6vGOAOeO/fv3y26366mnnlJxcbEiIyP14IMPas+ePRo/frzLtldddZX27Nmj6OhoSdLx48e1Y8cOJSUlKSoqSl988YVsNptuuukmpaamasqUKVq6dKmWLl2q77//3vlH/OWXX84M2CDOgvYgI0eOlMPhUGJioiZNmiSHw6FHH31UgwYNksPh0Mcff6xLL71UK1as0A033KDy8nLl5eXpwQcf1KpVqzRq1ChJUllZmVavXq1XX33Veci4Y8eOeumll9S+fXtJvxy2XrRokWbPni0vLy/NmzdPd9xxh6qrq11q6t69uy6//PIznhB2suLiYp1//vmSpLS0NIWGhurll19WfHy8QkNDtXHjRne+XUCrEhYWptDQUH300UfaunWrMjMztXjxYrVr105t2rRx2fbUxxMmTJAkXXHFFbrsssucs9q+ffu6fIwk/XLU6/jx4034SlBXBLCHGzFihA4ePKjHH39c4eHhioyM1NChQyX9cvjoxhtv1LJly2Sz2TRnzhzt3btXb775psLCwjRo0CD95z//kSRdcsklzs9mq6urdccdd2jGjBm66KKLJEnR0dEKDAzU9OnTVVlZ6fz9GRkZ2rZtm/PM67PZu3evc0Z94MABpaena/r06UpISFB6eroOHTpUY8cB4BfPPPOMc0bbsWNHTZkyRXa7XUFBQfr2229dts3KylJQUJDzsZfXL7vyNm3aOH/+9fHJf1RnZWXpggsu0HnnnSdJOnbsmGw2m/O/p556qsleH2oigD1YVVWVdu7cqfj4eH3wwQe69tprNXnyZOf6jIwMXXbZZUpPT5fD4ZDD4VCfPn2cPzscDsXFxdUY99FHH5Wfn58yMzM1duxY2e12hYaGavz48SouLta+ffuc20ZFRWnmzJkuh8D69et32iDdsmWLgoODNW/ePJWUlNRYf+zYMc2bN6+xbwvQ6lRVVWnu3LnOP5irqqqUlpamoUOHaurUqXrttdeUk5MjSfr444/13//+1+V6/rpKTk7Wjz/+6PyD2s/Pz2V/wRnQzYvPgD3M1q1b9d5772nLli369NNPNWzYMM2cOVOffvqpEhISFBwcrLFjx+ruu+9Wenq6Bg0aVO/fMXfuXPn6+srb21uZmZmaP3++89KhYcOGuWz76yHoEydOOJe9/vrrklzvqPXDDz/o7bffVmJiol5++WVFRkbK29tbBw4ckK+vr5YvX67KykrnIWoA/+Pt7a1hw4Zp4sSJqqqqkpeXl2644QYlJCTI19dXK1as0KhRo+Tr6ysfHx+9//779T4D+sCBA3r99df1j3/8Q1OmTNGoUaP0888/68SJE+rQoYNzu4qKCvn4+Lj7JeI02ljcl9CjPPfcc7rgggsUERGhXr161VhfVFSkd955R1dffbXWrl0ry7JqPTy8atUqhYWFSZL69++vzMxM57pTA/hkCxcuVGhoqIqLixUfH69x48bpiSee0K5duzRp0iQdP35cjz/+uKZMmaLjx48rMTFRixcvVkREhN59990aJ3QdOXJE48aNk91ur/8bA6BRbr/9dt18882aNGmSysvLtXr1am3evFn79u3T8ePHVVlZqaqqKoWHhystLc10uecEArgFq66udvm8x92Ki4vl4+Pj8tfxyaqqqpzXDgPwbEVFRercubPpMnCSOgVwbGyssrOznTviuXPnKiQkRHFxcc6ddEpKymlnbAA8B70MeI46fYjw6/VpJ8+EIiMjNWfOHMXExOjDDz/U7Nmz9cEHHzRZoQAaj14GPEedZsDXXHONgoOD9f333ys4OFhPPvmkgoKC9MMPPzi36d27t/bs2cOH94AHo5cBz1GnGbDNZlN8fLx69uyphx9+WLNmzVJAQIDLNl27dlVBQYHLnZYkKSkpSUlJSZKk7OzsM35TDoD/ycnJ0ZEjR9w+Lr0MNK+z9XK9T8L69ttvNWvWLH3//fcud1i59NJLtWfPHrVr1+6Mz7XZbNz2DKiD5ugVehloemfrlVpPoS0rK1N8fLwqKiokSR999JFsNpsGDBjgvHRl27Zt6tev31kbFoBZ9DLgWWo9BO3r6yt/f38NHjxYfn5++s1vfqM1a9aosLBQsbGxSkhIUPv27bVu3brmqBdAA9HLgGdp1uuAOWwF1I2n94qn1wd4ikYdggYAAO5HAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGEMAAABhAAAMAYAABDACAAQQwAAAGtDVdAADAPaYlf+WWcV6JHeSWcXB29ZoBJyQkKCIiQpK0e/duhYeHKzQ0VDExMSoqKmqK+gA0AXoZMK/OAexwOLRv3z5JkmVZuu2227RixQqlp6crKipKixYtarIiAbgPvQx4hjoFcFlZme69914tW7ZMkrR371517txZISEhkqTp06dr48aNp31uUlKSbDabbDab8vPz3VM1gAahlwHPUacAXrBgge655x517dpVklRQUKDAwEDneh8fH1VWVp72uXFxcXI4HHI4HAoICHBDyQAail4GPEetAbx582YVFRVp3LhxzmXdunVTXl6e83F5ebl8fHyapkIAbkEvA56l1rOgN2zYoPz8fI0ZM0aSlJmZqYcfflglJSXKzMxU//79tX79ekVFRTV1rQAagV4GPEutAbxq1SqXxxEREXr11VeVkZGhGTNmyMvLS126dFFKSkqTFQmg8ehlwLPU+zpgu90uSQoJCdHOnTvdXQ+AZkIvA2ZxJywAAAwggAEAMIAABgDAAAIYAAADCGAAAAwggAEAMIAABgDAAAIYAAADCGAAAAwggAEAMIAABgDAgHrfCxoA4D7Tkr8yXQIMYQYMAIABBDAAAAYQwAAAGEAAAwBgAAEMAIABnAV9jnPnGZivxA5y21gA0NoxAwYAwAACGAAAAwhgAAAMIIABADCAAAYAwAACGAAAA+oUwE8++aSGDBmigQMHaurUqaqoqND+/fs1YsQIDRkyRBEREcrNzW3qWgE0Er0MeI5aA/jIkSM6duyYvvjiC33zzTcqLS3Ve++9p2nTpmnWrFn68ssvdd9992n27NnNUS+ABqKXAc9SawD7+/tr6dKlatOmjUpKSlRcXKyrrrpK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "class Centerizer:\n", + " def __init__(self, name):\n", + " self.name = name\n", + " self.mean = None\n", + "\n", + " def fit(self, data):\n", + " self.mean = np.mean(data)\n", + "\n", + " def transform(self, data):\n", + " return data - self.mean\n", + "\n", + "\n", + "stretch = Centerizer(\"stretch\")\n", + "stretch.fit(boys_stretch)\n", + "boys_stretch_2 = stretch.transform(boys_stretch)\n", + "girls_stretch_2 = stretch.transform(girls_stretch)\n", + "\n", + "sprint = Centerizer(\"sprint\")\n", + "sprint.fit(boys_sprint)\n", + "boys_sprint_2 = sprint.transform(boys_sprint)\n", + "girls_sprint_2 = sprint.transform(girls_sprint)\n", + "\n", + "plot(\n", + " boys_stretch_2,\n", + " girls_stretch_2,\n", + " boys_sprint_2,\n", + " girls_sprint_2,\n", + " range_st=[-40, 40],\n", + " range_sp=[-3, 3],\n", + ")\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まず、事前に `self.mean` を計算しておいて、それを内部に保持しておきます。\n", + "そして、中心化するときはデータ `data` だけを受け取り、保持しておいた `self.mean` を用いて変換します。" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "TODO: メソッドやアトリビュートの名前を説明する。" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "関数とクラスのどちらの実装の方が良いか、好みはわかれるかもしれませんが、\n", + "機械学習のライブラリは" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from torch import nn\n", + "\n", + "\n", + "class PTModel(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " # ハイパーパラメータを定義する\n", + " self.config = ...\n", + " # パラメータを初期化する\n", + " self.layer = ...\n", + " nn.Linear\n", + "\n", + " def forward(self, X):\n", + " # モデル構造を定義する\n", + " # すなわち、入力 X を出力 Y に変換する処理を実装する\n", + " Y = self.layer(X)\n", + " return Y\n", + "\n", + " def backward(self, X):\n", + " # パラメータを更新する処理(=学習)を実装する\n", + " # nn.Module 内に定義済みなので自分で実装する必要はない\n", + " ...\n", + "\n", + "\n", + "class SKModel:\n", + " def __init__(self):\n", + " # ハイパーパラメータを定義する\n", + " self.config = ...\n", + "\n", + " def fit(self, X):\n", + " # 学習して、得られたパラメータを属性に追加する。\n", + " self.param_ = solve(X)\n", + " return self\n", + "\n", + " def predict(self, X):\n", + " # 予測する\n", + " return model(X, self.param_)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "難しいのが独自に何かを作るときです。" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "とりあえず関数ベースで実装して、\n", + "関数の処理がスコープ外の変数 $a$ に依存しているなと感じたら、\n", + "self.a を内部にもったクラスに実装しなおすのが良いと思います。\n" + ] + } + ], + "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.9.13" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "ecfa4e302b7607fa496cb9db9d32610bd00ed1bfe39386c5ce0408823d5ee60a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/scripts/ja-edited/class.py b/scripts/ja-edited/class.py new file mode 100644 index 0000000..fbd1eb8 --- /dev/null +++ b/scripts/ja-edited/class.py @@ -0,0 +1,222 @@ +# --- +# jupyter: +# jupytext: +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.14.4 +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + +# 身長 167cm という数字は、頭のてっぺんが 0cm から数えてプラスの方向に 167 cm のメモリと重なったことを意味しています。 +# しかし、分析する際は 0cm を基準にするよりも、平均的な身長 170 cm を基準として、平均より 3cm 低いと解釈するのが普通です。 +# このように基準をずらす操作を **中心化** といいます。 +# +# *中心化の目的は、解釈性向上の他に、モデルの学習効率化や線形性の条件を満たすことなどがあります。 +# + +# + +import numpy as np + + +# 二十代前半男女の長座体前屈 (stretch) と 50m走 (sprint) の標本データ +np.random.seed(2) +boys_stretch = np.random.normal(45.76, 10.01, 100) +girls_stretch = np.random.normal(45.92, 9.94, 86) +boys_sprint = np.random.normal(7.27, 0.52, 100) +girls_sprint = np.random.normal(9.09, 0.79, 86) + + +# + +import matplotlib.pyplot as plt +import japanize_matplotlib + +_ = None + + +def plot(b_st, g_st, b_sp, g_sp, range_st=None, range_sp=None): + fig, axes = plt.subplots(1, 2, figsize=[8, 3]) + axes[0].hist(b_st, alpha=0.7, range=range_st) + axes[0].hist(g_st, alpha=0.7, range=range_st) + axes[0].set(xlabel="[cm]", title="長座体前屈", ylim=[0, 50]) + axes[1].hist(b_sp, alpha=0.7, range=range_sp) + axes[1].hist(g_sp, alpha=0.7, range=range_sp) + axes[1].set(xlabel="[sec.]", title="50m走", ylim=[0, 50]) + + +plot( + boys_stretch, + girls_stretch, + boys_sprint, + girls_sprint, + range_st=[10, 80], + range_sp=[5, 11], +) + + +# + +def centerize(data): + return data - np.mean(data) + + +plot( + *map(centerize, [boys_stretch, girls_stretch, boys_sprint, girls_sprint]), + range_st=[-40, 40], + range_sp=[-3, 3], +) + +# - + +# もともと平均に差があったはずの男女の分布が混じってしまいました。 +# +# ここで、平均を毎回変えずに男子の + +# + +mean = np.mean(boys_stretch) + + +def centerize(data): + return data - mean + + +boys_stretch_1 = centerize(boys_stretch) +girls_stretch_1 = centerize(girls_stretch) + +boys_sprint_1 = centerize(boys_sprint) +girls_sprint_1 = centerize(girls_sprint) + +plot(boys_stretch_1, girls_stretch_1, boys_sprint_1, girls_sprint_1, range_st=[-40, 40], range_sp=[-39, -33]) + +# - + +# 当たり前ですが、長座体前屈の平均を基準としているので 50m 走の結果が中心家できていませんね。 +# + +# + +def centerize(data, mean=None): + if mean is None: + mean = np.mean(data) + return data - mean, mean + else: + return data - mean, mean + + +boys_stretch_1, boys_stretch_mean = centerize(boys_stretch) +girls_stretch_1, _ = centerize(girls_stretch, boys_stretch_mean) + +boys_sprint_1, boys_sprint_mean = centerize(boys_sprint) +girls_sprint_1, _ = centerize(girls_sprint, boys_sprint_mean) + +plot( + boys_stretch_1, + girls_stretch_1, + boys_sprint_1, + girls_sprint_1, + range_st=[-40, 40], + range_sp=[-3, 3], +) + +# - + +# 左右の分布をどちらも男子の平均が中心となるようにスライドすることができました。 +# +# ただ、(細かいく感じるかもしれまえんが、)この実装には 2 つの気になる点があります。 +# +# - あるデータを入力として受け取り、中心化をしたデータを出力する処理なのに、データでない変数を受け取っている。 +# - 理想形は `Y = centerize(X)` だが、`Y = centerize(X, ?)` となっている。 +# - 2 つの標本を中心化する途中に、`_mean` で終わる 2 つの変数が関数の外(グローバルスコープ)に漏れている。 +# - 関数の内部の処理が、関数の外部の情報に依存している。 + +# + +class Centerizer: + def __init__(self, name): + self.name = name + self.mean = None + + def fit(self, data): + self.mean = np.mean(data) + + def transform(self, data): + return data - self.mean + + +stretch = Centerizer("stretch") +stretch.fit(boys_stretch) +boys_stretch_2 = stretch.transform(boys_stretch) +girls_stretch_2 = stretch.transform(girls_stretch) + +sprint = Centerizer("sprint") +sprint.fit(boys_sprint) +boys_sprint_2 = sprint.transform(boys_sprint) +girls_sprint_2 = sprint.transform(girls_sprint) + +plot( + boys_stretch_2, + girls_stretch_2, + boys_sprint_2, + girls_sprint_2, + range_st=[-40, 40], + range_sp=[-3, 3], +) + +# - + +# まず、事前に `self.mean` を計算しておいて、それを内部に保持しておきます。 +# そして、中心化するときはデータ `data` だけを受け取り、保持しておいた `self.mean` を用いて変換します。 + +# TODO: メソッドやアトリビュートの名前を説明する。 + +# 関数とクラスのどちらの実装の方が良いか、好みはわかれるかもしれませんが、 +# 機械学習のライブラリは + +# + +from torch import nn + + +class PTModel(nn.Module): + def __init__(self): + super().__init__() + # ハイパーパラメータを定義する + self.config = ... + # パラメータを初期化する + self.layer = ... + nn.Linear + + def forward(self, X): + # モデル構造を定義する + # すなわち、入力 X を出力 Y に変換する処理を実装する + Y = self.layer(X) + return Y + + def backward(self, X): + # パラメータを更新する処理(=学習)を実装する + # nn.Module 内に定義済みなので自分で実装する必要はない + ... + + +class SKModel: + def __init__(self): + # ハイパーパラメータを定義する + self.config = ... + + def fit(self, X): + # 学習して、得られたパラメータを属性に追加する。 + self.param_ = solve(X) + return self + + def predict(self, X): + # 予測する + return model(X, self.param_) + +# - + +# 難しいのが独自に何かを作るときです。 + +# とりあえず関数ベースで実装して、 +# 関数の処理がスコープ外の変数 $a$ に依存しているなと感じたら、 +# self.a を内部にもったクラスに実装しなおすのが良いと思います。 +#