Форум программистов, компьютерный форум, киберфорум
Python: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 37

Применение SVM для повышения точности при классификации Enery Star Score

13.01.2025, 08:23. Показов 918. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважамые форумчане. Не могли бы вы, пожалуйста, подсказать, как в данной задаче применить метод опорных векторов для повышения точности предсказания. В данный момент с текущим кодом она составляет 0.43, а нужно повысить ну хотя бы до 0.70. Мне посоветовали применить метод опорных векторов и сказали, что с ним реально повысить процент аж до 0.90, но мне настолько высокий процент ни к чему, хватит и 0.70

Основная суть задачи: предсказывать Energy Star Score зданий Нью-Йорка по таблице с 60 колонками/признаками и 34 тысячами строчек (только 2 лист таблицы), вывести сколько получилось на тестовом и боевом и продемонстрировать результаты, сгенерировав новое здание с признаками и Energy Star Score. Делать нужно именно через классификацию. Метка класса - Energy Star Score (принимает значения от 0 до 100, по сути это проценты).
Сама табличка. Весит больше 1мб, поэтому залил её на гугл.диск

Текущий код с точностью 0.43
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
from sklearn.preprocessing import StandardScaler
from imblearn.over_sampling import SMOTE
 
# 1. Загрузка данных
file_path = r"PycharmProjects\pythonProject\energy_data.xlsx"
dataset = pd.read_excel(file_path, sheet_name=1) # Второй лист
 
# Приведение всех данных к числовому формату, а не приведённые значения заменяются на NaN
data = dataset.apply(pd.to_numeric, errors="coerce")
 
# Удаление строк с пропусками в целевой переменной
target_column = "ENERGY STAR Score"
data = data.dropna(subset=[target_column])
 
# Удаление столбцов с более чем 50% пропусков
data = data.dropna(thresh=0.5 * len(data), axis=1)
 
# Заполнение оставшихся пропусков средним значением по колонке
data = data.fillna(data.mean())
 
# Сортировка значений целевого столбца по возрастанию
data = data.sort_values(by="ENERGY STAR Score")
 
# Преобразование целевой переменной в категориальную с помощью разбиения значения на интервалы и присвоения каждому интервалу нового значения
name = ''
bins = []
labels = []
 
q = 0
for i in data[target_column]:
    if name == i:
        name=i
    else:
        name = i
        q += 1
        bins.append(q)
 
for i in range(len(bins)-1):
    labels.append(bins[i])
 
data[target_column] = pd.cut(data[target_column], bins=bins, labels=labels, include_lowest=True)
 
 
# Разделение на признаки (X) и целевую переменную (y)
X = data.drop(columns=[target_column])
y = data[target_column]
 
# Проверка на наличие бесконечных значений
X = X.replace([np.inf, -np.inf], np.nan) # Заменяем бесконечности на NaN
X = X.dropna() # Удаляем строки с пропусками
 
# Проверка на экстремальные значения
print("Максимальные значения по столбцам до масштабирования:")
print(X.max())
 
# Масштабирование данных
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
 
# 4. Анализ корреляции
correlation_matrix = pd.DataFrame(X, columns=X.columns).join(y).corr()
 
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, annot=False, cmap="coolwarm")
plt.title("Correlation Matrix")
plt.show()
 
# Вывод корреляции с целевой переменной
correlation_with_target = correlation_matrix[target_column].sort_values(ascending=False)
print("Корреляция с целевой переменной:")
print(correlation_with_target)
 
# Важность признаков
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_scaled, y)
 
# Важность признаков
feature_importances = pd.Series(model.feature_importances_, index=X.columns)
 
# Сортировка важности признаков по убыванию
feature_importances = feature_importances.sort_values(ascending=False)
 
# Визуализация важности признаков
plt.figure(figsize=(12, 6))
feature_importances.plot(kind="bar")
plt.title("Feature Importance")
plt.ylabel("Importance Score")
plt.show()
 
# 6. Выбор ключевых признаков
key_features = feature_importances[feature_importances > 0.02].index.tolist()
print("Ключевые признаки для обучения модели:")
print(key_features)
 
# Модель с ключевыми признаками
X_selected = X[key_features]
X_selected_scaled = scaler.fit_transform(X_selected)
 
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X_selected_scaled, y, test_size=0.2, random_state=42)
 
# Повторное обучение случайного леса
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
 
# Предсказания и оценка качества модели
y_pred = model.predict(X_test)
 
accuracy = accuracy_score(y_test, y_pred)
 
print(f"Точность модели: {accuracy}")
 
# 7. Генерация нового здания
# Выбор случайной строки из датасета для создания нового здания
new_building_row = data.sample(n=1, random_state=42)  # Выбираем одну случайную строку
 
# Убедитесь, что мы используем только ключевые признаки
new_building_df = new_building_row[key_features]
 
# Масштабирование новых данных
new_building_scaled = scaler.transform(new_building_df)
 
# Предсказание класса Energy Star Score
predicted_class = model.predict(new_building_scaled)
 
# Вывод предсказанного класса
print(f"Предсказанный класс Energy Star Score для нового здания: {predicted_class[0]}")
 
# Если нужно вывести информацию о новом здании
print("Характеристики нового здания:")
print(new_building_df)
P.S. Также порекомендовали отказаться от удаления столбцов с 50% пропусков, а для генерации нового здания воспользоваться синтетическими данными, но я в этом, как и в CVM ни сном, ни духом, а времени в обрез. Через регрессию делать нельзя.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2025, 08:23
Ответы с готовыми решениями:

Преобразовать функцию для повышения точности расчетов
Есть функция f = sqrt(1 + x) - 1. Для x, близких к нулю (порядка 10 в -15 степени) не хватает точности типа double. Относительная ошибка...

Повышение точности ответов машинного обучения для задачи классификации
Здравствуйте, подскажите пожалуйста как можно улучшить качество ответов для модели Random Forest. Я читал что чем больше будет создаваться...

Методы повышения точности прогноза
Здравствуйте! Хочу, спросить, если методы, которые могут повысить точность прогноза? Дано 3 модели, которые настраиваются и...

1
58 / 58 / 4
Регистрация: 10.06.2023
Сообщений: 888
14.01.2025, 18:31
Таблицу скачать не получилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2025, 18:31
Помогаю со студенческими работами здесь

Практическое применение алгоритма классификации
Добрый день, форумчане. Изучать ml начал совсем недавно. Сейчас решаю задачку классификации товаров на Python. Мне необходимо по описанию...

Нужно рассмотреть различные нейронные сети и их применение в задачах классификации и регрессии
Где можно найти такие примеры

Методика подготовки датасета для бинарной текстовой классификации при наличии обучающих примеров лишь для одного класса
С учетом возможностей распространенных на сегодняшний день способов классификации текстов: машинное обучение (SVM,Naive Bayes и т.п.);...

7-Zip и дополнительные данные при архивировании для повышения безопасности хранения информации
Мне знакомый сообщил, что у WinRar есть опция, которая при архивировании добавляет дополнительную информацию, которая в случае сбоя поможет...

Какую лучше всего выбрать эвристическую функцию для алгоритма A star при поиске пути в графе
Добрый день! Подскажите пожалуйста, какую лучше всего выбрать эвристическую функцию для алгоритма A star при поиске пути в графе. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru