287 lines
63 KiB
Plaintext
287 lines
63 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"id": "93b8c292-c33b-40e8-ac81-830e67dc8f9d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" precision recall f1-score support\n",
|
||
"\n",
|
||
" 0 1.00 1.00 1.00 10\n",
|
||
" 1 1.00 1.00 1.00 10\n",
|
||
" 2 1.00 1.00 1.00 10\n",
|
||
"\n",
|
||
" accuracy 1.00 30\n",
|
||
" macro avg 1.00 1.00 1.00 30\n",
|
||
"weighted avg 1.00 1.00 1.00 30\n",
|
||
"\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.datasets import load_iris\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"from sklearn.neural_network import MLPClassifier\n",
|
||
"from sklearn.metrics import classification_report\n",
|
||
"\n",
|
||
"# Загрузка и разбиение данных\n",
|
||
"X, y = load_iris(return_X_y=True)\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
|
||
"\n",
|
||
"# Модель MLP — многослойный перцептрон\n",
|
||
"clf = MLPClassifier(hidden_layer_sizes=(10,), activation='relu', max_iter=2500)\n",
|
||
"clf.fit(X_train, y_train)\n",
|
||
"\n",
|
||
"# Отчёт о точности\n",
|
||
"print(classification_report(y_test, clf.predict(X_test)))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"id": "a3b4078a-2b82-460f-80d8-56472b379641",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" precision recall f1-score support\n",
|
||
"\n",
|
||
" 0 0.99 0.99 0.99 186\n",
|
||
" 1 1.00 1.00 1.00 211\n",
|
||
"\n",
|
||
" accuracy 0.99 397\n",
|
||
" macro avg 0.99 0.99 0.99 397\n",
|
||
"weighted avg 0.99 0.99 0.99 397\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAm4AAAHHCAYAAAAGU9SoAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVchJREFUeJzt3QeYFFXWxvHT5DjkNJKRKEEERRaWsCgIihJMmFAR1wAoKCqfSDLgYsAVFbMYQIygoqIYAQkqwYCKgCggUREQkDRd3/Net9ruYWaYoXuYKef/26d2pquqq29X19iHc+69FfI8zzMAAADkevlyugEAAADIHAI3AACAgCBwAwAACAgCNwAAgIAgcAMAAAgIAjcAAICAIHADAAAICAI3AACAgCBwAwAACAgCN+BvYsWKFda5c2crVaqUhUIhmz59ekKP/+OPP7rjTpo0KaHHDbIOHTq4JZHWrl1rRYoUsU8++SShx0XudtNNN1mrVq1yuhkIAAI3IIFWrVpl//73v6127druyzcpKcnatGlj//3vf+2PP/7I1tfu27evffXVV3b77bfbs88+ay1btrS/i4svvtgFjTqfaZ1HBa3aruXuu+/O8vHXr19vo0aNsqVLl1pOGzNmjPsC13Xje/XVV+2cc85x11WxYsWsfv36dt1119m2bdvSPMbrr79uxx13nLsGq1evbiNHjrQDBw4cwXeBrLr22mvtiy++cJ8dkJECGW4FkGlvvvmmnXXWWVa4cGG76KKLrHHjxrZv3z6bO3euDR061JYtW2aPPvpotry2gpn58+fbzTffbAMGDMiW16hRo4Z7nYIFC1pOKFCggO3evdveeOMNO/vss2O2TZ482QUpe/bsOaxjK3AbPXq01axZ04499thMP+/dd9+1RNqyZYs9/fTTbol2+eWXW3Jysl1wwQUuEFOA/sADD9hbb71lixcvtqJFi0b2ffvtt61Hjx4uEzhhwgS372233WabN2+2iRMnJrS9SJzKlSvbGWec4f7hcfrpp+d0c5CLEbgBCbB69Wo799xzXXDzwQcfWJUqVSLbrr76alu5cqUL7LKLvvCldOnS2fYaymYpOMopCoiVhXr++ecPCtymTJlip556qr3yyitHpC0KIJX5KlSoUEKP+9xzz7kAtXv37jHrX3755YNKsi1atHBZVgWtl112WWT99ddfb02bNnVBpY4lylTecccdds0111iDBg0sLwmHw+4fUDl57WaWrmv94++HH35w2VUgLZRKgQQYN26c7dy505544omYoM139NFHuy9Nn8pWt956q9WpU8cFJMr0/N///Z/t3bs35nlaf9ppp7ms3QknnOC+fPQf9GeeeSayj0p8ChhFmT0FWHqeX2L0f4+m52i/aLNmzbK2bdu64K9EiRKuHKc2HaqPmwLVf/7zn1a8eHH3XGUNvv322zRfTwGs2qT91BfvkksucUFQZp133nkuoxRdIvzss89cqVTbUtu6dasLZJo0aeLekwKYrl27upKU76OPPrLjjz/e/a72+CVX/30qYFL2dNGiRdauXTsXsPnnJXUfNwVS+oxSv/8uXbpYmTJlXGYvI+qXqDKp2hotrX50PXv2dD+jX+ubb75xizJ0ftAmV111lXme5wJAnz4Hvc7PP//sMnT6vUKFCu58paSkHBT83HfffXbMMce491epUiXXJeC3336L7DNkyBArV66cex3fwIED3bm8//77I+s2bdrk1kVn/5QZ1LF1bnWeVOZXMB5Nn5PW6/X1d/PII4+keR3rsbLOCmh1TP19zZw5021bsmSJ+/x1Hej9durUyRYsWBDz/LSOKboetF5/B6n/PhUkK1OrtjVq1MiVtqPt37/fZXTr1q3r9tF50t+a/uainXTSSe7na6+9dtDrAz4CNyABVL5TQPWPf/wjU/srQzJixAjXD2n8+PHWvn17Gzt2rMvapaZg58wzz7STTz7Z7rnnHvfFpi9dlV6lV69e7hjSp08f179NX7JZoWPpC0iBo/pY6XVUrjlUB/n33nvPBSUqw+kLT1/e8+bNc5mx6C+46IzC77//7t6rfteXob7QMkvvVV+e0V+M+oJXFknnMjVlLhQM6b3de++9LrBV6VDn2w+iGjZs6N6zKODR+dOiIM3366+/ui98fTnr3Hbs2DHN9qkvo4IfBXB+8KMAQ1/sCk5U7kyPvtwVhKb1PtKyceNG97N8+fKRdQpMJHX/Rr1u1apVI9t9aqM+PwUSKtHpvOizT13SV5Cmc+f311SAq8BIz1W7RcG7AmX/upQ5c+ZYvnz53M/odeKf38cee8wGDRrkAh6dW10POs8LFy6MeV+nnHKK+xy0vV+/fu4zS28Ajv4xMXjwYNcvUO1VgKV2qY0K2m+44Qa75ZZbXKZcQXH0a2WV/tGg19H1oetaAbOyZtFBmf421G5dNypxq0uDSt4qc0fTP2YUlDIwBRnyAMRl+/btSjF4Z5xxRqb2X7p0qdv/sssui1l//fXXu/UffPBBZF2NGjXcutmzZ0fWbd682StcuLB33XXXRdatXr3a7XfXXXfFHLNv377uGKmNHDnS7e8bP368e7xly5Z02+2/xlNPPRVZd+yxx3oVK1b0fv3118i6L774wsuXL5930UUXHfR6l156acwxe/bs6ZUrVy7d14x+H8WLF3e/n3nmmV6nTp3c7ykpKV7lypW90aNHp3kO9uzZ4/ZJ/T50/saMGRNZ99lnnx303nzt27d32x5++OE0t2mJ9s4777j9b7vtNu+HH37wSpQo4fXo0eOQ73HlypXueRMmTPAyo1+/fl7+/Pm977//PrJO713HWLNmzUH7H3/88d6JJ54Yc061b/R5kObNm3stWrSIPJ4zZ47bb/LkyTH7zZw5M2a9rks9fuihh9zjbdu2uevgrLPO8ipVqhR53qBBg7yyZct64XDYPdbfzTHHHJPhe+3evbtXrFgx7+eff46sW7FihVegQIGY61j0WK+7bNmymPX6DAoVKuStWrUqsm79+vVeyZIlvXbt2qX7t+HTtaH1un5S/32+8sorMf89qFKlijuPvmbNmnmnnnqqlxmdO3f2GjZsmKl9kTeRcQPitGPHDvezZMmSmdpfHcpF2aloGiUoqfvCKROhTIFPGR2VMZVNShS/b5xKNCqLZcaGDRvcKExl/8qWLRtZr/5Vyg767zPaFVdcEfNY70tZFP8cZoZKoiqbKeOkzIp+plUmFZXJlPHxs0t6Lb8MnDrbkREdR1mmzNCULMpQKSOkDKFKY8q6HYraJsqoHoqyjCrL65pR+c3nj7hVe1NTO9IakZvWZxJ9bb300ksuE6TP9Jdffoks6mOnc/nhhx9GrktlPmfPnu0eK2uUP39+l6lTeVSZKT/jpjKhX47Utbdu3TqXbUyLPjdldlXOjc5YqvuBslxpUeZQfzfRx1DWU8eI7jumbg26dtQVISvXYDS1yS9bi8qwGpykLKGfFdV7VMbPPwcZ0eev8wukh8ANiJP+Qy0qAWbGTz/95IIJffGkHlWm/8BrezSVVNL6j3t0/6J4qdSjMphKuOq/pJLtiy++mGEQ57dTQVBqKj/qy2fXrl0Zvhc/SMnKe+nWrZsLkl944QVXrlP/tNTn0qf2q4ys4EbBjMqKCjC+/PJL2759e6Zf86ijjsrSQASVHRXMKrBV/66KFStm+rnRfcTSosBHpUKVKTX1SzR/dGnqvpKiEbfRo0/9YE7nI6NrS8GGzpXeg/aNXtSvU2Xy6KDPL4Xqp0q2WnQu9FjBkUqV0f8QufHGG10AqD6c+pw0mCe6VKjjK+BM6zNO73OvVavWQYN31JcyvWtV14nmzzscakPqPnH16tVzP/3uAgri1S9T69XfUsGsrsH0Pv+0+tgBPgI3IAGBm/7V/fXXX2fpeZn9j7OyFofzBZ/Ra6TufK4vdGVKlNm48MIL3ZeKgjllWVLvG4943otPAZgyWZoyY9q0aelm20QjKZXZVH8qjdh85513XN8jdVrPbGZRUgc8h6Jsix/QqE9dZqif2aGCWAU96nuowRIaaBA9AEH8gTHKhqamdan72KX3eUTTeVLQpvOW1uL3DxRl0jTYQRk7BWoK0HQNar0eq/+jjhcduClwWr58uU2dOtXtp5HB+qm55w5XVj+vw/mbyQpdf5rj8cknn3Sf3eOPP+76Mupnavr8o/stAqkRuAEJoM7v+g+z5lI7FI0A1ZdX6rKJykn6V7k/QjQRlD1Ja5LW1Fk9URZQo+zUiV8jE5XNUSnSL4Wl9T5EX7qpfffdd+7LRyNNs4OCNQVHynKmNaDDp+BGHcJVVtR+KmNq5F7qc5LIDIeyjCqrqlSnwQ4acZxeGTB1NlIBhzrMp0XXlzroK4hSGTr1yFPx56D7/PPPY9ZrIIbKkVmZo86nzvIq4yojq3OXemnWrFlkXz8gU0Cn9+w/VuCiwE2LrgmVWaNpnf6h8NRTT9maNWvc1C66/pQl1PtVZlCDdFJLa11alB3UiNX0rlVd+9WqVYvJAqe+RtL6m/HbkPofHt9//737GT2iW1lHXReazkbZPXUp0KCF1PT5K5gF0kPgBiSARqnpy0elRgVgaX3panSbX+qT1CM/FTCJvrQSRV+6KnNFl2WUeVGmKppGA6bmf8mnVXbzszvaR5mv6C85ZR7Vn8h/n9lBwZimU9EIPZWY06OMUuovVfXZUlYomh9gpncngqxQ6U/Bh86LPlN9eWuUaXrn0aeJjVVWTB10ifpKKehUgKGsYerypk+ZRPUz06jQ6AyRpt5QcKrRyVml0b86ls53aprWJvqcqUSpsrLK0xpt6t/9QQGc/gYUSJ944okxmUK/b59PJWkFvfrcdAx9hgoQNYI0ejoVBUyaGiYzdAydP/XhjB7trL9V9RdUhs/v8qC/GfH76vnBeOpJkX1qU/Tfk8rBmq5Hfxv+tZn6PSroVok19TWhv1Wdp8yOTkfexAS8QALoP/b6AlDWQP9ajr5zgspDChbUiV+UodAXub5c9aWnjtSffvqp+2JQ5+n0ppo4HMoyKZBQ52lNuaB+PvoSV1+b6M75Knfpi0pBozJpKvM99NBDbgoJfaml56677nIdxFu3bu36Xakvkqa9UGf2tLIJiaIAZvjw4ZnKhOq9KdOhL0OVLdUvLvXkpvr81L/w4Ycfdv3nFMhpPrXUfaUORRlKnTeV+fxpPZRF0pQTmn5C2beMaA48TRWhL38/kBBl2lR+1D8Q1JFei099ElXSjv5MVE5VoKLPX4G0Alz9o+JwMjm6PjXYQlNdqM+ejqsgUxljXdf6B0l0QKggTWVP9eXys1c6FzqnykSlLm3reApwFOTpvWheOrVX16I/4EfXkv4xoH2uvPJKF0hqH/2NZfY2Zbp7hD9Xoea1U/CoQSMKnqI/F7VH2U9dz+qLpqBPJU4FywrIU9PfkvZVhlHt174KCPW5+xSI6hpQplGZNwXnCmJT3+VEXRUUsOo6ANKV08Nagb8TTc3Qv39/r2bNmm7qAU010KZNGzfFg6am8O3fv99NYVGrVi2vYMGCXrVq1bxhw4bF7ONPN5DWNAKpp6FIbzoQeffdd73GjRu79tSvX9977rnnDpry4P3333fTMiQnJ7v99LNPnz4xU02kNR2IvPfee+49Fi1a1EtKSnJTN3zzzTcx+/ivl3q6kbSmWDjUdCDpSW86EE2boukZ1D61c/78+WlO4/Haa695jRo1ikwx4b9P7ZfedBXRx9mxY4f7vI477jj3+UYbPHiwm6JCr52RTZs2udd/9tlnY9arPektqd+HTJs2zU3VomlPqlat6g0fPtzbt29fps5petNhPProo26aEJ1HXddNmjTxbrjhBjelRrQHH3zQPf/KK6+MWX/SSSe59brWoj3yyCNuOg5NC6P21qlTxxs6dKibViOanqcpNnR9ap/HH3/cfbZFihQ56FxdffXVaZxdz1u8eLHXpUsXN0WLphfp2LGjN2/evIP2W7RokdeqVSv3WtWrV/fuvffedKcD0d+npoBp2rSpa3+DBg28l156KeZ4mhrmhBNO8EqXLu3On/a5/fbbD/pMzjnnHK9t27Zpth3whfR/6Yd1AIAjSdkbZaaiJ61F2pShzuw0G9lBZXBl/WbMmBH3sVQOV4ZX2UoybsgIfdwAIBdRmVVlN2bPj5V6DjoFaxqkkdbtwIJIfV5VXiZow6GQcQMA5HoaDKN+ouqfqBGe6qup/mkaXRw9CXFQM25AZjE4AQCQ62mAhqbSUElRc/lpQIzm6cupoA3IKWTcAAAAAoI+bgAAAAFB4AYAABAQ9HFDrqHbQGkWck26yU2WASBY1PNKt6HTPXE1SXZ22bNnj5vcPBF0pw7dUi1ICNyQayho8+8XCAAIJt2LVXddya6grVaNErZx81+3dIuH7tqh+8MGKXgjcEOu4d/e5rE5DaxYifw53RwgWzzW/OicbgKQLQ7Yfptrb0X+W54d9u3b54K2nxbVtKSS8WX1dvwethotfnTHJHADDoNfHlXQVqwkgRv+ngqECuZ0E4Ds8b85Ko5EV5cSJUNuiUfYgtklh8ANAAAESooXthQv/mMEEYEbAAAIlLB5bon3GEHEdCAAAAABQcYNAAAEStj9L/5jBBGBGwAACJQUz3NLvMcIIkqlAAAAAUHGDQAABEo4Dw9OIHADAACBEjbPUvJo4EapFAAAICDIuAEAgEAJUyoFAAAIhhRGlQIAACAtY8eOteOPP95KlixpFStWtB49etjy5ctj9tmzZ49dffXVVq5cOStRooT17t3bNm3aFLPPmjVr7NRTT7VixYq54wwdOtQOHDhgWUHgBgAAAiWcoCWzPv74YxeULViwwGbNmmX79++3zp07265duyL7DB482N544w176aWX3P7r16+3Xr16RbanpKS4oG3fvn02b948e/rpp23SpEk2YsSILL33kOcFNFeIv50dO3ZYqVKlbPKSY6xYyfw53RwgWzxYt15ONwHIFge8/faRvWbbt2+3pKSkbP2eWPZtRStZMr7c0++/h+2YhpsPq71btmxxGTMFaO3atXPHqFChgk2ZMsXOPPNMt893331nDRs2tPnz59uJJ55ob7/9tp122mkuoKtUqZLb5+GHH7Ybb7zRHa9QoUKZem0ybgAAIFBSvMQsfjAYvezdu/eQr69ATcqWLet+Llq0yGXhTjrppMg+DRo0sOrVq7vATfSzSZMmkaBNunTp4l5z2bJlmX7vBG4AACDPqlatmsvi+Yv6s2UkHA7btddea23atLHGjRu7dRs3bnQZs9KlS8fsqyBN2/x9ooM2f7u/LbMYVQoAAAIlnMU+aukdQ9auXRtTKi1cuHCGz1Nft6+//trmzp1rOYHADQAABErYQpZiobiPIQraMtvHbcCAATZjxgybPXu2Va1aNbK+cuXKbtDBtm3bYrJuGlWqbf4+n376aczx/FGn/j6ZQakUAAAgAxrHqaBt2rRp9sEHH1itWrVitrdo0cIKFixo77//fmSdpgvR9B+tW7d2j/Xzq6++ss2bN0f20QhVBY2NGjWyzCLjBgAAAiXs/bnEe4zMUnlUI0Zfe+01N5eb3ydNfeKKFi3qfvbr18+GDBniBiwoGBs4cKAL1jSiVDR9iAK0Cy+80MaNG+eOMXz4cHfsQ5VnoxG4AQCAQElJQKk0K8+fOHGi+9mhQ4eY9U899ZRdfPHF7vfx48dbvnz53MS7GpmqEaMPPfRQZN/8+fO7MuuVV17pArrixYtb3759bcyYMVlqN4EbAABABjIz5W2RIkXswQcfdEt6atSoYW+99ZbFg8ANAAAESsoRzrjlJgRuAAAgUMJeyC3xHiOIGFUKAAAQEGTcAABAoKRQKgUAAAiGFMvnlviOEUwEbgAAIFC8BPRx0zGCiD5uAAAAAUHGDQAABEoKfdwAAACCIcXL55b4jmGBRKkUAAAgIMi4AQCAQAlbyMJx5p7CFsyUG4EbAAAIlJQ83MeNUikAAEBAkHEDAAB5cHCCZ0FE4AYAAALYxy0U9zGCiFIpAABAQJBxAwAAgRJOwL1KGVUKAABwBKTQxw0AACA4GbdwHs240ccNAAAgIMi4AQCAQEnxQm6J9xhBROAGAAACJSUBgxNSKJUCAAAgO5FxAwAAgRL28rklvmMEM+NG4AYAAAIlhVIpAAAAcjsybgAAIFDCCRgVqmMEEYEbAADIgxPw5rMgCmarAQAA8iAybgAAIA/eqzSfBRGBGwAACJSwhdwS7zGCiMANAAAESkoezrgFs9UAAAB5EIEbAAAI5AS8KXEuWTF79mzr3r27JScnWygUsunTp8ds17q0lrvuuiuyT82aNQ/afuedd2apHZRKAQBAoIS9kFviPUZW7Nq1y5o1a2aXXnqp9erV66DtGzZsiHn89ttvW79+/ax3794x68eMGWP9+/ePPC5ZsmSW2kHgBgAAcAhdu3Z1S3oqV64c8/i1116zjh07Wu3atWPWK1BLvW9WUCoFAACBEk5AmdSfgHfHjh0xy969e+Nu36ZNm+zNN990GbfUVBotV66cNW/e3JVRDxw4kKVjk3EDAACBEvbyuSXeY0i1atVi1o8cOdJGjRoV17Gffvppl1lLXVIdNGiQHXfccVa2bFmbN2+eDRs2zJVY77333kwfm8ANAADkWWvXrrWkpKTI48KFC8d9zCeffNLOP/98K1KkSMz6IUOGRH5v2rSpFSpUyP7973/b2LFjM/26BG4AACBQUizklniPIQraogO3eM2ZM8eWL19uL7zwwiH3bdWqlSuV/vjjj1a/fv1MHZ/ADQAA5NlSaaI98cQT1qJFCzcC9VCWLl1q+fLls4oVK2b6+ARuAAAAh7Bz505buXJl5PHq1atd4KX+atWrV3frNLjhpZdesnvuueeg58+fP98WLlzoRpqq/5seDx482C644AIrU6aMZRaBGwAACJSUqFJnPMfIis8//9wFXan7q/Xt29cmTZrkfp86dap5nmd9+vQ56Pnqw6btGvigkau1atVygVt0v7fMIHADAACBEs6BUmmHDh1cUJaRyy+/3C1p0WjSBQsWWLwI3AAAQKCkcJN5AAAA5HZk3AAAQKB4FrJwnH3cdIwgInADAACBkkKpFAAAALkdGTcAABAoYS/klniPEUQEbgAAIFBSLJ9b4j1GEAWz1QAAAHkQGTcAABAoYUqlAAAAwRC2fG6J9xhBFMxWAwAA5EFk3AAAQKCkeCG3xHuMICJwAwAAgRKmjxsAAEAweF4+C8d55wMdI4iC2WoAAIA8iIwbAAAIlBQLuSXeYwQRgRsAAAiUsBd/HzUdI4golQIAAAQEGbeACIVCNm3aNOvRo0dONwW52PpPi9qSx8vY5mVFbPfmAtb1oZ+t9sm7Itv37QrZgrsr2A+zituebfktqep+a3rRNmt83vbIPtPOr2rrPy0Wc9xjzt1mHW7dfETfC3C4GrfaaWddtcXqNtlt5SofsFGX1rT5M0vldLOQQOEEDE6I9/k5hcAtIDZs2GBlypTJ6WYgl9v/R8jKNdhrDc/cYW9fnXzQ9k/GVrB184vZyfdstJJH7be1c4vbx6MqWvFKB6xWp78CvEbnbLMTrvk18rhgkYDWFJAnFSkWth+WFbF3ni9rI5/8Maebg2wQtpBb4j1GEBG4BUTlypVzugkIgBrtd7slPRsXF7UGPXfYUa3+cI+POXe7LZtayjZ9USQmcCtQxLPiFVKOSJuBRPv8wyS3AH9HwcwTBtjLL79sTZo0saJFi1q5cuXspJNOsl27/vzCfPLJJ+2YY46xwoULW5UqVWzAgAExpdLp06cf1nEvvvhiV2IdPXq0VahQwZKSkuyKK66wffv2RZ4/c+ZMa9u2rZUuXdo9/7TTTrNVq1bFvMa6deusT58+VrZsWStevLi1bNnSFi5cGNn+2muv2XHHHWdFihSx2rVru9c7cOBAQs8f4lP5uD/sxw9K2M6NBczzzNYtKGrbfixk1dvGBnvfv17Snjihjj3frYbNv7u8y+QBQG67c0JKnEsQkXE7wuVOBT7jxo2znj172u+//25z5swxz/Ns4sSJNmTIELvzzjuta9eutn37dvvkk0/iPq7v/fffdwHVRx99ZD/++KNdcsklLkC7/fbb3XYFeXr9pk2b2s6dO23EiBHuWEuXLrV8+fK5de3bt7ejjjrKXn/9dZcBXLx4sYXDYfd8vd5FF11k999/v/3zn/90Qd/ll1/uto0cOTJbzieyrt0tW+zDWyra0/+sbfkKeGYhzzrevsmST/gzAyf1uv/uyqjFKx6wX74rbPPvKm/bfihoXR/akKNtBwAffdxwRCjAUgaqV69eVqNGDbdOWTK57bbb7LrrrrNrrrkmsv/xxx8f93F9hQoVchm9YsWKuazemDFjbOjQoXbrrbe6wKx3794x+2tfZee++eYba9y4sU2ZMsW2bNlin332mcu4ydFHHx3ZX9m1m266yfr27eseK+OmY99www3pBm579+51i2/Hjh2Zer84fF8+W9o2LS1q3R7+2QVn6z8rZrNHV7LiFVOsWpvdkfKpr1z9fS6Ae+2iarb9p1+sVI39Odh6AEAww82AatasmXXq1MkFVWeddZY99thj9ttvv9nmzZtt/fr1blsij5t6HwVtvtatW7ss2tq1a93jFStWuKydAi6VUmvWrOnWr1mzxv1U5q158+aRoC21L774wgWDJUqUiCz9+/d3QeXu3Wn3uRo7dqyVKlUqslSrVu2w3j8y58CekC24t7y1GbbF9Wcr32CfNb1wmx3d7Xdb+kT6A18qNdvjfm5fU/AIthYADjE4wYtzCejgBAK3Iyh//vw2a9Yse/vtt61Ro0Y2YcIEq1+/vm3atClbjrt69epMH6N79+62detWF/Sp35rfd83vB6e+cxlREKismwI8f/nqq69cQKgSbVqGDRvmSsL+4geRyB7h/SG3hPLFjhDVY+/Pineafvm2sPtZrAL9FQHkDt7/RpXGs+gYQUSp9AjTIIM2bdq4Rf3IVNpU0KUMl/qhdezYMWHH1bxv6rfmZ8T++OOPSAC2YMEClxVTluvXX3+15cuXu6BN/dNk7ty5McdX37fHH3/cBXdpZd00KEHHiC6fHooGYWhB4mietu0/FYo83rGuoG35prAVKZ1iJZMPWPIJu23efypYgSKbrWTyfvv502K2fHqStR22xe2//aeC9v0bJa1Gh13uOb8uL2xzb69gycfvdhk6IAiKFEux5Fp/Xa+Vq+2z2sf8Yb9vy29bfv7r7wPBFf5f1izeYwQRgdsRpCyWgrPOnTtbxYoV3WP1G2vYsKGNGjXKjfTUeg1O0AADDU4YOHBgmsdSaVSDBzTyNKPj+pQ569evnw0fPtwNTlC/Mz1X/ds0P5wGKjz66KNuNKvKo+qvFk1l1DvuuMONTlWJU/stWbLEkpOTXdlVwaJGolavXt3OPPNMd1wFi19//bXrv4cjY8vXRWz6BX+VnD+5o6L72aDndus0bpN1vm+DLbi7vM26rort2ZbPSh51wE4c8osd878JePMV8mzdvGL2xdNl7MDukJWocsDqdNlpLa/ammPvCciqes3+sLte+WtU/BWj17uf775Qxu4ZXD0HWwbEj8DtCFLfsdmzZ9t9993nOuIrK3bPPfe4QE327Nlj48ePt+uvv97Kly/vAqD0aNTmL7/8kqnj+oFe3bp1rV27dm5AgAIxBYuiIGvq1Kk2aNAgNxBBZVaNDu3QoUPM4IZ3333XDaDo1q2bGwyhsuyDDz7otnfp0sVmzJjh+rn95z//sYIFC1qDBg3ssssuy7bziYNpfrarV3yf7nbNzdbpP+mX5ktWOWA9p6zLptYBR8aX80tYl+RmOd0MZKNwHh5VGvKi54zA35Lmcdu2bVuG88DlBgo6NUhh8pJjrFjJ/DndHCBbPFi3Xk43AcgWB7z99pG95vosK6GQnd8TZ7x7qRUsHl/Ze/+uffZa5yeztb3ZIZjhJgAAQB5EqRQAAARKmHuV4u9s0qRJOd0EAAASJpyHR5VSKgUAADgEDQLUnKeaTSGt+4erP7nWRy+nnHJKzD6aUuv88893fep0b3DN9qB5ULOCwA0AAARKON67JhxGxk739NZdiPzZFNKiQE13DPKX559/Pma7grZly5a5+Vs1E4OCQf++3plFqRQAAARKOAdKpZpiK3qarbRoUvnKlSunue3bb7+1mTNnunt+t2zZ0q3TnY40xdbdd9/tMnmZQcYNAADkWTt27IhZNNfp4froo4/cRPiaD/XKK690dybyzZ8/35VH/aBNTjrpJDeXqn+bycwgcAMAAHm2VFqtWjU3N5y/6O5Ah0Nl0meeecbdyUgT0X/88ccuQ5eSkuK2b9y40QV10QoUKOBuI6ltmUWpFAAABIqXgOk8/LsPrF27NmYC3sO9h/a5554b+b1JkybuHt916tRxWTjdvShRyLgBAIA8m3FLSkqKWQ43cEutdu3a7vaVK1eudI/V923z5s0x++j2kRppml6/uLQQuAEAACTYunXrXB+3KlWquMetW7d2t59ctGhRZJ8PPvjAwuGwtWrVKtPHpVQKAAACJZwDo0o135qfPZPVq1fb0qVLXR81LaNHj7bevXu77NmqVavshhtusKOPPtq6dOni9m/YsKHrB9e/f397+OGHbf/+/TZgwABXYs3siFIh4wYAAAIlnAPzuH3++efWvHlzt8iQIUPc7yNGjLD8+fPbl19+aaeffrrVq1fPTazbokULmzNnTkzpdfLkydagQQPX503TgLRt29YeffTRLLWDjBsAAMAhdOjQwTzPH9JwsHfeeedQh3CZuSlTplg8CNwAAECghPPwvUoJ3AAAQKB4Xsgt8R4jiOjjBgAAEBBk3AAAQKCELRT3BLzxPj+nELgBAIBACefhPm6USgEAAAKCjBsAAAgULw8PTiBwAwAAgRLOw6VSAjcAABAoXh7OuNHHDQAAICDIuAEAgEDxElAqDWrGjcANAAAEiucCr/iPEUSUSgEAAAKCjBsAAAiUsIXc/+I9RhARuAEAgEDxGFUKAACA3I6MGwAACJSwF7IQE/ACAADkfp6XgFGlAR1WSqkUAAAgIMi4AQCAQPHy8OAEAjcAABAoHoEbAABAMITz8OAE+rgBAAAEBBk3AAAQKF4eHlVK4AYAAAIYuIXiPkYQUSoFAAAICDJuAAAgUDxGlQIAAASD978l3mMEEaVSAACAgCDjBgAAAsWjVAoAABAQXt6tlRK4AQCAYPHiz7jpGEFEHzcAAICAIHADAACBvHOCF+eSFbNnz7bu3btbcnKyhUIhmz59emTb/v377cYbb7QmTZpY8eLF3T4XXXSRrV+/PuYYNWvWdM+NXu68884stYPADQAABHJwghfnkhW7du2yZs2a2YMPPnjQtt27d9vixYvtlltucT9fffVVW758uZ1++ukH7TtmzBjbsGFDZBk4cGCW2kEfNwAAgEPo2rWrW9JSqlQpmzVrVsy6Bx54wE444QRbs2aNVa9ePbK+ZMmSVrlyZTtcZNwAAECweKHELGa2Y8eOmGXv3r0JaeL27dtdKbR06dIx61UaLVeunDVv3tzuuusuO3DgQJaOS8YNAAAEincYfdTSOoZUq1YtZv3IkSNt1KhRcR17z549rs9bnz59LCkpKbJ+0KBBdtxxx1nZsmVt3rx5NmzYMFcuvffeezN9bAI3AACQZ61duzYmuCpcuHBcx9NAhbPPPts8z7OJEyfGbBsyZEjk96ZNm1qhQoXs3//+t40dOzbTr0vgBgAA8uwEvElJSTGBWyKCtp9++sk++OCDQx63VatWrlT6448/Wv369RMXuL3++uuZa7FZmiMoAAAA/s63vNr/v6BtxYoV9uGHH7p+bIeydOlSy5cvn1WsWDHTr5OpwK1Hjx6ZOpg64aWkpGT6xQEAAIJg586dtnLlysjj1atXu8BL/dWqVKliZ555ppsKZMaMGS4W2rhxo9tP21USnT9/vi1cuNA6duzoRpbq8eDBg+2CCy6wMmXKJDZwC4fDh/MeAQAAsod3ZF/u888/d0FX6v5qffv2dYMZ/OrkscceG/M8Zd86dOjg+rBNnTrV7auRq7Vq1XKBW3S/t2zv46ZRE0WKFInnEAAAALm+VNqhQwc34CD942UcSWo06YIFCyxeWZ7HTem/W2+91Y466igrUaKE/fDDD269Zgt+4okn4m4QAABApgYneHEuAZTlwO3222+3SZMm2bhx41zN1te4cWN7/PHHE90+AAAAHG7g9swzz9ijjz5q559/vuXPnz+yXvfv+u6777J6OAAAgCwKJWgJniz3cfv555/t6KOPTnMAg4bCAgAABGUet799xq1Ro0Y2Z86cg9a//PLL7r5bAAAAyCUZtxEjRrihr8q8Kcv26quv2vLly10JVXOXAAAAZCuPjFumnXHGGfbGG2/Ye++9Z8WLF3eB3LfffuvWnXzyydnTSgAAAJ+m8kjEEkCHNY/bP//5T5s1a1biWwMAAIDET8CrGYSVafP7vbVo0eJwDwUAAJBpnvfnEu8x8kTgtm7dOuvTp4998sknVrp0abdu27Zt9o9//MPdyqFq1arZ0U4AAIA/0cct8y677DI37YeybVu3bnWLftdABW0DAABALsm4ffzxxzZv3jyrX79+ZJ1+nzBhguv7BgAAkK28BAwuyCuDE6pVq5bmRLu6h2lycnKi2gUAAJCmkPfnEu8x8kSp9K677rKBAwe6wQk+/X7NNdfY3Xffnej2AQAAxPLy7k3mM5VxK1OmjIVCf6UUd+3aZa1atbICBf58+oEDB9zvl156qfXo0SP7WgsAAJCHZSpwu++++7K/JQAAAJnh0cctQ7rFFQAAQK7g5d3pQA57Al7Zs2eP7du3L2ZdUlJSvG0CAABAIgYnqH/bgAEDrGLFiu5eper/Fr0AAABkKy/vDk7IcuB2ww032AcffGATJ060woUL2+OPP26jR492U4E888wz2dNKAAAAXx4O3LJcKn3jjTdcgNahQwe75JJL3KS7Rx99tNWoUcMmT55s559/fva0FAAAII/LcsZNt7iqXbt2pD+bHkvbtm1t9uzZiW8hAABAWqNKvTiXvBC4KWhbvXq1+71Bgwb24osvRjJx/k3nAQAAsvvOCaE4lzwRuKk8+sUXX7jfb7rpJnvwwQetSJEiNnjwYBs6dGh2tBEAAACH08dNAZrvpJNOsu+++84WLVrk+rk1bdo00e0DAACI5TGP22HToAQtAAAAyAWB2/3335/pAw4aNCie9gAAAGQo9L9+bvEe428buI0fPz5TB9ON6AncAAAAcjBw80eRAkfCY82PtgKhgjndDCBbvLN+aU43AcgWO34PW5l6R+jFPG4yDwAAEAxe3h2ckOXpQAAAAJAzyLgBAIBg8fJuxo3ADQAABEooAXc+yDN3TgAAAMhrZs+ebd27d7fk5GQ3i8b06dNjtnueZyNGjLAqVapY0aJF3U0KVqxYEbOP7u9+/vnnu3u96zah/fr1s507d2Z/4DZnzhy74IILrHXr1vbzzz+7dc8++6zNnTv3cA4HAACQ9VKpF+eSBbt27bJmzZq5W32mZdy4cW7e24cfftgWLlxoxYsXty5dutiePXsi+yhoW7Zsmc2aNctmzJjhgsHLL788ewO3V155xTVE0eSSJUts7969bv327dvtjjvuyOrhAAAAcn3g1rVrV7vtttusZ8+eBzfH8+y+++6z4cOH2xlnnOFuAfrMM8/Y+vXrI5m5b7/91mbOnGmPP/64tWrVytq2bWsTJkywqVOnuv2yLXBToxVNPvbYY1aw4F9zbbVp08YWL16c1cMBAAAE2urVq23jxo2uPOorVaqUC9Dmz5/vHuunyqMtW7aM7KP98+XL5zJ02TY4Yfny5dauXbuD1quB27Zty+rhAAAAcmxwwo4dO2LWFy5c2C1ZoaBNKlWqFLNej/1t+lmxYsWY7QUKFLCyZctG9smWjFvlypVt5cqVB61X/7batWtn9XAAAACHd+cEL87FzKpVq+aST/4yduxYy82ynHHr37+/XXPNNfbkk0+6URWqyyr9d/3119stt9ySPa0EAADIhnnc1q5d60Z5+rKabfOTWrJp0yY3qtSnx8cee2xkn82bN8c878CBA26kqf/8bAncbrrpJguHw9apUyfbvXu3K5vqTSpwGzhwYFYPBwAAkGOSkpJiArfDUatWLRd8vf/++5FATSVY9V278sor3WPNxKEuZYsWLbIWLVq4dR988IGLqdQXLtsCN2XZbr75Zhs6dKgrmWr+kUaNGlmJEiWyeigAAIBATMC7c+fOmK5iGpCwdOlS10etevXqdu2117oBnHXr1nWBnKqQmvOtR48ebv+GDRvaKaec4iqXGuS5f/9+GzBggJ177rluv2y/c0KhQoVcwAYAAPB3v+XV559/bh07dow8HjJkiPvZt29fmzRpkt1www1urjfNy6bMmqb70PQfRYoUiTxn8uTJLlhT1VKjSXv37u3mfsuKLAduarSybulR2g8AAODvpEOHDm6+tvQoNhozZoxb0qPs3JQpU+JqR5YDN79261OqT6nCr7/+2kWdAAAA2cpLwL1GA3qv0iwHbuPHj09z/ahRo7J8vy0AAIAglEr/djeZ171LNUUIAAAAssdhD05ITXO5RXfAAwAAyBZ5OOOW5cCtV69eMY/VUW/Dhg1utAUT8AIAgL/jdCCBDdx0O4hoGs5av359N4qic+fOiWwbAAAADjdwS0lJsUsuucSaNGliZcqUycpTAQAAcCQHJ+TPn99l1TSxHAAAQI72cfPiXPLCqNLGjRvbDz/8kD2tAQAAyGQft1CcS54I3HQfLt1QfsaMGW5Qgm6iGr0AAAAgh/u4afDBddddZ926dXOPTz/99JhbX2l0qR6rHxwAAEC28ixPynTgNnr0aLviiivsww8/zN4WAQAAZMRjHrdD8m+s2r59++xsDwAAABIxHUh0aRQAACAnhJiAN3Pq1at3yOBt69at8bYJAAAgfR6l0kz3c0t95wQAAADkwsDt3HPPtYoVK2ZfawAAAA4hRKn00OjfBgAAcgUv75ZK82V1VCkAAAByecYtHA5nb0sAAAAyw8u7Gbcs9XEDAADIaSH6uAEAAASEl3czblm+yTwAAAByBhk3AAAQLF7ezbgRuAEAgEAJ5eE+bpRKAQAAAoKMGwAACBaPUikAAEAghCiVAgAAILcj4wYAAILFo1QKAAAQDF7eDdwolQIAAAQEGTcAABAoof8t8R4jiAjcAABAsHiUSgEAAAI1HUgoziUratasaaFQ6KDl6quvdts7dOhw0LYrrrgi4e+djBsAAMAhfPbZZ5aSkhJ5/PXXX9vJJ59sZ511VmRd//79bcyYMZHHxYoVs0QjcAMAAMHiHflSaYUKFWIe33nnnVanTh1r3759TKBWuXJly06USgEAQHCDN+8wl//ZsWNHzLJ3795DvvS+ffvsueees0svvdSVRH2TJ0+28uXLW+PGjW3YsGG2e/fuhL9tMm4AACDPqlatWszjkSNH2qhRozJ8zvTp023btm128cUXR9add955VqNGDUtOTrYvv/zSbrzxRlu+fLm9+uqrCW0vgRsAAMiz9ypdu3atJSUlRdYXLlz4kM994oknrGvXri5I811++eWR35s0aWJVqlSxTp062apVq1xJNVEI3AAAQJ7t45aUlBQTuB3KTz/9ZO+9994hM2mtWrVyP1euXJnQwI0+bgAAAJn01FNPWcWKFe3UU0/NcL+lS5e6n8q8JRIZNwAAkGdLpVkRDodd4Na3b18rUOCvEErl0ClTpli3bt2sXLlyro/b4MGDrV27dta0aVNLJAI3AAAQLF7O3DlBJdI1a9a40aTRChUq5Lbdd999tmvXLjfgoXfv3jZ8+HBLNAI3AACATOjcubN53sERnwK1jz/+2I4EAjcAABAooRwqleYGBG4AACBYvLx7k3kCNwAAECxe3g3cmA4EAAAgIMi4AQCAQAnRxw0AACAgPEqlAAAAyOXIuAEAgEAJeZ5b4j1GEBG4AQCAYPEolQIAACCXI+MGAAACJcSoUgAAgIDwKJUCAAAglyPjBgAAAiVEqRQAACAgvLxbKiVwAwAAgRLKwxk3+rgBAAAEBBk3AAAQLB6lUgAAgMAIBTTwihelUgAAgIAg4wYAAILF8/5c4j1GABG4AQCAQAkxqhQAAAC5HRk3AAAQLB6jSgEAAAIhFP5zifcYQUSpFAAAICAI3HLYxRdfbD169MjRNowaNcqOPfbYuI8TCoVs+vTp7vcff/zRPV66dGkCWohEatxqp41+erVNWbzM3ln/hbU+ZXtONwnItKkTKtrArvWsR90mdnaTY2zUJbVs7crCMfu89Vw5G9r7aOtZr4l1ST7Wdm7Pf9BxdvyW3+68urrbp1eDJnbvkGr2xy6+EgNXKvXiXAKIqzSXB0NAohUpFrYflhWxB/6vak43BciyL+eXsO4X/2L3zVhhY6euspQDZv/Xp47t2f3X19meP/JZyw477NyBm9I9zn8G1LCflhd1xxjz9A/21cISdt/QakfoXSBRo0pDcS5BlKv6uO3bt88KFSpkQeZ5nqWkpOR0M4B0ff5hkluAILpjyg8xj6+7b42d06SJrfiyqDU5cZdb16v/Fvfzi3kl0jzGmhWF3d/AhLeXW71mf7h1V922zm65oLZdPuJnK1f5QLa/D8TJy7vzuOVoxq1Dhw42YMAAu/baa618+fLWpUsX+/rrr61r165WokQJq1Spkl144YX2yy+/RJ4TDodt3LhxdvTRR1vhwoWtevXqdvvtt6f7Gi+//LI1adLEihYtauXKlbOTTjrJdu3aFVOmHD16tFWoUMGSkpLsiiuucAGkb+/evTZo0CCrWLGiFSlSxNq2bWufffZZZPtHH33kSoJvv/22tWjRwrXpueeec8f84osv3DYtkyZNyvBcZNSGmTNnutctXbq0ew+nnXaarVq1KrJd++o8VqlSxbWxRo0aNnbs2Mj2bdu22WWXXRY5/r/+9S/XttQeeeQRq1atmhUrVszOPvts2779rxKa3vPJJ5/sPqdSpUpZ+/btbfHixRm+JwDIbrt2/FkGLVk68/9g/vbz4lai1IFI0CbH/fN3C+Uz+25J8WxpJ/C3KZU+/fTTLsv2ySef2J133umCiubNm9vnn3/uApZNmza5IMI3bNgwt98tt9xi33zzjU2ZMsUFeGnZsGGD9enTxy699FL79ttvXZDVq1cvlxXzvf/++5Ftzz//vL366qsuiPLdcMMN9sorr7h2KlBRwKgAc+vWrTGvddNNN7l26VgKcK677jo75phjXBu0nHPOOemeg0O1QYHmkCFD3DnRvvny5bOePXu6IFbuv/9+e/311+3FF1+05cuX2+TJk61mzZqR55911lm2efNmF1wuWrTIjjvuOOvUqVPMe1i5cqV7/htvvOHO+5IlS+yqq66KbP/999+tb9++NnfuXFuwYIHVrVvXunXr5tYfLgXFO3bsiFkAILP0n8CHRx5lxxy/02o22JPp523dUsBKl4vNquUvoODvgG3dnKsKUUhHiFJpzlEAoAya3HbbbS5ou+OOOyLbn3zySZcF+v77711G6b///a898MADLoiQOnXquGxUWhQwHThwwAVrykKJsm/RFDTqNZRlUqA1ZswYGzp0qN166632xx9/2MSJE122TFlAeeyxx2zWrFn2xBNPuP18ep4CNp8yhgUKFLDKlSsf8hxk1AYFab17947ZX/sqe6bAtXHjxrZmzRp3HnUelN3z36so0Pr0009d4KZsoNx9991uEIGykZdffrlbt2fPHnvmmWfsqKOOco8nTJhgp556qt1zzz3uPSigjvboo4+6DODHH3/sMoCHQ1nB6AAVALJC/TR/+q6o3TN9RU43BUeal3fnccvxjJvKiz6V7z788EMX9PhLgwYN3DaVBpWVUpZG2aLMaNasmdtXwZqyTgq6fvvtt4P2UcDka926te3cudPWrl3rXnP//v3Wpk2byPaCBQvaCSec4NoSrWXLlod9DjJqg6xYscJlDmvXru1KnX42TQGbX/LV6M369eu7su67774bc051LJVYo8/r6tWrY8qtKjn7QZvfBmX0lMETZT779+/vAkSVStUOHddvw+FQ9lTlWH/x3y8AHMoD/3eULZyVZONeXmkVkvdn6bllKxywbb/G5i00yOH3bQWsbEX6tyF3y/HArXjxv/oTKBDo3r27C0KiFwUu7dq1c/3UsiJ//vwuO6YSYaNGjVwWScGNgpbsfB+JpnOisqYCz4ULF7pF/H5wKn3qPflZQpWWzzzzzMg5VaYy9TlVQBadMTwUZTj1PGU8582b535XMBjdFy+rlAFUABi9AEBG1NNFQdu8maVs3EsrrXL1rP83qGHLXbZzewE3oMG3dG5J88JmDZr/2QcauVvoCJdKNVOE32fdX/zE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xjV+5GRXpi1akSJFAhdsJRLTgQAAAAQEgRsAAEBAELgBeVThwoVt5MiR7ifwd8Q1jr8jBicAAAAEBBk3AACAgCBwAwAACAgCNwAAgIAgcAMCTBMVT58+PaebAQTGxRdfbD169MjRNowaNcqOPfbYhP79//jjj+7x0qVLE9BC5GYEbkCAbdiwwbp27ZrTzQByXKKCISC3484JQIDpPnvA4dJtg4J2n8bUNDFCSkpKTjcDOGLIuAG5wMsvv2xNmjSxokWLWrly5eykk06yXbt2uW1PPvmkHXPMMW4uqipVqtiAAQMyXSrN6Lh+yWj06NFWoUIFd0ugK664IuYegDNnzrS2bdta6dKl3fNPO+00W7VqVcxrrFu3zvr06WNly5a14sWLW8uWLW3hwoWR7a+99podd9xx7hY1tWvXdq934MCBhJ4/ZE6HDh3c9XPttdda+fLlrUuXLvb111+7rG2JEiWsUqVKduGFF9ovv/wScw/hcePG2dFHH+2uwerVq9vtt9+ebdfc3r17bdCgQVaxYkV3zej6++yzzyLbP/roI3fdv/3229aiRQvXpueee84d84svvnDbtEyaNCnDcxHPda99dR7196g21qhRw8aOHRvZvm3bNrvssssix//Xv/7l2pbaI4884u6lWqxYMTv77LNt+/btkW16zyeffLL7nHQbqfbt29vixYszfE/IGwjcgFxQ7lTgc+mll9q3337rvph69erlMgkTJ060q6++2i6//HL76quv7PXXX3dfoPEe1/f+++9Htj3//PP26quvui80n75whwwZYp9//rnbV/eT7dmzp/syl507d7ovlJ9//tm1TV9ON9xwQ2T7nDlz7KKLLrJrrrnGvvnmG/dFpS/UjL74kb2efvppl2X75JNP7M4773RBRfPmzd1nrIBl06ZNLojwDRs2zO13yy23uM9wypQpLsDLrmtO188rr7zi2qlARde7AsytW7fGvNZNN93k2qVjKcC57rrr3D9w1AYt55xzTrrnIN7r/v7773fX+4svvmjLly+3yZMnW82aNSPPP+uss2zz5s0uuFy0aJH7h0unTp1i3sPKlSvd89944w133pcsWWJXXXVVZLtu1t63b1+bO3euLViwwOrWrWvdunVz65HHaQJeADln0aJF+lbzfvzxx4O2JScnezfffHO6z9Xzpk2bluXjSt++fb2yZct6u3btiqybOHGiV6JECS8lJSXN52zZssUd86uvvnKPH3nkEa9kyZLer7/+mub+nTp18u64446Ydc8++6xXpUqVdN8Tsk/79u295s2bRx7feuutXufOnWP2Wbt2rfuMly9f7u3YscMrXLiw99hjj2Xq+PFeczt37vQKFizoTZ48ObJ937597u9g3Lhx7vGHH37oXmP69Okxxx45cqTXrFmzQ7YxEdf9wIEDvX/9619eOBw+aN85c+Z4SUlJ3p49e2LW16lTx/29+G3Nnz+/t27dusj2t99+28uXL5+3YcOGNNugtulv7Y033kjz73/16tXu8ZIlSw55DhBsZNyAHNasWTP3r3GVl/Qv9ccee8x+++039y/29evXu22JPG7qfVSm8bVu3dpl0dauXeser1ixwmVQVOJUycfPKqxZs8b91Ag2ZWtUJk2LMnBjxoxxZTh/6d+/v8uI7N69+7DeF+Kj8mL05/Phhx/GfD4NGjRw21QaVFZKpcvMXoPxXnN6zf3791ubNm0i2wsWLGgnnHCCa0s0leQPV7zXvUq+uvbr16/vyrrvvvtuzDnVsVRijT6vq1evjim3quR81FFHxbRBGT1l8ESZT/2tKNOmUqnaoeP6bUDexeAEIIflz5/fZs2aZfPmzXNfABMmTLCbb77ZlWiy47jqf1arVq1MHaN79+6u/46+gJOTk90XS+PGjSP9gdSPKSP6olEJSuWy1NQ3CEee+iFGfz76jP/zn/8ctJ/6b/3www9H/Jo7nPeRaIe67lX6VCCmUuh7773nSsvqy6f+fTqnOncqw6amPnOZpTLpr7/+av/9739dW9SXT8FddF885E1k3IBcQJ2plWVQkKO+LuqDpC9A/Us/ngAureNOmzYtJjvwxx9/RB6rL42yA+owrS8N/et/+PDhLovSsGHDg7InTZs2dZmH1P2PfPqC0zHUTyn1on5DyFn6fJYtW+aus9SfjwIjZXsUnGflGoznmqtTp06k/51PGTh11G/UqFGGr6vnZXZ0abzXvSgDpn50Cu5eeOEF1y9Pfwc6pxs3brQCBQocdE410MCnzJky6tFt0N+Esniic6Bsnvq1+YOTogeNIO/iv5xADlM24o477nAdofUfc3WU3rJli/vC0NxU99xzj+sMrfKNOmsri5EefdE88MADhzyuT/9679evn+t0/tZbb9nIkSPdaDl9gZQpU8aVex599FHXkfqDDz5wHbajqZykKUk0UlBfNMrQ6Ats/vz5bvuIESPsmWeecV/iChBU7po6dar7UkTO08AXBRv6HBUcqZT3zjvv2CWXXOKCIGVFb7zxRjdgQJ+jtivAeOKJJ7LlmlOweOWVV9rQoUNdh33to3Khyup6TkYUfCoLpn9IKMBRiVc0OEYDLKLFe93fe++9blDDd999Z99//7299NJL7u9AGTVl3pQZ09+Eso6aGFcZSGUedV58OrfKqimI1CAeBWnK3PlT/ChofvbZZ93fjM7r+eeff8gMN/KInO5kB+R133zzjdelSxevQoUKriN4vXr1vAkTJkS2P/zww179+vVdp2116lfH6PQGJ9SoUcN1fM7McdVJ+4wzzvBGjBjhlStXznXO7t+/f0yn6lmzZnkNGzZ0z2/atKn30UcfHfSa6ojeu3dv1yG7WLFiXsuWLb2FCxdGts+cOdP7xz/+4RUtWtTtc8IJJ3iPPvpoNp1NHGpwwjXXXBOz7vvvv/d69uzplS5d2n1GDRo08K699tpIx3t1ir/tttvctaVrsHr16jEDThJ9zf3xxx/uGi9fvrw7Rps2bbxPP/00st0fnPDbb7/FvA8dQ9eh3oe2P/XUU5H3rNdN5HWv6/fYY4/1ihcv7q5pDcJZvHhx5Pka1KH3oEEVOmfVqlXzzj//fG/NmjUxAykeeught0+RIkW8M88809u6dWvkGDqe/pa0rW7dut5LL73kzvX48eMj+zA4IW8K6f9yOngEcOSpg7Xmm+KWWThSuOaA+FEqBQAACAgCNwAAgICgVAoAABAQZNwAAAACgsANAAAgIAjcAAAAAoLADQAAICAI3AAg1VxjmvXe16FDB7v22muPeDt0r0vdPkrznqVH27MyJ5ruxHHsscfG1S7dCUCvqzsUADjyCNwABCKYUrCgRfek1H0fx4wZYwcOHMj219Ztm2699daEBVsAEI8CcT0bAI6QU045xZ566il3D0rdX1L32SxYsOBB96H070WpAC8RypYtm5DjAEAikHEDEAiFCxd2N+CuUaOGuxG5bub9+uuvx5Q3b7/9dktOTrb69eu79WvXrnU37tbNvxWAnXHGGa7U59ON1HUDcW3XjcV1M/XUU1umLpUqcNSN16tVq+bapOyfbrqu43bs2NHtoxuVK/Omdkk4HLaxY8darVq13I3CmzVrZi+//HLM6ygYrVevntuu40S3M7PULh2jWLFiVrt2bbvlllts//79B+33yCOPuPZrP52f7du3x2x//PHH3Y3hdSP0Bg0a2EMPPZTltgDIHgRuAAJJAY4ya77333/fli9fbrNmzbIZM2a4gKVLly5WsmRJmzNnjn3yySdWokQJl7nzn3fPPffYpEmT7Mknn7S5c+fa1q1bbdq0aRm+7kUXXWTPP/+83X///fbtt9+6IEjHVSD0yiuvuH3Ujg0bNth///tf91hB2zPPPGMPP/ywLVu2zAYPHmwXXHCBffzxx5EAs1evXta9e3fXd+yyyy6zm266KcvnRO9V7+ebb75xr/3YY4/Z+PHjY/ZZuXKlvfjii/bGG2/YzJkzbcmSJXbVVVdFtk+ePNlGjBjhgmC9vzvuuMMFgE8//XSW2wMgG+T0Xe4B4FD69u3rnXHGGe73cDjszZo1yytcuLB3/fXXR7ZXqlTJ27t3b+Q5zz77rFe/fn23v0/bixYt6r3zzjvucZUqVbxx48ZFtu/fv9+rWrVq5LWkffv23jXXXON+X758udJx7vXT8uGHH7rtv/32W2Tdnj17vGLFinnz5s2L2bdfv35enz593O/Dhg3zGjVqFLP9xhtvPOhYqWn7tGnT0t1+1113eS1atIg8HjlypJc/f35v3bp1kXVvv/22ly9fPm/Dhg3ucZ06dbwpU6bEHOfWW2/1Wrdu7X5fvXq1e90lS5ak+7oAsg993AAEgrJoymwpk6bS43nnnedGSfqaNGkS06/tiy++cNklZaGi7dmzx1atWuXKg8qKtWrVKrKtQIEC1rJly4PKpT5lw/Lnz2/t27fPdLvVht27d9vJJ58cs15Zv+bNm7vfldmKboe0bt3asuqFF15wmUC9v507d7rBG0lJSTH7VK9e3Y466qiY19H5VJZQ50rP7devn/Xv3z+yj45TqlSpLLcHQOIRuAEIBPX7mjhxogvO1I9NQVa04sWLxzxW4NKiRQtX+kutQoUKh12ezSq1Q958882YgEnURy5R5s+fb+eff76NHj3alYgVaE2dOtWVg7PaVpVYUweSClgB5DwCNwCBoMBMAwEy67jjjnMZqIoVKx6UdfJVqVLFFi5caO3atYtklhYtWuSemxZl9ZSdUt80DY5Izc/4adCDr1GjRi5AW7NmTbqZOg0E8Ada+BYsWGBZMW/ePDdw4+abb46s++mnnw7aT+1Yv369C37918mXL58b0FGpUiW3/ocffnBBIIDch8EJAP6WFHiUL1/ejSTV4ITVq1e7edYGDRpk69atc/tcc801duedd7pJbL/77jvXST+jOdhq1qxpffv2tUsvvdQ9xz+mOvuLAieNJlVZd8uWLS6DpfLj9ddf7wYkqIO/SpGLFy+2CRMmRDr8X3HFFbZixQobOnSoK1lOmTLFDTLIirp167qgTFk2vYZKpmkNtNBIUb0HlZJ1XnQ+NLJUI3ZFGTsNptDzv//+e/vqq6/cNCz33ntvltoDIHsQuAH4W9JUF7Nnz3Z9ujRiU1kt9d1SHzc/A3fdddfZhRde6AIZ9fVSkNWzZ88Mj6ty7ZlnnumCPE2Vob5gu3btcttUClXgoxGhyl4NGDDArdcEvhqZqYBI7dDIVpVONT2IqI0akapgUFOFaPSpRnNmxemnn+6CQ72m7o6gDJxeMzVlLXU+unXrZp07d7amTZvGTPehEa2aDkTBmjKMyhIqiPTbCiBnhTRCIYfbAAAAgEwg4wYAABAQBG4AAAABQeAGAAAQEARuAAAAAUHgBgAAEBAEbgAAAAFB4AYAABAQBG4AAAABQeAGAAAQEARuAAAAAUHgBgAAEBAEbgAAABYM/w+D6+DJs0IAKAAAAABJRU5ErkJggg==",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\n",
|
||
"Classification Report for Spam Dataset:\n",
|
||
" precision recall f1-score support\n",
|
||
"\n",
|
||
" 0 0.98 1.00 0.99 965\n",
|
||
" 1 0.97 0.87 0.92 150\n",
|
||
"\n",
|
||
" accuracy 0.98 1115\n",
|
||
" macro avg 0.98 0.93 0.95 1115\n",
|
||
"weighted avg 0.98 0.98 0.98 1115\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhgAAAHHCAYAAAD9BCF3AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAARjRJREFUeJzt3QmcTfX/+PH3HTNmbGPLGlkiJaTwLRGKbGVt1aZooYSE8s+uUiqKQqksZUm0/JKUSMguVHYhslb2YcbM3PN/vD+6t3vHDHfcc9y5c1/PHqeZe+45537uYu77vD/vz+e4LMuyBAAAwEZRdh4MAABAEWAAAADbEWAAAADbEWAAAADbEWAAAADbEWAAAADbEWAAAADbEWAAAADbEWAAAADbEWAgJLZu3SqNGzeW/Pnzi8vlki+++MLW4+/cudMcd8KECbYeN5w1aNDALHbavXu3xMXFyU8//WTrcZG1JCcnS+nSpWX06NGhbgrCCAFGBPv999/liSeekPLly5svifj4eKlTp4689dZbcurUKUcfu3379vLrr7/KSy+9JB999JHUrFlTsouHH37YBDf6eqb3Ompwpffr8vrrr2f6+Hv37pWBAwfK2rVrJdQGDx4s119/vfnc+Prqq6+kfv36UrRoUcmdO7f5jN19990yZ84cCUee90uX6OhoKVSokNSoUUO6desmGzZsuODjnjx50ryXCxYskKxgyZIlpj1HjhzxWx8TEyM9evQw/14TExND1j6EGb0WCSLPrFmzrFy5clkFChSwunbtar333nvW22+/bd17771WTEyM9dhjjzn22CdPntTr31gvvPCCY4/hdrutU6dOWSkpKdbF1r59eys6OtrKkSOH9cknn5x1/4ABA6y4uDjzGrz22muZPv7KlSvNvuPHj8/UfklJSWaxy8GDB81nZcqUKX7r9Tlp++rXr28NHz7cGjt2rNWzZ0+revXq5rUJR/p8br31Vuujjz6yJk2aZI0aNcp69NFHrfz585v3+o033rig4/7111/m2PqZyAo8792OHTvOuu/w4cNWzpw5rQ8++CAkbUP4iQ51gIOLb8eOHXLvvfdKmTJlZP78+VKiRAnvfU899ZRs27ZNvv76a8ce/6+//jI/CxQo4Nhj6JmmZmVCJTY21pzVT5061Zy5+5oyZYrcdtttMnPmzIvSFj1L1ixCzpw5bT3uxx9/bM7mW7Ro4V2XkpIiQ4YMkVtvvVW+++67s/Y5ePCghKsrrrhCHnjgAb91r7zyinn+zz77rFx55ZXSvHlzya7036t2a2q3Y4cOHULdHISDUEc4uPg6depkzlJ++umngLZPTk62Bg8ebJUvX96cwZQpU8bq06ePlZiY6Ledrr/tttusRYsWWbVq1bJiY2OtcuXKWRMnTvRuo2dq+ti+i+6n9OzW87svzz6+vvvuO6tOnTrmDDJPnjzWFVdcYdrkoWdg6Z3lz5s3z6pbt66VO3dus2/Lli2tDRs2pPt4W7duNW3S7eLj462HH37YSkhIOO/rpftomyZMmGBeAz3z81ixYoU59syZM8/KYPzzzz/Ws88+a1WpUsXsny9fPqtp06bW2rVrvdv88MMPZ71+vs9TswZXX321tWrVKuumm24yWapu3bp579PF46GHHjLtS/v8GzdubDJbe/bsOefzrFevntWgQQO/dfv27TPtGThw4HlfJ89zmTZtmnnvihUrZt6XFi1aWLt27fLbduHChdadd95plS5d2nwGS5UqZXXv3t1kw9J77f/44w/zWdTfS5YsabJz6pdffrFuvvlm8ziXXXaZNXnyZCsQ2s6nnnoq3fv0sTSLceONN3rXaaaoX79+1nXXXWc+O/p4+rmbP3/+WZ/RtIsnm7Fu3TrzfPTfkL5P+vo88sgj1t9//+33+MeOHTPvsf7b0demSJEiVqNGjazVq1f7bbds2TKrSZMmpj36udD3b/Hixef8t5k2m/HWW29ZLpfLfFaB86EGIwJp/7j2id94440Bbf/oo49K//795brrrpMRI0aYvvWhQ4eaLEhamv248847zRnsG2+8IQULFjQ1CevXrzf3t23b1hxDtWvXztRfvPnmm5lqvx7r9ttvl6SkJFMDoI/TsmXL8xYafv/999KkSRNzFq39zNqnrH3OmmnQotC0NPNw/Phx81z1dz1zGzRoUMDt1OeqmZTPPvvML3uhZ7r6Wqa1fft2U+yqz2348OHSq1cvU6eir7fWXairrrrKPGf1+OOPm9dPl3r16nmP888//0izZs2kevXq5rW9+eab022f1toUKVLE1MOkpqaade+++67JPIwaNUpKlix5zqK/lStXnvU8tOYiV65c5jN26NChgF4n7dfXjNlzzz0nXbt2lblz50qjRo386lc+/fRTk4np3Lmz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AADbEWAAAADbEWAAAADbEWDgomrQoIF079491M0AADiMAAMAANiOAAMAANiOAAMhuZ5L7969pVChQuYiPgMHDvTeN3z4cKlatarkyZPHXJvhySeflBMnTnjvnzBhghQoUEBmzZollSpVkty5c8udd94pJ0+elIkTJ0rZsmWlYMGC0rVrV0lNTQ3RM0QkmTFjhvnM5sqVSwoXLiyNGjWShIQEefjhh6V169YyaNAgKVKkiJkCvFOnTn7XppgzZ47UrVvXfKZ139tvv11+//137/07d+401zyaPn263HTTTeYxatWqJVu2bJGVK1dKzZo1JW/evNKsWTP566+/QvQKAOkjwMBFp4GABhDLly+XYcOGyeDBg2Xu3Lnea72MHDlS1q9fb7abP3++CUZ8aTCh20ybNs38gV6wYIG0adNGZs+ebZaPPvpI3n33XfOHH3DSvn37pF27dtKhQwfZuHGj+Sy2bdvWexnwefPmeddPnTpVPvvsMxNweGgg0qNHD1m1apXZVj//+lnWINyXTsLVt29f+fnnnyU6Olruu+8+8+/irbfekkWLFsm2bdukf//+F/35A+ekE20BF0v9+vWtunXr+q2rVauW9dxzz6W7/aeffmoVLlzYe3v8+PH6l9vatm2bd90TTzxh5c6d2zp+/Lh3XZMmTcx6wEmrV682n8edO3eedV/79u2tQoUKWQkJCd51Y8aMsfLmzWulpqame7y//vrLHO/XX381t3fs2GFuv//++95tpk6datbNmzfPu27o0KFWpUqVbH52QHDIYOCiq1atmt/tEiVKyMGDB83v33//vTRs2FAuvfRSyZcvnzz44IPyzz//mKyFh3aLXH755d7bxYoVM10jmir2Xec5JuCUa665xnxetYvkrrvuknHjxsnhw4f97tfPq0ft2rVNl59ell1t3brVZEDKly9vulD0c6x27dqV4b8Z/WwrfUzfdXzekdUQYOCii4mJ8butfcyaEtb+Zu2D1j+mM2fOlNWrV8s777xjtvHtt05v/4yOCTgpR44cpnvvm2++kcqVK8uoUaNMbdCOHTsC2r9FixZy6NAhE5hol6EuaT/vyvfzrZ/t9NbxeUdWEx3qBgAeGlDoH8k33njD9EUrLW4DsjL9cq9Tp45ZtA6iTJky8vnnn5v71q1bJ6dOnTLFmWrZsmUm06YFzJqZ27x5swkutIBT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",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\n",
|
||
"Лучшие параметры: {'svm__C': 10, 'tfidf__max_features': 10000}\n",
|
||
"Лучшая точность: 0.9865367677774255\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# %% [markdown]\n",
|
||
"# # Классификация текстовых документов с помощью SVM\n",
|
||
"\n",
|
||
"# %% [markdown]\n",
|
||
"# **Цель**: \n",
|
||
"# Продемонстрировать применение метода опорных векторов (SVM) для классификации текстовых данных. \n",
|
||
"\n",
|
||
"# **План**: \n",
|
||
"# 1. Загрузка датасета `20newsgroups` (встроенный в scikit-learn) \n",
|
||
"# 2. Векторизация текста с помощью `TfidfVectorizer` \n",
|
||
"# 3. Обучение модели SVM \n",
|
||
"# 4. Оценка точности и визуализация результатов \n",
|
||
"# 5. Повторение эксперимента на внешнем датасете (спам-письма) \n",
|
||
"\n",
|
||
"# %%\n",
|
||
"# Импорт необходимых библиотек\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.datasets import fetch_20newsgroups\n",
|
||
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
|
||
"from sklearn.svm import SVC\n",
|
||
"from sklearn.metrics import classification_report, ConfusionMatrixDisplay\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"import pandas as pd\n",
|
||
"from sklearn.pipeline import Pipeline\n",
|
||
"from sklearn.model_selection import GridSearchCV\n",
|
||
"\n",
|
||
"# %% [markdown]\n",
|
||
"# ## Часть 1: Работа со встроенным датасетом (20newsgroups)\n",
|
||
"\n",
|
||
"# %%\n",
|
||
"# Загрузка данных (2 категории для упрощения)\n",
|
||
"categories = ['sci.space', 'rec.sport.baseball']\n",
|
||
"newsgroups = fetch_20newsgroups(subset='all', \n",
|
||
" categories=categories, \n",
|
||
" shuffle=True, \n",
|
||
" random_state=42)\n",
|
||
"\n",
|
||
"# %%\n",
|
||
"# Векторизация текста\n",
|
||
"vectorizer = TfidfVectorizer(stop_words='english', max_features=5000)\n",
|
||
"X = vectorizer.fit_transform(newsgroups.data)\n",
|
||
"y = newsgroups.target\n",
|
||
"\n",
|
||
"# Разделение на тренировочную и тестовую выборки\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
|
||
" test_size=0.2, \n",
|
||
" random_state=42)\n",
|
||
"\n",
|
||
"# %%\n",
|
||
"# Создание и обучение модели SVM\n",
|
||
"svm = SVC(kernel='linear', C=1.0, random_state=42)\n",
|
||
"svm.fit(X_train, y_train)\n",
|
||
"\n",
|
||
"# Предсказание и оценка\n",
|
||
"y_pred = svm.predict(X_test)\n",
|
||
"print(classification_report(y_test, y_pred))\n",
|
||
"\n",
|
||
"# %%\n",
|
||
"# Визуализация матрицы ошибок\n",
|
||
"ConfusionMatrixDisplay.from_estimator(svm, X_test, y_test, \n",
|
||
" display_labels=categories)\n",
|
||
"plt.title(\"Confusion Matrix (20newsgroups)\")\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"# %% [markdown]\n",
|
||
"# ## Часть 2: Работа с внешним датасетом (спам-письма)\n",
|
||
"\n",
|
||
"# %%\n",
|
||
"# Загрузка данных из CSV\n",
|
||
"# Пример датасета: https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset\n",
|
||
"# Перед выполнением загрузите файл spam.csv в ту же директорию\n",
|
||
"try:\n",
|
||
" data = pd.read_csv('spam.csv', encoding='latin-1')[['v1', 'v2']]\n",
|
||
" data.columns = ['label', 'text']\n",
|
||
" \n",
|
||
" # Преобразование меток\n",
|
||
" data['label'] = data['label'].map({'ham': 0, 'spam': 1})\n",
|
||
" \n",
|
||
" # Создание пайплайна\n",
|
||
" pipeline = Pipeline([\n",
|
||
" ('tfidf', TfidfVectorizer(stop_words='english', max_features=5000)),\n",
|
||
" ('svm', SVC(kernel='linear'))\n",
|
||
" ])\n",
|
||
" \n",
|
||
" # Разделение данных\n",
|
||
" X_train, X_test, y_train, y_test = train_test_split(data['text'], \n",
|
||
" data['label'], \n",
|
||
" test_size=0.2,\n",
|
||
" random_state=42)\n",
|
||
" \n",
|
||
" # Обучение модели\n",
|
||
" pipeline.fit(X_train, y_train)\n",
|
||
" \n",
|
||
" # Оценка качества\n",
|
||
" print(\"\\nClassification Report for Spam Dataset:\")\n",
|
||
" print(classification_report(y_test, pipeline.predict(X_test)))\n",
|
||
" \n",
|
||
" # Визуализация матрицы ошибок\n",
|
||
" ConfusionMatrixDisplay.from_estimator(pipeline, X_test, y_test,\n",
|
||
" display_labels=['ham', 'spam'])\n",
|
||
" plt.title(\"Confusion Matrix (Spam Dataset)\")\n",
|
||
" plt.show()\n",
|
||
"\n",
|
||
"except FileNotFoundError:\n",
|
||
" print(\"Файл spam.csv не найден. Пропускаем работу с внешним датасетом.\")\n",
|
||
"\n",
|
||
"# %% [markdown]\n",
|
||
"# ## Часть 3: Оптимизация гиперпараметров\n",
|
||
"\n",
|
||
"# %%\n",
|
||
"# Пример настройки гиперпараметров через GridSearchCV\n",
|
||
"if 'data' in locals(): # Проверяем, загружен ли внешний датасет\n",
|
||
" params = {\n",
|
||
" 'svm__C': [0.1, 1, 10],\n",
|
||
" 'tfidf__max_features': [1000, 5000, 10000]\n",
|
||
" }\n",
|
||
" grid = GridSearchCV(pipeline, params, cv=5, n_jobs=-1)\n",
|
||
" grid.fit(X_train, y_train)\n",
|
||
" \n",
|
||
" print(\"\\nЛучшие параметры:\", grid.best_params_)\n",
|
||
" print(\"Лучшая точность:\", grid.best_score_)\n",
|
||
"\n",
|
||
"# %% [markdown]\n",
|
||
"# ## Выводы\n",
|
||
"\n",
|
||
"# %% [markdown]\n",
|
||
"# **Результаты**:\n",
|
||
"# 1. На встроенном датасете (20newsgroups):\n",
|
||
"# - Точность: 98%\n",
|
||
"# - SVM успешно разделяет категории \"космос\" и \"бейсбол\"\n",
|
||
"#\n",
|
||
"# 2. На внешнем датасете (спам-письма):\n",
|
||
"# - Точность: 97-99%\n",
|
||
"# - Основные ошибки: некоторые спам-письма с коротким текстом классифицируются как \"ham\"\n",
|
||
"#\n",
|
||
"# **Рекомендации**:\n",
|
||
"# - Для улучшения результатов можно:\n",
|
||
"# - Добавить лемматизацию/стемминг\n",
|
||
"# - Использовать более сложные методы векторизации (Word2Vec, BERT)\n",
|
||
"# - Настроить гиперпараметры с помощью GridSearchCV"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "01945ae9-37f5-4758-96ab-7ab90a3cc4fd",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"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.12.3"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|