From 8a03c2dddde22812d9b7242a21bb7de96256546b Mon Sep 17 00:00:00 2001 From: ada Date: Wed, 5 Nov 2025 09:42:50 +0300 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- README.md => lr2/README.md | 0 main.ipynb => lr2/main.ipynb | 1165 ++++++++++++++++++---------------- requirements.txt | 1 + 3 files changed, 613 insertions(+), 553 deletions(-) rename README.md => lr2/README.md (100%) rename main.ipynb => lr2/main.ipynb (54%) diff --git a/README.md b/lr2/README.md similarity index 100% rename from README.md rename to lr2/README.md diff --git a/main.ipynb b/lr2/main.ipynb similarity index 54% rename from main.ipynb rename to lr2/main.ipynb index 355251a..fa6f031 100644 --- a/main.ipynb +++ b/lr2/main.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 38, "id": "cf4829c9", "metadata": {}, "outputs": [], @@ -18,7 +18,7 @@ "# 1) Названия файлов с исходными данными и пустого Excel-файла для вывода программы\n", "# Если файлы лежат не в одной директории с программой, необходимо указать полный путь к файлам\n", "# В целом, если конечный файл не создать, то программа его создаст сама, но лучше явно ей указать его.\n", - "INPUT_PATH = 'nstand.xlsx'\n", + "INPUT_PATH = 'data.xlsx'\n", "OUTPUT_PATH = 'output.xlsx'\n", "# 2) Количество признаков в методе с включением\n", "CNT_ENTER = 6\n", @@ -27,13 +27,13 @@ "\n", "# 4) Обучающая выборка в формате словаря, где ключ - номер класса, значение - список номеров строк, принадлежащих этому классу\n", "TRAIN_SAMPLE = {\n", - " 1: [12, 44],\n", - " 2: [5, 20, 36, 37, 62, 75],\n", - " 3: [32, 82],\n", - " 4: [15, 19, 43],\n", - " 5: [3, 9, 60, 61, 76],\n", - " 6: [18, 63, 78],\n", - " 7: [2, 8, 21, 22, 24, 35, 71, 81]\n", + " 1: [4,23,28,53,59,69],\n", + " 2: [13,21,34,36,39,67,70,83],\n", + " 3: [14,20,24,40,45,61,65,68,74,78],\n", + " 4: [2,54],\n", + " 5: [18,31],\n", + " 6: [10,62],\n", + " 7: [47,79]\n", "}\n" ] }, @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 56, "id": "74efa4f6", "metadata": {}, "outputs": [ @@ -91,12 +91,13 @@ "\n", "\n", "FEATURES = [f'X{i}' for i in range(1,10)]\n", - "data_to_excel = data[FEATURES]" + "# Сохраняем первую колонку (названия субъектов) и признаки X1-X9 для вывода в Excel\n", + "data_to_excel = data[[data.columns[0]] + FEATURES].copy()\n" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 40, "id": "078c2afe", "metadata": {}, "outputs": [ @@ -105,66 +106,72 @@ "output_type": "stream", "text": [ " X1 X2 X3 X4 X5 X6 X7 \\\n", - "12 -0.303659 1.558976 -1.845236 -0.902767 0.179182 -0.175803 -0.645620 \n", - "44 -0.634709 2.522227 -0.831449 0.478082 -0.433342 0.395690 -0.609662 \n", - "5 -0.379991 -0.512014 0.716631 0.459036 -0.938107 -0.019480 0.063954 \n", - "20 -0.443316 -0.126713 -0.310856 -0.550412 -0.622393 -0.317915 -0.290833 \n", + "4 -0.116102 -0.030388 0.922129 0.778060 -0.533539 -0.390494 1.025235 \n", + "23 0.191144 -0.800989 0.470034 0.663782 -0.446576 -0.809216 0.423536 \n", + "28 -0.191100 -0.367526 1.018027 -0.064734 -0.955121 -0.997007 0.629696 \n", + "53 -0.808551 -0.560176 1.524921 0.468559 0.398480 -0.924936 0.001627 \n", + "59 -0.133486 -0.271201 0.771431 0.049543 -1.113924 -0.471701 -0.075084 \n", + "69 -0.450778 -0.271201 1.100226 0.240005 -0.400258 -0.893468 -0.012757 \n", + "13 -0.372445 -0.271201 -1.338342 -0.731351 -0.250908 -0.329589 0.080735 \n", + "21 -0.490466 -0.223038 -0.872548 -1.012282 0.369177 0.132275 -0.451446 \n", + "34 -0.464369 -0.656501 -1.379442 -0.331381 -0.420108 -0.242799 -0.247683 \n", "36 -0.385119 -0.030388 -1.434241 -0.098065 0.190525 -0.204226 -0.489801 \n", - "37 -0.553875 -0.512014 0.716631 0.359043 -0.273594 0.464208 -0.333983 \n", - "62 0.916945 -0.993639 0.291937 -0.240912 3.882681 1.425494 5.364185 \n", - "75 -0.594438 -0.415689 -0.995847 -0.121873 -0.583637 -0.611275 -0.099056 \n", - "32 3.258474 1.270000 -1.310943 1.397061 0.234952 2.307096 -0.724968 \n", - "82 3.735685 -1.041802 1.127626 0.068589 1.845662 2.972992 -0.720653 \n", - "15 -0.462493 2.618552 1.566020 0.730444 -0.427670 -1.998389 0.867019 \n", - "19 -1.018162 1.799788 2.333210 1.592284 -0.542991 0.296719 0.145459 \n", - "43 -0.306744 0.162262 1.908516 1.592284 -1.274617 -1.128461 0.658462 \n", - "3 -0.560670 0.354912 -0.105358 -0.221865 1.041252 -0.715829 -0.525759 \n", - "9 -0.206566 -0.223038 0.374136 0.249528 0.545940 -1.281739 0.298881 \n", - "60 -0.422597 -0.367526 -0.982147 0.401897 0.647082 -0.269191 -0.046318 \n", + "39 -0.567507 -0.367526 -0.269756 -0.088542 -0.283047 -0.404197 -0.060701 \n", + "67 -0.304660 -0.319364 -0.584852 -0.807536 0.354053 -0.890931 0.078337 \n", + "70 -0.365525 -0.223038 -0.351955 -0.745636 -0.107230 0.055636 -0.111042 \n", + "83 -0.139989 0.065937 -0.762950 -0.669451 0.486389 0.402288 -0.041523 \n", + "14 -0.315123 0.017774 -0.242356 -0.431374 -0.080763 0.619009 -0.650414 \n", + "20 -0.443316 -0.126713 -0.310856 -0.550412 -0.622393 -0.317915 -0.290833 \n", + "24 0.014092 -0.800989 -0.091658 0.268574 -0.038226 0.004882 -0.700756 \n", + "40 -0.183554 -0.415689 -0.584852 0.397136 -0.064694 0.397720 -0.377132 \n", + "45 -0.417719 -0.656501 -0.119058 0.563790 -0.562842 0.910338 0.049571 \n", "61 -0.306035 -0.800989 0.031640 0.782821 0.034558 0.468269 0.114296 \n", - "76 0.335596 -0.752826 -0.256056 -0.302812 0.441017 -0.593003 -0.698359 \n", - "18 1.542984 -0.752826 0.374136 -1.755084 1.200054 0.153592 -0.718975 \n", - "63 -0.695950 -0.463851 1.168725 -0.764682 0.039284 -0.549862 -0.293230 \n", + "65 0.140534 -0.608339 -0.612252 -0.388520 -0.468316 0.399243 -0.417885 \n", + "68 -0.713376 0.065937 0.196038 -0.002834 -0.522196 0.016048 -0.055906 \n", + "74 -0.462868 -0.560176 -0.105358 0.025735 0.344601 0.278955 -0.082276 \n", "78 -0.431018 -0.608339 0.168638 0.597121 -0.678162 0.488063 -0.132617 \n", "2 0.246382 0.884700 -0.982147 -0.707543 1.135777 1.441228 -0.657606 \n", - "8 -0.305743 -0.271201 -0.968447 0.392374 -1.313372 1.133657 -0.463432 \n", - "21 -0.490466 -0.223038 -0.872548 -1.012282 0.369177 0.132275 -0.451446 \n", - "22 -0.265722 -0.271201 -0.119058 -1.136083 -0.975917 -0.112360 -0.396310 \n", - "24 0.014092 -0.800989 -0.091658 0.268574 -0.038226 0.004882 -0.700756 \n", - "35 -0.004418 -0.126713 0.182338 -0.578982 0.809665 -0.166160 -0.458638 \n", - "71 -0.351935 0.162262 -0.365655 -1.388445 1.284182 -0.347353 -0.667195 \n", - "81 4.458442 -0.945477 -2.242531 -2.355039 2.465747 2.111184 -0.726406 \n", + "54 0.791628 0.981025 0.648132 -0.364712 0.940110 1.300639 -0.719694 \n", + "18 1.542984 -0.752826 0.374136 -1.755084 1.200054 0.153592 -0.718975 \n", + "31 1.073236 -0.126713 0.538534 -1.255121 0.591312 0.403811 -0.671989 \n", + "10 2.795688 -0.897314 2.127713 2.358894 2.356098 -0.758970 5.316241 \n", + "62 0.916945 -0.993639 0.291937 -0.240912 3.882681 1.425494 5.364185 \n", + "47 -0.431727 3.967103 -0.201257 1.549430 -0.964574 -0.246352 0.413947 \n", + "79 -0.588726 3.389152 0.127539 2.635063 -1.607346 -2.105480 0.833458 \n", "\n", " X8 X9 Class \n", - "12 -0.654574 -0.068182 1 \n", - "44 -0.919103 1.795167 1 \n", - "5 0.781440 -1.397838 2 \n", - "20 -0.352255 -0.080381 2 \n", + "4 -0.163306 -0.827550 1 \n", + "23 -0.201096 0.154444 1 \n", + "28 0.554701 0.194090 1 \n", + "53 -0.465625 -0.800103 1 \n", + "59 -0.314465 -0.998331 1 \n", + "69 -0.503415 0.401467 1 \n", + "13 0.781440 0.471610 2 \n", + "21 -0.314465 1.185232 2 \n", + "34 -0.238886 0.496007 2 \n", "36 0.932599 1.532895 2 \n", - "37 0.290172 -0.830599 2 \n", - "62 -0.049937 -0.873295 2 \n", - "75 0.479121 -0.388397 2 \n", - "32 -0.125516 -2.044368 3 \n", - "82 -0.843523 -1.483229 3 \n", - "15 2.066294 -0.909891 4 \n", - "19 -1.599320 -0.376199 4 \n", - "43 -0.730154 -0.385348 4 \n", - "3 0.894809 -0.162722 5 \n", - "9 0.214592 0.355722 5 \n", - "60 0.025643 1.139487 5 \n", - "61 -0.654574 -0.116977 5 \n", - "76 -0.919103 0.087351 5 \n", - "18 2.066294 0.904663 6 \n", - "63 -0.692364 0.316077 6 \n", - "78 -0.352255 0.242884 6 \n", - "2 -0.427835 -0.629321 7 \n", - "8 -0.994683 0.431964 7 \n", - "21 -0.314465 1.185232 7 \n", - "22 1.952925 1.215729 7 \n", - "24 0.025643 0.105649 7 \n", - "35 -0.465625 -0.159672 7 \n", - "71 -0.276676 -1.873587 7 \n", - "81 -0.163306 -2.239547 7 \n" + "39 0.592491 0.755229 2 \n", + "67 0.327962 0.230686 2 \n", + "70 -0.427835 0.599696 2 \n", + "83 0.365752 0.590547 2 \n", + "14 0.403541 -0.059033 3 \n", + "20 -0.352255 -0.080381 3 \n", + "24 0.025643 0.105649 3 \n", + "40 -0.465625 -0.559179 3 \n", + "45 -0.012147 -0.357901 3 \n", + "61 -0.654574 -0.116977 3 \n", + "65 -0.730154 -1.041027 3 \n", + "68 -1.070262 -0.424993 3 \n", + "74 -1.448161 -0.306056 3 \n", + "78 -0.352255 0.242884 3 \n", + "2 -0.427835 -0.629321 4 \n", + "54 -0.994683 -0.607974 4 \n", + "18 2.066294 0.904663 5 \n", + "31 0.781440 -0.138324 5 \n", + "10 -0.767944 -1.181311 6 \n", + "62 -0.049937 -0.873295 6 \n", + "47 -0.049937 -1.477129 7 \n", + "79 -0.654574 -2.733594 7 \n" ] } ], @@ -182,12 +189,15 @@ "train_data = get_train_data(data, FEATURES, TRAIN_SAMPLE) # type: ignore\n", "print(train_data)\n", "\n", - "data_to_excel['Train sample'] = train_data.Class" + "# Создаём колонку с классами для всех строк (NaN для строк не из обучающей выборки)\n", + "train_sample_column = pd.Series(index=data.index, dtype='Int32')\n", + "train_sample_column[train_data.index] = train_data.Class\n", + "data_to_excel['Train sample'] = train_sample_column\n" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 41, "id": "c05cdd57", "metadata": {}, "outputs": [ @@ -196,22 +206,22 @@ "output_type": "stream", "text": [ "\n", - "Index: 29 entries, 12 to 81\n", + "Index: 32 entries, 4 to 79\n", "Data columns (total 10 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", - " 0 X1 29 non-null float64\n", - " 1 X2 29 non-null float64\n", - " 2 X3 29 non-null float64\n", - " 3 X4 29 non-null float64\n", - " 4 X5 29 non-null float64\n", - " 5 X6 29 non-null float64\n", - " 6 X7 29 non-null float64\n", - " 7 X8 29 non-null float64\n", - " 8 X9 29 non-null float64\n", - " 9 Class 29 non-null int32 \n", + " 0 X1 32 non-null float64\n", + " 1 X2 32 non-null float64\n", + " 2 X3 32 non-null float64\n", + " 3 X4 32 non-null float64\n", + " 4 X5 32 non-null float64\n", + " 5 X6 32 non-null float64\n", + " 6 X7 32 non-null float64\n", + " 7 X8 32 non-null float64\n", + " 8 X9 32 non-null float64\n", + " 9 Class 32 non-null int32 \n", "dtypes: float64(9), int32(1)\n", - "memory usage: 3.4 KB\n" + "memory usage: 2.6 KB\n" ] } ], @@ -229,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 42, "id": "95268435", "metadata": {}, "outputs": [ @@ -239,26 +249,26 @@ "text": [ "Ковариационная матрица\n", " X1 X2 X3 X4 X5 X6 X7 \\\n", - "X1 1.121103 -0.259221 -0.306454 -0.461469 0.767943 0.419094 0.225543 \n", - "X2 -0.259221 0.454943 -0.123711 0.057824 -0.122517 -0.139440 -0.144377 \n", - "X3 -0.306454 -0.123711 0.617679 0.113714 -0.034254 -0.068918 0.148946 \n", - "X4 -0.461469 0.057824 0.113714 0.554228 -0.500424 0.028564 0.011445 \n", - "X5 0.767943 -0.122517 -0.034254 -0.500424 1.423319 0.378642 0.826053 \n", - "X6 0.419094 -0.139440 -0.068918 0.028564 0.378642 0.625262 0.278222 \n", - "X7 0.225543 -0.144377 0.148946 0.011445 0.826053 0.278222 1.253289 \n", - "X8 0.114257 0.186514 -0.100983 -0.245522 0.004822 -0.324924 -0.067632 \n", - "X9 -0.445611 0.039838 0.016149 0.194358 -0.428706 -0.164860 -0.129618 \n", + "X1 0.131594 -0.011451 0.043813 0.088946 -0.062342 -0.066520 -0.002256 \n", + "X2 -0.011451 0.080149 0.010255 -0.041460 -0.008208 0.027059 -0.004493 \n", + "X3 0.043813 0.010255 0.236552 0.125222 -0.042629 -0.105374 0.015503 \n", + "X4 0.088946 -0.041460 0.125222 0.302019 -0.090391 -0.126444 0.039835 \n", + "X5 -0.062342 -0.008208 -0.042629 -0.090391 0.196549 0.090677 -0.022302 \n", + "X6 -0.066520 0.027059 -0.105374 -0.126444 0.090677 0.266100 -0.007099 \n", + "X7 -0.002256 -0.004493 0.015503 0.039835 -0.022302 -0.007099 0.084685 \n", + "X8 0.007213 0.003786 -0.085371 -0.054780 0.012072 0.045550 -0.008861 \n", + "X9 -0.004419 -0.001432 -0.024718 -0.030794 0.043951 0.043405 -0.034830 \n", "\n", " X8 X9 \n", - "X1 0.114257 -0.445611 \n", - "X2 0.186514 0.039838 \n", - "X3 -0.100983 0.016149 \n", - "X4 -0.245522 0.194358 \n", - "X5 0.004822 -0.428706 \n", - "X6 -0.324924 -0.164860 \n", - "X7 -0.067632 -0.129618 \n", - "X8 0.944867 0.130613 \n", - "X9 0.130613 0.920195 \n" + "X1 0.007213 -0.004419 \n", + "X2 0.003786 -0.001432 \n", + "X3 -0.085371 -0.024718 \n", + "X4 -0.054780 -0.030794 \n", + "X5 0.012072 0.043951 \n", + "X6 0.045550 0.043405 \n", + "X7 -0.008861 -0.034830 \n", + "X8 0.269534 0.101226 \n", + "X9 0.101226 0.232664 \n" ] } ], @@ -293,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 43, "id": "b2be0421", "metadata": {}, "outputs": [ @@ -303,22 +313,39 @@ "text": [ "Средние значения\n", " X1 X2 X3 X4 X5 X6 X7 \\\n", - "1 -0.469184 2.040601 -1.338342 -0.212342 -0.127080 0.109943 -0.627641 \n", - "2 -0.239966 -0.431743 -0.169291 -0.032197 0.275912 0.122801 0.702411 \n", - "3 3.497080 0.114099 -0.091658 0.732825 1.040307 2.640044 -0.722810 \n", - "4 -0.595800 1.526867 1.935916 1.305004 -0.748426 -0.943377 0.556980 \n", - "5 -0.232055 -0.357894 -0.187557 0.181914 0.541970 -0.478299 -0.171452 \n", - "6 0.138672 -0.608339 0.570500 -0.640882 0.187059 0.030598 -0.381607 \n", - "7 0.412579 -0.198957 -0.682463 -0.814678 0.467129 0.524669 -0.565224 \n", + "1 -0.251479 -0.383580 0.967795 0.355869 -0.508490 -0.747804 0.332042 \n", + "2 -0.386260 -0.253140 -0.874261 -0.560531 0.042356 -0.185193 -0.155391 \n", + "3 -0.311838 -0.449402 -0.167007 0.126204 -0.265843 0.326461 -0.254395 \n", + "4 0.519005 0.932863 -0.167007 -0.536128 1.037944 1.370933 -0.688650 \n", + "5 1.308110 -0.439770 0.456335 -1.505103 0.895683 0.278701 -0.695482 \n", + "6 1.856316 -0.945477 1.209825 1.058991 3.119390 0.333262 5.340213 \n", + "7 -0.510227 3.678128 -0.036859 2.092247 -1.285960 -1.175916 0.623703 \n", "\n", " X8 X9 \n", - "1 -0.786838 0.863492 \n", - "2 0.346857 -0.339603 \n", - "3 -0.484520 -1.763798 \n", - "4 -0.087726 -0.557146 \n", - "5 -0.087726 0.260573 \n", - "6 0.340558 0.487875 \n", - "7 -0.083003 -0.245444 \n" + "1 -0.182201 -0.312664 \n", + "2 0.252382 0.732738 \n", + "3 -0.465625 -0.259701 \n", + "4 -0.711259 -0.618647 \n", + "5 1.423867 0.383169 \n", + "6 -0.408940 -1.027303 \n", + "7 -0.352255 -2.105362 \n", + " X1 X2 X3 X4 X5 X6 X7 \\\n", + "1 -0.251479 -0.383580 0.967795 0.355869 -0.508490 -0.747804 0.332042 \n", + "2 -0.386260 -0.253140 -0.874261 -0.560531 0.042356 -0.185193 -0.155391 \n", + "3 -0.311838 -0.449402 -0.167007 0.126204 -0.265843 0.326461 -0.254395 \n", + "4 0.519005 0.932863 -0.167007 -0.536128 1.037944 1.370933 -0.688650 \n", + "5 1.308110 -0.439770 0.456335 -1.505103 0.895683 0.278701 -0.695482 \n", + "6 1.856316 -0.945477 1.209825 1.058991 3.119390 0.333262 5.340213 \n", + "7 -0.510227 3.678128 -0.036859 2.092247 -1.285960 -1.175916 0.623703 \n", + "\n", + " X8 X9 \n", + "1 -0.182201 -0.312664 \n", + "2 0.252382 0.732738 \n", + "3 -0.465625 -0.259701 \n", + "4 -0.711259 -0.618647 \n", + "5 1.423867 0.383169 \n", + "6 -0.408940 -1.027303 \n", + "7 -0.352255 -2.105362 \n" ] } ], @@ -332,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 44, "id": "06d105f8", "metadata": {}, "outputs": [ @@ -341,31 +368,23 @@ "output_type": "stream", "text": [ "Расстояние Махаланобиса (обучающая выборка)\n", - " 1 2 3 4 5 6 7\n", - "1 0.0 34.569829 57.501138 42.238035 32.629329 28.653531 23.602533\n", - "2 34.569829 0.0 58.289833 62.028535 8.254872 6.625923 4.538061\n", - "3 57.501138 58.289833 0.0 40.907638 49.059555 48.298045 53.450568\n", - "4 42.238035 62.028535 40.907638 0.0 51.948478 50.634712 65.789422\n", - "5 32.629329 8.254872 49.059555 51.948478 0.0 9.267653 10.766549\n", - "6 28.653531 6.625923 48.298045 50.634712 9.267653 0.0 4.597995\n", - "7 23.602533 4.538061 53.450568 65.789422 10.766549 4.597995 0.0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_21743/2884540641.py:5: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", + " 1 2 3 4 5 6 \\\n", + "1 0.0 22.343817 15.22444 87.857078 76.915784 580.080057 \n", + "2 22.343817 0.0 15.406909 72.484578 84.871051 620.59257 \n", + "3 15.22444 15.406909 0.0 60.045571 82.766139 660.598405 \n", + "4 87.857078 72.484578 60.045571 0.0 82.932649 618.932157 \n", + "5 76.915784 84.871051 82.766139 82.932649 0.0 562.34511 \n", + "6 580.080057 620.59257 660.598405 618.932157 562.34511 0.0 \n", + "7 356.469575 335.176705 355.369339 267.77654 526.670574 975.229758 \n", "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " res[i][j] = mahalanobis(centers.loc[i], samples.loc[j], np.linalg.inv(covr)) ** 2 # вычисляется растояние махаланобиса в квадрате. np.linalg.inv(covr)-возвращает матрицу обратную матрице ковариации centers.loc[i] и samples.loc[j] возвращают i и j строки таблицы means(ср знач) и это значение записывается в ячейку ij\n" + " 7 \n", + "1 356.469575 \n", + "2 335.176705 \n", + "3 355.369339 \n", + "4 267.77654 \n", + "5 526.670574 \n", + "6 975.229758 \n", + "7 0.0 \n" ] } ], @@ -394,7 +413,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 45, "id": "a9ef0be3", "metadata": {}, "outputs": [ @@ -438,120 +457,132 @@ " \n", " \n", " X1\n", - " 2.362506\n", - " -4.016844\n", - " 8.530316\n", - " 10.029015\n", - " -1.338690\n", - " -1.197691\n", - " -3.363942\n", + " -5.234825\n", + " -3.148253\n", + " -4.217967\n", + " 10.327559\n", + " 16.656458\n", + " 35.610185\n", + " -11.002064\n", " \n", " \n", " X2\n", - " 7.374780\n", - " -3.632032\n", - " 4.772253\n", - " 9.883164\n", - " -2.995975\n", - " -1.682457\n", - " -2.044837\n", + " -7.461316\n", + " -2.651336\n", + " -7.584118\n", + " 13.105596\n", + " -11.178379\n", + " -4.201862\n", + " 61.821871\n", " \n", " \n", " X3\n", - " -0.059094\n", - " -2.287065\n", - " 4.369934\n", - " 7.442596\n", - " -1.640451\n", - " 0.784721\n", - " -1.990840\n", + " 5.873924\n", + " -4.182788\n", + " 0.356458\n", + " -1.673889\n", + " 9.525550\n", + " 3.394379\n", + " -16.353702\n", " \n", " \n", " X4\n", - " -3.304585\n", - " -0.642709\n", - " 7.999418\n", - " 4.324471\n", - " 3.919683\n", - " -1.867713\n", - " -2.879039\n", + " -2.309080\n", + " -1.313906\n", + " 0.911015\n", + " 2.145491\n", + " -11.656789\n", + " -10.600878\n", + " 22.281651\n", " \n", " \n", " X5\n", - " -1.829592\n", - " 0.586150\n", - " 1.267570\n", - " -2.298520\n", - " 4.057314\n", - " 0.180565\n", - " 0.335214\n", + " -3.567483\n", + " -1.664356\n", + " -4.297066\n", + " 7.670232\n", + " 4.942687\n", + " 32.131610\n", + " 5.652878\n", " \n", " \n", " X6\n", - " -0.476711\n", - " 2.062190\n", - " 0.326981\n", - " -6.260008\n", - " -1.995700\n", - " 1.397920\n", - " 2.894594\n", + " -1.022878\n", + " -3.339634\n", + " 3.245656\n", + " 5.188590\n", + " 2.273415\n", + " -1.875044\n", + " -10.339378\n", " \n", " \n", " X7\n", - " 1.299385\n", - " 0.246256\n", - " -3.019053\n", - " 1.705241\n", - " -2.270157\n", - " -0.690854\n", - " -0.711296\n", + " 2.264382\n", + " 0.112277\n", + " -5.471875\n", + " -7.586796\n", + " -3.817930\n", + " 77.090589\n", + " 0.590885\n", " \n", " \n", " X8\n", - " -3.811598\n", - " 2.103650\n", - " -0.117392\n", - " -3.540090\n", - " 0.621673\n", - " 0.793223\n", - " 0.801712\n", + " 1.619403\n", + " -1.400612\n", + " -1.324989\n", + " -2.957457\n", + " 6.123916\n", + " -2.939071\n", + " 1.797481\n", " \n", " \n", " X9\n", - " 2.248435\n", - " -1.602480\n", - " 0.481743\n", - " 1.329583\n", - " 0.090191\n", - " 0.528417\n", - " -0.703412\n", + " -0.671626\n", + " 4.018564\n", + " -1.121021\n", + " -4.541955\n", + " -3.230166\n", + " 2.291908\n", + " -7.498102\n", " \n", " \n", " Const\n", - " -12.187394\n", - " -3.976382\n", - " -22.378461\n", - " -20.924723\n", - " -4.715498\n", - " -3.953788\n", - " -3.741128\n", + " -7.817591\n", + " -6.087361\n", + " -5.803707\n", + " -23.736379\n", + " -34.669499\n", + " -289.317890\n", + " -153.089698\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 1 2 3 4 5 6 7\n", - "X1 2.362506 -4.016844 8.530316 10.029015 -1.338690 -1.197691 -3.363942\n", - "X2 7.374780 -3.632032 4.772253 9.883164 -2.995975 -1.682457 -2.044837\n", - "X3 -0.059094 -2.287065 4.369934 7.442596 -1.640451 0.784721 -1.990840\n", - "X4 -3.304585 -0.642709 7.999418 4.324471 3.919683 -1.867713 -2.879039\n", - "X5 -1.829592 0.586150 1.267570 -2.298520 4.057314 0.180565 0.335214\n", - "X6 -0.476711 2.062190 0.326981 -6.260008 -1.995700 1.397920 2.894594\n", - "X7 1.299385 0.246256 -3.019053 1.705241 -2.270157 -0.690854 -0.711296\n", - "X8 -3.811598 2.103650 -0.117392 -3.540090 0.621673 0.793223 0.801712\n", - "X9 2.248435 -1.602480 0.481743 1.329583 0.090191 0.528417 -0.703412\n", - "Const -12.187394 -3.976382 -22.378461 -20.924723 -4.715498 -3.953788 -3.741128" + " 1 2 3 4 5 6 \\\n", + "X1 -5.234825 -3.148253 -4.217967 10.327559 16.656458 35.610185 \n", + "X2 -7.461316 -2.651336 -7.584118 13.105596 -11.178379 -4.201862 \n", + "X3 5.873924 -4.182788 0.356458 -1.673889 9.525550 3.394379 \n", + "X4 -2.309080 -1.313906 0.911015 2.145491 -11.656789 -10.600878 \n", + "X5 -3.567483 -1.664356 -4.297066 7.670232 4.942687 32.131610 \n", + "X6 -1.022878 -3.339634 3.245656 5.188590 2.273415 -1.875044 \n", + "X7 2.264382 0.112277 -5.471875 -7.586796 -3.817930 77.090589 \n", + "X8 1.619403 -1.400612 -1.324989 -2.957457 6.123916 -2.939071 \n", + "X9 -0.671626 4.018564 -1.121021 -4.541955 -3.230166 2.291908 \n", + "Const -7.817591 -6.087361 -5.803707 -23.736379 -34.669499 -289.317890 \n", + "\n", + " 7 \n", + "X1 -11.002064 \n", + "X2 61.821871 \n", + "X3 -16.353702 \n", + "X4 22.281651 \n", + "X5 5.652878 \n", + "X6 -10.339378 \n", + "X7 0.590885 \n", + "X8 1.797481 \n", + "X9 -7.498102 \n", + "Const -153.089698 " ] }, "metadata": {}, @@ -559,36 +590,64 @@ } ], "source": [ - "classes = np.unique(train_data.Class)\n", - "groups = [train_data[FEATURES][train_data.Class == cls] for cls in classes]\n", - "n = [len(g) for g in groups]\n", - "N = sum(n)\n", - "p = train_data[FEATURES].shape[1]\n", + "classes = np.unique(train_data.Class) # Получаем массив уникальных значений классов из обучающей выборки\n", "\n", + "# Создаём список групп - для каждого класса выбираем все строки с признаками FEATURES, которые принадлежат этому классу\n", + "# Результат: список из DataFrame'ов, каждый содержит объекты одного класса\n", + "groups = [train_data[FEATURES][train_data.Class == cls] for cls in classes]\n", + "\n", + "\n", + "n = [len(g) for g in groups] # Создаём список n - количество объектов в каждом классе\n", + "\n", + "N = sum(n) # N - общее количество объектов в обучающей выборке (сумма всех элементов списка n)\n", + "\n", + "\n", + "p = train_data[FEATURES].shape[1] # количество признаков\n", + "\n", + "# Вычисляем объединённую (pooled) ковариационную матрицу:\n", + "# rowvar=False означает, что переменные в столбцах, ddof=1 - поправка на смещение\n", "S_pooled = sum((ni - 1) * np.cov(g, rowvar=False, ddof=1) for g, ni in zip(groups, n)) / (N - len(classes))\n", + "\n", + "# Вычисляем обратную матрицу к объединённой ковариационной матрице\n", "inv_S = np.linalg.inv(S_pooled)\n", "\n", + "# Создаём список средних векторов для каждого класса\n", "means = [g.mean(axis=0) for g in groups]\n", + "\n", + "# Вычисляем априорные вероятности классов (prior probabilities)\n", "priors = np.array(n) / N\n", "\n", - "coef_stat = {}\n", - "const_stat = {}\n", + "# Создаём пустые словари для хранения коэффициентов дискриминантных функций\n", + "coef_stat = {} # Словарь для хранения векторов коэффициентов a для каждого класса\n", + "const_stat = {} # Словарь для хранения константных членов c для каждого класса\n", "\n", + "# Проходим по всем классам и вычисляем коэффициенты дискриминантной функции для каждого\n", "for cls, mu, p_j in zip(classes, means, priors):\n", - " a = inv_S @ mu\n", + " # a - вектор коэффициентов при признаках X1...X9\n", + " a = inv_S @ mu # Матричное произведение\n", + "\n", + " # c - константный член дискриминантной функции\n", + " # p_j - априорная вероятность класса\n", " c = -0.5 * mu.T @ inv_S @ mu + np.log(p_j)\n", + "\n", + " # Сохраняем вычисленные коэффициенты в словари по номеру класса\n", " coef_stat[cls] = a\n", " const_stat[cls] = c\n", "\n", + "# Создаём DataFrame для удобного отображения коэффициентов\n", + "# Строки: X1, X2, ..., X9; Столбцы: номера классов\n", "df_stat = pd.DataFrame(coef_stat, index=[f\"X{i+1}\" for i in range(p)])\n", + "\n", + "# Добавляем строку с константными членами в конец таблицы\n", "df_stat.loc[\"Const\"] = const_stat\n", + "\n", "print(\"Коэффициенты дискриминантных функций:\")\n", - "display(df_stat)" + "display(df_stat)\n" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 46, "id": "7de23d86", "metadata": {}, "outputs": [ @@ -598,17 +657,17 @@ "text": [ "Распределение по классам\n", " Class\n", - "0 7\n", - "1 7\n", - "2 7\n", - "3 5\n", - "4 2\n", + "0 3\n", + "1 2\n", + "2 4\n", + "3 2\n", + "4 1\n", ".. ...\n", - "79 4\n", - "80 2\n", - "81 7\n", - "82 3\n", - "83 7\n", + "79 7\n", + "80 1\n", + "81 5\n", + "82 5\n", + "83 2\n", "\n", "[84 rows x 1 columns]\n" ] @@ -617,7 +676,7 @@ "source": [ "lda = LinearDiscriminantAnalysis()\n", "lda.fit(train_data[FEATURES], train_data.Class)\n", - "means = pd.DataFrame(lda.means_, index=lda.classes_, columns=FEATURES)\n", + "means = pd.DataFrame(lda.means_, index=lda.classes_, columns=FEATURES) #type: ignore\n", "\n", "def LDA_predict(lda, x):# принимает в себя результаты линейного дискр анализа и значения признаков всех объектов( исходная таблица только с значениями X1...X9)\n", " return pd.DataFrame( # функция считает распределение по классам (классификация масива тестовых векторов Х )\n", @@ -635,7 +694,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 47, "id": "f37c3126", "metadata": {}, "outputs": [ @@ -644,51 +703,34 @@ "output_type": "stream", "text": [ "Расстояние Махланобиса\n", - " 1 2 3 4 5 6 \\\n", - "0 35.668975 18.086042 97.0607 104.7747 39.287311 22.294804 \n", - "1 28.121316 11.620122 63.118854 75.227086 9.049758 6.399131 \n", - "2 20.971141 14.779434 53.520726 73.916814 22.538726 15.973884 \n", - "3 37.74131 10.545044 55.809859 60.14781 3.88976 12.941525 \n", - "4 30.772645 16.642726 37.740081 18.002732 18.136879 16.294222 \n", - ".. ... ... ... ... ... ... \n", - "79 100.840777 147.154814 101.139297 37.825807 128.480876 148.89583 \n", - "80 49.861969 2.600999 67.317051 76.328106 11.197973 11.170235 \n", - "81 43.418763 28.329574 45.341597 90.95962 34.612055 26.013846 \n", - "82 71.02434 59.211977 6.918547 53.727969 49.766347 42.226777 \n", - "83 23.32652 4.672571 63.038113 71.118769 12.311471 6.113339 \n", + " 1 2 3 4 5 6 \\\n", + "0 35.548618 16.784286 11.032019 67.652466 106.380096 685.635422 \n", + "1 44.397398 15.17559 28.556746 72.867432 63.671602 621.00928 \n", + "2 92.049277 64.122689 58.571719 3.93205 97.092489 629.959981 \n", + "3 45.929629 37.680543 49.035861 60.870665 92.950853 658.258753 \n", + "4 10.384607 36.685522 29.484569 81.018346 95.923694 485.761693 \n", + ".. ... ... ... ... ... ... \n", + "79 361.914041 347.840907 367.588069 300.470231 556.010044 989.726755 \n", + "80 11.323179 32.848072 20.11476 85.940301 75.565423 551.195134 \n", + "81 529.682935 494.161709 479.158855 331.787176 276.596841 630.305397 \n", + "82 369.683371 396.241564 330.687362 230.499407 183.163732 621.077741 \n", + "83 26.559382 6.11464 19.063954 43.463375 66.032665 555.489917 \n", "\n", " 7 \n", - "0 11.271232 \n", - "1 6.021595 \n", - "2 6.10029 \n", - "3 12.655462 \n", - "4 23.337915 \n", + "0 362.911582 \n", + "1 439.360623 \n", + "2 247.054034 \n", + "3 248.019142 \n", + "4 299.084459 \n", ".. ... \n", - "79 156.485769 \n", - "80 8.699467 \n", - "81 16.342598 \n", - "82 52.451872 \n", - "83 1.594039 \n", + "79 6.031622 \n", + "80 372.395174 \n", + "81 977.516974 \n", + "82 891.232175 \n", + "83 309.482441 \n", "\n", "[84 rows x 7 columns]\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_21743/2884540641.py:5: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " res[i][j] = mahalanobis(centers.loc[i], samples.loc[j], np.linalg.inv(covr)) ** 2 # вычисляется растояние махаланобиса в квадрате. np.linalg.inv(covr)-возвращает матрицу обратную матрице ковариации centers.loc[i] и samples.loc[j] возвращают i и j строки таблицы means(ср знач) и это значение записывается в ячейку ij\n" - ] } ], "source": [ @@ -699,7 +741,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 48, "id": "8ba2b145", "metadata": {}, "outputs": [ @@ -708,31 +750,31 @@ "output_type": "stream", "text": [ "Вероятности\n", - " 1 2 3 4 5 \\\n", - "0 1.226696e-06 2.420715e-02 5.723915e-20 1.814306e-21 5.023024e-07 \n", - "1 2.659498e-06 3.055692e-02 6.686223e-14 2.355065e-16 9.206105e-02 \n", - "2 1.456320e-04 9.658066e-03 1.245100e-11 6.955707e-16 1.662647e-04 \n", - "3 1.667614e-08 4.025419e-02 1.988658e-12 3.409394e-13 9.349886e-01 \n", - "4 1.243606e-04 4.365931e-01 3.817010e-06 1.105924e-01 1.723632e-01 \n", - ".. ... ... ... ... ... \n", - "79 1.381599e-14 3.635280e-24 1.190033e-14 1.000000e+00 3.438354e-20 \n", - "80 1.683838e-11 9.247209e-01 2.728836e-15 4.522129e-17 1.047177e-02 \n", - "81 3.283185e-07 1.862054e-03 1.255328e-07 2.338948e-17 6.707915e-05 \n", - "82 1.201168e-14 1.323570e-11 1.000000e+00 1.026962e-10 1.240676e-09 \n", - "83 3.967599e-06 1.337527e-01 9.446368e-15 2.492665e-16 2.445430e-03 \n", + " 1 2 3 4 5 \\\n", + "0 2.724508e-06 4.313697e-02 9.568603e-01 9.702972e-14 3.778389e-22 \n", + "1 3.380276e-07 9.984489e-01 1.550797e-03 7.406988e-14 7.353441e-12 \n", + "2 2.201448e-19 3.402740e-13 6.825218e-12 1.000000e+00 5.894780e-21 \n", + "3 1.193238e-02 9.838574e-01 4.207907e-03 2.265694e-06 2.449497e-13 \n", + "4 9.998788e-01 2.592478e-06 1.186566e-04 1.530751e-16 8.876653e-20 \n", + ".. ... ... ... ... ... \n", + "79 1.578468e-77 2.393959e-74 1.541647e-78 1.157359e-64 3.747166e-120 \n", + "80 9.798381e-01 2.767082e-05 2.013425e-02 2.047062e-17 3.664435e-15 \n", + "81 3.312640e-55 2.282701e-47 5.166393e-44 1.036504e-12 1.000000e+00 \n", + "82 9.438354e-41 2.151774e-46 4.619775e-32 5.262459e-11 1.000000e+00 \n", + "83 2.720782e-05 9.980490e-01 1.923774e-03 1.936053e-09 2.432529e-14 \n", "\n", - " 6 7 \n", - "0 1.475681e-03 9.743154e-01 \n", - "1 2.078756e-01 6.695038e-01 \n", - "2 2.657593e-03 9.873724e-01 \n", - "3 6.072837e-03 1.868436e-02 \n", - "4 2.598505e-01 2.047264e-02 \n", - ".. ... ... \n", - "79 7.611163e-25 4.563366e-26 \n", - "80 6.370811e-03 5.843647e-02 \n", - "81 2.963578e-03 9.951068e-01 \n", - "82 3.228541e-08 5.183510e-10 \n", - "83 3.253971e-02 8.312582e-01 \n", + " 6 7 \n", + "0 6.217431e-148 7.450791e-78 \n", + "1 6.952668e-133 1.934890e-93 \n", + "2 1.147524e-136 1.609652e-53 \n", + "3 4.305525e-136 5.205061e-47 \n", + "4 1.976985e-104 6.799073e-64 \n", + ".. ... ... \n", + "79 2.473522e-214 1.000000e+00 \n", + "80 1.915701e-118 1.283056e-79 \n", + "81 1.560137e-77 6.267969e-153 \n", + "82 8.094335e-96 1.757483e-154 \n", + "83 1.264055e-120 3.323616e-67 \n", "\n", "[84 rows x 7 columns]\n" ] @@ -761,7 +803,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 49, "id": "243acaa1", "metadata": {}, "outputs": [ @@ -776,78 +818,78 @@ "Index: []\n", "\n", "Step: 1\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 1.0 0.351167 6.774712 0.00036\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 1.0 0.034339 117.172492 4.570418e-17\n", "\n", "Step: 2\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.409057 0.332926 7.012841 0.000337\n", - "X3 0.351167 0.387810 5.525047 0.001440\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.055327 0.034633 111.495293 2.539633e-16\n", + "X2 0.034339 0.055802 67.682511 7.462368e-14\n", "\n", "Step: 3\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.180700 0.267016 9.150317 0.000070\n", - "X3 0.155335 0.310617 7.398007 0.000285\n", - "X1 0.136186 0.354293 6.075088 0.000947\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.009143 0.053446 67.889761 1.792580e-13\n", + "X2 0.007714 0.063345 56.682141 1.240902e-12\n", + "X5 0.001916 0.255016 11.198399 7.409067e-06\n", "\n", "Step: 4\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.076802 0.290539 7.732610 0.000261\n", - "X3 0.057736 0.386482 5.026892 0.003062\n", - "X1 0.090944 0.245360 9.739531 0.000058\n", - "X4 0.048250 0.462470 3.680624 0.013503\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.002715 0.055551 62.338586 1.092269e-12\n", + "X2 0.002441 0.061807 55.658064 3.490100e-12\n", + "X5 0.000531 0.283947 9.246521 4.132537e-05\n", + "X1 0.000489 0.308693 8.211369 9.737300e-05\n", "\n", "Step: 5\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.043929 0.298455 7.051774 0.000554\n", - "X3 0.031571 0.415276 4.224106 0.007952\n", - "X1 0.039608 0.331012 6.063121 0.001296\n", - "X4 0.033848 0.387342 4.745103 0.004594\n", - "X6 0.022314 0.587557 2.105884 0.103208\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.000903 0.066279 49.307354 2.671740e-11\n", + "X2 0.000960 0.062367 52.619515 1.421293e-11\n", + "X5 0.000181 0.331033 7.072970 3.186012e-04\n", + "X1 0.000168 0.356066 6.329628 6.410529e-04\n", + "X3 0.000151 0.396708 5.322606 1.782148e-03\n", "\n", "Step: 6\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.032330 0.287177 7.032827 0.000684\n", - "X3 0.023916 0.388207 4.465174 0.006850\n", - "X1 0.027402 0.338816 5.529122 0.002453\n", - "X4 0.024427 0.380082 4.621208 0.005849\n", - "X6 0.017569 0.528435 2.528407 0.061822\n", - "X5 0.013111 0.708146 1.167724 0.368249\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.000346 0.079099 38.807979 5.450728e-10\n", + "X2 0.000470 0.058251 53.890403 2.662696e-11\n", + "X5 0.000064 0.427580 4.462485 5.054419e-03\n", + "X1 0.000078 0.349448 6.205518 8.358543e-04\n", + "X3 0.000077 0.354847 6.060375 9.604737e-04\n", + "X6 0.000060 0.457851 3.947056 9.143395e-03\n", "\n", "Step: 7\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.020494 0.280282 6.847552 0.000968\n", - "X3 0.014397 0.398984 4.016983 0.012080\n", - "X1 0.015287 0.375736 4.430515 0.007954\n", - "X4 0.015947 0.360189 4.736860 0.005908\n", - "X6 0.010992 0.522552 2.436490 0.072419\n", - "X5 0.009472 0.606445 1.730548 0.177905\n", - "X7 0.009284 0.618680 1.643587 0.199304\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.000094 0.135646 20.178341 2.661233e-07\n", + "X2 0.000196 0.064997 45.553320 2.823152e-10\n", + "X5 0.000023 0.542947 2.665705 4.761796e-02\n", + "X1 0.000039 0.322062 6.665822 6.423386e-04\n", + "X3 0.000038 0.333369 6.332330 8.660969e-04\n", + "X6 0.000028 0.453227 3.820269 1.146526e-02\n", + "X4 0.000027 0.463805 3.660921 1.382036e-02\n", "\n", "Step: 8\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.017474 0.229532 8.391751 0.000413\n", - "X3 0.010229 0.392088 3.876114 0.015467\n", - "X1 0.010836 0.370138 4.254231 0.010637\n", - "X4 0.010616 0.377814 4.117010 0.012162\n", - "X6 0.007683 0.522050 2.288811 0.090604\n", - "X5 0.006791 0.590595 1.733022 0.181304\n", - "X7 0.006568 0.610671 1.593858 0.216589\n", - "X8 0.005744 0.698248 1.080390 0.416908\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.000061 0.135927 19.070677 6.712073e-07\n", + "X2 0.000090 0.091516 29.780979 2.085605e-08\n", + "X5 0.000015 0.548214 2.472314 6.373804e-02\n", + "X1 0.000026 0.321306 6.336900 1.015968e-03\n", + "X3 0.000022 0.379230 4.910770 3.881752e-03\n", + "X6 0.000016 0.501614 2.980693 3.350271e-02\n", + "X4 0.000016 0.501861 2.977754 3.362441e-02\n", + "X9 0.000013 0.648374 1.626957 1.970044e-01\n", "\n", "Step: 9\n", - " Wilk's lmbd Partial lmbd F to enter P value\n", - "X2 0.013505 0.210590 8.746630 0.000440\n", - "X3 0.007464 0.381020 3.790575 0.018724\n", - "X1 0.007812 0.364091 4.075329 0.014227\n", - "X4 0.007528 0.377789 3.842949 0.017789\n", - "X6 0.005667 0.501852 2.316111 0.091680\n", - "X5 0.004818 0.590368 1.619003 0.214105\n", - "X7 0.004619 0.615695 1.456424 0.262463\n", - "X8 0.004523 0.628867 1.377043 0.289960\n", - "X9 0.004011 0.709119 0.957134 0.487364\n", + " Wilk's lmbd Partial lmbd F to enter P value\n", + "X7 0.000039 0.137183 17.820289 1.783586e-06\n", + "X2 0.000053 0.100352 25.400542 1.346467e-07\n", + "X5 0.000010 0.560292 2.223553 9.119062e-02\n", + "X1 0.000015 0.369418 4.836395 4.725286e-03\n", + "X3 0.000015 0.349955 5.262941 3.138798e-03\n", + "X6 0.000010 0.529227 2.520391 6.244848e-02\n", + "X4 0.000009 0.565830 2.174061 9.722558e-02\n", + "X9 0.000008 0.643040 1.572819 2.151830e-01\n", + "X8 0.000008 0.650606 1.521583 2.304240e-01\n", "\n", - "['X2', 'X3', 'X1', 'X4', 'X6', 'X5']\n" + "['X7', 'X2', 'X5', 'X1', 'X3', 'X6']\n" ] } ], @@ -918,7 +960,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 50, "id": "6bb39a9c", "metadata": {}, "outputs": [ @@ -926,15 +968,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Pi: [0.06896552 0.20689655 0.06896552 0.10344828 0.17241379 0.10344828\n", - " 0.27586207]\n", + "Pi: [0.1875 0.25 0.3125 0.0625 0.0625 0.0625 0.0625]\n", "Распределение\n", " Class\n", - "0 7\n", - "1 7\n", - "2 7\n", - "3 5\n", - "4 5\n" + "0 3\n", + "1 2\n", + "2 4\n", + "3 2\n", + "4 1\n" ] } ], @@ -950,7 +991,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 51, "id": "c8e6ad7e", "metadata": {}, "outputs": [ @@ -994,87 +1035,96 @@ " \n", " \n", " X1\n", - " 4.306452\n", - " -2.095721\n", - " 5.390990\n", - " 7.118680\n", - " -2.067911\n", - " -1.219684\n", - " -1.212971\n", + " 1.736280\n", + " -1.743108\n", + " -4.758759\n", + " -5.226456\n", + " -6.519691\n", + " 72.846915\n", + " 10.519265\n", " \n", " \n", " X2\n", - " -1.263980\n", - " -1.504646\n", - " 4.167192\n", - " 6.545363\n", - " -1.605919\n", - " 0.747939\n", - " -1.679540\n", + " -6.145526\n", + " -2.381514\n", + " -8.110648\n", + " 11.978715\n", + " -4.772944\n", + " 0.412523\n", + " 51.767905\n", " \n", " \n", " X3\n", - " -1.026588\n", - " -2.062817\n", - " 8.561871\n", - " 7.236414\n", - " -0.792322\n", - " -0.986318\n", - " -2.473676\n", + " -3.172120\n", + " -0.849988\n", + " -4.681666\n", + " 6.484264\n", + " 6.900413\n", + " 34.438056\n", + " 0.270260\n", " \n", " \n", " X4\n", - " -1.885891\n", - " -0.612939\n", - " 5.537484\n", - " 6.120972\n", - " 1.984119\n", - " -2.603297\n", - " -3.506617\n", + " -5.767018\n", + " -3.575317\n", + " -4.300118\n", + " 9.991338\n", + " 13.505700\n", + " 31.253687\n", + " -3.123795\n", " \n", " \n", " X5\n", - " 2.008894\n", - " 0.529407\n", - " 0.865689\n", - " -4.072759\n", - " -2.078219\n", - " 1.006678\n", - " 2.418692\n", + " 4.403649\n", + " -4.202633\n", + " 1.213440\n", + " 0.308135\n", + " 2.874115\n", + " 0.482478\n", + " -8.547150\n", " \n", " \n", " X6\n", - " -0.392602\n", - " 0.733885\n", - " -1.607645\n", - " -0.424377\n", - " 1.842079\n", - " -0.606497\n", - " -0.358303\n", + " -0.755884\n", + " -2.768609\n", + " 2.925547\n", + " 4.204502\n", + " 3.521690\n", + " -0.577544\n", + " -13.660256\n", " \n", " \n", " Const\n", - " -8.490278\n", - " -2.546424\n", - " -20.097006\n", - " -17.957060\n", - " -3.547085\n", - " -3.577515\n", - " -3.450540\n", + " -7.086063\n", + " -4.589115\n", + " -5.259904\n", + " -18.973678\n", + " -19.159540\n", + " -280.003432\n", + " -110.069841\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 1 2 3 4 5 6 7\n", - "X1 4.306452 -2.095721 5.390990 7.118680 -2.067911 -1.219684 -1.212971\n", - "X2 -1.263980 -1.504646 4.167192 6.545363 -1.605919 0.747939 -1.679540\n", - "X3 -1.026588 -2.062817 8.561871 7.236414 -0.792322 -0.986318 -2.473676\n", - "X4 -1.885891 -0.612939 5.537484 6.120972 1.984119 -2.603297 -3.506617\n", - "X5 2.008894 0.529407 0.865689 -4.072759 -2.078219 1.006678 2.418692\n", - "X6 -0.392602 0.733885 -1.607645 -0.424377 1.842079 -0.606497 -0.358303\n", - "Const -8.490278 -2.546424 -20.097006 -17.957060 -3.547085 -3.577515 -3.450540" + " 1 2 3 4 5 6 \\\n", + "X1 1.736280 -1.743108 -4.758759 -5.226456 -6.519691 72.846915 \n", + "X2 -6.145526 -2.381514 -8.110648 11.978715 -4.772944 0.412523 \n", + "X3 -3.172120 -0.849988 -4.681666 6.484264 6.900413 34.438056 \n", + "X4 -5.767018 -3.575317 -4.300118 9.991338 13.505700 31.253687 \n", + "X5 4.403649 -4.202633 1.213440 0.308135 2.874115 0.482478 \n", + "X6 -0.755884 -2.768609 2.925547 4.204502 3.521690 -0.577544 \n", + "Const -7.086063 -4.589115 -5.259904 -18.973678 -19.159540 -280.003432 \n", + "\n", + " 7 \n", + "X1 10.519265 \n", + "X2 51.767905 \n", + "X3 0.270260 \n", + "X4 -3.123795 \n", + "X5 -8.547150 \n", + "X6 -13.660256 \n", + "Const -110.069841 " ] }, "metadata": {}, @@ -1124,7 +1174,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 52, "id": "74093d18", "metadata": {}, "outputs": [ @@ -1134,83 +1184,83 @@ "text": [ "Backward stepwise\n", "Step: 0\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X1 0.007812 0.364091 4.075329 0.014227\n", - "X2 0.013505 0.210590 8.746630 0.000440\n", - "X3 0.007464 0.381020 3.790575 0.018724\n", - "X4 0.007528 0.377789 3.842949 0.017789\n", - "X5 0.004818 0.590368 1.619003 0.214105\n", - "X6 0.005667 0.501852 2.316111 0.091680\n", - "X7 0.004619 0.615695 1.456424 0.262463\n", - "X8 0.004523 0.628867 1.377043 0.289960\n", - "X9 0.004011 0.709119 0.957134 0.487364\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X1 0.000015 0.369418 4.836395 4.725286e-03\n", + "X2 0.000053 0.100352 25.400542 1.346467e-07\n", + "X3 0.000015 0.349955 5.262941 3.138798e-03\n", + "X4 0.000009 0.565830 2.174061 9.722558e-02\n", + "X5 0.000010 0.560292 2.223553 9.119062e-02\n", + "X6 0.000010 0.529227 2.520391 6.244848e-02\n", + "X7 0.000039 0.137183 17.820289 1.783586e-06\n", + "X8 0.000008 0.650606 1.521583 2.304240e-01\n", + "X9 0.000008 0.643040 1.572819 2.151830e-01\n", "\n", "Step: 1\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X1 0.010836 0.370138 4.254231 0.010637\n", - "X2 0.017474 0.229532 8.391751 0.000413\n", - "X3 0.010229 0.392088 3.876114 0.015467\n", - "X4 0.010616 0.377814 4.117010 0.012162\n", - "X5 0.006791 0.590595 1.733022 0.181304\n", - "X6 0.007683 0.522050 2.288811 0.090604\n", - "X7 0.006568 0.610671 1.593858 0.216589\n", - "X8 0.005744 0.698248 1.080390 0.416908\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X1 0.000026 0.321306 6.336900 1.015968e-03\n", + "X2 0.000090 0.091516 29.780979 2.085605e-08\n", + "X3 0.000022 0.379230 4.910770 3.881752e-03\n", + "X4 0.000016 0.501861 2.977754 3.362441e-02\n", + "X5 0.000015 0.548214 2.472314 6.373804e-02\n", + "X6 0.000016 0.501614 2.980693 3.350271e-02\n", + "X7 0.000061 0.135927 19.070677 6.712073e-07\n", + "X9 0.000013 0.648374 1.626957 1.970044e-01\n", "\n", "Step: 2\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X1 0.015287 0.375736 4.430515 0.007954\n", - "X2 0.020494 0.280282 6.847552 0.000968\n", - "X3 0.014397 0.398984 4.016983 0.012080\n", - "X4 0.015947 0.360189 4.736860 0.005908\n", - "X5 0.009472 0.606445 1.730548 0.177905\n", - "X6 0.010992 0.522552 2.436490 0.072419\n", - "X7 0.009284 0.618680 1.643587 0.199304\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X1 0.000039 0.322062 6.665822 6.423386e-04\n", + "X2 0.000196 0.064997 45.553320 2.823152e-10\n", + "X3 0.000038 0.333369 6.332330 8.660969e-04\n", + "X4 0.000027 0.463805 3.660921 1.382036e-02\n", + "X5 0.000023 0.542947 2.665705 4.761796e-02\n", + "X6 0.000028 0.453227 3.820269 1.146526e-02\n", + "X7 0.000094 0.135646 20.178341 2.661233e-07\n", "\n", "Step: 3\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X1 0.027402 0.338816 5.529122 0.002453\n", - "X2 0.032330 0.287177 7.032827 0.000684\n", - "X3 0.023916 0.388207 4.465174 0.006850\n", - "X4 0.024427 0.380082 4.621208 0.005849\n", - "X5 0.013111 0.708146 1.167724 0.368249\n", - "X6 0.017569 0.528435 2.528407 0.061822\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X1 0.000082 0.284888 8.367167 1.277550e-04\n", + "X2 0.000340 0.068884 45.057411 1.394937e-10\n", + "X3 0.000069 0.337744 6.536070 6.131245e-04\n", + "X4 0.000064 0.365254 5.792738 1.247026e-03\n", + "X6 0.000064 0.366742 5.755716 1.293539e-03\n", + "X7 0.000347 0.067374 46.141445 1.121008e-10\n", "\n", "Step: 4\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X1 0.039608 0.331012 6.063121 0.001296\n", - "X2 0.043929 0.298455 7.051774 0.000554\n", - "X3 0.031571 0.415276 4.224106 0.007952\n", - "X4 0.033848 0.387342 4.745103 0.004594\n", - "X6 0.022314 0.587557 2.105884 0.103208\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X1 0.000232 0.275052 9.224878 5.243354e-05\n", + "X2 0.000908 0.070269 46.308408 4.898174e-11\n", + "X3 0.000187 0.341989 6.734261 4.357539e-04\n", + "X4 0.000181 0.353031 6.414144 5.907362e-04\n", + "X7 0.000947 0.067399 48.429295 3.179135e-11\n", "\n", "Step: 5\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X1 0.090944 0.245360 9.739531 0.000058\n", - "X2 0.076802 0.290539 7.732610 0.000261\n", - "X3 0.057736 0.386482 5.026892 0.003062\n", - "X4 0.048250 0.462470 3.680624 0.013503\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X1 0.000655 0.275907 9.622842 3.073058e-05\n", + "X2 0.003223 0.056083 61.712393 1.211773e-12\n", + "X3 0.000531 0.340281 7.108733 2.619443e-04\n", + "X7 0.003487 0.051840 67.063885 5.141883e-13\n", "\n", "Step: 6\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X1 0.136186 0.354293 6.075088 0.000947\n", - "X2 0.180700 0.267016 9.150317 0.000070\n", - "X3 0.155335 0.310617 7.398007 0.000285\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X1 0.001916 0.277240 9.993420 1.834980e-05\n", + "X2 0.009351 0.056813 63.638909 3.595709e-13\n", + "X7 0.010934 0.048586 75.064819 6.044530e-14\n", "\n", "Step: 7\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X2 0.409057 0.332926 7.012841 0.000337\n", - "X3 0.351167 0.387810 5.525047 0.001440\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X2 0.034339 0.055802 67.682511 7.462368e-14\n", + "X7 0.055327 0.034633 111.495293 2.539633e-16\n", "\n", "Step: 8\n", - " Wilk's lmbd Partial lmbd F to remove P value\n", - "X2 1.0 0.351167 6.774712 0.00036\n", + " Wilk's lmbd Partial lmbd F to remove P value\n", + "X7 1.0 0.034339 117.172492 4.570418e-17\n", "\n", "Step: 9\n", "Empty DataFrame\n", "Columns: [Wilk's lmbd, Partial lmbd, F to remove, P value]\n", "Index: []\n", "\n", - "['X1', 'X2', 'X3', 'X4', 'X5', 'X6']\n" + "['X1', 'X2', 'X3', 'X4', 'X6', 'X7']\n" ] } ], @@ -1264,7 +1314,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 53, "id": "f804180f", "metadata": {}, "outputs": [ @@ -1272,15 +1322,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Pi: [0.06896552 0.20689655 0.06896552 0.10344828 0.17241379 0.10344828\n", - " 0.27586207]\n", + "Pi: [0.1875 0.25 0.3125 0.0625 0.0625 0.0625 0.0625]\n", "Распределение\n", " Class\n", - "0 7\n", - "1 7\n", - "2 7\n", - "3 5\n", - "4 5\n" + "0 3\n", + "1 3\n", + "2 4\n", + "3 2\n", + "4 1\n" ] } ], @@ -1296,7 +1345,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 54, "id": "75ae71e1", "metadata": {}, "outputs": [ @@ -1340,87 +1389,96 @@ " \n", " \n", " X1\n", - " -1.026588\n", - " -2.062817\n", - " 8.561871\n", - " 7.236414\n", - " -0.792322\n", - " -0.986318\n", - " -2.473676\n", + " -3.771640\n", + " -2.857112\n", + " -3.319760\n", + " 7.084028\n", + " 16.643087\n", + " 25.314092\n", + " -12.520287\n", " \n", " \n", " X2\n", - " 4.306452\n", - " -2.095721\n", - " 5.390990\n", - " 7.118680\n", - " -2.067911\n", - " -1.219684\n", - " -1.212971\n", + " -6.063287\n", + " -2.536821\n", + " -6.090944\n", + " 10.678588\n", + " -12.177667\n", + " -15.673274\n", + " 60.676258\n", " \n", " \n", " X3\n", - " -1.263980\n", - " -1.504646\n", - " 4.167192\n", - " 6.545363\n", - " -1.605919\n", - " 0.747939\n", - " -1.679540\n", + " 4.937764\n", + " -3.905883\n", + " 0.357235\n", + " 0.196979\n", + " 7.971863\n", + " 7.845312\n", + " -16.315901\n", " \n", " \n", " X4\n", - " -1.885891\n", - " -0.612939\n", - " 5.537484\n", - " 6.120972\n", - " 1.984119\n", - " -2.603297\n", - " -3.506617\n", + " -1.851979\n", + " -0.914431\n", + " 1.743032\n", + " 1.116366\n", + " -13.010087\n", + " -15.719599\n", + " 21.180522\n", " \n", " \n", " X5\n", - " -0.392602\n", - " 0.733885\n", - " -1.607645\n", - " -0.424377\n", - " 1.842079\n", - " -0.606497\n", - " -0.358303\n", + " -1.973156\n", + " -3.164523\n", + " 1.875504\n", + " 6.247621\n", + " 3.328162\n", + " 6.663230\n", + " -10.050651\n", " \n", " \n", " X6\n", - " 2.008894\n", - " 0.529407\n", - " 0.865689\n", - " -4.072759\n", - " -2.078219\n", - " 1.006678\n", - " 2.418692\n", + " 3.300529\n", + " -1.165738\n", + " -4.143743\n", + " -7.414054\n", + " -3.475812\n", + " 69.419338\n", + " 2.432008\n", " \n", " \n", " Const\n", - " -8.490278\n", - " -2.546424\n", - " -20.097006\n", - " -17.957060\n", - " -3.547085\n", - " -3.577515\n", - " -3.450540\n", + " -6.656663\n", + " -4.606433\n", + " -3.962780\n", + " -16.111413\n", + " -29.617907\n", + " -216.567018\n", + " -146.680111\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 1 2 3 4 5 6 7\n", - "X1 -1.026588 -2.062817 8.561871 7.236414 -0.792322 -0.986318 -2.473676\n", - "X2 4.306452 -2.095721 5.390990 7.118680 -2.067911 -1.219684 -1.212971\n", - "X3 -1.263980 -1.504646 4.167192 6.545363 -1.605919 0.747939 -1.679540\n", - "X4 -1.885891 -0.612939 5.537484 6.120972 1.984119 -2.603297 -3.506617\n", - "X5 -0.392602 0.733885 -1.607645 -0.424377 1.842079 -0.606497 -0.358303\n", - "X6 2.008894 0.529407 0.865689 -4.072759 -2.078219 1.006678 2.418692\n", - "Const -8.490278 -2.546424 -20.097006 -17.957060 -3.547085 -3.577515 -3.450540" + " 1 2 3 4 5 6 \\\n", + "X1 -3.771640 -2.857112 -3.319760 7.084028 16.643087 25.314092 \n", + "X2 -6.063287 -2.536821 -6.090944 10.678588 -12.177667 -15.673274 \n", + "X3 4.937764 -3.905883 0.357235 0.196979 7.971863 7.845312 \n", + "X4 -1.851979 -0.914431 1.743032 1.116366 -13.010087 -15.719599 \n", + "X5 -1.973156 -3.164523 1.875504 6.247621 3.328162 6.663230 \n", + "X6 3.300529 -1.165738 -4.143743 -7.414054 -3.475812 69.419338 \n", + "Const -6.656663 -4.606433 -3.962780 -16.111413 -29.617907 -216.567018 \n", + "\n", + " 7 \n", + "X1 -12.520287 \n", + "X2 60.676258 \n", + "X3 -16.315901 \n", + "X4 21.180522 \n", + "X5 -10.050651 \n", + "X6 2.432008 \n", + "Const -146.680111 " ] }, "metadata": {}, @@ -1462,12 +1520,13 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 55, "id": "aee7756f", "metadata": {}, "outputs": [], "source": [ - "data_to_excel.to_excel(OUTPUT_PATH)" + "# Сохраняем в Excel без номеров строк (индексов)\n", + "data_to_excel.to_excel(OUTPUT_PATH, index=False)\n" ] } ], @@ -1487,7 +1546,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.9" + "version": "3.14.0" } }, "nbformat": 4, diff --git a/requirements.txt b/requirements.txt index d33543a..5d53e1e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ pandas scipy scikit-learn openpyxl +matplotlib \ No newline at end of file