diff --git a/.gitignore b/.gitignore index 8ec79ac..8faa802 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/ x64/ +answer.txt \ No newline at end of file diff --git a/README.txt b/README.txt index b79bfaf..39c2b05 100644 --- a/README.txt +++ b/README.txt @@ -1,10 +1,12 @@ # TitanicAI -Эта неросеть предсказывает смерть пасажиров Титаника с вероятностью 0.76 +Эта неросеть предсказывает смерть пасажиров Титаника с точностью 0.67 В файле train.txt находится ассет для обучет +В файле test.txt находится ассет для одемонстрации -В файле TitanicAI.cpp константа count_train_items указыает на количество ассетов для обучения. Остальные пойдут на тесты. -Скорость обучения решулируется во втором параметре конструктора +Скорость/Точность обучения решулируется во втором параметре конструктора Вектора в ассете: Survived|Pclass|Sex|Age|Relatives|Fare|Embarked + +Задача и ассеты отсюда https://www.kaggle.com/competitions/titanic/ \ No newline at end of file diff --git a/TitanicAI.cpp b/TitanicAI.cpp index 33beea0..ac26b89 100644 --- a/TitanicAI.cpp +++ b/TitanicAI.cpp @@ -16,7 +16,7 @@ protected: } public: - TitanicAI() : NeuronsNetworkBase(count_neurons, 0.01) + TitanicAI() : NeuronsNetworkBase(count_neurons, 0.0000001) {} double call(const data_item& data) override @@ -48,61 +48,59 @@ public: } }; -constexpr size_t count_train_items = 700; -std::vector train_data; +void test(TitanicAI& ai) +{ + std::ifstream file("test.txt"); + std::vector test_data; + + data_item item; + while (file >> item[0] >> item[1] >> item[2] >> item[3] >> item[4] >> item[5] >> item[6]) + { + test_data.push_back(item); + } + + std::ofstream answer("answer.txt"); + + answer << "PassengerId,Survived\n"; + for (auto& i : test_data) + { + answer << static_cast(i[0]) << ',' << (ai.call(i) > 0.5) << '\n'; + } +} int main(int argc, char* argv[]) { TitanicAI ai; std::ifstream file("train.txt"); - while (file.eof() == false) + std::vector train_data; + data_item item; + while (file >> item[0] >> item[1] >> item[2] >> item[3] >> item[4] >> item[5] >> item[6]) { - data_item item{}; - - std::string vec; - file >> vec; - if (vec.empty() == false) - item[0] = std::stod(vec); - file >> vec; - if (vec.empty() == false) - item[1] = std::stod(vec); - file >> vec; - if (vec.empty() == false) - item[2] = std::stod(vec); - file >> vec; - if (vec.empty() == false) - item[3] = std::stod(vec); - file >> vec; - if (vec.empty() == false) - item[4] = std::stod(vec); - file >> vec; - if (vec.empty() == false) - item[5] = std::stod(vec); - if (vec.empty() == false) - item[6] = std::stod(vec); - train_data.push_back(item); } + file.close(); - for (size_t i = 0; i < count_train_items; ++i) + for (auto& i : train_data) { - ai.train(train_data[i][0] - ai.call(train_data[i]), train_data[i]); + ai.train(i[0] - ai.call(i), i); } size_t score = 0; - const size_t max_score = train_data.size() - count_train_items; - constexpr double delta = 0.001; - for (size_t i = count_train_items + 1; i < train_data.size(); ++i) + const size_t max_score = train_data.size(); + for (auto& i : train_data) { - double activate_result = ai.call(train_data[i]); + constexpr double delta = 0.001; + double activate_result = ai.call(i); bool is_dead = activate_result + delta > 0.5; - if (is_dead == static_cast(train_data[i][0])) + if (is_dead == static_cast(i[0])) ++score; } std::cout << "Accuracy: " << score << '/' << max_score << " (float: " << (static_cast(score) / static_cast(max_score)) << ")\n"; std::cout << "Masses: "; ai.print_masses(); + test(ai); + return 0; } diff --git a/TitanicAI.sln.DotSettings.user b/TitanicAI.sln.DotSettings.user new file mode 100644 index 0000000..c7b6416 --- /dev/null +++ b/TitanicAI.sln.DotSettings.user @@ -0,0 +1,2 @@ + + ForceIncluded \ No newline at end of file diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..725e786 --- /dev/null +++ b/test.txt @@ -0,0 +1,418 @@ +892 3 1 34.5 0 7.8292 3 +893 3 0 47 1 7 2 +894 2 1 62 0 9.6875 3 +895 3 1 27 0 8.6625 2 +896 3 0 22 2 12.2875 2 +897 3 1 14 0 9.225 2 +898 3 0 30 0 7.6292 3 +899 2 1 26 2 29 2 +900 3 0 18 0 7.2292 1 +901 3 1 21 2 24.15 2 +902 3 1 28 0 7.8958 2 +903 1 1 46 0 26 2 +904 1 0 23 1 82.2667 2 +905 2 1 63 1 26 2 +906 1 0 47 1 61.175 2 +907 2 0 24 1 27.7208 1 +908 2 1 35 0 12.35 3 +909 3 1 21 0 7.225 1 +910 3 0 27 1 7.925 2 +911 3 0 45 0 7.225 1 +912 1 1 55 1 59.4 1 +913 3 1 9 1 3.1708 2 +914 1 0 28 0 31.6833 2 +915 1 1 21 1 61.3792 1 +916 1 0 48 4 262.375 1 +917 3 1 50 1 14.5 2 +918 1 0 22 1 61.9792 1 +919 3 1 22.5 0 7.225 1 +920 1 1 41 0 30.5 2 +921 3 1 28 2 21.6792 1 +922 2 1 50 1 26 2 +923 2 1 24 2 31.5 2 +924 3 0 33 3 20.575 2 +925 3 0 28 3 23.45 2 +926 1 1 30 1 57.75 1 +927 3 1 18.5 0 7.2292 1 +928 3 0 28 0 8.05 2 +929 3 0 21 0 8.6625 2 +930 3 1 25 0 9.5 2 +931 3 1 28 0 56.4958 2 +932 3 1 39 1 13.4167 1 +933 1 1 28 0 26.55 2 +934 3 1 41 0 7.85 2 +935 2 0 30 0 13 2 +936 1 0 45 1 52.5542 2 +937 3 1 25 0 7.925 2 +938 1 1 45 0 29.7 1 +939 3 1 28 0 7.75 3 +940 1 0 60 0 76.2917 1 +941 3 0 36 2 15.9 2 +942 1 1 24 1 60 2 +943 2 1 27 0 15.0333 1 +944 2 0 20 3 23 2 +945 1 0 28 5 263 2 +946 2 1 28 0 15.5792 1 +947 3 1 10 5 29.125 3 +948 3 1 35 0 7.8958 2 +949 3 1 25 0 7.65 2 +950 3 1 28 1 16.1 2 +951 1 0 36 0 262.375 1 +952 3 1 17 0 7.8958 2 +953 2 1 32 0 13.5 2 +954 3 1 18 0 7.75 2 +955 3 0 22 0 7.725 3 +956 1 1 13 4 262.375 1 +957 2 0 28 0 21 2 +958 3 0 18 0 7.8792 3 +959 1 1 47 0 42.4 2 +960 1 1 31 0 28.5375 1 +961 1 0 60 5 263 2 +962 3 0 24 0 7.75 3 +963 3 1 21 0 7.8958 2 +964 3 0 29 0 7.925 2 +965 1 1 28.5 0 27.7208 1 +966 1 0 35 0 211.5 1 +967 1 1 32.5 0 211.5 1 +968 3 1 28 0 8.05 2 +969 1 0 55 2 25.7 2 +970 2 1 30 0 13 2 +971 3 0 24 0 7.75 3 +972 3 1 6 2 15.2458 1 +973 1 1 67 1 221.7792 2 +974 1 1 49 0 26 2 +975 3 1 28 0 7.8958 2 +976 2 1 28 0 10.7083 3 +977 3 1 28 1 14.4542 1 +978 3 0 27 0 7.8792 3 +979 3 0 18 0 8.05 2 +980 3 0 28 0 7.75 3 +981 2 1 2 2 23 2 +982 3 0 22 1 13.9 2 +983 3 1 28 0 7.775 2 +984 1 0 27 3 52 2 +985 3 1 28 0 8.05 2 +986 1 1 25 0 26 1 +987 3 1 25 0 7.7958 2 +988 1 0 76 1 78.85 2 +989 3 1 29 0 7.925 2 +990 3 0 20 0 7.8542 2 +991 3 1 33 0 8.05 2 +992 1 0 43 1 55.4417 1 +993 2 1 27 1 26 2 +994 3 1 28 0 7.75 3 +995 3 1 26 0 7.775 2 +996 3 0 16 2 8.5167 1 +997 3 1 28 0 22.525 2 +998 3 1 21 0 7.8208 3 +999 3 1 28 0 7.75 3 +1000 3 1 28 0 8.7125 2 +1001 2 1 18.5 0 13 2 +1002 2 1 41 0 15.0458 1 +1003 3 0 28 0 7.7792 3 +1004 1 0 36 0 31.6792 1 +1005 3 0 18.5 0 7.2833 3 +1006 1 0 63 1 221.7792 2 +1007 3 1 18 1 14.4542 1 +1008 3 1 28 0 6.4375 1 +1009 3 0 1 2 16.7 2 +1010 1 1 36 0 75.2417 1 +1011 2 0 29 1 26 2 +1012 2 0 12 0 15.75 2 +1013 3 1 28 1 7.75 3 +1014 1 0 35 1 57.75 1 +1015 3 1 28 0 7.25 2 +1016 3 1 28 0 7.75 3 +1017 3 0 17 1 16.1 2 +1018 3 1 22 0 7.7958 2 +1019 3 0 28 2 23.25 3 +1020 2 1 42 0 13 2 +1021 3 1 24 0 8.05 2 +1022 3 1 32 0 8.05 2 +1023 1 1 53 0 28.5 1 +1024 3 0 28 4 25.4667 2 +1025 3 1 28 1 6.4375 1 +1026 3 1 43 0 7.8958 2 +1027 3 1 24 0 7.8542 2 +1028 3 1 26.5 0 7.225 1 +1029 2 1 26 0 13 2 +1030 3 0 23 0 8.05 2 +1031 3 1 40 7 46.9 2 +1032 3 0 10 7 46.9 2 +1033 1 0 33 0 151.55 2 +1034 1 1 61 4 262.375 1 +1035 2 1 28 0 26 2 +1036 1 1 42 0 26.55 2 +1037 3 1 31 3 18 2 +1038 1 1 28 0 51.8625 2 +1039 3 1 22 0 8.05 2 +1040 1 1 28 0 26.55 2 +1041 2 1 30 2 26 2 +1042 1 0 23 1 83.1583 1 +1043 3 1 28 0 7.8958 1 +1044 3 1 60.5 0 51 2 +1045 3 0 36 2 12.1833 2 +1046 3 1 13 6 31.3875 2 +1047 3 1 24 0 7.55 2 +1048 1 0 29 0 221.7792 2 +1049 3 0 23 0 7.8542 2 +1050 1 1 42 0 26.55 2 +1051 3 0 26 2 13.775 2 +1052 3 0 28 0 7.7333 3 +1053 3 1 7 2 15.2458 1 +1054 2 0 26 0 13.5 2 +1055 3 1 28 0 7 2 +1056 2 1 41 0 13 2 +1057 3 0 26 2 22.025 2 +1058 1 1 48 0 50.4958 1 +1059 3 1 18 4 34.375 2 +1060 1 0 28 0 27.7208 1 +1061 3 0 22 0 8.9625 2 +1062 3 1 28 0 7.55 2 +1063 3 1 27 0 7.225 1 +1064 3 1 23 1 13.9 2 +1065 3 1 28 0 7.2292 1 +1066 3 1 40 6 31.3875 2 +1067 2 0 15 2 39 2 +1068 2 0 20 0 36.75 2 +1069 1 1 54 1 55.4417 1 +1070 2 0 36 3 39 2 +1071 1 0 64 2 83.1583 1 +1072 2 1 30 0 13 2 +1073 1 1 37 2 83.1583 1 +1074 1 0 18 1 53.1 2 +1075 3 1 28 0 7.75 3 +1076 1 0 27 2 247.5208 1 +1077 2 1 40 0 16 2 +1078 2 0 21 1 21 2 +1079 3 1 17 2 8.05 2 +1080 3 0 28 10 69.55 2 +1081 2 1 40 0 13 2 +1082 2 1 34 1 26 2 +1083 1 1 28 0 26 2 +1084 3 1 11.5 2 14.5 2 +1085 2 1 61 0 12.35 3 +1086 2 1 8 2 32.5 2 +1087 3 1 33 0 7.8542 2 +1088 1 1 6 2 134.5 1 +1089 3 0 18 0 7.775 2 +1090 2 1 23 0 10.5 2 +1091 3 0 28 0 8.1125 2 +1092 3 0 28 0 15.5 3 +1093 3 1 0.33 2 14.4 2 +1094 1 1 47 1 227.525 1 +1095 2 0 8 2 26 2 +1096 2 1 25 0 10.5 2 +1097 1 1 28 0 25.7417 1 +1098 3 0 35 0 7.75 3 +1099 2 1 24 0 10.5 2 +1100 1 0 33 0 27.7208 1 +1101 3 1 25 0 7.8958 2 +1102 3 1 32 0 22.525 2 +1103 3 1 28 0 7.05 2 +1104 2 1 17 0 73.5 2 +1105 2 0 60 1 26 2 +1106 3 0 38 6 7.775 2 +1107 1 1 42 0 42.5 2 +1108 3 0 28 0 7.8792 3 +1109 1 1 57 2 164.8667 2 +1110 1 0 50 2 211.5 1 +1111 3 1 28 0 8.05 2 +1112 2 0 30 1 13.8583 1 +1113 3 1 21 0 8.05 2 +1114 2 0 22 0 10.5 2 +1115 3 1 21 0 7.7958 2 +1116 1 0 53 0 27.4458 1 +1117 3 0 28 2 15.2458 1 +1118 3 1 23 0 7.7958 2 +1119 3 0 28 0 7.75 3 +1120 3 1 40.5 0 15.1 2 +1121 2 1 36 0 13 2 +1122 2 1 14 0 65 2 +1123 1 0 21 0 26.55 2 +1124 3 1 21 1 6.4958 2 +1125 3 1 28 0 7.8792 3 +1126 1 1 39 1 71.2833 1 +1127 3 1 20 0 7.8542 2 +1128 1 1 64 1 75.25 1 +1129 3 1 20 0 7.225 1 +1130 2 0 18 2 13 2 +1131 1 0 48 1 106.425 1 +1132 1 0 55 0 27.7208 1 +1133 2 0 45 2 30 2 +1134 1 1 45 2 134.5 1 +1135 3 1 28 0 7.8875 2 +1136 3 1 28 3 23.45 2 +1137 1 1 41 1 51.8625 2 +1138 2 0 22 0 21 2 +1139 2 1 42 2 32.5 2 +1140 2 0 29 1 26 2 +1141 3 0 28 1 14.4542 1 +1142 2 0 0.92 3 27.75 2 +1143 3 1 20 0 7.925 2 +1144 1 1 27 1 136.7792 1 +1145 3 1 24 0 9.325 2 +1146 3 1 32.5 0 9.5 2 +1147 3 1 28 0 7.55 2 +1148 3 1 28 0 7.75 3 +1149 3 1 28 0 8.05 2 +1150 2 0 19 0 13 2 +1151 3 1 21 0 7.775 2 +1152 3 1 36.5 1 17.4 2 +1153 3 1 21 0 7.8542 2 +1154 2 0 29 2 23 2 +1155 3 0 1 2 12.1833 2 +1156 2 1 30 0 12.7375 1 +1157 3 1 28 0 7.8958 2 +1158 1 1 28 0 0 2 +1159 3 1 28 0 7.55 2 +1160 3 0 28 0 8.05 2 +1161 3 1 17 0 8.6625 2 +1162 1 1 46 0 75.2417 1 +1163 3 1 28 0 7.75 3 +1164 1 0 26 1 136.7792 1 +1165 3 0 28 1 15.5 3 +1166 3 1 28 0 7.225 1 +1167 2 0 20 1 26 2 +1168 2 1 28 0 10.5 2 +1169 2 1 40 1 26 2 +1170 2 1 30 1 21 2 +1171 2 1 22 0 10.5 2 +1172 3 0 23 0 8.6625 2 +1173 3 1 0.75 2 13.775 2 +1174 3 0 28 0 7.75 3 +1175 3 0 9 2 15.2458 1 +1176 3 0 2 2 20.2125 2 +1177 3 1 36 0 7.25 2 +1178 3 1 28 0 7.25 2 +1179 1 1 24 1 82.2667 2 +1180 3 1 28 0 7.2292 1 +1181 3 1 28 0 8.05 2 +1182 1 1 28 0 39.6 2 +1183 3 0 30 0 6.95 3 +1184 3 1 28 0 7.2292 1 +1185 1 1 53 2 81.8583 2 +1186 3 1 36 0 9.5 2 +1187 3 1 26 0 7.8958 2 +1188 2 0 1 3 41.5792 1 +1189 3 1 28 2 21.6792 1 +1190 1 1 30 0 45.5 2 +1191 3 1 29 0 7.8542 2 +1192 3 1 32 0 7.775 2 +1193 2 1 28 0 15.0458 1 +1194 2 1 43 1 21 2 +1195 3 1 24 0 8.6625 2 +1196 3 0 28 0 7.75 3 +1197 1 0 64 2 26.55 2 +1198 1 1 30 3 151.55 2 +1199 3 1 0.83 1 9.35 2 +1200 1 1 55 2 93.5 2 +1201 3 0 45 1 14.1083 2 +1202 3 1 18 0 8.6625 2 +1203 3 1 22 0 7.225 1 +1204 3 1 28 0 7.575 2 +1205 3 0 37 0 7.75 3 +1206 1 0 55 0 135.6333 1 +1207 3 0 17 0 7.7333 3 +1208 1 1 57 1 146.5208 1 +1209 2 1 19 0 10.5 2 +1210 3 1 27 0 7.8542 2 +1211 2 1 22 2 31.5 2 +1212 3 1 26 0 7.775 2 +1213 3 1 25 0 7.2292 1 +1214 2 1 26 0 13 2 +1215 1 1 33 0 26.55 2 +1216 1 0 39 0 211.3375 2 +1217 3 1 23 0 7.05 2 +1218 2 0 12 3 39 2 +1219 1 1 46 0 79.2 1 +1220 2 1 29 1 26 2 +1221 2 1 21 0 13 2 +1222 2 0 48 2 36.75 2 +1223 1 1 39 0 29.7 1 +1224 3 1 28 0 7.225 1 +1225 3 0 19 2 15.7417 1 +1226 3 1 27 0 7.8958 2 +1227 1 1 30 0 26 2 +1228 2 1 32 0 13 2 +1229 3 1 39 2 7.2292 1 +1230 2 1 25 0 31.5 2 +1231 3 1 28 0 7.2292 1 +1232 2 1 18 0 10.5 2 +1233 3 1 32 0 7.5792 2 +1234 3 1 28 10 69.55 2 +1235 1 0 58 1 512.3292 1 +1236 3 1 28 2 14.5 2 +1237 3 0 16 0 7.65 2 +1238 2 1 26 0 13 2 +1239 3 0 38 0 7.2292 1 +1240 2 1 24 0 13.5 2 +1241 2 0 31 0 21 2 +1242 1 0 45 1 63.3583 1 +1243 2 1 25 0 10.5 2 +1244 2 1 18 0 73.5 2 +1245 2 1 49 3 65 2 +1246 3 0 0.17 3 20.575 2 +1247 1 1 50 0 26 2 +1248 1 0 59 2 51.4792 2 +1249 3 1 28 0 7.8792 2 +1250 3 1 28 0 7.75 3 +1251 3 0 30 1 15.55 2 +1252 3 1 14.5 10 69.55 2 +1253 2 0 24 2 37.0042 1 +1254 2 0 31 0 21 2 +1255 3 1 27 0 8.6625 2 +1256 1 0 25 1 55.4417 1 +1257 3 0 28 10 69.55 2 +1258 3 1 28 1 14.4583 1 +1259 3 0 22 0 39.6875 2 +1260 1 0 45 1 59.4 1 +1261 2 1 29 0 13.8583 1 +1262 2 1 21 1 11.5 2 +1263 1 0 31 0 134.5 1 +1264 1 1 49 0 0 2 +1265 2 1 44 0 13 2 +1266 1 0 54 2 81.8583 2 +1267 1 0 45 0 262.375 1 +1268 3 0 22 2 8.6625 2 +1269 2 1 21 0 11.5 2 +1270 1 1 55 0 50 2 +1271 3 1 5 6 31.3875 2 +1272 3 1 28 0 7.75 3 +1273 3 1 26 0 7.8792 3 +1274 3 0 28 0 14.5 2 +1275 3 0 19 1 16.1 2 +1276 2 1 28 0 12.875 2 +1277 2 0 24 3 65 2 +1278 3 1 24 0 7.775 2 +1279 2 1 57 0 13 2 +1280 3 1 21 0 7.75 3 +1281 3 1 6 4 21.075 2 +1282 1 1 23 0 93.5 2 +1283 1 0 51 1 39.4 2 +1284 3 1 13 2 20.25 2 +1285 2 1 47 0 10.5 2 +1286 3 1 29 4 22.025 2 +1287 1 0 18 1 60 2 +1288 3 1 24 0 7.25 3 +1289 1 0 48 2 79.2 1 +1290 3 1 22 0 7.775 2 +1291 3 1 31 0 7.7333 3 +1292 1 0 30 0 164.8667 2 +1293 2 1 38 1 21 2 +1294 1 0 22 1 59.4 1 +1295 1 1 17 0 47.1 2 +1296 1 1 43 1 27.7208 1 +1297 2 1 20 0 13.8625 1 +1298 2 1 23 1 10.5 2 +1299 1 1 50 2 211.5 1 +1300 3 0 28 0 7.7208 3 +1301 3 0 3 2 13.775 2 +1302 3 0 28 0 7.75 3 +1303 1 0 37 1 90 3 +1304 3 0 28 0 7.775 2 +1305 3 1 28 0 8.05 2 +1306 1 0 39 0 108.9 1 +1307 3 1 38.5 0 7.25 2 +1308 3 1 28 0 8.05 2 +1309 3 1 28 2 22.3583 1 diff --git a/test.xlsx b/test.xlsx new file mode 100644 index 0000000..eadfd74 Binary files /dev/null and b/test.xlsx differ