<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Leonid Zelenski</title><author><name>Leonid Zelenski</name></author><id>https://teletype.in/atom/leo3000</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/leo3000?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@leo3000?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=leo3000"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/leo3000?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-10T04:54:09.783Z</updated><entry><id>leo3000:HkcS0PF8H</id><link rel="alternate" type="text/html" href="https://teletype.in/@leo3000/HkcS0PF8H?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=leo3000"></link><title>Случайный лес (Random Forest)</title><published>2019-09-13T19:30:09.600Z</published><updated>2019-09-13T19:30:09.600Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/b1/b1046449-b5e7-4e64-aae7-21ea4cd9a77b.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/random_forest.jpg?w=700&quot;&gt;Случайный лес — один из самых потрясающих алгоритмов машинного обучения, придуманные Лео Брейманом и Адель Катлер ещё в прошлом веке. Он дошёл до нас в «первозданном виде» (никакие эвристики не смогли его существенно улучшить) и является одним из немногих универсальных алгоритмов. Универсальность заключается, во-первых, в том, что он хорош во многих задачах (по моим оценкам, 70% из встречающихся на практике, если не учитывать задачи с изображениями), во-вторых, в том, что есть случайные леса для решения задач классификации, регрессии, кластеризации, поиска аномалий, селекции признаков и т.д.</summary><content type="html">
  &lt;p&gt;Случайный лес — один из самых потрясающих алгоритмов машинного обучения, придуманные Лео Брейманом и Адель Катлер ещё в прошлом веке. Он дошёл до нас в «первозданном виде» (никакие эвристики не смогли его существенно улучшить) и является одним из немногих универсальных алгоритмов. Универсальность заключается, во-первых, в том, что он хорош во многих задачах (по моим оценкам, 70% из встречающихся на практике, если не учитывать задачи с изображениями), во-вторых, в том, что есть случайные леса для решения задач классификации, регрессии, кластеризации, поиска аномалий, селекции признаков и т.д.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/random_forest.jpg?w=700&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Этот пост — краткое практическое руководство для новичков — путеводитель по основным параметрам алгоритма с картинками (которые, кстати, построены на данных последнего &lt;a href=&quot;https://alexanderdyakonov.wordpress.com/2016/10/14/data-science-contest-%d1%81%d0%b1%d0%b5%d1%80%d0%b1%d0%b0%d0%bd%d0%ba%d0%b0/&quot; target=&quot;_blank&quot;&gt;конкурса Сбербанка&lt;/a&gt; и одной модельной задачи). Под тестом здесь понимается результат на скользящем контроле (для построения графиков использовано 5 фолдов), хотя для отложенного контроля (hold out) выводы будут такими же. Графики лежат в коридорах: дисперсионном и (если есть второй коридор) макс-минном. Все выводы и рекомендации — общие — не для конкретной задачи.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;RF (random forest)&lt;/strong&gt; — это множество решающих деревьев. В задаче регрессии их ответы усредняются, в задаче классификации принимается решение голосованием по большинству. Все деревья строятся независимо по следующей схеме:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Выбирается подвыборка обучающей выборки размера samplesize (м.б. с возвращением) – по ней строится дерево (для каждого дерева — своя подвыборка).&lt;/li&gt;
    &lt;li&gt;Для построения каждого расщепления в дереве просматриваем max_features случайных признаков (для каждого нового расщепления — свои случайные признаки).&lt;/li&gt;
    &lt;li&gt;Выбираем наилучшие признак и расщепление по нему (по заранее заданному критерию). Дерево строится, как правило, до исчерпания выборки (пока в листьях не останутся представители только одного класса), но в современных реализациях есть параметры, которые ограничивают высоту дерева, число объектов в листьях и число объектов в подвыборке, при котором проводится расщепление.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Понятно, что такая схема построения соответствует главному принципу &lt;a href=&quot;https://en.wikipedia.org/wiki/Ensemble_learning&quot; target=&quot;_blank&quot;&gt;ансамблирования&lt;/a&gt; (построению алгоритма машинного обучения на базе нескольких, в данном случае решающих деревьев): базовые алгоритмы должны быть хорошими и разнообразными (поэтому каждое дерево строится на своей обучающей выборке и при выборе расщеплений есть элемент случайности).&lt;/p&gt;
  &lt;p&gt;В библиотеке &lt;a href=&quot;http://scikit-learn.org/stable/&quot; target=&quot;_blank&quot;&gt;scikit-learn&lt;/a&gt; есть такая реализация RF (привожу только для задачи классификации):&lt;/p&gt;
  &lt;pre&gt;class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
criterion=&amp;#x27;gini&amp;#x27;, max_depth=None, min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features=&amp;#x27;auto&amp;#x27;, max_leaf_nodes=None, min_impurity_split=1e-07,
bootstrap=True, oob_score=False, n_jobs=1,
random_state=None, verbose=0, warm_start=False,
class_weight=None)&lt;/pre&gt;
  &lt;p&gt;С алгоритмом работают по стандартной схеме, принятой в scikit-learn:&lt;/p&gt;
  &lt;pre&gt;from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import roc_auc_score
