<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Leonid Zelenski</title><generator>teletype.in</generator><description><![CDATA[Leonid Zelenski]]></description><image><url>https://teletype.in/files/94/94a6cf4d-478f-4ad5-b0ab-0590a467d3bf.png</url><title>Leonid Zelenski</title><link>https://teletype.in/@leo3000</link></image><link>https://teletype.in/@leo3000?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/leo3000?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/leo3000?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 10 Jun 2026 04:58:49 GMT</pubDate><lastBuildDate>Wed, 10 Jun 2026 04:58:49 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@leo3000/HkcS0PF8H</guid><link>https://teletype.in/@leo3000/HkcS0PF8H?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000</link><comments>https://teletype.in/@leo3000/HkcS0PF8H?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000#comments</comments><dc:creator>leo3000</dc:creator><title>Случайный лес (Random Forest)</title><pubDate>Fri, 13 Sep 2019 19:30:09 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/b1/b1046449-b5e7-4e64-aae7-21ea4cd9a77b.png"></media:content><description><![CDATA[<img src="https://alexanderdyakonov.files.wordpress.com/2016/11/random_forest.jpg?w=700"></img>Случайный лес — один из самых потрясающих алгоритмов машинного обучения, придуманные Лео Брейманом и Адель Катлер ещё в прошлом веке. Он дошёл до нас в «первозданном виде» (никакие эвристики не смогли его существенно улучшить) и является одним из немногих универсальных алгоритмов. Универсальность заключается, во-первых, в том, что он хорош во многих задачах (по моим оценкам, 70% из встречающихся на практике, если не учитывать задачи с изображениями), во-вторых, в том, что есть случайные леса для решения задач классификации, регрессии, кластеризации, поиска аномалий, селекции признаков и т.д.]]></description><content:encoded><![CDATA[
  <p>Случайный лес — один из самых потрясающих алгоритмов машинного обучения, придуманные Лео Брейманом и Адель Катлер ещё в прошлом веке. Он дошёл до нас в «первозданном виде» (никакие эвристики не смогли его существенно улучшить) и является одним из немногих универсальных алгоритмов. Универсальность заключается, во-первых, в том, что он хорош во многих задачах (по моим оценкам, 70% из встречающихся на практике, если не учитывать задачи с изображениями), во-вторых, в том, что есть случайные леса для решения задач классификации, регрессии, кластеризации, поиска аномалий, селекции признаков и т.д.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/random_forest.jpg?w=700" width="700" />
  </figure>
  <p>Этот пост — краткое практическое руководство для новичков — путеводитель по основным параметрам алгоритма с картинками (которые, кстати, построены на данных последнего <a href="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/" target="_blank">конкурса Сбербанка</a> и одной модельной задачи). Под тестом здесь понимается результат на скользящем контроле (для построения графиков использовано 5 фолдов), хотя для отложенного контроля (hold out) выводы будут такими же. Графики лежат в коридорах: дисперсионном и (если есть второй коридор) макс-минном. Все выводы и рекомендации — общие — не для конкретной задачи.</p>
  <p><strong>RF (random forest)</strong> — это множество решающих деревьев. В задаче регрессии их ответы усредняются, в задаче классификации принимается решение голосованием по большинству. Все деревья строятся независимо по следующей схеме:</p>
  <ul>
    <li>Выбирается подвыборка обучающей выборки размера samplesize (м.б. с возвращением) – по ней строится дерево (для каждого дерева — своя подвыборка).</li>
    <li>Для построения каждого расщепления в дереве просматриваем max_features случайных признаков (для каждого нового расщепления — свои случайные признаки).</li>
    <li>Выбираем наилучшие признак и расщепление по нему (по заранее заданному критерию). Дерево строится, как правило, до исчерпания выборки (пока в листьях не останутся представители только одного класса), но в современных реализациях есть параметры, которые ограничивают высоту дерева, число объектов в листьях и число объектов в подвыборке, при котором проводится расщепление.</li>
  </ul>
  <p>Понятно, что такая схема построения соответствует главному принципу <a href="https://en.wikipedia.org/wiki/Ensemble_learning" target="_blank">ансамблирования</a> (построению алгоритма машинного обучения на базе нескольких, в данном случае решающих деревьев): базовые алгоритмы должны быть хорошими и разнообразными (поэтому каждое дерево строится на своей обучающей выборке и при выборе расщеплений есть элемент случайности).</p>
  <p>В библиотеке <a href="http://scikit-learn.org/stable/" target="_blank">scikit-learn</a> есть такая реализация RF (привожу только для задачи классификации):</p>
  <pre>class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
