Лабораторная 3
This commit is contained in:
parent
b26c54a7e4
commit
63198665cc
BIN
almukhammetov_bulat_lab_3/1.png
Normal file
BIN
almukhammetov_bulat_lab_3/1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 73 KiB |
64
almukhammetov_bulat_lab_3/README.md
Normal file
64
almukhammetov_bulat_lab_3/README.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
Вариант 2
|
||||||
|
|
||||||
|
Задание:
|
||||||
|
Предсказание категории возраста дома (housingMedianAge) на основе других признаков, таких как широта, долгота, общее количество комнат и т.д.
|
||||||
|
|
||||||
|
Данные:
|
||||||
|
Данный набор данных использовался во второй главе недавней книги Аурелиена Жерона "Практическое машинное обучение с помощью Scikit-Learn и TensorFlow". Он служит отличным введением в реализацию алгоритмов машинного обучения, потому что требует минимальной предварительной обработки данных, содержит легко понимаемый список переменных и находится в оптимальном размере, который не слишком мал и не слишком большой.
|
||||||
|
|
||||||
|
Данные содержат информацию о домах в определенном районе Калифорнии и некоторую сводную статистику на основе данных переписи 1990 года. Следует отметить, что данные не прошли предварительную очистку, и для них требуются некоторые этапы предварительной обработки. Столбцы включают в себя следующие переменные, их названия весьма наглядно описывают их суть:
|
||||||
|
|
||||||
|
долгота longitude
|
||||||
|
|
||||||
|
широта latitude
|
||||||
|
|
||||||
|
средний возраст жилья median_house_value
|
||||||
|
|
||||||
|
общее количество комнат total_rooms
|
||||||
|
|
||||||
|
общее количество спален total_bedrooms
|
||||||
|
|
||||||
|
население population
|
||||||
|
|
||||||
|
домохозяйства households
|
||||||
|
|
||||||
|
медианный доход median_income
|
||||||
|
|
||||||
|
Запуск:
|
||||||
|
Запустите файл lab3.py
|
||||||
|
|
||||||
|
Описание программы:
|
||||||
|
|
||||||
|
1. Загружает набор данных из файла 'housing.csv', который содержит информацию о домах в Калифорнии, включая их координаты, возраст, количество комнат, население, доход и другие характеристики.
|
||||||
|
|
||||||
|
2. Удаляет строки с нулевыми значениями из набора данных для чистоты анализа.
|
||||||
|
|
||||||
|
3. Выбирает набор признаков (features) из данных, которые будут использоваться для обучения моделей регрессии и классификации.
|
||||||
|
|
||||||
|
4. Определяет задачу регрессии, где целевой переменной (target) является 'housing_median_age', и задачу классификации, где целевой переменной является 'housing_median_age'.
|
||||||
|
|
||||||
|
5. Разделяет данные на обучающий и тестовый наборы для обеих задач с использованием функции train_test_split. Тестовый набор составляет 1% от исходных данных.
|
||||||
|
|
||||||
|
6. Создает и обучает дерево решений для регрессии и классификации с использованием моделей DecisionTreeRegressor и DecisionTreeClassifier.
|
||||||
|
|
||||||
|
7. Предсказывает значения целевой переменной на тестовых наборах для обеих задач.
|
||||||
|
|
||||||
|
8. Оценивает качество моделей с помощью среднеквадратичной ошибки (MSE) для регрессии и точности (accuracy) для классификации.
|
||||||
|
|
||||||
|
9. Выводит среднеквадратичную ошибку для регрессии и точность для классификации, а также важности признаков для обеих задач.
|
||||||
|
|
||||||
|
Результаты:
|
||||||
|
|
||||||
|
![Alt text](1.png)
|
||||||
|
|
||||||
|
Выводы:
|
||||||
|
|
||||||
|
Для задачи регрессии, где целью было предсказать возраст жилья (housing_median_age), модель дерева решений показала среднюю ошибку (MSE) равную 117.65. Это означает, что модель регрессии вполне приемлемо предсказывает возраст жилья на основе выбранных признаков.
|
||||||
|
|
||||||
|
Для задачи классификации, где целью было предсказать стоимость жилья (housing_median_age), модель дерева решений показала низкую точность, всего 8.29%. Это свидетельствует о том, что модель классификации не справляется с предсказанием стоимости жилья на основе выбранных признаков. Низкая точность указывает на необходимость улучшения модели или выбора других методов для решения задачи классификации.
|
||||||
|
|
||||||
|
Анализ важности признаков для задачи регрессии показал, что наибольший вклад в предсказание возраста жилья вносят признаки 'longitude', 'latitude' и 'total_rooms'. Эти признаки оказывают наибольшее влияние на результаты модели.
|
||||||
|
|
||||||
|
Для задачи классификации наибольший вклад в предсказание стоимости жилья вносят признаки 'median_income', 'longitude' и 'latitude'. Эти признаки имеют наибольшее значение при определении классов стоимости жилья.
|
||||||
|
|
||||||
|
В целом, результаты указывают на успешное решение задачи регрессии с использованием модели дерева решений. Однако задача классификации требует дополнительных улучшений.
|
48
almukhammetov_bulat_lab_3/lab3(old).py
Normal file
48
almukhammetov_bulat_lab_3/lab3(old).py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from sklearn.preprocessing import LabelEncoder
|
||||||
|
from sklearn.tree import DecisionTreeClassifier
|
||||||
|
|
||||||
|
# Загрузка данных
|
||||||
|
data = pd.read_csv('titanic.csv', index_col='PassengerId')
|
||||||
|
|
||||||
|
|
||||||
|
# Функция для преобразования пола в числовое значение
|
||||||
|
def Sex_to_bool(sex):
|
||||||
|
if sex == "male":
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
# Преобразование пола в числовое значение
|
||||||
|
data['Sex'] = data['Sex'].apply(Sex_to_bool)
|
||||||
|
|
||||||
|
# Отбор строк с непустыми значениями
|
||||||
|
# Отбор строк с непустыми значениями
|
||||||
|
data = data.loc[~data['Name'].isna()
|
||||||
|
& ~data['Age'].isna()
|
||||||
|
& ~data['Sex'].isna()
|
||||||
|
& ~data['Survived'].isna()]
|
||||||
|
|
||||||
|
|
||||||
|
# Отбор нужных столбцов
|
||||||
|
features = data[['Name', 'Sex', 'Age']]
|
||||||
|
|
||||||
|
# Применение Label Encoding к столбцу 'Name'
|
||||||
|
label_encoder = LabelEncoder()
|
||||||
|
features['Name'] = label_encoder.fit_transform(features['Name'])
|
||||||
|
|
||||||
|
# Определение целевой переменной
|
||||||
|
y = data['Survived']
|
||||||
|
|
||||||
|
# Создание и обучение дерева решений
|
||||||
|
clf = DecisionTreeClassifier(random_state=241)
|
||||||
|
clf.fit(features, y)
|
||||||
|
|
||||||
|
# Получение важностей признаков
|
||||||
|
importance = clf.feature_importances_
|
||||||
|
|
||||||
|
# Печать важности каждого признака
|
||||||
|
print("Важность 'Name':", importance[0])
|
||||||
|
print("Важность 'Sex':", importance[1])
|
||||||
|
print("Важность 'Age':", importance[2])
|
||||||
|
|
77
almukhammetov_bulat_lab_3/lab3.py
Normal file
77
almukhammetov_bulat_lab_3/lab3.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
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]) # За медианный доход домохозяйств в блоке
|
Loading…
Reference in New Issue
Block a user