Compare commits

...

1 Commits

Author SHA1 Message Date
213d03234c for kurs work 2023-12-07 17:00:41 +04:00

View File

@ -4,10 +4,101 @@ from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error 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 = 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) и целевую переменную (y)
X = data[['yr', 'mag', 'fat']] 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['Коэффициент'].abs()
coef_df = coef_df.sort_values(by='Абсолютный_Коэффициент', ascending=False) 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("Дерево решений")
print("score", test_score) print("score", test_score)
print("feature_importances", feature_importances) print("feature_importances", feature_importances)
print("Mean Squared Error: {:.2f}".format(mse) + "\n") 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("Линейная регрессия")
print("score", test_score2) print("score", test_score2)
print(coef_df) print(coef_df)
print("Mean Squared Error: {:.2f}".format(mse2)) 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()