Как включить на android опции для разработчиков и ускорить систему

Метод стохастического градиентного спуска для множественной классификации

SGDClassifier использует метод «один против всех» (OVA) для объединения нескольких двоичных классификаторов для достижения множественной классификации. Для каждого класса K можно обучить двоичный классификатор, чтобы отличать себя от других классов K-1.

В случае мультиклассовой классификации coef_ — это двумерный массив shape = , а intercept_ — одномерный массив shape = . В i-й строке coef_ хранится вектор весов классификатора OVA i-го класса; классы индексируются в порядке возрастания (см. Атрибут classes_)

Обратите внимание, что в принципе, поскольку они позволяют создать модель вероятности, loss = «log» и loss = «modified_huber» больше подходят для классификации «один против всех»

SGDClassifier поддерживает взвешенные классы и взвешенные экземпляры путем подбора параметров class_weight и sample_weight.

1.10.1. Классификация

 — это класс, способный выполнять мультиклассовую классификацию набора данных.

Как и в случае с другими классификаторами,  принимает в качестве входных данных два массива: массив X, разреженный или плотный, формы (n_samples, n_features), содержащий обучающие образцы, и массив Y целочисленных значений, формы (n_samples,), содержащий метки классов для обучающих образцов:

>>> from sklearn import tree
>>> X = , ]
>>> Y = 
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, Y)

После подбора модель можно использовать для прогнозирования класса образцов:

>>> clf.predict(])
array()

В случае, если существует несколько классов с одинаковой и самой высокой вероятностью, классификатор предскажет класс с самым низким индексом среди этих классов.

В качестве альтернативы выводу определенного класса можно предсказать вероятность каждого класса, которая представляет собой долю обучающих выборок класса в листе:

>>> clf.predict_proba(])
array(])

 поддерживает как двоичную (где метки — ), так и мультиклассовую (где метки — ) классификацию.

Используя набор данных Iris, мы можем построить дерево следующим образом:

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, y)

После обучения вы можете построить дерево с помощью  функции:

>>> tree.plot_tree(clf) 

Мы также можем экспортировать дерево в формат Graphviz с помощью  экспортера. Если вы используете Conda менеджер пакетов, то Graphviz бинарные файлы и пакет питон может быть установлен .

В качестве альтернативы двоичные файлы для graphviz можно загрузить с домашней страницы проекта graphviz, а оболочку Python установить из pypi с помощью .

Ниже приведен пример экспорта graphviz вышеуказанного дерева, обученного на всем наборе данных радужной оболочки глаза; результаты сохраняются в выходном файле :

>>> import graphviz 
>>> dot_data = tree.export_graphviz(clf, out_file=None) 
>>> graph = graphviz.Source(dot_data) 
>>> graph.render("iris") 

Экспортер также поддерживает множество эстетических вариантов, в том числе окраски узлов их класс (или значение регрессии) и используя явные имена переменных и классов , если это необходимо. Блокноты Jupyter также автоматически отображают эти графики встроенными:

>>> dot_data = tree.export_graphviz(clf, out_file=None, 
...                      feature_names=iris.feature_names,  
...                      class_names=iris.target_names,  
...                      filled=True, rounded=True,  
...                      special_characters=True)  
>>> graph = graphviz.Source(dot_data)  
>>> graph 

В качестве альтернативы дерево можно также экспортировать в текстовый формат с помощью функции . Этот метод не требует установки внешних библиотек и более компактен:

>>> from sklearn.datasets import load_iris
>>> from sklearn.tree import DecisionTreeClassifier
>>> from sklearn.tree import export_text
>>> iris = load_iris()
>>> decision_tree = DecisionTreeClassifier(random_state=0, max_depth=2)
>>> decision_tree = decision_tree.fit(iris.data, iris.target)
>>> r = export_text(decision_tree, feature_names=iris)
>>> print(r)
|--- petal width (cm) <= 0.80
|   |--- class: 0
|--- petal width (cm) >  0.80
|   |--- petal width (cm) <= 1.75
|   |   |--- class: 1
|   |--- petal width (cm) >  1.75
|   |   |--- class: 2

Примеры

  • Постройте поверхность принятия решений дерева решений на наборе данных радужной оболочки глаза
  • Понимание структуры дерева решений

3.2.4. Советы по поиску параметров

3.2.4.1. Указание объективной метрики