# далее - (X, y) - обучение, (X2, y2) - контроль
# модель - здесь (для контраста) рассмотрим регрессор
model =  RandomForestRegressor(n_estimators=10 ,
                               oob_score=True,
                               random_state=1)
model.fit(X, y) # обучение
a = model.predict(X2) # предсказание

print (&amp;quot;AUC-ROC (oob) = &amp;quot;, roc_auc_score(y, model.oob_prediction_))
print (&amp;quot;AUC-ROC (test) = &amp;quot;, roc_auc_score(y2, a))&lt;/pre&gt;
  &lt;p&gt;Опишем, что означают основные параметры:&lt;/p&gt;
  &lt;h3&gt;Число деревьев — n_estimators&lt;/h3&gt;
  &lt;p&gt;Чем больше деревьев, тем лучше качество, но время настройки и работы RF также пропорционально увеличиваются. Обратите внимание, что часто при увеличении n_estimators качество на обучающей выборке повышается (может даже доходить до 100%), а качество на тесте выходит на асимптоту (можно прикинуть, скольких деревьев Вам достаточно).&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/n_estimators.png?w=700&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/n_estimators_model.png?w=438&amp;h=400&quot; width=&quot;438&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Число признаков для выбора расщепления — max_features&lt;/h3&gt;
  &lt;p&gt;График качества на тесте от значения этого праметра унимодальный, на обучении он строго возрастает. При увеличении max_features увеличивается время построения леса, а деревья становятся «более однообразными». По умолчанию он равен sqrt(n) в задачах классификации и n/3 в задачах регрессии. Это самый важный параметр! Его настраивают в первую очередь (при достаточном числе деревьев в лесе).&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/max_features.png?w=700&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/max_features_model.png?w=451&amp;h=220&quot; width=&quot;451&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Минимальное число объектов, при котором выполняется расщепление — min_samples_split&lt;/h3&gt;
  &lt;p&gt;Этот параметр, как правило, не очень важный и можно оставить значение по умолчанию (2). График качества на контроле может быть похожим на «расчёску» (нет явного оптимума). При увеличении параметра качество на обучении падает, а время построения RF сокращается.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_split.png?w=700&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_split_model.png?w=438&amp;h=400&quot; width=&quot;438&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Ограничение на число объектов в листьях — min_samples_leaf&lt;/h3&gt;
  &lt;p&gt;Всё, что было описано про min_samples_split, годится и для описания этого параметра. Часто можно оставить значение по умолчанию (1). Кстати, по классике, в задачах регрессии рекомендуется использовать значение 5 (в библиотеке &lt;a href=&quot;https://cran.r-project.org/web/packages/randomForest/index.html&quot; target=&quot;_blank&quot;&gt;randomForest&lt;/a&gt; для R так и реализовано, в sklearn — 1).&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_leaf.png?w=700&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_leaf_model.png?w=438&amp;h=400&quot; width=&quot;438&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Максимальная глубина деревьев — max_depth&lt;/h3&gt;
  &lt;p&gt;Ясно, что чем меньше глубина, тем быстрее строится и работает RF. При увеличении глубины резко возрастает качество на обучении, но и на контроле оно, как правило, увеличивается. Рекомендуется использовать максимальную глубину (кроме случаев, когда объектов слишком много и получаются очень глубокие деревья, построение которых занимает значительное время). При использовании неглубоких деревьев изменение параметров, связанных с ограничением числа объектов в листе и для деления, не приводит к значимому эффекту (листья и так получаются «большими»). Неглубокие деревья рекомендуют использовать в задачах с большим числом шумовых объектов (выбросов).&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/max_depth.png?w=700&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/max_depth_model.png?w=438&amp;h=400&quot; width=&quot;438&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Критерий расщепления — criterion&lt;/h3&gt;
  &lt;p&gt;По смыслу это очень важный параметр, но по факту здесь нет вариантов выбора. В библиотеке sklearn для регрессии реализованы два критерия: “mse” и “mae”, соответствуют функциям ошибки, которые они минимизируют. В большинстве задач используется mse. Сравнить их пока не берусь, т.к. mae появился совсем недавно — в версии 0.18 (и по-моему, реализован с ошибкой). Для классификации реализованы критерии “gini” и “entropy”, которые соответствуют классическим критериям расщепления: &lt;a href=&quot;https://alexanderdyakonov.wordpress.com/2015/12/15/%d0%b7%d0%bd%d0%b0%d0%ba%d0%be%d0%bc%d1%8c%d1%82%d0%b5%d1%81%d1%8c-%d0%b4%d0%b6%d0%b8%d0%bd%d0%b8/&quot; target=&quot;_blank&quot;&gt;Джини&lt;/a&gt; и энтропийному. Простой перебор поможет Вам выбрать, что использовать в конкретной задаче (в авторской реализации алгоритма использовался Джини). Подробнее о критериях надо писать отдельный пост;)&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/criterion.png?w=700&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://alexanderdyakonov.files.wordpress.com/2016/11/criterion_model.png?w=451&amp;h=220&quot; width=&quot;451&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В sklearn-реализации случайного леса нет параметра samplesize, который регламентирует, из скольких объектов делать подвыборку для построения каждого дерева. Такой параметр есть в R-реализации, но, по сути, часто оптимально выбирать из всей выборки. Также рекомендуется выбирать подвыборку с возвращением: bootstrap=True (это и есть бэггинг — bootstrap aggregating).&lt;/p&gt;
  &lt;h3&gt;Совет&lt;/h3&gt;
  &lt;p&gt;По умолчанию в sklearn-овских методах n_jobs=1, т.е. случайный лес строится на одном процессоре. Если Вы хотите существенно ускорить построение, используйте n_jobs=-1 (строить на максимально возможном числе процессоров). Для построения воспроизводимых экспериментов используйте предустановку генератора псевдослучайных чисел: random_state.&lt;/p&gt;
  &lt;p&gt;П.С. Метод RF хорош ещё тем, что при построении леса параллельно может вычисляться т.н. oob-оценка качества алгоритма (которая очень точная и получается не в ущерб разделения на обучение/тест), oob-ответы алгоритмы (ответы, которые выдавал бы алгоритм на обучающей выборке, если бы «обучался не на ней»), оцениваются важности признаков (но об этом, опять же, надо писать в отдельном посте). Ну, и не стоит забывать про &lt;a href=&quot;http://scikit-learn.org/stable/modules/grid_search.html&quot; target=&quot;_blank&quot;&gt;полный перебор значений параметров&lt;/a&gt; (если объектов в задаче не очень много).&lt;/p&gt;

</content></entry><entry><id>leo3000:BkFD2IY8S</id><link rel="alternate" type="text/html" href="https://teletype.in/@leo3000/BkFD2IY8S?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=leo3000"></link><title>Как превратить полученую строку в название переменной для вызова?</title><published>2019-09-13T18:13:53.106Z</published><updated>2019-09-13T18:13:53.106Z</updated><summary type="html">У меня есть полученый результат в ввиде строки. После манипуляций с ним мне нужно получить название переменной частью назыания которой есть полученые данные</summary><content type="html">
  &lt;p&gt;У меня есть полученый результат в ввиде строки. После манипуляций с ним мне нужно получить название переменной частью назыания которой есть полученые данные&lt;/p&gt;
  &lt;pre&gt;id999 = True
request = input(&amp;#x27;Введите число&amp;#x27;)
request = &amp;#x27;id&amp;#x27;+request
request = # Тут должна быть получена переменная
print(request)&lt;/pre&gt;

</content></entry><entry><id>leo3000:H10b2UKUr</id><link rel="alternate" type="text/html" href="https://teletype.in/@leo3000/H10b2UKUr?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=leo3000"></link><title>4 Python библиотеки для интерпретируемого машинного обучения</title><published>2019-09-13T18:12:22.454Z</published><updated>2019-09-13T18:12:22.454Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/5e/5ea238e3-d2f7-41b8-af27-a1692cb8a0e5.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/visualization.jpg&quot;&gt;Хотите добиться лучшего объяснения моделей машинного обучения? Нужна хорошая визуализация? Используйте эти Python библиотеки.</summary><content type="html">
  &lt;p&gt;Хотите добиться лучшего объяснения моделей машинного обучения? Нужна хорошая визуализация? Используйте эти Python библиотеки.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/visualization.jpg&quot; width=&quot;1200&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Из-за шума вокруг &lt;a href=&quot;https://en.wikipedia.org/wiki/Algorithmic_bias&quot; target=&quot;_blank&quot;&gt;предвзятости искусственного интеллекта&lt;/a&gt; организации всё острее нуждаются в объяснении как прогнозов создаваемых моделей, так и принципов работы.&lt;/p&gt;
  &lt;p&gt;К счастью, растёт количество библиотек, которые предлагает язык программирования Python для решения этой проблемы. Ниже краткое руководство по четырём популярным библиотекам для интерпретации и объяснения моделей &lt;a href=&quot;https://proglib.io/p/12-ml-tips/&quot; target=&quot;_blank&quot;&gt;машинного обучения&lt;/a&gt;. Устанавливаются с использованием &lt;code&gt;pip&lt;/code&gt;, поставляются с подробной документацией и делают упор на визуальную интерпретацию.&lt;/p&gt;
  &lt;h2&gt;Yellowbrick&lt;/h2&gt;
  &lt;p&gt;Эта Python &lt;a href=&quot;https://www.scikit-yb.org/en/latest/quickstart.html&quot; target=&quot;_blank&quot;&gt;библиотека&lt;/a&gt; и расширение пакета scikit-learn. Предоставляет некоторые полезные и симпатичные визуализации для моделей машинного обучения. Объекты визуализатора, основной интерфейс – оценки scikit-learn, поэтому если привыкли работать с scikit-learn, рабочий процесс покажется знакомым.&lt;/p&gt;
  &lt;p&gt;Предоставляемые визуализации охватывают выбор модели, определение значимости признаков и анализ производительности модели. Пройдёмся по нескольким кратким примерам.&lt;/p&gt;
  &lt;p&gt;Библиотека устанавливается​​ с помощью &lt;code&gt;pip&lt;/code&gt;.&lt;/p&gt;
  &lt;pre&gt;pip install yellowbrick&lt;/pre&gt;
  &lt;p&gt;Чтобы проиллюстрировать пару функциональных особенностей, будем использовать набор данных scikit-learn с именем «&lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html#sklearn.datasets.load_wine&quot; target=&quot;_blank&quot;&gt;распознавание вина&lt;/a&gt;». Этот датасет с 13 признаками и 3 целевыми классами загружается непосредственно из библиотеки scikit-learn. В приведённом ниже коде импортируем набор данных и преобразуем в объект &lt;code&gt;DataFrame&lt;/code&gt;. Классификатор умеет использовать информацию без предварительной обработки.&lt;/p&gt;
  &lt;pre&gt;import pandas as pd
from sklearn import datasets
wine_data = datasets.load_wine()
df_wine = pd.DataFrame(wine_data.data,columns=wine_data.feature_names)
df_wine[&amp;#x27;target&amp;#x27;] = pd.Series(wine_data.target)&lt;/pre&gt;
  &lt;p&gt;Применяйте scikit-learn для дальнейшего разделения датасета на проверку и тренировку.&lt;/p&gt;
  &lt;pre&gt;from sklearn.model_selection import train_test_split
X = df_wine.drop([&amp;#x27;target&amp;#x27;], axis=1)
y = df_wine[&amp;#x27;target&amp;#x27;]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)&lt;/pre&gt;
  &lt;p&gt;На следующем шаге используйте визуализатор Yellowbricks для просмотра корреляций между признаками в наборе данных.&lt;/p&gt;
  &lt;pre&gt;from yellowbrick.features import Rank2D
import matplotlib.pyplot as plt
visualizer = Rank2D(algorithm=&amp;quot;pearson&amp;quot;,  size=(1080, 720))
visualizer.fit_transform(X_train)
visualizer.poof()&lt;/pre&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/yellowbrick.jpg&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Теперь подгоним &lt;code&gt;RandomForestClassifier&lt;/code&gt; и оценим производительность с помощью другого визуализатора.&lt;/p&gt;
  &lt;pre&gt;from yellowbrick.classifier import ClassificationReport
from sklearn.ensemble import RandomForestClassifier
model =  RandomForestClassifier()
visualizer = ClassificationReport(model, size=(1080, 720))
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.poof()&lt;/pre&gt;
  &lt;h2&gt;&lt;/h2&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/yellowbrick2.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;ELI5&lt;/h2&gt;
  &lt;p&gt;&lt;a href=&quot;https://eli5.readthedocs.io/en/latest/&quot; target=&quot;_blank&quot;&gt;ELI5 &lt;/a&gt;– ещё одна библиотека визуализации, которая пригодится для отладки моделей машинного обучения и объяснения сделанных прогнозов. Работает с самыми распространёнными инструментами машинного обучения на Python, включая scikit-learn, XGBoost и Keras.&lt;/p&gt;
  &lt;p&gt;Примените ELI5 для проверки значимости признаков модели, которую рассматривали выше.&lt;/p&gt;
  &lt;pre&gt;import eli5
eli5.show_weights(model, feature_names = X.columns.tolist())&lt;/pre&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/eli5.png&quot; width=&quot;321&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;По умолчанию метод &lt;code&gt;show_weights&lt;/code&gt; использует &lt;code&gt;gain&lt;/code&gt; для расчёта веса, а когда понадобятся другие типы, добавьте аргумент &lt;code&gt;importance_type&lt;/code&gt;.&lt;/p&gt;
  &lt;p&gt;И также применяйте &lt;code&gt;show_prediction&lt;/code&gt; для проверки оснований отдельных прогнозов.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/eli5-2.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;LIME&lt;/h2&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/marcotcr/lime&quot; target=&quot;_blank&quot;&gt;LIME&lt;/a&gt; расшифровывается как локальные интерпретируемые, независимые от модели объяснения. Интерпретирует предсказания, сделанные алгоритмами машинного обучения. Lime поддерживает объяснение единичных прогнозов из диапазона классификаторов, а также взаимодействует с scikit-learn «из коробки».&lt;/p&gt;
  &lt;p&gt;Воспользуемся Lime для интерпретации прогнозов модели, которую обучали раньше.&lt;/p&gt;
  &lt;p&gt;Устанавливаем библиотеку через &lt;code&gt;pip&lt;/code&gt;.&lt;/p&gt;
  &lt;pre&gt;pip install lime&lt;/pre&gt;
  &lt;p&gt;Сначала создадим интерпретатор. Для этого берём тренировочный набор данных в виде массива из названий признаков, используемых в модели, и имён классов в целевой переменной.&lt;/p&gt;
  &lt;pre&gt;import lime.lime_tabular
explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values,                      
feature_names=X_train.columns.values.tolist(),                                        
class_names=y_train.unique())&lt;/pre&gt;
  &lt;p&gt;Затем создаём лямбда-функцию, которая берёт модель для прогнозирования выборки данных. Строчку взяли из подробного &lt;a href=&quot;https://www.guru99.com/scikit-learn-tutorial.html&quot; target=&quot;_blank&quot;&gt;руководства&lt;/a&gt; по Lime.&lt;/p&gt;
  &lt;pre&gt;predict_fn = lambda x: model.predict_proba(x).astype(float)&lt;/pre&gt;
  &lt;p&gt;Используйте интерпретатор, чтобы объяснить прогноз на отобранном образце. Результат увидите ниже. Lime создаёт визуализацию, которая показывает, как признаки внесли вклад в определённый прогноз.&lt;/p&gt;
  &lt;pre&gt;exp = explainer.explain_instance(X_test.values[0], predict_fn, num_features=6)
exp.show_in_notebook(show_all=False)&lt;/pre&gt;
  &lt;h2&gt;&lt;/h2&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/lime.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;MLxtend&lt;/h2&gt;
  &lt;p&gt;В &lt;a href=&quot;http://rasbt.github.io/mlxtend/&quot; target=&quot;_blank&quot;&gt;этой библиотеке&lt;/a&gt; найдёте массу вспомогательных функций для машинного обучения. Она охватывает классификаторы стекинга и голосования, оценку модели, выделение признаков, а также проектирование и построение графиков. Дополнительно к документации в помощь с Python библиотекой рекомендуем почитать углублённый &lt;a href=&quot;https://sebastianraschka.com/pdf/software/mlxtend-latest.pdf&quot; target=&quot;_blank&quot;&gt;материал&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Обратимся к MLxtend для сравнения границ решения классификатора голосования и составного классификатора.&lt;/p&gt;
  &lt;p&gt;Снова понадобится &lt;code&gt;pip&lt;/code&gt; для установки.&lt;/p&gt;
  &lt;pre&gt;pip install mlxtend&lt;/pre&gt;
  &lt;p&gt;Используемые импорты смотрите ниже.&lt;/p&gt;
  &lt;pre&gt;from mlxtend.plotting import plot_decision_regions
from mlxtend.classifier import EnsembleVoteClassifier
import matplotlib.gridspec as gridspec
import itertools
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier&lt;/pre&gt;
  &lt;p&gt;Следующая визуализация работает только с двумя признаками одновременно, поэтому сначала создадим массив со свойствами &lt;code&gt;proline&lt;/code&gt; и &lt;code&gt;color_intensity&lt;/code&gt;. Выбрали эти признаки из-за наибольшего веса по сравнению с теми, что проверяли выше с помощью ELI5.&lt;/p&gt;
  &lt;pre&gt;X_train_ml = X_train[[&amp;#x27;proline&amp;#x27;, &amp;#x27;color_intensity&amp;#x27;]].values
y_train_ml = y_train.values&lt;/pre&gt;
  &lt;p&gt;Затем создаём классификаторы, подгоняем к данным обучения и получаем визуализацию границ решений с помощью MLxtend. Результат под кодом.&lt;/p&gt;
  &lt;pre&gt;clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = GaussianNB()
eclf = EnsembleVoteClassifier(clfs=[clf1, clf2, clf3], weights=[1,1,1])
value=1.5
width=0.75
gs = gridspec.GridSpec(2,2)
fig = plt.figure(figsize=(10,8))
labels = [&amp;#x27;Logistic Regression&amp;#x27;, &amp;#x27;Random Forest&amp;#x27;, &amp;#x27;Naive Bayes&amp;#x27;, &amp;#x27;Ensemble&amp;#x27;]
for clf, lab, grd in zip([clf1, clf2, clf3, eclf],
                         labels,
                         itertools.product([0, 1], repeat=2)):
                         
    clf.fit(X_train_ml, y_train_ml)
    ax = plt.subplot(gs[grd[0], grd[1]])
    fig = plot_decision_regions(X=X_train_ml, y=y_train_ml, clf=clf)
    plt.title(lab)&lt;/pre&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://media.proglib.io/wp-uploads/2019/08/mlxtend.png&quot; width=&quot;581&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;На этом не исчерпывается список библиотек для интерпретации, объяснения и визуализации моделей машинного обучения, которые использует Python разработчик. Попробуйте также другие полезные инструменты из длинного &lt;a href=&quot;https://skymind.ai/wiki/python-ai&quot; target=&quot;_blank&quot;&gt;списка&lt;/a&gt;.&lt;/p&gt;
  &lt;h2&gt;Какие Python библиотеки для машинного обучения используете вы?&lt;/h2&gt;

</content></entry><entry><id>leo3000:Hk_koLFLH</id><link rel="alternate" type="text/html" href="https://teletype.in/@leo3000/Hk_koLFLH?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=leo3000"></link><title>McDonald’s планирует принимать заказы в «МакАвто» с помощью искусственного интеллекта</title><published>2019-09-13T18:07:28.360Z</published><updated>2019-09-13T18:07:28.360Z</updated><summary type="html">Компания McDonald’s приобрела калифорнийский стартап Apprente, который был основан в 2017 году и занимается разработками в сфере искусственного интеллекта, распознающего речь и реагирующего на неё. Применяться искусственный интеллект пока будет только в «МакАвто».</summary><content type="html">
  &lt;p&gt;Компания McDonald’s приобрела калифорнийский стартап Apprente, который был основан в 2017 году и занимается разработками в сфере искусственного интеллекта, распознающего речь и реагирующего на неё. Применяться искусственный интеллект пока будет только в «МакАвто».&lt;/p&gt;
  &lt;p&gt;В MsDonald&amp;#x27;s рассчитывают, что распознавание речи машиной позволит сделать работу «МакАвто» быстрее и эффективнее, так как заказы будут передаваться на кухню напрямую, без участия кассиров.&lt;/p&gt;
  &lt;p&gt;Сумма сделки не разглашается, однако, как пишет BBC, Apprente станет частью IT-подразделения McDonald’s McD Tech Labs. McDonald&amp;#x27;s уже начала внедрять новую систему в нескольких ресторанах сети в США, сообщает Business Insider. Кроме того, летом корпорация начала тестировать точки с голосовым управлением и роботизированными фритюрницами. Кроме того, как сообщает McDonald&amp;#x27;s Wired, функция распознавания номеров авто тоже могла бы быть полезной: с её помощью можно предлагать постоянным клиентам «МакАвто» их обычный заказ.&lt;/p&gt;
  &lt;p&gt;BBC отмечает, что планы McDonald’s по внедрению ИИ в свою работу вызывают опасения о том, что тысячи людей могут остаться без работы. Как пишет BBC со ссылкой на данные аналитической компании Oxford Economics, к 2030 году роботы займут до 20 млн рабочих мест в сфере промышленности. Тем не менее, гигант сферы быстрого питания объявил, что будет набирать в свою команду больше инженеров и специалистов по обработке данных.&lt;/p&gt;
  &lt;p&gt;Apprente — не первый ИИ-стартап, купленный McDonald’s. В марте компания инвестировала в технологию, созданную израильским стартапом Dynamic Yield. Технология, основанная на искусственном интеллекте, может автоматически менять меню в зависимости от различных факторов. Например, предлагать купить мороженое в жаркий день или сообщать клиентам, какие блюда уже пользуются популярностью в этом конкретном ресторане и в этот день. Тогда McDonald&amp;#x27;s заплатила 300 млн долларов за технологию.&lt;/p&gt;
  &lt;p&gt;«Этот алгоритм знает время суток, он знает погоду. Мы также можем дать ему знать, какое сейчас время, чтобы он предлагал только те блюда, которые легче сделать в наши часы пик», — сказал исполнительный директор McDonald&amp;#x27;s Стив Истербрук.&lt;/p&gt;
  &lt;p&gt;Конечная цель внедрения ИИ состояла в том, чтобы предоставить «гораздо более персонализированную модель заказа» и иметь возможность предлагать дополнительные блюда на основе первоначального заказа клиента, добавил он.&lt;/p&gt;

</content></entry></feed>