{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "S7Tq3zYqOu6u" }, "source": [ "# Monotonic SVM\n", "The Monotonic SVM solves the following optimization problem:\n", "\n", "$$\n", " \\min_{\\mathbf{\\beta} \\in \\mathbb{R}^d} C\\sum_{i=1}^n (1 - y_i \\mathbf{\\beta}^\\intercal \\mathbf{x}_i)_+ + \\frac{1}{2} \\|\\mathbf{\\beta}\\|_2^2,\n", "$$\n", "$$\n", " \\text{subject to} \\quad \\beta_j \\le \\beta_{j+1} \\quad \\forall j \\in \\{1, \\dots, d-1\\} \\quad (\\text{Increasing})\n", "$$\n", "$$\n", " \\text{or} \\quad \\beta_j \\ge \\beta_{j+1} \\quad \\forall j \\in \\{1, \\dots, d-1\\} \\quad (\\text{Decreasing})\n", "$$\n", "\n", "where:\n", "\n", "* $\\mathbf{x}_i \\in \\mathbb{R}^d$ is a feature vector\n", "* $y_i \\in \\{-1, 1\\}$ is a binary label\n", "* $\\beta_j$ represents the $j$-th component of the coefficient vector $\\mathbf{\\beta}$\n", "\n", "The monotonicity constraints ensure that the learned coefficients $\\beta$ follow a strictly non-decreasing or non-increasing order, useful when incorporating prior domain knowledge.\n", "\n", "> **Note.** Since the hinge loss is a plq function and the monotonicity constraints are purely linear (e.g., $\\beta_j - \\beta_{j+1} \\le 0$), we can optimize it using `rehline.plq_Ridge_Classifier`.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "g0aAqkkRKc6z" }, "outputs": [], "source": [ "## install rehline\n", "%pip install rehline -q" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "4ibK-1gsR0ZB" }, "outputs": [], "source": [ "## simulate data\n", "from sklearn.datasets import make_classification\n", "from sklearn.preprocessing import StandardScaler\n", "import numpy as np\n", "\n", "scaler = StandardScaler()\n", "\n", "n, d = 10000, 5\n", "X, y = make_classification(n_samples=n, n_features=d, n_redundant=0, random_state=42)\n", "y = 2*y - 1\n", "X = scaler.fit_transform(X)" ] }, { "cell_type": "markdown", "metadata": { "id": "Oak-k1Ps9hDS" }, "source": [ "## SVM as baseline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 80 }, "id": "Uk31Pe_cg702", "outputId": "9e177265-dad9-4780-e074-700f022680e7" }, "outputs": [ { "data": { "text/html": [ "
plq_Ridge_Classifier(C=0.001, loss={'name': 'svm'}, max_iter=10000)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "plq_Ridge_Classifier(C=0.001, loss={'name': 'svm'}, max_iter=10000)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## we first run a SVM\n", "from rehline import plq_Ridge_Classifier\n", "\n", "clf = plq_Ridge_Classifier(loss={'name': 'svm'}, C=0.001, max_iter=10000)\n", "clf.fit(X=X, y=y)" ] }, { "cell_type": "markdown", "metadata": { "id": "OU3yWxlR9d29" }, "source": [ "## Monotonic constraint" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 114 }, "id": "APrF6OYJl1_t", "outputId": "0afd698a-564b-45c0-e81f-ca36b5f01f0e" }, "outputs": [ { "data": { "text/html": [ "
plq_Ridge_Classifier(C=0.001,\n",
              "                     constraint=[{'decreasing': True, 'name': 'monotonic'}],\n",
              "                     loss={'name': 'svm'}, max_iter=10000)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "plq_Ridge_Classifier(C=0.001,\n", " constraint=[{'decreasing': True, 'name': 'monotonic'}],\n", " loss={'name': 'svm'}, max_iter=10000)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## solve SVM with Monotonicity Constraint via `plq_Ridge_Classifier`\n", "from rehline import plq_Ridge_Classifier\n", "mclf = plq_Ridge_Classifier(\n", " loss={'name': 'svm'},\n", " constraint = [{'name': 'monotonic', 'decreasing': True}],\n", " C=0.001,\n", " max_iter=10000\n", ")\n", "mclf.fit(X=X, y=y)" ] }, { "cell_type": "markdown", "metadata": { "id": "GbDGb79w9aOh" }, "source": [ "## Results" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "fDmbka9Wx-jd", "outputId": "65947a94-eb63-4a00-d968-68772c68c954" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Model Performance\n", " Standard SVM 0.8870\n", "Monotonic SVM 0.7332\n" ] } ], "source": [ "import pandas as pd\n", "\n", "## score\n", "score = clf.decision_function(X)\n", "mscore = mclf.decision_function(X)\n", "\n", "svm_perf = clf.score(X, y)\n", "msvm_perf = mclf.score(X, y)\n", "\n", "## Create a pandas DataFrame to store the results\n", "results = pd.DataFrame({\n", " 'Model': ['Standard SVM', 'Monotonic SVM'],\n", " 'Performance': [svm_perf, msvm_perf]\n", "})\n", "\n", "## Print the results as a table\n", "print(results.to_string(index=False))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 528 }, "id": "CdiaiZCTQiqm", "outputId": "9b4ddc16-c48b-4f94-8fdc-0844381a0db5" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABW0AAAHqCAYAAAB/bWzAAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXvFJREFUeJzt3XlYlPX+//HXALIKGIK4gbviCkdcjrlhoYgd08q0tCOS2Uobpemvcmkz9WgezbRTKWaapqWeo7kk5ZKV5oKZaQcL01JA3EUDhfv3h1/mOA4gKDg3zvNxXXPVfO7P3PO+uVHevrjnc1sMwzAEAAAAAAAAADAFF0cXAAAAAAAAAAD4H0JbAAAAAAAAADARQlsAAAAAAAAAMBFCWwAAAAAAAAAwEUJbAAAAAAAAADARQlsAAAAAAAAAMBFCWwAAAAAAAAAwEUJbAAAAAAAAADARQlsAAAAAAAAAMBFCWwCowM6ePauHHnpI1atXl8Vi0TPPPCNJysjIUL9+/VS1alVZLBZNnTpV69evl8Vi0fr160v1HmPHjpXFYin74m+QXr16adiwYY4uo1BJSUmyWCw6cOBAub3HTz/9JDc3N/3444/l9h4AADirAwcOyGKxKCkpydGlOJVJkyapfv36cnV1VUREhCTp4sWLGjFihEJCQuTi4qK+fftKkiwWi8aOHVuq/V9r32wWEydOVFhYmPLz8x1dip0b8WfmwoULCgkJ0TvvvFNu7wHcCIS2AExr9+7d6tevn+rUqSNPT0/VqlVL3bt31/Tp0yVJO3bskMVi0UsvvVTkPlJTU2WxWJSYmCjpfwGki4uLDh06ZDf/9OnT8vLyksViUUJCQonqzMvL05w5cxQVFaWAgAB5eHiobt26io+P17Zt267hyEvujTfeUFJSkh577DHNmzdPf//73yVJzz77rNasWaNRo0Zp3rx56tmzZ7nWcb0OHz6ssWPHKiUlpUz3u3nzZq1du1YvvPBCme63ImnWrJnuuOMOjR492tGlAAAqoIJfMFosFn399dd22w3DUEhIiCwWi/72t785oEJ7P/30k8aOHVuuvxQtL0ePHtXTTz+tsLAweXl5qVq1amrXrp1eeOEFnT17VhcuXFBgYKA6depU5D4Kzknr1q0l/S+AtFgs+uijjwp9TceOHWWxWNSiRYsS17p+/Xrdfffdql69utzd3VWtWjX17t1bn332WekOupTWrl2rESNGqGPHjpozZ47eeOMNSdLs2bM1adIk9evXT3PnztWzzz5brnWUhTfeeEPLli0r032ePn1aEyZM0AsvvCAXF+eMfCpVqqTExES9/vrr+vPPPx1dDnDtDAAwoc2bNxvu7u5Gw4YNjVdffdV47733jNGjRxs9evQwGjRoYJ0XFhZm1K9fv8j9jB071pBkbN++3TAMwxgzZowhyfD09DQmTJhgN3/OnDmGp6enIcl44oknrlrnuXPnjJ49exqSjC5duhiTJk0yPvjgA+Pll182mjRpYlgsFuPQoUPX8BUomfbt2xsdO3a0Gw8ODjYGDRpkM5aXl2ecP3/eyMvLK9V7XLhwwTh//vx11Xk133//vSHJmDNnTpnut0+fPkaPHj3KdJ9lac6cOYYkIy0trVzf5/PPPzckGfv37y/X9wEA3HwKflZ5enoajz32mN32r776ypBkeHh4GHfccYcDKrS3ePFiQ5Lx1Vdflft75efnG+fPnzcuXrx43fs6duyYERoaalSpUsVITEw0/vWvfxnjx4837r//fsPX19faLzz66KOGxWIxDhw4UOh+1q9fb0gyJk+ebBjG/86Rp6enERsbazc/LS3Nur158+YlqnX06NGGJKNRo0bG6NGjjQ8++MCYOHGiERUVZUgy5s+ff21fhBJ44YUXDBcXFyMnJ8dmfMCAAUatWrXs5p8/f964cOFCqd7jWvvm0vLx8THi4uLKdJ9vvfWW4efnV+79+7Uq+H4r677/SidOnDDc3d2NDz74oFzfByhPbjc+JgaAq3v99dfl7++v77//XlWqVLHZlpmZaf3/QYMG6eWXX9Z3332nv/71r3b7+fjjjxUWFma90qBAr1699PHHH2vEiBE24wsWLNAdd9yhTz/9tER1Dh8+XKtXr9Zbb71lXZqgwJgxY/TWW2+VaD/XKjMzU82aNSt0/Mqvm4uLizw9PUv9Hm5ubnJzq3g/LjIzM7Vy5UrNmjXL0aU4XHR0tG655RbNnTtXr7zyiqPLAQBUQL169dLixYs1bdo0m75gwYIFioyMVFZWlgOrcxyLxXJN/VVhPvjgAx08eFCbN2/WrbfearPt9OnTcnd3l3Sp/501a5Y+/vhjjRw50m4/CxYskIuLi+677z6b8V69eunf//63srKyFBgYaDM/ODhYjRo10okTJ65a55IlS/TKK6+oX79+WrBggSpVqmTdNnz4cK1Zs0YXLlwo1bGXRmZmpry8vKxfj8vHr+x/JV3T+bnWvtkM5syZozvvvLPC1l9WqlSpoh49eigpKUkPPvigo8sBrolzXisPwPR++eUXNW/evNDGq1q1atb/HzRokKRLzeaVtm/frp9//tk653IDBw5USkqK9u3bZx1LT0/Xl19+qYEDB5aoxt9//13vvvuuunfvbhfYSpKrq6uef/551a5d2zq2c+dOxcbGys/PT5UrV9btt9+u7777zu61J0+e1DPPPKOQkBB5eHioYcOGmjBhgnVdqoKPuaWlpWnlypXWj7wVfITRMAzNmDHDOn75a65cm2vLli3q1auXbrnlFvn4+KhVq1b65z//ad1e1Jq2H330kSIjI+Xl5aWAgADdd999dktOREVFqUWLFvrpp5/UrVs3eXt7q1atWpo4caJ1zvr169W2bVtJUnx8vM2xSJeWuLjnnntUvXp1eXp6qnbt2rrvvvt06tSpYs6OtHLlSl28eFHR0dE24xcuXNC4cePUqFEjeXp6qmrVqurUqZO++OILSZcaXYvFop07d9rt84033pCrq6v++OMPm+P74Ycf1LVrV3l7e6thw4ZasmSJJGnDhg1q3769vLy81KRJE61bt67Ymgu88847at68uTw8PFSzZk098cQTOnnypN28GTNmqH79+vLy8lK7du20adMmRUVFKSoqymZepUqVFBUVpeXLl5fo/QEAuNL999+vY8eOWX9eSlJubq6WLFlSZO+UnZ2t5557ztrPNGnSRP/4xz9kGIbNvIJlqZYtW6YWLVrIw8NDzZs31+rVq+32ebVeKikpSffee68kqVu3bta+4vL+pyQ/Z0vSw0hFr8+5b98+9e/fX0FBQdY+4MUXXyzy6ytd6n9dXV0LvRDBz8/PGsJ17NhRdevWLbT/vXDhgpYsWaJu3bqpZs2aNtv69OkjDw8PLV682GZ8wYIF6t+/v1xdXYutr8DLL7+sgIAAzZ492yawLRATE2OzVEZmZqaGDh2q4OBgeXp6Kjw8XHPnzrV7XX5+vqZOnarmzZvL09NTwcHBeuSRR2yCZIvFojlz5ig7O9uu//3qq6+0Z88eu3Ne2Jq2f/zxh4YOHaqaNWvKw8ND9erV02OPPabc3FxJxffNPXv2lL+/v7y9vdW1a1dt3rzZZk5B77x//34NGTJEVapUkb+/v+Lj43Xu3DmbY8nOztbcuXOtNQ8ZMkSSdObMGT3zzDOqW7euPDw8VK1aNXXv3l07duwo9tykpaXphx9+sOt/JWnhwoWKjIyUr6+v/Pz81LJlS2vP/+uvv8pisRR6wck333wji8Wijz/+2Ob4/vvf/+qBBx6Qv7+/goKC9PLLL8swDB06dEh9+vSRn5+fqlevrsmTJxdbc4Evv/xSnTt3lo+Pj6pUqaI+ffpo7969dvPWr1+vNm3ayNPTUw0aNNC7775b5L9Xunfvrq+//lrHjx8vUQ2A2RDaAjClOnXqaPv27Ve9eVK9evV066236pNPPlFeXp7NtoJGtrB/SHTp0kW1a9e2aXYXLVqkypUr64477ihRjatWrdLFixet68hezZ49e9S5c2ft2rVLI0aM0Msvv6y0tDRFRUVpy5Yt1nnnzp1T165d9dFHH2nw4MGaNm2aOnbsqFGjRlnX5m3atKnmzZunwMBARUREaN68eZo3b57atm2refPmSbrUpBSMF+WLL75Qly5d9NNPP+npp5/W5MmT1a1bN61YsaLYY3n99dc1ePBgNWrUSFOmTNEzzzyj5ORkdenSxe4fPSdOnFDPnj0VHh6uyZMnKywsTC+88IJWrVplPZaCqz8ffvhha81dunRRbm6uYmJi9N133+nJJ5/UjBkz9PDDD+vXX38tNMS83DfffKOqVauqTp06NuNjx47VuHHj1K1bN7399tt68cUXFRoaam2C+/XrJy8vL82fP99un/Pnz1dUVJRq1aplc3x/+9vf1L59e02cOFEeHh667777tGjRIt13333q1auX3nzzTWVnZ6tfv346c+ZMsXWPHTtWTzzxhGrWrKnJkyfrnnvu0bvvvqsePXrYXLUyc+ZMJSQkqHbt2po4caI6d+6svn376vfffy90v5GRkfrxxx91+vTpYt8fAIDC1K1bVx06dLAGN9KlXujUqVN2V3RKl9ZVvfPOO/XWW2+pZ8+emjJlipo0aaLhw4db+5nLff3113r88cd13333aeLEifrzzz91zz336NixY9Y5JemlunTpoqeeekqS9P/+3/+z9hVNmzaVVPKfs9LVe5ii/PDDD2rfvr2+/PJLDRs2TP/85z/Vt29f/ec//yn2dXXq1FFeXl6xvZt0KewbOHCgdu/erT179thsW716tY4fP17oRQve3t7q06ePzTnctWuX9uzZU+KLFlJTU7Vv3z717dtXvr6+V51//vx5RUVFad68eRo0aJAmTZokf39/DRkyxOYiAUl65JFHNHz4cHXs2FH//Oc/FR8fr/nz5ysmJsZ6bubNm6fOnTvLw8PDrv8NCwtT7dq17c75lQ4fPqx27dpp4cKFGjBggKZNm6a///3v2rBhg02oeqUvv/xSXbp00enTpzVmzBi98cYbOnnypG677TZt3brVbn7//v115swZjR8/Xv3791dSUpLGjRtn3T5v3jx5eHioc+fO1pofeeQRSdKjjz6qmTNn6p577tE777yj559/Xl5eXoWGmJf75ptvJMnuU4ZffPGF7r//ft1yyy2aMGGC3nzzTUVFRVkD5/r166tjx45F9r++vr7q06ePzfiAAQOUn5+vN998U+3bt9drr72mqVOnqnv37qpVq5YmTJighg0b6vnnn9fGjRuLrXvdunWKiYlRZmamxo4dq8TERH3zzTfq2LGjzdrUO3fuVM+ePXXs2DGNGzdOQ4cO1SuvvFLkusCRkZEyDMP6dQEqHIcuzgAARVi7dq3h6upquLq6Gh06dDBGjBhhrFmzxsjNzbWbO2PGDEOSsWbNGutYXl6eUatWLaNDhw42cwvWtD169Kjx/PPPGw0bNrRua9u2rREfH28YhlGiNW2fffZZQ5Kxc+fOEh1T3759DXd3d+OXX36xjh0+fNjw9fU1unTpYh179dVXDR8fH+O///2vzetHjhxpuLq6GgcPHrSO1alTp9D14wqrv2A9s4L13S5evGjUq1fPqFOnjnHixAmbufn5+db/L/iaFThw4IDh6upqvP766zav2b17t+Hm5mYz3rVrV0OS8eGHH1rHcnJyjOrVqxv33HOPdayoNW137txpSDIWL15sd4xX06lTJyMyMtJuPDw8/Kpr7t1///1GzZo1bdYx27Fjh12NBce3YMEC69i+ffsMSYaLi4vx3XffWcfXrFlj9/or17TNzMw03N3djR49eti899tvv21IMmbPnm0YxqWvYdWqVY22bdvarNGWlJRkSDK6du1qd0wLFiwwJBlbtmwp9tgBALhcwc+q77//3nj77bcNX19f49y5c4ZhGMa9995rdOvWzTAM+55k2bJlhiTjtddes9lfv379DIvFYrPOuiTD3d3dZmzXrl2GJGP69OnWsZL2UkWt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Coefficients (monotonic decreasing):\n", "[ 0.6899 0.68989 0.05962 -0.0126 -0.01276]\n", "Monotonic descreasing satisfied: True\n" ] } ], "source": [ "## Visualize the feature coefficients\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "df_coef = pd.DataFrame({\n", " 'Feature Index': range(len(clf.coef_.flatten())),\n", " 'SVM': clf.coef_.flatten(),\n", " 'Monotonic SVM': mclf.coef_.flatten()\n", "})\n", "\n", "fig, axes = plt.subplots(1, 2, figsize=(14, 5), sharey=True)\n", "sns.barplot(data=df_coef, x=\"Feature Index\", y=\"SVM\", ax=axes[0], color='#FFE4E1', edgecolor='black')\n", "axes[0].axhline(0, color='black', linewidth=1)\n", "axes[0].set_yscale('symlog', linthresh=0.005)\n", "axes[0].set_title(\"SVM Coefficients (symlog)\")\n", "\n", "sns.barplot(data=df_coef, x=\"Feature Index\", y=\"Monotonic SVM\", color='#8A8293', ax=axes[1], edgecolor='black')\n", "axes[1].axhline(0, color='black', linewidth=1)\n", "axes[1].set_yscale('symlog', linthresh=0.005)\n", "axes[1].set_title(\"Monotonic SVM Coefficients (symlog)\")\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "## Print the results of monotonic constraint\n", "np.set_printoptions(precision=5, suppress=True)\n", "print(\"\\nCoefficients (monotonic decreasing):\")\n", "print(mclf.coef_)\n", "print(\"Monotonic descreasing satisfied:\",\n", " np.all(mclf.coef_[:-1] >= mclf.coef_[1:]))\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 927 }, "id": "GmOPIjrhyAZ3", "outputId": "85bb891a-5a4e-4df0-983a-ec904b48fd29" }, "outputs": [ { "data": { "image/png": "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YKBWrFihCRMmKDExUU2bNlVqaqqmT59u1CEBAGAK3bt3148//qj//M//1LXXXmt0O5fF0LCzdOlSj+OhoaHKyspSVlbWeWvi4uK0atUqb7cGAECD9v333xvdgtf41ZwdAAAAbyPsAAAAUyPsAAAAUyPsAAAAUyPsAAAAUyPsAAAAUzP8recAAKB2CgsLdezYMZ/sq2XLloqNjfXJvryNsAMAQD1UWFioTp066dSpUz7ZX5MmTbRv377LCjwffPCBFi5cqPz8fB0/flzbt29XQkKC95o8D8IOAAD10LFjx3Tq1Cm98dqruvbqq+t0Xwe+/Vbj0n+nY8eOXVbYKSsr04033qh77rlH48eP92KHnhF2AACox669+mp179rF6DYuyujRoyX5/unMTFAGAACmRtgBAACmRtgBAABet2TJEjVr1sy9/P3vfzesF+bsAAAAr7v99tvVt29f9+fWrVsb1gthBwAAeF3z5s3VvHlzo9uQRNgBAAA+cvz4cRUWFurIkSOSpAMHDkiSrFarrFZrne2XsAPAb5WUlKiVzeaxxmazKX/bNh91BPifA99+W2/28cknn2js2LHuz/fdd58kacqUKZo6dapX9nEuhB0AfququkoF27d6rLmqey8fdQP4l5YtW6pJkyYal/47n+yvSZMmatmy5WVtY8yYMRozZox3GroEhB0AAOqh2NhY7du3j3djXQTCDgAA9VRsbGy9DSC+xHN2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqfGcHQAA6qnCwkIeKngRCDsAANRDhYWF6tixo3766Sef7K9x48bav3//JQWeDRs2aPbs2crPz5fdbteHH36oYcOG1V2T50HYAQCgHjp27Jh++uknpY4aL2tMqzrdl6PoiN5a8hcdO3bsksJOWVmZunXrpoceekjDhw+vww49I+wAQD3VtUtX2R12jzVOp9M3zcAw1phWim0TZ3Qb5zR06FANHTrU6DYIOwBQX9kddk17ZpbHmownxvuoG8B/EXYAoIFzOp2KioryWGOz2rRz104fdQR4F2EHABq46mrXBc8QTZkx0UfdAN7Hc3YAAICpEXYAAICpcRkLAADUiZMnT6qgoMD9+eDBg9qxY4ciIyN9+oBCwg4At549eshu93wrs81mU/62bT7qCMCFOIqO+O0+tm7dqgED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FhMshw4d8pgV6v2ZnZYtWyowMFBFRUU11hcVFclqtZ7zO5MmTVJm5v+l6+rqah0/flwtWrSQxWKp037rm9LSUrVt21aHDh1SWFiY0e00SPwG/oHfwXj8Bv7Bn34Hl8ulEydOqFWrVh7r6n3YadSokXr27Knc3FwNGzZM0i/hJTc3V+np6ef8TkhIiEJCQmqsi4iIqONO67ewsDDD/6Zu6PgN/AO/g/H4DfyDv/wO4eHhF6yp92FHkjIzM5WamqpevXqpT58+mjt3rsrKytx3ZwEAgIbLFGHn3nvv1dGjR/X888/L4XAoISFBq1evPmvSMgAAaHhMEXYkKT09/byXrVB7ISEhmjJlylmX/eA7/Ab+gd/BePwG/qE+/g4Wl+tC92sBAADUX7w2FgAAmBphBwAAmBphBwAAmBphBwAAmBphB5esvLxcCQkJslgs2rFjh9HtNCjff/+9xo0bp/bt26tx48a68sorNWXKFFVUVBjdmqllZWWpXbt2Cg0NVd++ffX1157fUwfvmjlzpnr37q3mzZsrOjpaw4YN04EDB4xuq0F76aWXZLFY9NhjjxndykUh7OCSTZw48YKP5kbd2L9/v6qrq/X6669rz549mjNnjhYuXKhnnnnG6NZMa9myZcrMzNSUKVO0bds2devWTcnJySouLja6tQZj/fr1SktL06ZNm5STk6PKykoNGTJEZWVlRrfWIG3ZskWvv/66unbtanQrF41bz3FJPvvsM2VmZur9999X586dtX37diUkJBjdVoM2e/ZsLViwQP/4xz+MbsWU+vbtq969e+u1116T9MvraNq2bauMjAw9/fTTBnfXMB09elTR0dFav369br75ZqPbaVBOnjypHj16aP78+XrxxReVkJCguXPnGt3WBXFmBxetqKhI48eP11//+lc1adLE6Hbw/5WUlCgyMtLoNkypoqJC+fn5SkpKcq8LCAhQUlKS8vLyDOysYSspKZEk/r43QFpamlJSUmr8M1EfmOYJyqhbLpdLY8aM0W9+8xv16tVL33//vdEtQVJBQYHmzZunl19+2ehWTOnYsWOqqqo669UzMTEx2r9/v0FdNWzV1dV67LHHdMMNN+i6664zup0GZenSpdq2bZu2bNlidCuXjDM7DdzTTz8ti8Xicdm/f7/mzZunEydOaNKkSUa3bEoX+zv82uHDh3XLLbfo7rvv1vjx4w3qHPCttLQ07d69W0uXLjW6lQbl0KFDevTRR7VkyRKFhoYa3c4lY85OA3f06FH98MMPHms6dOige+65R59++qksFot7fVVVlQIDAzVq1Ci99dZbdd2qqV3s79CoUSNJ0pEjR9S/f3/169dPixcvVkAAf26pCxUVFWrSpInee+89DRs2zL0+NTVVTqdTH3/8sXHNNUDp6en6+OOPtWHDBrVv397odhqUjz76SHfeeacCAwPd66qqqmSxWBQQEKDy8vIaY/6GsIOLUlhYqNLSUvfnI0eOKDk5We+995769u2rNm3aGNhdw3L48GENGDBAPXv21DvvvOPX/4Ixg759+6pPnz6aN2+epF8uo8TGxio9PZ0Jyj7icrmUkZGhDz/8UOvWrdPVV19tdEsNzokTJ/S///u/NdaNHTtWHTt21FNPPeX3lxSZs4OLEhsbW+Nzs2bNJElXXnklQceHDh8+rP79+ysuLk4vv/yyjh496h6zWq0GdmZemZmZSk1NVa9evdSnTx/NnTtXZWVlGjt2rNGtNRhpaWnKzs7Wxx9/rObNm8vhcEiSwsPD1bhxY4O7axiaN29+VqBp2rSpWrRo4fdBRyLsAPVKTk6OCgoKVFBQcFbI5CRt3bj33nt19OhRPf/883I4HEpISNDq1avPmrSMurNgwQJJUv/+/WusX7RokcaMGeP7hlDvcBkLAACYGrMaAQCAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AEC/vOEcgDkRdgD4tffee09dunRR48aN1aJFCyUlJamsrEyS9Oabb6pz584KCQmRzWZTenq6+3uFhYW644471KxZM4WFhemee+5RUVGRe3zq1KlKSEjQf/3Xf6l9+/YKDQ2VJDmdTj388MOKiopSWFiYBg4cqG+++ca3Bw3Aqwg7APyW3W7X/fffr4ceekj79u3TunXrNHz4cLlcLi1YsEBpaWl65JFHtGvXLn3yySe66qqrJEnV1dW64447dPz4ca1fv145OTn6xz/+oXvvvbfG9gsKCvT+++/rgw8+0I4dOyRJd999t4qLi/XZZ58pPz9fPXr00KBBg3T8+HFfHz4AL+FFoAD81rZt29SzZ099//33iouLqzHWunVrjR07Vi+++OJZ38vJydHQoUN18OBBtW3bVpK0d+9ede7cWV9//bV69+6tqVOnasaMGTp8+LCioqIkSf/93/+tlJQUFRcXKyQkxL29q666ShMnTtQjjzxSh0cLoK4EGd0AAJxPt27dNGjQIHXp0kXJyckaMmSI7rrrLlVWVurIkSMaNGjQOb+3b98+tW3b1h10JCk+Pl4RERHat2+fevfuLUmKi4tzBx1J+uabb3Ty5Em1aNGixvZ++uknfffdd3VwhAB8gbADwG8FBgYqJydHGzdu1Jo1azRv3jw9++yzys3N9cr2mzZtWuPzyZMnZbPZtG7durNqIyIivLJPAL5H2AHg1ywWi2644QbdcMMNev755xUXF6ecnBy1a9dOubm5GjBgwFnf6dSpkw4dOqRDhw7VuIzldDoVHx9/3n316NFDDodDQUFBateuXV0dEgAfI+wA8FubN29Wbm6uhgwZoujoaG3evFlHjx5Vp06dNHXqVP3mN79RdHS0hg4dqhMnTuirr75SRkaGkpKS1KVLF40aNUpz587Vzz//rN/+9rf6t3/7N/Xq1eu8+0tKSlJiYqKGDRumWbNm6ZprrtGRI0e0cuVK3XnnnR6/C8B/EXYA+K2wsDBt2LBBc+fOVWlpqeLi4vTHP/5RQ4cOlSSdPn1ac+bM0RNPPKGWLVvqrrvukvTL2aCPP/5YGRkZuvnmmxUQEKBbbrlF8+bN87g/i8WiVatW6dlnn9XYsWN19OhRWa1W3XzzzYqJianz4wVQN7gbCwAAmBrP2QEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKb2/wBPfFiQRY1aIwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import warnings\n", "warnings.filterwarnings(\"ignore\", \"is_categorical_dtype\")\n", "warnings.filterwarnings(\"ignore\", \"use_inf_as_na\")\n", "\n", "df = pd.DataFrame({'score': score, 'mscore': mscore, 'y': y})\n", "\n", "sns.histplot(df, x=\"score\", hue=\"y\").set_title(\"SVM\")\n", "plt.show()\n", "sns.histplot(df, x=\"mscore\", hue=\"y\").set_title(\"Monotonic SVM\")\n", "plt.show()" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 0 }