По умолчанию поиск параметров использует  функцию оценщика для оценки настройки параметра. Это  для классификации и  для регрессии. Для некоторых приложений лучше подходят другие функции оценки (например, при несбалансированной классификации оценка точности часто неинформативна). Альтернативная функция оценки может быть указана с помощью  параметра большинства инструментов поиска параметров. Дополнительные сведения см. В разделе  .

3.2.4.2. Указание нескольких показателей для оценки

и  позволяют указать несколько показателей для  параметра.

Мультиметрическая оценка может быть указана либо в виде списка строк с предварительно определенными именами оценок, либо в виде словаря, сопоставляющего имя счетчика с функцией счетчика и / или предварительно определенное имя (имена) счетчика. Дополнительные сведения см. В разделе .

При указании нескольких метрик  параметр должен быть установлен на метрику (строку), для которой  будет найден и использован для построения  всего набора данных. Если поиск не надо переоборудовать, ставим . Если оставить для восстановления значение по умолчанию,  это приведет к ошибке при использовании нескольких показателей.

См. Пример использования в демонстрации многомерной оценки cross_val_score и GridSearchCV .

и  не поддерживают мультиметрическую оценку.

3.2.4.3. Составные оценки и пространства параметров

и  позволяют искать более параметры композитных или вложенные оценки , такие как  используя специальный  синтаксис:

>>> from sklearn.model_selection import GridSearchCV
>>> from sklearn.calibration import CalibratedClassifierCV
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.datasets import make_moons
>>> X, y = make_moons()
>>> calibrated_forest = CalibratedClassifierCV(
...    base_estimator=RandomForestClassifier(n_estimators=10))
>>> param_grid = {
...    'base_estimator__max_depth': }
>>> search = GridSearchCV(calibrated_forest, param_grid, cv=5)
>>> search.fit(X, y)
GridSearchCV(cv=5,
             estimator=CalibratedClassifierCV(...),
             param_grid={'base_estimator__max_depth': })

В  данном случае это имя параметра вложенного оценщика . Если метаоценка построена как набор оценщиков, как в , то  ссылается на имя оценщика, см. . На практике может быть несколько уровней вложенности:

>>> from sklearn.pipeline import Pipeline
>>> from sklearn.feature_selection import SelectKBest
>>> pipe = Pipeline()
>>> param_grid = {
...    'select__k': ,
...    'model__base_estimator__max_depth': }
>>> search = GridSearchCV(pipe, param_grid, cv=5).fit(X, y)

Пожалуйста, обратитесь к  для выполнения поиска параметров по конвейерам.

3.2.4.4. Выбор модели: разработка и оценка

Выбор модели путем оценки различных настроек параметров можно рассматривать как способ использования помеченных данных для «обучения» параметров сетки.

При оценке результирующей модели важно делать это на удерживаемых выборках, которые не были замечены в процессе поиска по сетке: рекомендуется разделить данные на набор для разработки (для передачи в  экземпляр) и набор для оценки вычислить показатели производительности. Это можно сделать с помощью  служебной функции

Это можно сделать с помощью  служебной функции.

3.2.4.5. Параллелизм

Инструменты поиска параметров оценивают каждую комбинацию параметров для каждой свертки данных независимо. Вычисления могут выполняться параллельно с помощью ключевого слова . См. Подпись функции для более подробной информации, а также запись в глоссарии для  .

3.2.4.6. Отказоустойчивость

Некоторые настройки параметров могут привести к сбою  одной или нескольких сверток данных. По умолчанию это приведет к сбою всего поиска, даже если некоторые настройки параметров могут быть полностью оценены. Установка  (или ) сделает процедуру устойчивой к такому отказу, выдаст предупреждение и установит счет для этой свертки на 0 (или ), но завершит поиск.

Grid Search

Примечательно, что указанные выше модели были запущены с параметрами по умолчанию, определенными модулями LogisticRegression и RandomForestClassifier. Можем ли мы улучшить модель, настроив гиперпараметры модели?

Чтобы достичь этого, мы определяем «сетку» параметров, которые мы хотим протестировать в модели, и выбираем лучшую модель, используя GridSearchCV.

В приведенном выше поиске по сетке мы используем сетку параметров, которая состоит из двух словарей.

