0 / 0 / 0
Регистрация: 11.09.2020
Сообщений: 146

Реализация модели XGBoost с нуля

17.05.2024, 01:11. Показов 381. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи знатоки, нужна помощь. Никак не могу понять где именно ошибка типов.
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
class XGBoost_own(BaseEstimator, ClassifierMixin):
    def __init__(self, n_estimators=100, learning_rate=0.2, max_depth=3,
                 loss='logistic', reg_alpha=0, reg_lambda=1, random_state=0):
 
        self.n_estimators = n_estimators
        self.max_depth = max_depth
        self.learning_rate = learning_rate
        self.loss = loss
        self.reg_alpha = reg_alpha
        self.reg_lambda = reg_lambda
        self.initialization = lambda y: np.mean(y) * np.ones([y.shape[0]])
        self.loss_by_iter = []
        self.trees_ = []
        self.boosted_pred = None
        self.random_state = random_state
 
    def _sigmoid(self, predictions):
        return 1 / (1 + np.exp(-predictions))
 
    def _softmax(self, predictions):
        exp = np.exp(predictions)
        return exp / np.sum(exp, axis=1, keepdims=True)
 
    def _compute_loss_gradient(self, F, y):
        if self.loss == 'logistic':
            return y - self._sigmoid(F)
        else:
            raise ValueError("Unsupported loss function")
 
    def _compute_regularization_penalty(self):
        if self.reg_alpha == 0:
            return 0
        elif self.reg_alpha > 0 and self.reg_lambda == 0:
            return self.reg_alpha * np.sum(np.abs(tree.coef_))
        elif self.reg_alpha == 0 and self.reg_lambda > 0:
            return 0.5 * self.reg_lambda * np.sum(tree.coef_ ** 2)
        elif self.reg_alpha > 0 and self.reg_lambda > 0:
            return self.reg_alpha * np.sum(np.abs(tree.coef_)) + 0.5 * self.reg_lambda * np.sum(tree.coef_ ** 2)
        else:
            raise ValueError("Invalid combination of regularization parameters")
 
    def fit(self, X, y):
        self.X = X
        self.y = y
        self.boosted_pred = np.zeros_like(y)
        F = self.initialization(y)
 
        for t in range(self.n_estimators):
            residuals = self._compute_loss_gradient(F, y)
            tree = DecisionTreeRegressor(max_depth=self.max_depth, random_state=self.random_state)
            tree.fit(X, residuals)
            self.trees_.append(tree)
            update = self.learning_rate * tree.predict(X)
            F += update
            self.boosted_pred += update
 
        return self
 
    def predict_proba(self, X):
        F = np.zeros(X.shape[0])
        for tree in self.trees_:
            F += self.learning_rate * tree.predict(X)
        F = np.clip(F, -700, 700)
        if self.loss == 'logistic':
            return self._sigmoid(F).reshape(-1, 1)
        elif self.loss == 'softmax':
            return self._softmax(F)
        else:
            raise ValueError("Unsupported loss function")
 
    def predict(self, X):
        proba = self.predict_proba(X)
        return np.argmax(proba, axis=1)
 
    def get_params(self, deep=True):
        return {
            'n_estimators': self.n_estimators,
            'learning_rate': self.learning_rate,
            'max_depth': self.max_depth,
            'loss': self.loss,
            'reg_alpha': self.reg_alpha,
            'reg_lambda': self.reg_lambda,
            'random_state': self.random_state,
        }
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
def hyperparameter_tuning(models, param_grid, Xre_train, Yre_train, Xre_test, Yre_test, results):
    for name, model in models.items():
        print(f"Tuning hyperparameters for {name}...")
        param_grid_name = param_grid[name]
        grid_search = GridSearchCV(estimator=model, param_grid=param_grid_name, scoring='accuracy', cv=5, n_jobs=-1)
        
        start_time = time.time()
        
        grid_search.fit(Xre_train, Yre_train)
        
        end_time = time.time()
        
        best_params = grid_search.best_params_
        best_model = grid_search.best_estimator_
 
        training_time = end_time - start_time
        
        Yre_pred = best_model.predict(Xre_test)
        accuracy = accuracy_score(Yre_test, Yre_pred)
        precision = precision_score(Yre_test, Yre_pred, average='weighted')
        recall = recall_score(Yre_test, Yre_pred, average='weighted')
        f1 = f1_score(Yre_test, Yre_pred, average='weighted')
        roc_auc = roc_auc_score(Yre_test, best_model.predict_proba(Xre_test), multi_class='ovr', average='weighted')
        confusion = confusion_matrix(Yre_test, Yre_pred)
 
        results[name] = {
            'best_params': best_params,
            'accuracy': accuracy,
            'precision': precision,
            'recall': recall,
            'f1': f1,
            'roc_auc': roc_auc,
            'confusion_matrix': confusion,
            'classification_report': classification_report(Yre_test, Yre_pred),
            'training_time': training_time
        }
        
        print(results[name])
numpy.core._exceptions._UFuncOutputCasti ngError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int32') with casting rule 'same_kind'
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.05.2024, 01:11
Ответы с готовыми решениями:

Реализация SMS сервиса с нуля
Ищу человека или команду которая готова взяться за реализацию сервиса по отправке SMS сообщений с реального шлюза и прямого (от оператора)....

Реализация провайдера SQLMemberShip с нуля
Доброго времени суток уважаемые форумчане))) Столкнулся с проблемой регистрации пользователей на сайте в MVC 4. Прогулив на эту тему...

Игра Крестики-нолики: реализация с нуля
Помогите пожалуйста дали задание Составить игру Крестики_нолики на Форме.Чтобы был интерфейс с кнопками "Новая...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2024, 01:11
Помогаю со студенческими работами здесь

Реализация компонентной модели
Здравствуйте! Меня заинтересовала компонентная модель игрового объекта. А именно: игровой объект (игрок, дерево, машина...)...

Реализация модели приложения
Как реализовать приложение для работы с БД, в которой 5 таблицы. с чего начать? сейчас у меня например по событию нажатию кнопку просто...

Реализация модели автомастерской
В автомастерскую, которая работает круглосуточно, поступают машины через интервалы времени, распределённые равномерно от 3 до 8 часов. В...

Реализация модели COCOMO 2
Здравствуйте! Не писал ли кто раньше реализацию модели кокомо 2 при помощи генетического алгоритма? Чтобы можно было рассчитать значения...

Реализация поведения модели
Добрый день. Порой перед разработчиком встает задача реализовать поведение работы с ViewModel (далее просто модель) на стороне клиента и...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru