Шпаргалка scikit-learn: функции для машинного обучения
В этой статье мы рассмотрим 50 наиболее полезных функций, предоставляемых Sci-kitlearn для задач машинного обучения. От предварительной обработки данных до выбора и оценки модели — эти функции охватывают широкий спектр методов и методологий для решения реальных задач. Мы будем использовать готовые наборы данных, чтобы проиллюстрировать применение каждой функции, чтобы вам было легче следовать и применять их в ваших собственных проектах.
Звучит фантастически? А теперь сюрприз: многие из этих функций просты в использовании и требуют для реализации всего несколько строк кода. Независимо от того, являетесь ли вы опытным специалистом по данным или только начинаете, эта памятка поможет вам лучше познакомиться с мощными инструментами, доступными в Sci-kit, и позволит вам ускорить свои проекты по науке о данных и машинному обучению.
Итак, возьмите свой любимый напиток, откиньтесь на спинку кресла и давайте погрузимся в мир Sci-kit Learn!
train_test_split
Эта функция используется для разделения набора данных на наборы для обучения и тестирования. Она принимает набор данных, целевую переменную и размер тестового набора в качестве параметров.
2 простых способа нормализовать данные в Python
В этом руководстве мы узнаем, как нормализовать данные в Python. При нормализации меняем масштаб данных. Чаще всего масштабирование данных изменяется в диапазоне от 0 до 1.
Почему нам нужно нормализовать данные в Python?
Алгоритмы машинного обучения, как правило, работают лучше или сходятся быстрее, когда различные функции (переменные) имеют меньший масштаб. Поэтому перед обучением на них моделей машинного обучения данные обычно нормализуются.
Нормализация также делает процесс обучения менее чувствительным к масштабу функций. Это приводит к улучшению коэффициентов после тренировки.
Этот процесс повышения пригодности функций для обучения путем изменения масштаба называется масштабированием функций.
Формула нормализации приведена ниже:
Затем нам нужно выбрать столбец и преобразовать его в массив. Мы собираемся использовать столбец total_bedrooms .
from sklearn import preprocessing x_array = np.array(housing['total_bedrooms']) normalized_arr = preprocessing.normalize([x_array]) print(normalized_arr)
[[0.01437454 0.02129852 0.00194947 . 0.00594924 0.00618453 0.00336115]]
Как нормализовать набор данных без преобразования столбцов в массив?
Давайте посмотрим, что произойдет, когда мы попытаемся нормализовать набор данных без преобразования функций в массивы для обработки.
from sklearn import preprocessing import pandas as pd housing = pd.read_csv("/content/sample_data/california_housing_train.csv") d = preprocessing.normalize(housing) scaled_df = pd.DataFrame(d, columns=names) scaled_df.head()

Вы можете видеть, что столбец total_bedrooms в выходных данных совпадает с столбцом, который мы получили выше после преобразования его в массив и последующей нормализации.
Использование MinMaxScaler() для нормализации данных в Python
Когда дело доходит до нормализации данных, Sklearn предоставляет еще один вариант: MinMaxScaler.
Это более популярный выбор для нормализации наборов данных.
Вот код для нормализации набора данных жилья с помощью MinMaxScaler:
from sklearn import preprocessing import pandas as pd housing = pd.read_csv("/content/sample_data/california_housing_train.csv") scaler = preprocessing.MinMaxScaler() names = housing.columns d = scaler.fit_transform(housing) scaled_df = pd.DataFrame(d, columns=names) scaled_df.head()

Вы можете видеть, что значения на выходе находятся между (0 и 1).
MinMaxScaler также дает вам возможность выбрать диапазон функций. По умолчанию диапазон установлен на (0,1). Посмотрим, как изменить диапазон на (0,2).
from sklearn import preprocessing import pandas as pd housing = pd.read_csv("/content/sample_data/california_housing_train.csv") scaler = preprocessing.MinMaxScaler(feature_range=(0, 2)) names = housing.columns d = scaler.fit_transform(housing) scaled_df = pd.DataFrame(d, columns=names) scaled_df.head()