Первый словарь включает в себя все варианты LogisticRegression, которые я хочу запустить в модели, которая включает в себя вариации в отношении типа регуляризации, размера штрафа и типа используемого решателя.

Второй словарь включает в себя все варианты RandomForestClassifier и включает различные диапазоны для числа оценщиков (деревьев) и максимального количества объектов, используемых в модели.

Fitting 5 folds for each of 100 candidates, totalling 500 fits: Using backend LokyBackend with 4 concurrent workers.: Done  42 tasks      | elapsed:    4.7s: Done 192 tasks      | elapsed:   43.1s: Done 442 tasks      | elapsed:  6.4min: Done 500 out of 500 | elapsed:  8.8min finished

С определенными диапазонами параметров было оценено 100 потенциальных моделей. Поскольку я выбрал 5-кратную перекрестную проверку, в результате было установлено 500 различных моделей. Это заняло около 9 минут.

Вот как выглядит «лучшая» модель по параметрам:

RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',            max_depth=None, max_features=6, max_leaf_nodes=None,            min_impurity_decrease=0.0, min_impurity_split=None,            min_samples_leaf=1, min_samples_split=2,            min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=None,            oob_score=False, random_state=None, verbose=0,            warm_start=False)

Точность 0,908 и оценка AUC 0,94 — самые высокие показатели, которые мы видели для каждой соответствующей метрики из всех моделей.

Model accuracy is 0.9083515416363195

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

Сначала доработайте свою модель

Прежде чем вы сможете делать прогнозы, вы должны подготовить окончательную модель.

Возможно, у вас есть обученные модели, использующие перекрестную проверку в k-кратном порядке или разделенные на обучающие / тестовые данные. Это было сделано для того, чтобы дать вам оценку мастерства модели на данных вне выборки, например, новые данные.

Эти модели выполнили свою задачу и теперь могут быть выброшены.

Теперь вы должны обучить окончательную модель на всех ваших доступных данных.

Вы можете узнать больше о том, как тренировать окончательную модель здесь:

Как обучить окончательной модели машинного обучения

Итераторы в С++

Итератор — это объект, разработанный специально для перебора элементов контейнера (например, значений массива или символов в строке), обеспечивающий во время перемещения по элементам доступ к каждому из них.

Контейнер может предоставлять различные типы итераторов. Например, контейнер на основе массива может предлагать прямой итератор, который проходится по массиву в прямом порядке, и реверсивный итератор, который проходится по массиву в обратном порядке.

После того, как итератор соответствующего типа создан, программист может использовать интерфейс, предоставляемый данным итератором, для перемещения по элементам контейнера или доступа к его элементам, не беспокоясь при этом о том, какой тип перебора элементов задействован или каким образом в контейнере хранятся данные. И, поскольку итераторы в языке С++ обычно используют один и тот же интерфейс как для перемещения по элементам контейнера (оператор для перехода к следующему элементу), так и для доступа (оператор для доступа к текущему элементу) к ним, итерации можно выполнять по разнообразным типам контейнеров, используя последовательный метод.

3 ответа

Лучший ответ

Вы должны делиться на масштабирование, которое вы применили, чтобы нормализовать функцию, а также умножить на масштабирование, которое вы применили к цели.

Предположим

  • каждая переменная объекта x_i была масштабирована (разделена) на scale_x_i

  • целевая переменная была масштабирована (разделена) на scale_y

Тогда

Вот пример использования панд и склеарн LinearRegression

Это показывает нам наши коэффициенты для линейной регрессии без применения масштабирования.

Теперь мы нормализуем все наши переменные

Мы можем сделать регрессию снова на этих нормализованных данных …

… и применить масштабирование, чтобы получить исходные коэффициенты

Когда мы делаем это, мы видим, что мы воссоздали наши исходные коэффициенты.

Для некоторых методов машинного обучения должна быть нормализована целевая переменная y, а также переменные функции x. Если вы сделали это, вам нужно включить этот шаг «умножить на шкалу y», а также «разделить на шкалу X_i», чтобы получить исходные коэффициенты регрессии.

Надеюсь, это поможет

5

Gareth Williams
8 Авг 2016 в 19:02

Короткий ответ, чтобы получить коэффициенты LogisticRegression и перехват для немасштабированных данных (при условии двоичной классификации, а lr — обученный объект LogisticRegression):

  1. Вы должны разделить свой массив коэффициентов по модулю (начиная с v0.17) scaler.scale_:

  2. Вы должны вычесть из своего перехвата внутренний продукт полученного массива коэффициентов (результат деления) с массивом scaler.mean_:

Вы можете понять, почему вышеупомянутое необходимо сделать, если вы думаете, что каждая функция нормализована путем вычитания из нее ее среднего значения (сохраненного в массиве scaler.mean_) и последующего деления его на его стандартное отклонение (сохраненное в массиве scaler.scale_ ) .

3

Grisuji
1 Фев 2018 в 09:02

Или, если вы хотите явно получить коэффициенты, вы можете вручную комбинировать коэффициенты LogisticRegression с параметрами масштабирования, такими как scaler.mean_ и scaler.std_.

Для этого обратите внимание, что стандартизатор нормализовал данные следующим образом: v_norm = (v — M (v)) / sigma (v). Здесь M (v) — среднее значение необработанной переменной v, а sigma (v) — ее стандартное отклонение, которое хранится в массивах scaler.mean_ и scaler.std_ соответственно

Затем LogisticRegression берет эти нормализованные переменные и умножает их на LogisticRegression.coef_ и добавляет intercept_.

hvedrung
24 Июн 2015 в 15:07

1.4.6. Функции ядра

Функция ядра может быть любой из следующих:

  • линейный: $\langle x, x’\rangle$.
  • полином: $(\gamma \langle x, x’\rangle + r)^d$, где dуказывается параметром , $r$ по .
  • rbf: $\exp(-\gamma |x-x’|^2)$, где $\gamma$ указывается параметром , должно быть больше 0.
  • сигмовидный $\tanh(\gamma \langle x,x’\rangle + r)$, где $r$ указывается .

Разные ядра задаются  параметром:

>>> linear_svc = svm.SVC(kernel='linear')
>>> linear_svc.kernel
'linear'
>>> rbf_svc = svm.SVC(kernel='rbf')
>>> rbf_svc.kernel
'rbf'

1.4.6.1. Параметры ядра RBF

При обучении SVM с ядром Радиальной Базовой Функции (Radial Basis Function — RBF) необходимо учитывать два параметра:  и . Параметр , общий для всех ядер SVM, компенсирует неправильную классификацию обучающих примеров простотой поверхности принятия решений. Низкое значение  делает поверхность принятия решения гладкой, а высокое правильные классификации всех обучающих примеров.  определяет, какое влияние имеет один обучающий пример. Чем больше , тем ближе другие примеры должны быть затронуты.

Правильный выбор  и  имеет решающее значение для производительности SVM. Рекомендуется использовать  с  и  экспоненциально далеко друг от друга, чтобы выбрать хорошие значения.

Примеры:

  • Параметры RBF SVM
  • Нелинейный SVM

1.4.6.2. Пользовательские ядра

Вы можете определить свои собственные ядра, указав ядро ​​как функцию Python или предварительно вычислив матрицу Грама.

Классификаторы с пользовательскими ядрами ведут себя так же, как и любые другие классификаторы, за исключением того, что:

  • Поле  теперь пустое, в нем хранятся только индексы опорных векторов
  • Ссылка (а не копия) первого аргумента  метода сохраняется для использования в будущем. Если этот массив изменится между использованием  и  вы получите неожиданные результаты.

1.4.6.2.1. Использование функций Python в качестве ядер

Вы можете использовать собственные определенные ядра, передав функцию  параметру.

Ваше ядро должно принимать в качестве аргументов две матрицы формы (n_samples_1, n_features), (n_samples_2, n_features) и возвращает матрицу ядра в форме 

Следующий код определяет линейное ядро ​​и создает экземпляр классификатора, который будет использовать это ядро:

>>> import numpy as np
>>> from sklearn import svm
>>> def my_kernel(X, Y):
...     return np.dot(X, Y.T)
...
>>> clf = svm.SVC(kernel=my_kernel)

Примеры:

SVM с кастомным ядром .

1.4.6.2.2. Используя матрицу Грама

Вы можете передать предварительно вычисленные ядра, используя  параметр. Затем вы должны передать матрицу Грама вместо X к  и  методам. Должны быть предоставлены значения ядра между всеми обучающими векторами и тестовыми векторами:

