Вопрос или проблема
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
reg_svr = SVR(kernel="rbf")
reg_svr.fit(X_train_scaled, y_train)
test['prediction_svr'] = reg_svr.predict(X_test_scaled)
score_svr = np.sqrt(mean_squared_error(test['PJME_MW'], test['prediction_svr']))
print(f'RMSE Score на тестовом наборе (SVR): {score_svr:0.2f}')
Существует несколько способов ускорить обучение вашей SVM. Следуйте шагам, упомянутым в ответе
и
Ответ или решение
Ваше использование метода опорных векторов (SVM) может занять много времени по нескольким причинам. Вот некоторые из основных факторов, которые могут влиять на время обучения вашей модели, а также рекомендации по улучшению производительности:
-
Размерность данных: SVR плохо масштабируется к большим объемам данных. Если ваш набор данных содержит много признаков или образцов, это может значительно увеличить время обучения. Рекомендуется уменьшить размерность, используя методы, такие как PCA (аналитика главных компонент), или выполнить отбор признаков.
-
Параметры модели: Параметры ядра, такие как
C
,epsilon
, и тип ядра (kernel
) могут значительно повлиять на производительность. Попробуйте уменьшить значениеC
или использовать более простые ядра, такие как линейное ядро (kernel='linear'
). -
Масштабирование данных: Вы уже используете
StandardScaler
, но убедитесь, что у вас нет выбросов в данных, так как они могут повлиять на масштабирование и, следовательно, на производительность модели. -
Количество итераций и сходимость: SVR может занять много времени из-за большого количества итераций, необходимых для достижения сходимости. Вы можете попытаться установить
max_iter
вSVR
, чтобы ограничить число итераций. -
Выбор ядра: Убедитесь, что вы используете ядро, подходящее для ваших данных. Ядро "rbf" (радиально-базисная функция) может быть более вычислительно затратным по сравнению с линейным ядром. Попробуйте разные ядра и посмотрите, как это повлияет на время выполнения.
-
Параллелизация: Если у вас есть многоядерный процессор, вы можете использовать параллельные вычисления с помощью метода
joblib
илиscikit-learn
, чтобы ускорить процесс обучения модели. Например, при использованииGridSearchCV
можно указать параметрn_jobs=-1
, чтобы использовать все доступные ядра.
Вот улучшенный код с некоторыми из вышеперечисленных предложений:
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
from sklearn.decomposition import PCA
import numpy as np
# Масштабирование данных
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Уменьшение размерности
pca = PCA(n_components=10) # Выберите количество компонентов
X_train_pca = pca.fit_transform(X_train_scaled)
X_test_pca = pca.transform(X_test_scaled)
# Создание и обучение SVR
reg_svr = SVR(kernel="linear", C=1.0, epsilon=0.1, max_iter=1000) # Используйте линейное ядро и ограничьте max_iter
reg_svr.fit(X_train_pca, y_train)
# Прогнозирование
test['prediction_svr'] = reg_svr.predict(X_test_pca)
# Оценка модели
score_svr = np.sqrt(mean_squared_error(test['PJME_MW'], test['prediction_svr']))
print(f'RMSE Score на тестовом наборе (SVR): {score_svr:0.2f}')
Применение этих изменений должно помочь ускорить выполнение вашей модели SVM и справиться с проблемами долгого обучения.