criterion=&#x27;gini&#x27;, max_depth=None, min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features=&#x27;auto&#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)</pre>
  <p>С алгоритмом работают по стандартной схеме, принятой в scikit-learn:</p>
  <pre>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 (&quot;AUC-ROC (oob) = &quot;, roc_auc_score(y, model.oob_prediction_))
print (&quot;AUC-ROC (test) = &quot;, roc_auc_score(y2, a))</pre>
  <p>Опишем, что означают основные параметры:</p>
  <h3>Число деревьев — n_estimators</h3>
  <p>Чем больше деревьев, тем лучше качество, но время настройки и работы RF также пропорционально увеличиваются. Обратите внимание, что часто при увеличении n_estimators качество на обучающей выборке повышается (может даже доходить до 100%), а качество на тесте выходит на асимптоту (можно прикинуть, скольких деревьев Вам достаточно).</p>
  <p></p>
  <figure class="m_original">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/n_estimators.png?w=700" width="700" />
  </figure>
  <p></p>
  <figure class="m_custom">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/n_estimators_model.png?w=438&h=400" width="438" />
  </figure>
  <h3>Число признаков для выбора расщепления — max_features</h3>
  <p>График качества на тесте от значения этого праметра унимодальный, на обучении он строго возрастает. При увеличении max_features увеличивается время построения леса, а деревья становятся «более однообразными». По умолчанию он равен sqrt(n) в задачах классификации и n/3 в задачах регрессии. Это самый важный параметр! Его настраивают в первую очередь (при достаточном числе деревьев в лесе).</p>
  <p></p>
  <figure class="m_original">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/max_features.png?w=700" width="700" />
  </figure>
  <p></p>
  <figure class="m_custom">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/max_features_model.png?w=451&h=220" width="451" />
  </figure>
  <h3>Минимальное число объектов, при котором выполняется расщепление — min_samples_split</h3>
  <p>Этот параметр, как правило, не очень важный и можно оставить значение по умолчанию (2). График качества на контроле может быть похожим на «расчёску» (нет явного оптимума). При увеличении параметра качество на обучении падает, а время построения RF сокращается.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_split.png?w=700" width="700" />
  </figure>
  <p></p>
  <figure class="m_custom">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_split_model.png?w=438&h=400" width="438" />
  </figure>
  <h3>Ограничение на число объектов в листьях — min_samples_leaf</h3>
  <p>Всё, что было описано про min_samples_split, годится и для описания этого параметра. Часто можно оставить значение по умолчанию (1). Кстати, по классике, в задачах регрессии рекомендуется использовать значение 5 (в библиотеке <a href="https://cran.r-project.org/web/packages/randomForest/index.html" target="_blank">randomForest</a> для R так и реализовано, в sklearn — 1).</p>
  <p></p>
  <figure class="m_original">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_leaf.png?w=700" width="700" />
  </figure>
  <p></p>
  <figure class="m_custom">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/min_samples_leaf_model.png?w=438&h=400" width="438" />
  </figure>
  <h3>Максимальная глубина деревьев — max_depth</h3>
  <p>Ясно, что чем меньше глубина, тем быстрее строится и работает RF. При увеличении глубины резко возрастает качество на обучении, но и на контроле оно, как правило, увеличивается. Рекомендуется использовать максимальную глубину (кроме случаев, когда объектов слишком много и получаются очень глубокие деревья, построение которых занимает значительное время). При использовании неглубоких деревьев изменение параметров, связанных с ограничением числа объектов в листе и для деления, не приводит к значимому эффекту (листья и так получаются «большими»). Неглубокие деревья рекомендуют использовать в задачах с большим числом шумовых объектов (выбросов).</p>
  <p></p>
  <figure class="m_original">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/max_depth.png?w=700" width="700" />
  </figure>
  <p></p>
  <figure class="m_custom">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/max_depth_model.png?w=438&h=400" width="438" />
  </figure>
  <h3>Критерий расщепления — criterion</h3>
  <p>По смыслу это очень важный параметр, но по факту здесь нет вариантов выбора. В библиотеке sklearn для регрессии реализованы два критерия: “mse” и “mae”, соответствуют функциям ошибки, которые они минимизируют. В большинстве задач используется mse. Сравнить их пока не берусь, т.к. mae появился совсем недавно — в версии 0.18 (и по-моему, реализован с ошибкой). Для классификации реализованы критерии “gini” и “entropy”, которые соответствуют классическим критериям расщепления: <a href="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/" target="_blank">Джини</a> и энтропийному. Простой перебор поможет Вам выбрать, что использовать в конкретной задаче (в авторской реализации алгоритма использовался Джини). Подробнее о критериях надо писать отдельный пост;)</p>
  <p></p>
  <figure class="m_original">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/criterion.png?w=700" width="700" />
  </figure>
  <p></p>
  <figure class="m_custom">
    <img src="https://alexanderdyakonov.files.wordpress.com/2016/11/criterion_model.png?w=451&h=220" width="451" />
  </figure>
  <p>В sklearn-реализации случайного леса нет параметра samplesize, который регламентирует, из скольких объектов делать подвыборку для построения каждого дерева. Такой параметр есть в R-реализации, но, по сути, часто оптимально выбирать из всей выборки. Также рекомендуется выбирать подвыборку с возвращением: bootstrap=True (это и есть бэггинг — bootstrap aggregating).</p>
  <h3>Совет</h3>
  <p>По умолчанию в sklearn-овских методах n_jobs=1, т.е. случайный лес строится на одном процессоре. Если Вы хотите существенно ускорить построение, используйте n_jobs=-1 (строить на максимально возможном числе процессоров). Для построения воспроизводимых экспериментов используйте предустановку генератора псевдослучайных чисел: random_state.</p>
  <p>П.С. Метод RF хорош ещё тем, что при построении леса параллельно может вычисляться т.н. oob-оценка качества алгоритма (которая очень точная и получается не в ущерб разделения на обучение/тест), oob-ответы алгоритмы (ответы, которые выдавал бы алгоритм на обучающей выборке, если бы «обучался не на ней»), оцениваются важности признаков (но об этом, опять же, надо писать в отдельном посте). Ну, и не стоит забывать про <a href="http://scikit-learn.org/stable/modules/grid_search.html" target="_blank">полный перебор значений параметров</a> (если объектов в задаче не очень много).</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@leo3000/BkFD2IY8S</guid><link>https://teletype.in/@leo3000/BkFD2IY8S?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000</link><comments>https://teletype.in/@leo3000/BkFD2IY8S?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000#comments</comments><dc:creator>leo3000</dc:creator><title>Как превратить полученую строку в название переменной для вызова?</title><pubDate>Fri, 13 Sep 2019 18:13:53 GMT</pubDate><description><![CDATA[У меня есть полученый результат в ввиде строки. После манипуляций с ним мне нужно получить название переменной частью назыания которой есть полученые данные]]></description><content:encoded><![CDATA[
  <p>У меня есть полученый результат в ввиде строки. После манипуляций с ним мне нужно получить название переменной частью назыания которой есть полученые данные</p>
  <pre>id999 = True