>>> import numpy as np
>>> from sklearn.datasets import make_classification
>>> from sklearn.model_selection import train_test_split
>>> from sklearn import svm
>>> X, y = make_classification(n_samples=10, random_state=0)
>>> X_train , X_test , y_train, y_test = train_test_split(X, y, random_state=0)
>>> clf = svm.SVC(kernel='precomputed')
>>> # linear kernel computation
>>> gram_train = np.dot(X_train, X_train.T)
>>> clf.fit(gram_train, y_train)
SVC(kernel='precomputed')
>>> # predict on training examples
>>> gram_test = np.dot(X_test, X_train.T)
>>> clf.predict(gram_test)
array()

1.10.3. Проблемы с несколькими выходами

Задача с несколькими выходами — это проблема контролируемого обучения с несколькими выходами для прогнозирования, то есть когда Y — это 2-й массив формы .

Когда нет корреляции между выходами, очень простой способ решить эту проблему — построить n независимых моделей, то есть по одной для каждого выхода, а затем использовать эти модели для независимого прогнозирования каждого из n выходов. Однако, поскольку вполне вероятно, что выходные значения, относящиеся к одному и тому же входу, сами коррелированы, часто лучшим способом является построение единой модели, способной прогнозировать одновременно все n выходов. Во-первых, это требует меньшего времени на обучение, поскольку строится только один оценщик. Во-вторых, часто можно повысить точность обобщения итоговой оценки.

Что касается деревьев решений, эту стратегию можно легко использовать для поддержки задач с несколькими выходами. Для этого требуются следующие изменения:

  • Сохранять n выходных значений в листьях вместо 1;
  • Используйте критерии разделения, которые вычисляют среднее сокращение для всех n выходов.

Этот модуль предлагает поддержку для задач с несколькими выходами, реализуя эту стратегию как в, так  и в . Если дерево решений соответствует выходному массиву Y формы (n_samples, n_outputs), то итоговая оценка будет:

  • Вывести значения n_output при ;
  • Выведите список массивов n_output вероятностей классов на .

Использование деревьев с несколькими выходами для регрессии продемонстрировано в разделе «Регрессия дерева решений с несколькими выходами» . В этом примере вход X — это одно действительное значение, а выходы Y — синус и косинус X.

Использование деревьев с несколькими выходами для классификации демонстрируется в разделе «Завершение лица с оценками с несколькими выходами» . В этом примере входы X — это пиксели верхней половины граней, а выходы Y — пиксели нижней половины этих граней.

Примеры:

  • Регрессия дерева решений с несколькими выходами
  • Завершение лица с помощью многовыходных оценщиков

Рекомендации:

М. Дюмон и др., Быстрая мультиклассовая аннотация изображений со случайными подокнами и множественными выходными рандомизированными деревьями , Международная конференция по теории и приложениям компьютерного зрения, 2009 г.

Выберите модель

Выбор модели — это первый шаг в машинном обучении.

Вы можете использовать K-кратную перекрестную проверку или разделить обучающий набор / набор тестов, чтобы обработать набор данных и использовать его для обучения модели. Это делается для того, чтобы обученная модель могла делать прогнозы на основе нового набора данных.

Также определите, является ли проблема проблемой классификации или проблемой регрессии.

Задача классификации предсказывает категорию и метку. Вообще говоря, это двухклассовая классификация (0, 1), например, идет ли дождь.

Задача регрессии предсказывает непрерывное значение, такое как цена акции.

Зачем использовать Postman?