![диапазон: (0,2)</p>
<p>» /></p>
<p>Значения на выходе теперь находятся в диапазоне (0,2).</p>
<h3>Вывод</h3>
<p>Это два метода нормализации данных в Python. Мы рассмотрели два метода нормализации данных в разделе sklearn. Надеюсь, вам было весело учиться с нами!</p>
<h2>Что такое Scikit Learn — гайд по популярной библиотеке Python для начинающих</h2>
<p>Scikit-learn — один из наиболее широко используемых пакетов Python для Data Science и Machine Learning. Он позволяет выполнять множество операций и предоставляет множество алгоритмов. Scikit-learn также предлагает отличную документацию о своих классах, методах и функциях, а также описание используемых алгоритмов.</p>
<ul>
<li>предварительную обработку данных;</li>
<li>уменьшение размерности;</li>
<li>выбор модели;</li>
<li>регрессии;</li>
<li>классификации;</li>
<li>кластерный анализ.</li>
</ul>
<p>Он также предоставляет несколько наборов данных, которые вы можете использовать для тестирования ваших моделей.</p>
<p>Scikit-learn не реализует все, что связано с машинным обучением. Например, он не имеет комплексной поддержки для:</p>
<ul>
<li>нейронных сетей;</li>
<li>самоорганизующихся карт (сетей Кохонена);</li>
<li>обучения ассоциативным правилам;</li>
<li>обучения с подкреплением (reinforcement learning).</li>
</ul>
<p>Scikit-learn основан на NumPy и SciPy, поэтому необходимо понять хотя бы азы этих двух библиотек, чтобы эффективно применять Scikit-learn.</p>
<p>Scikit-learn — это пакет с открытым исходным кодом. Как и большинство материалов из экосистемы Python, он бесплатный даже для коммерческого использования. Он лицензирован под лицензией BSD.</p>
<p>В этой статье кратко представим некоторые возможности scikit-learn.</p>
<h3>Предварительная обработка данных</h3>
<p>Вы можете использовать scikit-learn для подготовки ваших данных к алгоритмам машинного обучения: стандартизации или нормализации данных, кодирования категориальных переменных и многое другое.</p>
<p>Давайте сначала определим массив NumPy, с которым будем работать:</p>
<pre>>>> import numpy as np<br />>>> x = np.array([[0.1, 1.0, 22.8],<br />. [0.5, 5.0, 41.2],<br />. [1.2, 12.0, 2.8],<br />. [0.8, 8.0, 14.0]])<br />>>> x<br />array([[ 0.1, 1. , 22.8], <br />[ 0.5, 5. , 41.2], <br />[ 1.2, 12. , 2.8], <br />[ 0.8, 8. , 14. ]])</pre>
<p>Вам часто нужно преобразовывать данные таким образом, чтобы среднее значение каждого столбца (элемента) было равно нулю, а стандартное отклонение — единице. В этом случае, можно использовать sklearn.preprocessing.StandardScaler:</p>
<pre>>>> from sklearn.preprocessing import StandardScaler<br />>>> scaler = StandardScaler()<br />>>> scaled_x = scaler.fit_transform(x)<br />>>> scaler.scale_<br />array([ 0.40311289, 4.03112887, 14.04421589])<br />>>> scaler.mean_<br />array([ 0.65, 6.5 , 20.2 ])<br />>>> scaler.var_<br />array([1.6250e-01, 1.6250e+01, 1.9724e+02])<br />>>> scaled_x<br />array([[-1.36438208, -1.36438208, 0.18512959], <br />[-0.3721042 , -0.3721042 , 1.4952775 ], <br />[ 1.36438208, 1.36438208, -1.23894421], <br />[ 0.3721042 , 0.3721042 , -0.44146288]])<br />>>> scaled_x.mean().round(decimals=4)<br />0.0<br />>>> scaled_x.mean(axis=0)<br />array([ 1.66533454e-16, -1.38777878e-17, 1.52655666e-16])<br />>>> scaled_x.std(axis=0)<br />array([1., 1., 1.])<br />>>> scaler.inverse_transform(scaled_x)<br />array([[ 0.1, 1. , 22.8], <br />[ 0.5, 5. , 41.2], <br />[ 1.2, 12. , 2.8], <br />[ 0.8, 8. , 14. ]])</pre>
<p>Бывает, что у вас есть некоторые категориальные данные, и вам нужно преобразовать их в числа. Один из способов сделать это — использовать класс sklearn.preprocessing.OneHotEncoder. Рассмотрим следующий пример с массивами ролей в компании:</p>
<pre>>>> from sklearn.preprocessing import OneHotEncoder<br />>>> roles = np.array([('Tom', 'manager'),<br />. ('Mary', 'developer'),<br />. ('Ann', 'recruiter'),<br />. ('Jim', 'developer')])<br />>>> roles<br />array([['Tom', 'manager'], <br />['Mary', 'developer'], <br />['Ann', 'recruiter'], <br />['Jim', 'developer']], dtype='<u9')>>> encoder = OneHotEncoder()<br />>>> encoded_roles = encoder.fit_transform(roles[:, [1]])<br />>>> encoded_roles.toarray()<br />array([[0., 1., 0.], <br />[1., 0., 0.], <br />[0., 0., 1.], <br />[1., 0., 0.]])</u9')></pre>
<p>В приведенном выше примере первый столбец объекта encoded_roles указывает, является ли каждый сотрудник разработчиком. Второй и четвертый сотрудник (Мэри и Джим) — разработчики. Второй столбец связан с должностью менеджера. Только первый сотрудник (Том) имеет эту должность. Наконец, третий столбец соответствует должности рекрутера, и им является третий сотрудник (Энн).</p>
<h3>Уменьшение размерности</h3>
<p>Уменьшение размерности включает в себя выбор или извлечение наиболее важных компонентов (признаков) многомерного набора данных. Scikit-learn предлагает несколько подходов к уменьшению размерности. Одним из них является анализ основных компонентов (PCA).</p>
<h3>Выбор модели</h3>
<p>Для обучения и тестирования моделей машинного обучения, вам необходимо случайным образом разбивать данные на подмножества. Это включает как входы, так и их соответствующие выходы. Функция sklearn.model_selection.train_test_split () полезна в таких случаях:</p>
<pre>>>> import numpy as np<br />>>> from sklearn.model_selection import train_test_split<br />>>> x, y = np.arange(1, 21).reshape(-1, 2), np.arange(3, 40, 4)<br />>>> x<br />array([[ 1, 2], <br />[ 3, 4], <br />[ 5, 6], <br />[ 7, 8], <br />[ 9, 10], <br />[11, 12], <br />[13, 14], <br />[15, 16], <br />[17, 18], <br />[19, 20]])<br />>>> y<br />array([ 3, 7, 11, 15, 19, 23, 27, 31, 35, 39])<br />>>> x_train, x_test, y_train, y_test =\<br />. train_test_split(x, y, test_size=0.4, random_state=0)<br />>>> x_train<br />array([[ 3, 4], <br />[13, 14], <br />[15, 16], <br />[ 7, 8], <br />[ 1, 2], <br />[11, 12]])<br />>>> y_train<br />array([ 7, 27, 31, 15, 3, 23])<br />>>> x_test<br />array([[ 5, 6], <br />[17, 18], <br />[ 9, 10], <br />[19, 20]])<br />>>> y_test<br />array([11, 35, 19, 39])</pre>
<p>В дополнение к обычному разделению наборов данных, scikit-learn предоставляет средства для осуществления перекрестной проверки, настройки гиперпараметров ваших моделей с помощью поиска по сетке, вычисления многих величин, которые показывают производительность модели (например, коэффициент детерминации, среднеквадратичная ошибка, показатель отклонения с пояснением, матрица ошибок, отчет о классификации, f-показатели и многое другое).</p>
<h3>Набор данных</h3>
<p>Scikit-learn предоставляет несколько наборов данных, подходящих для изучения и тестирования ваших моделей. В основном, это известные наборы данных. Они представляют собой достаточный объем данных для тестирования моделей и в то же время не очень большой, что обеспечивает приемлемую продолжительность обучения.</p>
<p>Например, функция sklearn.datasets.load_boston () отображает данные о ценах на дома в районе Бостона (цены не обновляются!). Есть 506 наблюдений, а входная матрица имеет 13 столбцов (признаков):</p>
<pre>>>> from sklearn.datasets import load_boston<br />>>> x, y = load_boston(return_X_y=True)<br />>>> x.shape, y.shape<br />((506, 13), (506,))</pre>
<p>Этот набор данных подходит для многовариантной регрессии.</p>
<div style=](https://dev-gang.ru/static/storage/328252736197926040729674041908499418948.png)