request = input(&#x27;Введите число&#x27;)
request = &#x27;id&#x27;+request
request = # Тут должна быть получена переменная
print(request)</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@leo3000/H10b2UKUr</guid><link>https://teletype.in/@leo3000/H10b2UKUr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000</link><comments>https://teletype.in/@leo3000/H10b2UKUr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000#comments</comments><dc:creator>leo3000</dc:creator><title>4 Python библиотеки для интерпретируемого машинного обучения</title><pubDate>Fri, 13 Sep 2019 18:12:22 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/5e/5ea238e3-d2f7-41b8-af27-a1692cb8a0e5.png"></media:content><description><![CDATA[<img src="https://media.proglib.io/wp-uploads/2019/08/visualization.jpg"></img>Хотите добиться лучшего объяснения моделей машинного обучения? Нужна хорошая визуализация? Используйте эти Python библиотеки.]]></description><content:encoded><![CDATA[
  <p>Хотите добиться лучшего объяснения моделей машинного обучения? Нужна хорошая визуализация? Используйте эти Python библиотеки.</p>
  <p></p>
  <p></p>
  <p></p>
  <figure class="m_custom">
    <img src="https://media.proglib.io/wp-uploads/2019/08/visualization.jpg" width="1200" />
  </figure>
  <p>Из-за шума вокруг <a href="https://en.wikipedia.org/wiki/Algorithmic_bias" target="_blank">предвзятости искусственного интеллекта</a> организации всё острее нуждаются в объяснении как прогнозов создаваемых моделей, так и принципов работы.</p>
  <p>К счастью, растёт количество библиотек, которые предлагает язык программирования Python для решения этой проблемы. Ниже краткое руководство по четырём популярным библиотекам для интерпретации и объяснения моделей <a href="https://proglib.io/p/12-ml-tips/" target="_blank">машинного обучения</a>. Устанавливаются с использованием <code>pip</code>, поставляются с подробной документацией и делают упор на визуальную интерпретацию.</p>
  <h2>Yellowbrick</h2>
  <p>Эта Python <a href="https://www.scikit-yb.org/en/latest/quickstart.html" target="_blank">библиотека</a> и расширение пакета scikit-learn. Предоставляет некоторые полезные и симпатичные визуализации для моделей машинного обучения. Объекты визуализатора, основной интерфейс – оценки scikit-learn, поэтому если привыкли работать с scikit-learn, рабочий процесс покажется знакомым.</p>
  <p>Предоставляемые визуализации охватывают выбор модели, определение значимости признаков и анализ производительности модели. Пройдёмся по нескольким кратким примерам.</p>
  <p>Библиотека устанавливается​​ с помощью <code>pip</code>.</p>
  <pre>pip install yellowbrick</pre>
  <p>Чтобы проиллюстрировать пару функциональных особенностей, будем использовать набор данных scikit-learn с именем «<a href="https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html#sklearn.datasets.load_wine" target="_blank">распознавание вина</a>». Этот датасет с 13 признаками и 3 целевыми классами загружается непосредственно из библиотеки scikit-learn. В приведённом ниже коде импортируем набор данных и преобразуем в объект <code>DataFrame</code>. Классификатор умеет использовать информацию без предварительной обработки.</p>
  <pre>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[&#x27;target&#x27;] = pd.Series(wine_data.target)</pre>
  <p>Применяйте scikit-learn для дальнейшего разделения датасета на проверку и тренировку.</p>
  <pre>from sklearn.model_selection import train_test_split
X = df_wine.drop([&#x27;target&#x27;], axis=1)
y = df_wine[&#x27;target&#x27;]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)</pre>
  <p>На следующем шаге используйте визуализатор Yellowbricks для просмотра корреляций между признаками в наборе данных.</p>
  <pre>from yellowbrick.features import Rank2D
import matplotlib.pyplot as plt
visualizer = Rank2D(algorithm=&quot;pearson&quot;,  size=(1080, 720))
visualizer.fit_transform(X_train)
visualizer.poof()</pre>
  <p></p>
  <figure class="m_custom">
    <img src="https://media.proglib.io/wp-uploads/2019/08/yellowbrick.jpg" width="700" />
  </figure>
  <p>Теперь подгоним <code>RandomForestClassifier</code> и оценим производительность с помощью другого визуализатора.</p>
  <pre>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()</pre>
  <h2></h2>
  <figure class="m_custom">
    <img src="https://media.proglib.io/wp-uploads/2019/08/yellowbrick2.png" width="700" />
  </figure>
  <h2>ELI5</h2>
  <p><a href="https://eli5.readthedocs.io/en/latest/" target="_blank">ELI5 </a>– ещё одна библиотека визуализации, которая пригодится для отладки моделей машинного обучения и объяснения сделанных прогнозов. Работает с самыми распространёнными инструментами машинного обучения на Python, включая scikit-learn, XGBoost и Keras.</p>
  <p>Примените ELI5 для проверки значимости признаков модели, которую рассматривали выше.</p>
  <pre>import eli5
eli5.show_weights(model, feature_names = X.columns.tolist())</pre>
  <p></p>
  <figure class="m_custom">
    <img src="https://media.proglib.io/wp-uploads/2019/08/eli5.png" width="321" />
  </figure>
  <p>По умолчанию метод <code>show_weights</code> использует <code>gain</code> для расчёта веса, а когда понадобятся другие типы, добавьте аргумент <code>importance_type</code>.</p>
  <p>И также применяйте <code>show_prediction</code> для проверки оснований отдельных прогнозов.</p>
  <p></p>
  <figure class="m_custom">
    <img src="https://media.proglib.io/wp-uploads/2019/08/eli5-2.png" width="700" />
  </figure>
  <h2>LIME</h2>
  <p><a href="https://github.com/marcotcr/lime" target="_blank">LIME</a> расшифровывается как локальные интерпретируемые, независимые от модели объяснения. Интерпретирует предсказания, сделанные алгоритмами машинного обучения. Lime поддерживает объяснение единичных прогнозов из диапазона классификаторов, а также взаимодействует с scikit-learn «из коробки».</p>
  <p>Воспользуемся Lime для интерпретации прогнозов модели, которую обучали раньше.</p>
  <p>Устанавливаем библиотеку через <code>pip</code>.</p>
  <pre>pip install lime</pre>
  <p>Сначала создадим интерпретатор. Для этого берём тренировочный набор данных в виде массива из названий признаков, используемых в модели, и имён классов в целевой переменной.</p>
  <pre>import lime.lime_tabular
explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values,                      
feature_names=X_train.columns.values.tolist(),                                        
class_names=y_train.unique())</pre>
  <p>Затем создаём лямбда-функцию, которая берёт модель для прогнозирования выборки данных. Строчку взяли из подробного <a href="https://www.guru99.com/scikit-learn-tutorial.html" target="_blank">руководства</a> по Lime.</p>
  <pre>predict_fn = lambda x: model.predict_proba(x).astype(float)</pre>
  <p>Используйте интерпретатор, чтобы объяснить прогноз на отобранном образце. Результат увидите ниже. Lime создаёт визуализацию, которая показывает, как признаки внесли вклад в определённый прогноз.</p>
  <pre>exp = explainer.explain_instance(X_test.values[0], predict_fn, num_features=6)
exp.show_in_notebook(show_all=False)</pre>
  <h2></h2>
  <figure class="m_custom">
    <img src="https://media.proglib.io/wp-uploads/2019/08/lime.png" width="700" />
  </figure>
  <h2>MLxtend</h2>
  <p>В <a href="http://rasbt.github.io/mlxtend/" target="_blank">этой библиотеке</a> найдёте массу вспомогательных функций для машинного обучения. Она охватывает классификаторы стекинга и голосования, оценку модели, выделение признаков, а также проектирование и построение графиков. Дополнительно к документации в помощь с Python библиотекой рекомендуем почитать углублённый <a href="https://sebastianraschka.com/pdf/software/mlxtend-latest.pdf" target="_blank">материал</a>.</p>
  <p>Обратимся к MLxtend для сравнения границ решения классификатора голосования и составного классификатора.</p>
  <p>Снова понадобится <code>pip</code> для установки.</p>
  <pre>pip install mlxtend</pre>
  <p>Используемые импорты смотрите ниже.</p>
  <pre>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</pre>
  <p>Следующая визуализация работает только с двумя признаками одновременно, поэтому сначала создадим массив со свойствами <code>proline</code> и <code>color_intensity</code>. Выбрали эти признаки из-за наибольшего веса по сравнению с теми, что проверяли выше с помощью ELI5.</p>
  <pre>X_train_ml = X_train[[&#x27;proline&#x27;, &#x27;color_intensity&#x27;]].values
y_train_ml = y_train.values</pre>
  <p>Затем создаём классификаторы, подгоняем к данным обучения и получаем визуализацию границ решений с помощью MLxtend. Результат под кодом.</p>
  <pre>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 = [&#x27;Logistic Regression&#x27;, &#x27;Random Forest&#x27;, &#x27;Naive Bayes&#x27;, &#x27;Ensemble&#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)</pre>
  <p></p>
  <figure class="m_custom">
    <img src="https://media.proglib.io/wp-uploads/2019/08/mlxtend.png" width="581" />
  </figure>
  <p>На этом не исчерпывается список библиотек для интерпретации, объяснения и визуализации моделей машинного обучения, которые использует Python разработчик. Попробуйте также другие полезные инструменты из длинного <a href="https://skymind.ai/wiki/python-ai" target="_blank">списка</a>.</p>
  <h2>Какие Python библиотеки для машинного обучения используете вы?</h2>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@leo3000/Hk_koLFLH</guid><link>https://teletype.in/@leo3000/Hk_koLFLH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000</link><comments>https://teletype.in/@leo3000/Hk_koLFLH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=leo3000#comments</comments><dc:creator>leo3000</dc:creator><title>McDonald’s планирует принимать заказы в «МакАвто» с помощью искусственного интеллекта</title><pubDate>Fri, 13 Sep 2019 18:07:28 GMT</pubDate><description><![CDATA[Компания McDonald’s приобрела калифорнийский стартап Apprente, который был основан в 2017 году и занимается разработками в сфере искусственного интеллекта, распознающего речь и реагирующего на неё. Применяться искусственный интеллект пока будет только в «МакАвто».]]></description><content:encoded><![CDATA[
  <p>Компания McDonald’s приобрела калифорнийский стартап Apprente, который был основан в 2017 году и занимается разработками в сфере искусственного интеллекта, распознающего речь и реагирующего на неё. Применяться искусственный интеллект пока будет только в «МакАвто».</p>
  <p>В MsDonald&#x27;s рассчитывают, что распознавание речи машиной позволит сделать работу «МакАвто» быстрее и эффективнее, так как заказы будут передаваться на кухню напрямую, без участия кассиров.</p>
  <p>Сумма сделки не разглашается, однако, как пишет BBC, Apprente станет частью IT-подразделения McDonald’s McD Tech Labs. McDonald&#x27;s уже начала внедрять новую систему в нескольких ресторанах сети в США, сообщает Business Insider. Кроме того, летом корпорация начала тестировать точки с голосовым управлением и роботизированными фритюрницами. Кроме того, как сообщает McDonald&#x27;s Wired, функция распознавания номеров авто тоже могла бы быть полезной: с её помощью можно предлагать постоянным клиентам «МакАвто» их обычный заказ.</p>
  <p>BBC отмечает, что планы McDonald’s по внедрению ИИ в свою работу вызывают опасения о том, что тысячи людей могут остаться без работы. Как пишет BBC со ссылкой на данные аналитической компании Oxford Economics, к 2030 году роботы займут до 20 млн рабочих мест в сфере промышленности. Тем не менее, гигант сферы быстрого питания объявил, что будет набирать в свою команду больше инженеров и специалистов по обработке данных.</p>
  <p>Apprente — не первый ИИ-стартап, купленный McDonald’s. В марте компания инвестировала в технологию, созданную израильским стартапом Dynamic Yield. Технология, основанная на искусственном интеллекте, может автоматически менять меню в зависимости от различных факторов. Например, предлагать купить мороженое в жаркий день или сообщать клиентам, какие блюда уже пользуются популярностью в этом конкретном ресторане и в этот день. Тогда McDonald&#x27;s заплатила 300 млн долларов за технологию.</p>
  <p>«Этот алгоритм знает время суток, он знает погоду. Мы также можем дать ему знать, какое сейчас время, чтобы он предлагал только те блюда, которые легче сделать в наши часы пик», — сказал исполнительный директор McDonald&#x27;s Стив Истербрук.</p>
  <p>Конечная цель внедрения ИИ состояла в том, чтобы предоставить «гораздо более персонализированную модель заказа» и иметь возможность предлагать дополнительные блюда на основе первоначального заказа клиента, добавил он.</p>

]]></content:encoded></item></channel></rss>