Сегодня Postman — супер-популярный инструмент. Им пользуются более 8 миллионов разработчиков и тестировщиков. И вот почему:

  • Бесплатный. Postman — бесплатный инструмент.
  • Простой в использовании. Очень просто начать пользоваться — Postman интуитивно понятный. Уже через несколько минут после скачивания и установки вы сможете отправить ваш первый запрос.
  • Поддерживает разные API. С помощью Postman можно выполнять разные типы запросов к любым API (REST, SOAP, GraphQL (по тестированию GraphQL c помощью Postman у нас есть отдельная статья)
  • Расширяемый. Postman можно настроить под ваши конкретные нужды с помощью Postman API.
  • Интегрируемый. Можно легко интегрировать наборы тестов в ваш любимый CI/CD инструмент с помощью Newman (CLI collection runner — позволяет запускать Postman-коллекции в командной строке)
  • Имеет большое комьюнити. Postman очень популярный и, как следствие, имеет большое комьюнити, которое подскажет ответы на большинство вопросов.

3.2.2. Оптимизация случайных параметров

Хотя использование сетки настроек параметров в настоящее время является наиболее широко используемым методом оптимизации параметров, другие методы поиска имеют более благоприятные свойства.  реализует рандомизированный поиск по параметрам, где каждый параметр выбирается из распределения по возможным значениям параметров. У этого есть два основных преимущества перед исчерпывающим поиском:

  • Бюджет можно выбрать независимо от количества параметров и возможных значений.
  • Добавление параметров, не влияющих на производительность, не снижает эффективность.

Указание того, как следует выбирать параметры, выполняется с помощью словаря, очень похожего на указание параметров для . Кроме того, с помощью  параметра указывается бюджет вычислений, представляющий собой количество выбранных кандидатов или итераций выборки . Для каждого параметра можно указать либо распределение по возможным значениям, либо список дискретных вариантов (которые будут выбираться равномерно):

{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
  'kernel': , 'class_weight':}

В этом примере используется  модуль, который содержит много полезных распределений для выборки параметров, такие как , ,  или .

В принципе, можно передать любую функцию, которая предоставляет  метод (случайной выборки) для выборки значения. Вызов  функции должен предоставлять независимые случайные выборки из возможных значений параметров при последовательных вызовах.

Предупреждение

Распределения  до версии scipy 0.16 не позволяют указывать случайное состояние. Вместо этого они используют глобальное случайное состояние numpy, которое можно засеять  или установить с помощью . Однако, начиная с scikit-learn 0.18,  модуль устанавливает случайное состояние, предоставляемое пользователем, если также доступен scipy> = 0.16.

Для непрерывных параметров, таких как  выше, важно указать непрерывное распределение, чтобы в полной мере воспользоваться преимуществами рандомизации. Таким образом, увеличение  всегда приведет к более точному поиску. Непрерывная логарифмически однородная случайная величина доступна через . Это непрерывная версия параметров, разделенных журналами. Например, чтобы указать  выше loguniform(1, 100), можно использовать вместо  или SciPy .. Это псевдоним stats.reciprocal 

Непрерывная логарифмически однородная случайная величина доступна через . Это непрерывная версия параметров, разделенных журналами. Например, чтобы указать  выше loguniform(1, 100), можно использовать вместо  или SciPy .. Это псевдоним stats.reciprocal 

Отражая приведенный выше пример в поиске по сетке, мы можем указать непрерывную случайную переменную, которая равномерно распределена между  и :

from sklearn.utils.fixes import loguniform
{'C': loguniform(1e0, 1e3),
 'gamma': loguniform(1e-4, 1e-3),
 'kernel': ,
 'class_weight':}

Примеры:

При сравнении рандомизированного поиска и поиска по сетке для оценки гиперпараметров сравнивается использование и эффективность рандомизированного поиска и поиска по сетке.

Рекомендации:

Бергстра Дж. И Бенжио Ю., Случайный поиск для оптимизации гиперпараметров, Журнал исследований в области машинного обучения (2012).

научная реализация

from sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score model = LogisticRegression()model.fit(X, y)predicted_classes = model.predict(X)accuracy = accuracy_score(y.flatten(),predicted_classes)parameters = model.coef_

Параметры моделии точность составляет 91%.

Почему параметры модели существенно отличаются от модели, которую мы реализовали с нуля?Если вы посмотрите надокументацияВ реализации логистической регрессии sk-Learn она учитывает регуляризацию. По сути, регуляризация используется для предотвращения перегрузки модели данными. Я не буду вдаваться в подробности регуляризации в этом блоге. Но пока это все. Спасибо за чтение !!

Полный код, используемый в этом блоге, можно найти в этом GitHubСделки рЕПО,

Пожалуйста, напишите мне сообщение, если вы застряли в любом месте или если у вас есть какие-либо отзывы.

Дальнейшее чтение

Этот раздел предоставляет больше ресурсов по теме, если вы хотите углубиться.

  • Как обучить окончательной модели машинного обучения
  • Сохранение и загрузка моделей машинного обучения в Python с помощью scikit-learn
  • Справочник по API scikit-learn

Резюме

В этом руководстве вы узнали, как делать классификационные и регрессионные предсказания с помощью окончательной модели машинного обучения в библиотеке Python scikit-learn.

В частности, вы узнали:

  • Как доработать модель, чтобы подготовить ее к прогнозированию.
  • Как делать классовые и вероятностные прогнозы в scikit-learn.
  • Как делать регрессионные прогнозы в scikit-Learn.

Дополнительные знания

Параметры LogisticRegression

 Эта команда вызывает все параметры по умолчанию. В функции LogisticRgression можно установить другие параметры для обычных элементов и алгоритмов оптимизации. Пожалуйста, прочитайте:

  • Официальные документы:sklearn.linear_model.LogisticRegression
  • Краткое описание использования библиотеки склеарнской логистической регрессии (LR)

Оценить модель логистической регрессии

Логистическая регрессия по сути является алгоритмом классификации, вы можете использовать общие методы оценки алгоритма классификации, в основном ROC, AUC, путаницу и т. Д.

  • Основы логистической регрессии (LR)-Вэнь Сайпин, В разделе «3. Оценка модели»
  • Метод оценки модели логистической регрессии, В видео, если параметр оценки установлен на точность, будет показана точность этой модели. Формула точности:

Математическая модель логистической регрессии

Логистическая регрессия переводит линейную зависимость в линейную регрессию в экспоненциальную позицию, обе из которых относятся к обобщенной линейной регрессии

  • Резюме алгоритма логистической регрессии и логистической регрессииПонять математическую модель логистической регрессии
  • Преимущества и недостатки логистической регрессииЛогистическая регрессия может быть использована для прогнозирования вероятности членства, но из-за характеристик кривой трудно определить порог

отношения

читатьИзучите понятия линейной регрессии, логистической регрессии и различных регрессий«2. Логистическая регрессия», объяснение связи между двумя

Импортные пакеты Sklearn:

ИмпортироватьЛогистическая регрессиямодель и другие необходимые пакеты, отsklearnпакет Python, как показано ниже:

 from sklearn.linear_model import LogisticRegressionimport matplotlib.pyplot as plt#To Split our Data set into training and test datafrom sklearn.model_selection import train_test_split# To calculate accuracy measures and confusion matrixfrom sklearn import metrics

Разделить данные на данные обучения и испытаний:

# select all rows and first 8 columns which are the #independent attributesX = array# select all rows and the 8th column which is the target column #classification # "Yes", "No" for diabetes(Dependent variable)Y = arraytest_size = 0.30 # taking 70:30 training and test setseed =1 # Random number seeding for reapeatability of the code#Splitting Data into train-test where 70% will be used for training #and rest 30% for Testing our model built on test dataX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=seed)

Давайте построим нашу модель:

# Use method LogisticRegression() imported from sklearn Logistic_model = LogisticRegression()#Let's pass our training data sets which are X_train and y_train #Our fit method below actually do all the heavy lifting to come up #with sigmoid function which we discussed earlier # So here we get our optimal surface # which will be our modelLogistic_model.fit(X_train, y_train)

Давайте посмотрим, как наша модель маркирует данные X_train, чтобы сделать классификацию:

#Let's pass X-Train data to our model and see how it predicts to # label all the independent training data as shown below: y_predict= model.predict(X_test)print("Y predict/hat ", y_predict)#compile the code and you will see the output as given below 

Вы можете видеть, что с помощью функции model.predict (X_test) наша модель классифицировала каждый атрибут столбца (X-train) как 0/1 как прогноз

Время, чтобы измерить, как модель выступила (забил)

Перед этим давайте выясним значения коэффициентов плоскости (поверхности), которую наша модель нашла в качестве поверхности наилучшего соответствия, используя приведенный ниже код:

#coefficient can be calculated as shown below making use of #model.coef_ methodcolum_label = list(X_train.columns) # To label all the coefficientmodel_Coeff = pd.DataFrame(model.coef_, columns = column_label)model_Coeff = model.intercept_print("Coefficient Values Of The Surface Are: ", model_Coeff)

Когда вы скомпилируете этот код, вы получите вывод, как показано ниже. Это разновидность линейной модели, которая имеет заданные коэффициенты и точку пересечения -5,058877. Эти ценности не что иное, как

z = 0,094Preg + 0,0255Plas +… .. + (- 5,05)

Который, получить в нашей функции сигмовидной

сигмоид, g (z) = 1 / (1 + e ^ −z).

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: