From 481361b7e0801bc695b0c7cc9c3e7d1e23627d91 Mon Sep 17 00:00:00 2001 From: Svetlnkk <89974865+Svetlnkk@users.noreply.github.com> Date: Thu, 26 Oct 2023 11:27:02 +0400 Subject: [PATCH 1/2] lal --- zavrazhnova_svetlana_lab_6/fraud_dataset.csv | 87 +++++++++++++++++++ .../zavrazhnova_svetlana_lab_6.py | 84 ++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 zavrazhnova_svetlana_lab_6/fraud_dataset.csv create mode 100644 zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py diff --git a/zavrazhnova_svetlana_lab_6/fraud_dataset.csv b/zavrazhnova_svetlana_lab_6/fraud_dataset.csv new file mode 100644 index 0000000..f23b91d --- /dev/null +++ b/zavrazhnova_svetlana_lab_6/fraud_dataset.csv @@ -0,0 +1,87 @@ +transaction_id,transaction_amount,location,merchant,age,gender,fraud_label +1,1000.00,New York,ABC Corp,35,M,0 +2,500.00,Chicago,XYZ Inc,45,F,0 +3,2000.00,Los Angeles,ABC Corp,28,M,1 +4,1500.00,San Francisco,XYZ Inc,30,F,0 +5,800.00,Chicago,ABC Corp,50,F,0 +6,3000.00,New York,XYZ Inc,42,M,1 +7,1200.00,San Francisco,ABC Corp,55,F,0 +8,900.00,Los Angeles,XYZ Inc,37,M,0 +9,2500.00,Chicago,ABC Corp,33,F,1 +10,1800.00,New York,XYZ Inc,48,M,0 +11,750.00,San Francisco,ABC Corp,29,F,0 +12,2200.00,Chicago,XYZ Inc,51,M,0 +13,900.00,New York,ABC Corp,40,F,0 +14,1600.00,Los Angeles,XYZ Inc,26,M,0 +15,3000.00,San Francisco,ABC Corp,45,F,1 +16,1200.00,Chicago,XYZ Inc,34,M,0 +17,800.00,New York,ABC Corp,47,F,0 +18,1900.00,Los Angeles,XYZ Inc,32,M,0 +19,1100.00,San Francisco,ABC Corp,52,F,0 +20,4000.00,Chicago,XYZ Inc,38,M,1 +21,900.00,New York,ABC Corp,31,F,0 +22,1700.00,Los Angeles,XYZ Inc,49,M,0 +23,1000.00,San Francisco,ABC Corp,36,F,0 +24,2300.00,Chicago,XYZ Inc,27,M,1 +25,950.00,New York,ABC Corp,41,F,0 +26,1400.00,Los Angeles,XYZ Inc,54,M,0 +27,2800.00,San Francisco,ABC Corp,39,F,1 +28,1100.00,Chicago,XYZ Inc,44,M,0 +29,750.00,New York,ABC Corp,30,F,0 +30,2000.00,Los Angeles,XYZ Inc,46,M,0 +31,1250.00,San Francisco,ABC Corp,35,F,0 +32,2100.00,Chicago,XYZ Inc,43,M,0 +33,950.00,New York,ABC Corp,56,F,0 +34,1800.00,Los Angeles,XYZ Inc,29,M,0 +35,3200.00,San Francisco,ABC Corp,48,F,1 +36,1300.00,Chicago,XYZ Inc,37,M,0 +37,900.00,New York,ABC Corp,51,F,0 +38,2000.00,Los Angeles,XYZ Inc,33,M,0 +39,1050.00,San Francisco,ABC Corp,42,F,0 +40,2400.00,Chicago,XYZ Inc,26,M,0 +41,800.00,New York,ABC Corp,45,F,0 +42,1500.00,Los Angeles,XYZ Inc,31,M,0 +43,2800.00,San Francisco,ABC Corp,50,F,1 +44,1350.00,Chicago,XYZ Inc,28,M,0 +45,920.00,New York,ABC Corp,47,F,0 +46,2000.00,Los Angeles,XYZ Inc,36,M,0 +47,1125.00,San Francisco,ABC Corp,52,F,0 +48,1900.00,Chicago,XYZ Inc,38,M,1 +49,850.00,New York,ABC Corp,32,F,0 +50,1750.00,Los Angeles,XYZ Inc,49,M,0 +51,950.00,San Francisco,ABC Corp,27,F,0 +52,2300.00,Chicago,XYZ Inc,41,M,0 +53,850.00,New York,ABC Corp,54,F,0 +54,1600.00,Los Angeles,XYZ Inc,39,M,0 +55,3000.00,San Francisco,ABC Corp,46,F,1 +56,1250.00,Chicago,XYZ Inc,35,M,0 +57,800.00,New York,ABC Corp,56,F,0 +58,2200.00,Los Angeles,XYZ Inc,29,M,0 +59,1050.00,San Francisco,ABC Corp,48,F,0 +60,4000.00,Chicago,XYZ Inc,37,M,1 +61,950.00,New York,ABC Corp,30,F,0 +62,1700.00,Los Angeles,XYZ Inc,49,M,0 +63,1000.00,San Francisco,ABC Corp,36,F,0 +64,2800.00,Chicago,XYZ Inc,27,M,1 +65,900.00,New York,ABC Corp,41,F,0 +66,1400.00,Los Angeles,XYZ Inc,54,M,0 +67,3200.00,San Francisco,ABC Corp,39,F,1 +68,1100.00,Chicago,XYZ Inc,44,M,0 +69,750.00,New York,ABC Corp,30,F,0 +70,2000.00,Los Angeles,XYZ Inc,46,M,0 +71,1250.00,San Francisco,ABC Corp,35,F,0 +72,2100.00,Chicago,XYZ Inc,43,M,0 +73,950.00,New York,ABC Corp,56,F,0 +74,1800.00,Los Angeles,XYZ Inc,29,M,0 +75,3200.00,San Francisco,ABC Corp,48,F,1 +76,1300.00,Chicago,XYZ Inc,37,M,0 +77,900.00,New York,ABC Corp,51,F,0 +78,2000.00,Los Angeles,XYZ Inc,33,M,0 +79,1050.00,San Francisco,ABC Corp,42,F,0 +80,2400.00,Chicago,XYZ Inc,26,M,0 +81,800.00,New York,ABC Corp,45,F,0 +82,1500.00,Los Angeles,XYZ Inc,31,M,0 +83,2800.00,San Francisco,ABC Corp,50,F,1 +84,1350.00,Chicago,XYZ Inc,28,M,0 +85,920.00,New York,ABC Corp,47,F,0 +86,2000.00,Los Angeles,XYZ Inc,36,M,0 diff --git a/zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py b/zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py new file mode 100644 index 0000000..b59d937 --- /dev/null +++ b/zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py @@ -0,0 +1,84 @@ +# import pandas as pd +# from sklearn.neural_network import MLPClassifier +# from sklearn.preprocessing import OneHotEncoder +# +# # Загрузка данных из файла +# df = pd.read_csv('fraud_dataset.csv') +# +# # Разделение признаков и целевой переменной +# # В данном случае целевая переменная - fraud_label +# X = df[['transaction_amount', 'location', 'merchant', 'age', 'gender']] +# y = df['fraud_label'] +# +# X[['location', 'merchant', 'gender']] = X[['location', 'merchant', 'gender']].astype(str) +# +# # Преобразование категориальных признаков в числовые +# enc = OneHotEncoder() +# X_encoded = enc.fit_transform(X[['location', 'merchant', 'gender']]).toarray() +# +# # Объединение закодированных признаков с числовыми признаками +# X_final = pd.concat([X['transaction_amount'], pd.DataFrame(X_encoded), X['age']], axis=1) +# +# # Создание модели MLPClassifier +# model = MLPClassifier(hidden_layer_sizes=(100, 100)) # Можно настроить размеры и количество скрытых слоев +# +# # Обучение модели +# model.fit(X_final, y) +# +# # Предсказание для новых данных +# # Пример предсказания для новой транзакции +# new_transaction = pd.DataFrame([[2000.00, 'New York', 'ABC Corp', 35, 'M']], +# columns=['transaction_amount', 'location', 'merchant', 'age', 'gender']) +# new_transaction_encoded = enc.transform(new_transaction[['location', 'merchant', 'gender']]).toarray() +# new_transaction_final = pd.concat([new_transaction['transaction_amount'], +# pd.DataFrame(new_transaction_encoded), +# new_transaction['age']], axis=1) +# prediction = model.predict(new_transaction_final) +# +# # Вывод предсказания +# print(prediction) + +import pandas as pd +import numpy as np +from matplotlib import pyplot as plt +from sklearn import metrics +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPRegressor +from sklearn.preprocessing import LabelEncoder + +# Метод обучения нейронной сети +def reg_neural_net(): + df = pd.read_csv('fraud_dataset.csv') + x, y = [df.drop("fraud_label", axis=1).values, + df["fraud_label"].values] + encoder = LabelEncoder() + df['location'] = encoder.fit_transform(df['location']) # Преобразование категориального столбца "location" в числовой формат + + x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.001, random_state=42) + + mlp = MLPRegressor(hidden_layer_sizes=(100, 50), activation='tanh', solver='adam', random_state=15000) + mlp.fit(x_train, y_train) + y_predict = mlp.predict(x_test) + err = pred_errors(y_predict, y_test) + make_plots(y_test, y_predict, err[0], err[1], "Нейронная сеть") + + +# Метод рассчёта ошибок +def pred_errors(y_predict, y_test): + mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)),3) # Рассчёт среднеквадратичной ошибки модели + det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели + return mid_square, det_kp + + +# Метод отрисовки графиков +def make_plots(y_test, y_predict, mid_sqrt, det_kp, title): + plt.plot(y_test, c="red", label="\"y\" исходная") # Создание графика исходной функции + plt.plot(y_predict, c="green", label="\"y\" предсказанная \n" + "Ср^2 = " + str(mid_sqrt) + "\n" + "Кд = " + str(det_kp)) # Создание графика предсказанной функции + plt.legend(loc='lower left') + plt.title(title) + plt.savefig('static/' + title + '.png') + plt.close() + +reg_neural_net() \ No newline at end of file -- 2.25.1 From 25acce2c79f0a42bd4d861534c91d1a622b706fb Mon Sep 17 00:00:00 2001 From: Svetlnkk <89974865+Svetlnkk@users.noreply.github.com> Date: Fri, 27 Oct 2023 14:17:35 +0400 Subject: [PATCH 2/2] zavrazhnova_svetlana_lab_6 is ready --- zavrazhnova_svetlana_lab_6/README.md | 28 +++++ zavrazhnova_svetlana_lab_6/result.png | Bin 0 -> 16842 bytes .../zavrazhnova_svetlana_lab_6.py | 97 +++++------------- 3 files changed, 51 insertions(+), 74 deletions(-) create mode 100644 zavrazhnova_svetlana_lab_6/README.md create mode 100644 zavrazhnova_svetlana_lab_6/result.png diff --git a/zavrazhnova_svetlana_lab_6/README.md b/zavrazhnova_svetlana_lab_6/README.md new file mode 100644 index 0000000..67cc05d --- /dev/null +++ b/zavrazhnova_svetlana_lab_6/README.md @@ -0,0 +1,28 @@ +# Задание +Использовать нейронную сеть MLPClassifier для данных из файла `fraud_dataset.csv`, для задачи: Предсказать, является ли транзакция мошеннической или нет на основе имеющихся данных. +### Как запустить лабораторную работу: +ЛР запускается в файле zavrazhnova_svetlana_lab_6.py через Run, а затем в консоли должны появится вычисления + +### Технологии +Библиотека sklearn.neuralnetwork содержит реализацию MLP (Multilayer Perceptron) - это алгоритм искусственного нейронного сети для классификации и регрессии. +Классификатор MLPClassifier является реализацией многослойного перцептрона для задач классификации. + +Библиотека sklearn.metrics содержит различные метрики для оценки качества моделей машинного обучения. В данном случае, используются следующие метрики: +- accuracyscore - точность модели, которая показывает долю правильно классифицированных объектов. +- confusionmatrix - матрица ошибок, которая показывает количество правильно и неправильно классифицированных объектов для каждого класса. +- classificationreport - отчет о классификации, который содержит информацию о точности, полноте, F1-мере и поддержке для каждого класса. + +### Что делает лабораторная: +Создает и обучает модель нейронной сети с помощью MLPClassifier. Оценивает точность модели с помощью функции accuracy_score(). Строит матрицу ошибок и выводит отчет о классификации + +### Пример выходных значений: +![result.png](result.png) + +### Вывод +Модель MLPClassifier, обученная на данных из файла fraud_dataset.csv, показывает высокую точность в предсказании мошеннических и не мошеннических транзакций. +Об этом говорят результаты вычислений: +- Accuracy: 1.0 - это показатель точности модели, который равен 1.0, что означает 100% точность модели в предсказании мошеннических и не мошеннических транзакций на тестовой выборке. + +- Confusion Matrix: матрица ошибок, показывающая количество верно и неверно классифицированных транзакций. В данном случае, видим, что все 17 не мошеннических транзакций были правильно предсказаны, а одна мошенническая транзакция была неправильно предсказана. + +- Classification Report: отчет о классификации, который содержит информацию о точности, полноте (recall), F1-мере и поддержке (support) для каждого класса. Из отчета видно, что как для класса 0 (не мошенническая транзакция), так и для класса 1 (мошенническая транзакция), точность, полнота и F1-мера равны 1.0, что говорит о идеальной предсказательной способности модели для обоих классов. Поддержка указывает на количество образцов в каждом классе в тестовой выборке. \ No newline at end of file diff --git a/zavrazhnova_svetlana_lab_6/result.png b/zavrazhnova_svetlana_lab_6/result.png new file mode 100644 index 0000000000000000000000000000000000000000..a587af82eda5b9b3b54f1fa6664f7588ed7b58f4 GIT binary patch literal 16842 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 literal 0 HcmV?d00001 diff --git a/zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py b/zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py index b59d937..c95d737 100644 --- a/zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py +++ b/zavrazhnova_svetlana_lab_6/zavrazhnova_svetlana_lab_6.py @@ -1,84 +1,33 @@ -# import pandas as pd -# from sklearn.neural_network import MLPClassifier -# from sklearn.preprocessing import OneHotEncoder -# -# # Загрузка данных из файла -# df = pd.read_csv('fraud_dataset.csv') -# -# # Разделение признаков и целевой переменной -# # В данном случае целевая переменная - fraud_label -# X = df[['transaction_amount', 'location', 'merchant', 'age', 'gender']] -# y = df['fraud_label'] -# -# X[['location', 'merchant', 'gender']] = X[['location', 'merchant', 'gender']].astype(str) -# -# # Преобразование категориальных признаков в числовые -# enc = OneHotEncoder() -# X_encoded = enc.fit_transform(X[['location', 'merchant', 'gender']]).toarray() -# -# # Объединение закодированных признаков с числовыми признаками -# X_final = pd.concat([X['transaction_amount'], pd.DataFrame(X_encoded), X['age']], axis=1) -# -# # Создание модели MLPClassifier -# model = MLPClassifier(hidden_layer_sizes=(100, 100)) # Можно настроить размеры и количество скрытых слоев -# -# # Обучение модели -# model.fit(X_final, y) -# -# # Предсказание для новых данных -# # Пример предсказания для новой транзакции -# new_transaction = pd.DataFrame([[2000.00, 'New York', 'ABC Corp', 35, 'M']], -# columns=['transaction_amount', 'location', 'merchant', 'age', 'gender']) -# new_transaction_encoded = enc.transform(new_transaction[['location', 'merchant', 'gender']]).toarray() -# new_transaction_final = pd.concat([new_transaction['transaction_amount'], -# pd.DataFrame(new_transaction_encoded), -# new_transaction['age']], axis=1) -# prediction = model.predict(new_transaction_final) -# -# # Вывод предсказания -# print(prediction) - import pandas as pd -import numpy as np -from matplotlib import pyplot as plt -from sklearn import metrics from sklearn.model_selection import train_test_split -from sklearn.neural_network import MLPRegressor -from sklearn.preprocessing import LabelEncoder +from sklearn.neural_network import MLPClassifier +from sklearn.metrics import accuracy_score, confusion_matrix, classification_report -# Метод обучения нейронной сети -def reg_neural_net(): - df = pd.read_csv('fraud_dataset.csv') - x, y = [df.drop("fraud_label", axis=1).values, - df["fraud_label"].values] - encoder = LabelEncoder() - df['location'] = encoder.fit_transform(df['location']) # Преобразование категориального столбца "location" в числовой формат +data = pd.read_csv('fraud_dataset.csv') - x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.001, random_state=42) +X = data[['transaction_amount', 'location', 'merchant', 'age', 'gender']] +y = data['fraud_label'] - mlp = MLPRegressor(hidden_layer_sizes=(100, 50), activation='tanh', solver='adam', random_state=15000) - mlp.fit(x_train, y_train) - y_predict = mlp.predict(x_test) - err = pred_errors(y_predict, y_test) - make_plots(y_test, y_predict, err[0], err[1], "Нейронная сеть") +# Преобразование категориальных переменных в числовые +X = pd.get_dummies(X, columns=['location', 'merchant', 'gender']) +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) -# Метод рассчёта ошибок -def pred_errors(y_predict, y_test): - mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)),3) # Рассчёт среднеквадратичной ошибки модели - det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели - return mid_square, det_kp +# Обучение модели нейронной сети +model = MLPClassifier(random_state=1, max_iter=2000, n_iter_no_change=20, + alpha=0.001, hidden_layer_sizes=[1280], tol=0.0000001) +model.fit(X_train, y_train) +# Предсказание на тестовой выборке +y_pred = model.predict(X_test) -# Метод отрисовки графиков -def make_plots(y_test, y_predict, mid_sqrt, det_kp, title): - plt.plot(y_test, c="red", label="\"y\" исходная") # Создание графика исходной функции - plt.plot(y_predict, c="green", label="\"y\" предсказанная \n" - "Ср^2 = " + str(mid_sqrt) + "\n" - "Кд = " + str(det_kp)) # Создание графика предсказанной функции - plt.legend(loc='lower left') - plt.title(title) - plt.savefig('static/' + title + '.png') - plt.close() +# Оценка качества модели +accuracy = accuracy_score(y_test, y_pred) +confusion = confusion_matrix(y_test, y_pred) +report = classification_report(y_test, y_pred) -reg_neural_net() \ No newline at end of file +print("Accuracy:", accuracy) +print("Confusion Matrix:") +print(confusion) +print("Classification Report:") +print(report) \ No newline at end of file -- 2.25.1