diff --git a/senkin_alexander_lab_3/senkin_alexander_lab_3.py b/senkin_alexander_lab_3/senkin_alexander_lab_3.py index e1fa53a..27e98bb 100644 --- a/senkin_alexander_lab_3/senkin_alexander_lab_3.py +++ b/senkin_alexander_lab_3/senkin_alexander_lab_3.py @@ -4,10 +4,101 @@ from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +from sklearn.ensemble import RandomForestClassifier +from sklearn.metrics import accuracy_score, classification_report, confusion_matrix +from sklearn.linear_model import LogisticRegression +from sklearn.tree import DecisionTreeClassifier +import matplotlib.pyplot as plt +import seaborn as sns -# Загрузка данных из csv-файла +# Загрузите данные data = pd.read_csv('us_tornado_dataset_1950_2021.csv') +# Преобразуйте магнитуду в бинарный признак (сильные и не сильные торнадо) +data['mag_class'] = data['mag'].apply(lambda x: 1 if x >= 3 else 0) + +# Выделите признаки для обучения +features = data[['yr', 'mag', 'fat']] + +# Выделите целевую переменную +target = data['mag_class'] + +X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42) + +# Инициализируйте и обучите классификатор (в данном случае, Random Forest) +clf = RandomForestClassifier(random_state=42) +clf.fit(X_train, y_train) + +# Сделайте предсказания на тестовом наборе +predictions = clf.predict(X_test) + +# Оцените результаты классификации +accuracy = accuracy_score(y_test, predictions) +conf_matrix = confusion_matrix(y_test, predictions) + +print("Rendom tree:") +print("Accuracy:", accuracy) +print("\nConfusion Matrix:\n", conf_matrix) +print("\nClassification Report:\n", classification_report(y_test, predictions)) + +# Визуализация матрицы ошибок +plt.figure(figsize=(8, 6)) +sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['Not Strong', 'Strong'], yticklabels=['Not Strong', 'Strong']) +plt.title('Confusion Matrix') +plt.xlabel('Predicted') +plt.ylabel('Actual') +plt.show() + +# Инициализируйте и обучите дерево решений +dt_clf = DecisionTreeClassifier(random_state=42) +dt_clf.fit(X_train, y_train) + +# Сделайте предсказания на тестовом наборе с деревом решений +dt_predictions = dt_clf.predict(X_test) + +# Оцените результаты классификации для дерева решений +dt_accuracy = accuracy_score(y_test, dt_predictions) +dt_conf_matrix = confusion_matrix(y_test, dt_predictions) + +print("Decision Tree Classifier:") +print("Accuracy:", dt_accuracy) +print("\nConfusion Matrix:\n", dt_conf_matrix) +print("\nClassification Report:\n", classification_report(y_test, dt_predictions)) + +# Визуализация матрицы ошибок для дерева решений +plt.figure(figsize=(8, 6)) +sns.heatmap(dt_conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['Not Strong', 'Strong'], yticklabels=['Not Strong', 'Strong']) +plt.title('Decision Tree Confusion Matrix') +plt.xlabel('Predicted') +plt.ylabel('Actual') +plt.show() + +# Инициализируйте и обучите линейную регрессию +lr_clf = LogisticRegression(random_state=42) +lr_clf.fit(X_train, y_train) + +# Сделайте предсказания на тестовом наборе с линейной регрессией +lr_predictions = lr_clf.predict(X_test) + +# Оцените результаты классификации для линейной регрессии +lr_accuracy = accuracy_score(y_test, lr_predictions) +lr_conf_matrix = confusion_matrix(y_test, lr_predictions) + +print("\nLinear Regression Classifier:") +print("Accuracy:", lr_accuracy) +print("\nConfusion Matrix:\n", lr_conf_matrix) +print("\nClassification Report:\n", classification_report(y_test, lr_predictions)) + +# Визуализация матрицы ошибок для линейной регрессии +plt.figure(figsize=(8, 6)) +sns.heatmap(lr_conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['Not Strong', 'Strong'], yticklabels=['Not Strong', 'Strong']) +plt.title('Linear Regression Confusion Matrix') +plt.xlabel('Predicted') +plt.ylabel('Actual') +plt.show() + + # Разделение данных на признаки (X) и целевую переменную (y) X = data[['yr', 'mag', 'fat']] @@ -47,11 +138,48 @@ coef_df = pd.DataFrame({'Признак': X.columns, 'Коэффициент': c coef_df['Абсолютный_Коэффициент'] = coef_df['Коэффициент'].abs() coef_df = coef_df.sort_values(by='Абсолютный_Коэффициент', ascending=False) +# Решение с помощью случайного леса (Random Forest) +rf_model = RandomForestRegressor(random_state=42) +rf_model.fit(X_train, y_train) +test_score3 = rf_model.score(X_test, y_test) +# Получение важности признаков для случайного леса +rf_feature_importances = rf_model.feature_importances_ + +# Предсказание значений на тестовой выборке +y_pred_rf = rf_model.predict(X_test) + +# Оценка производительности модели +rf_mse = mean_squared_error(y_test, y_pred_rf) + print("Дерево решений") print("score", test_score) print("feature_importances", feature_importances) print("Mean Squared Error: {:.2f}".format(mse) + "\n") +plt.figure(figsize=(10, 6)) +plt.bar(X.columns, feature_importances) +plt.title('Decision Tree Feature Importances') +plt.xlabel('Features') +plt.ylabel('Importance') +plt.show() print("Линейная регрессия") print("score", test_score2) print(coef_df) -print("Mean Squared Error: {:.2f}".format(mse2)) \ No newline at end of file +print("Mean Squared Error: {:.2f}".format(mse2)) +plt.figure(figsize=(10, 6)) +plt.bar(coef_df['Признак'], coef_df['Абсолютный_Коэффициент']) +plt.title('Linear regression Feature Importances') +plt.xlabel('Features') +plt.ylabel('Importance') +plt.show() +print("Случайный лес") +print("score", test_score) +print("feature_importances", rf_feature_importances) +print("Mean Squared Error: {:.2f}".format(rf_mse) + "\n") +# Визуализация важности признаков для случайного леса +plt.figure(figsize=(10, 6)) +plt.bar(X.columns, rf_feature_importances) +plt.title('Random Forest Feature Importances') +plt.xlabel('Features') +plt.ylabel('Importance') +plt.show() +