IIS_2023_1/almukhammetov_bulat_lab_3/lab3.py

78 lines
5.1 KiB
Python
Raw Normal View History

2023-11-01 23:05:45 +04:00
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, accuracy_score
# Загрузка данных
data = pd.read_csv('housing.csv')
data = data.dropna()
# Отбор нужных столбцов
features = data[
['longitude', 'latitude', 'total_rooms', 'total_bedrooms', 'population', 'households', 'median_income']]
# Задача регрессии
target_regression = data['housing_median_age']
# Разделение данных на обучающий и тестовый наборы для регрессии
X_train_regression, X_test_regression, y_train_regression, y_test_regression = train_test_split(features,
target_regression,
test_size=0.01,
random_state=241)
# Создание и обучение дерева решений для регрессии
clf_regression = DecisionTreeRegressor(random_state=241)
clf_regression.fit(X_train_regression, y_train_regression)
# Предсказание на тестовом наборе для регрессии
y_pred_regression = clf_regression.predict(X_test_regression)
# Оценка качества модели для регрессии (MSE)
mse_regression = mean_squared_error(y_test_regression, y_pred_regression)
print("Средняя ошибка для регрессии:", mse_regression)
# Задача классификации
target_classification = data['median_house_value']
# Разделение данных на обучающий и тестовый наборы для классификации
X_train_classification, X_test_classification, y_train_classification, y_test_classification = train_test_split(
features, target_classification, test_size=0.01, random_state=241)
# Создание и обучение дерева классификации
clf_classification = DecisionTreeClassifier(random_state=241)
clf_classification.fit(X_train_classification, y_train_classification)
# Предсказание на тестовом наборе для классификации
y_pred_classification = clf_classification.predict(X_test_classification)
# Оценка качества модели для классификации (точность)
accuracy_classification = accuracy_score(y_test_classification, y_pred_classification)
print("Точность для классификации: {:.2f}%".format(accuracy_classification * 100))
# Важности признаков для регрессии
importance_regression = clf_regression.feature_importances_
print("Важность для регрессии")
# Печать важности каждого признака для регрессии
print("Важность 'longitude':", importance_regression[0]) # За западную долготу дома
print("Важность 'latitude':", importance_regression[1]) # За северную широту дома
print("Важность 'total_rooms':", importance_regression[2]) # За общее количество комнат в блоке
print("Важность 'total_bedrooms':", importance_regression[3]) # За общее количество спален в блоке
print("Важность 'population':", importance_regression[4]) # За общее количество проживающих в блоке
print("Важность 'households':", importance_regression[5]) # За общее количество домохозяйств в блоке
print("Важность 'median_income':", importance_regression[6]) # За медианный доход домохозяйств в блоке
# Важности признаков для классификации
importance_classification = clf_classification.feature_importances_
print()
print("Важность для классификации")
# Печать важности каждого признака для классификации
print("Важность 'longitude':", importance_classification[0]) # За западную долготу дома
print("Важность 'latitude':", importance_classification[1]) # За северную широту дома
print("Важность 'total_rooms':", importance_classification[2]) # За общее количество комнат в блоке
print("Важность 'total_bedrooms':", importance_classification[3]) # За общее количество спален в блоке
print("Важность 'population':", importance_classification[4]) # За общее количество проживающих в блоке
print("Важность 'households':", importance_classification[5]) # За общее количество домохозяйств в блоке
print("Важность 'median_income':", importance_classification[6]) # За медианный доход домохозяйств в блоке