Изменения

Перейти к: навигация, поиск

Обзор библиотек для машинного обучения на Python

6901 байт добавлено, 22:15, 30 января 2019
Нет описания правки
==Scikit-learn==
===Описание===
Scikit-learn<ref>[https://scikit-learn.org/stable/ Библиотека scikit-learn]</ref> {{---}} библиотека машинного обучения на языке программирования Python с открытым исходным кодом. Содержит реализации практически всех возможных преобразований, и нередко ее одной хватает для полной реализации модели. В данной библиотеки реализованы методы разбиения датасета на тестовый и обучающий, вычисление основных метрик над наборами данных, проведение [[кросс-валидации|Кросс-валидация]]<sup>[на 28.01.19 не создан]</sup>. В библиотеке также есть основные алгоритмы машинного обучения: [[Линейная регрессия|линейной регрессии, (]]<sup>[на 28.01.19 не создан]</sup> и ее её модификаций Лассо, гребневой регрессии, [[Метод опорных векторов (SVM), |опорных векторов]]<sup>[на 28.01.19 не создан]</sup>, [[Дерево решений и случайный лес|решающих деревьев и лесов ]] и др. Есть и реализации основных методов [[Кластеризация|кластеризации]]. Кроме того, библиотека содержит постоянно используемые исследователями методы работы с параметрами (фичами)признаками: например, понижение размерности [[Метод главных компонент (PCA)|методом главных компонент]]<sup>[на 28.01.19 не создан]</sup>. Частью пакета является библиотека imblearn<ref>[https://imbalanced-learn.readthedocs.io/en/stable/index.html Библиотека imbalanced-learn]</ref>, позволяющая работать с разбалансированными выборками и генерировать новые значения. 
===Примеры кода===
====Линейная регрессия====
Основная статья: [[{{Main|Линейная регрессия|l1=Линейная регрессия<sup>[на 28.01.19 не создан]].</sup>}}
<font color="green"># Add required imports</font>
[[File:Diabetes-sklearn.png|400px|none|super]]
 
====Логистическая регрессия====
Основная статья: [[{{Main|Логистическая регрессия]].}}
Загрузка датасета:
====Перцептрон====
Основная статья: [[{{Main|Нейронные сети, перцептрон]].}}
Загрузка датасета:
> '''[[ 7 0 0]'''
'''[ 0 8 1]''' '''[ 0 2 12]]''' '''precision recall f1-score support''' '''0 1.00 1.00 1.00 7''' '''1 0.80 0.89 0.84 9''' '''2 0.92 0.86 0.89 14''' '''micro avg 0.90 0.90 0.90 30''' '''macro avg 0.91 0.92 0.91 30''' '''weighted avg 0.90 0.90 0.90 30'''
====Метрический классификатор и метод ближайших соседей====
Основная статья: [[{{Main|Метрический классификатор и метод ближайших соседей#Пример использования (через scikit-learn) | l1=Метрический классификатор и метод ближайших соседей: Пример использования пример через scikit-learn]]}} 
====Дерево решений и случайный лес====
Основная статья: [[{{Main|Дерево решений и случайный лес#Примеры использования (в scikit-learn) | l1=Дерево решений и случайный лес: Пример использования пример через scikit-learn]].}} 
====Обработка естественного языка====
Основная статья: [[{{Main|Обработка естественного языка]].}}
Загрузка датасета:
'''rec.autos'''
Построение и обучение двух моделей. Первая на основе [[Байесовская классификация | Байесовской классификации]]<sup>[на 28.01.19 не создан]</sup>, а вторая использует метод опорных векторов:
'''from''' sklearn.pipeline '''import''' Pipeline
'''from''' sklearn.feature_extraction.text '''import''' CountVectorizer, TfidfTransformer
> '''Score for naive Bayes: 0.774'''
'''Score for SVM: 0.824'''
 
====Кросс-валилация и подбор параметров====
{{Main|Кросс-валидация}}
 
Возьмем предыдущий пример с обработкой естественного языка и попробуем увеличить точность алгоритма за счет кросс-валидации и подбора параметров:
'''from''' sklearn.model_selection '''import''' GridSearchCV
parameters = {
<font color="red">'vect__ngram_range'</font>: [(<font color="blue">1</font>, <font color="blue">1</font>), (<font color="blue">1</font>, <font color="blue">2</font>)],
<font color="red">'tfidf__use_idf'</font>: ('''True''', '''False'''),
<font color="red">'clf__alpha'</font>: (<font color="blue">1e-2</font>, <font color="blue">1e-3</font>),
}
gs_clf = GridSearchCV(text_clf2, parameters, cv=<font color="blue">5</font>, iid='''False''', n_jobs=<font color="blue">-1</font>)
gs_clf = gs_clf.fit(twenty_train.data, twenty_train.target)
print(<font color="red">"Best score: %.3f"</font> % gs_clf.best_score_)
'''for''' param_name '''in''' sorted(parameters.keys()):
print(<font color="red">"%s: %r"</font> % (param_name, gs_clf.best_params_[param_name]))
 
> '''Best score: 0.904'''
'''clf__alpha: 0.001'''
'''tfidf__use_idf: True'''
'''vect__ngram_range: (1, 2)'''
 
====Метод опорных векторов (SVM)====
{{Main|Метод опорных векторов (SVM)|l1=Метод опорных векторов (SVM) <sup>[на 28.01.19 не создан]</sup>}}
 
Загрузка датасета:
'''from''' sklearn '''import''' datasets
iris = datasets.load_iris()
 
Разбиение датасета на тестовый и тренировочный:
'''from''' sklearn.model_selection '''import''' train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=<font color="blue">0.25</font>, random_state=<font color="blue">0</font>)
 
Построение и обучение модели:
clf = svm.SVC(kernel=<font color="red">'linear'</font>, C=<font color="blue">1.0</font>)
clf.fit(x_train, y_train)
predictions = clf.predict(x_test)
 
Оценка алгоритма:
'''from''' sklearn.metrics '''import''' classification_report, confusion_matrix
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))
 
> '''[[13 0 0]'''
'''[ 0 15 1]'''
'''[ 0 0 9]]'''
'''precision recall f1-score support'''
'''0 1.00 1.00 1.00 13'''
'''1 1.00 0.94 0.97 16'''
'''2 0.90 1.00 0.95 9'''
'''micro avg 0.97 0.97 0.97 38'''
'''macro avg 0.97 0.98 0.97 38'''
'''weighted avg 0.98 0.97 0.97 38'''
 
====EM-алгоритм====
{{Main|EM-алгоритм|l1=EM-алгоритм<sup>[на 28.01.19 не создан]</sup>}}
 
'''import''' numpy '''as''' np
'''import''' matplotlib.pyplot '''as''' plt
'''from''' matplotlib.colors '''import''' LogNorm
'''from''' sklearn '''import''' mixture
n_samples = <font color="blue">300</font>
<font color="green"># generate random sample, two components</font>
np.random.seed(<font color="blue">0</font>)
<font color="green"># generate spherical data centered on (20, 20)</font>
shifted_gaussian = np.random.randn(n_samples, <font color="blue">2</font>) + np.array([<font color="blue">20</font>, <font color="blue">20</font>])
<font color="green"># generate zero centered stretched Gaussian data</font>
C = np.array([[<font color="blue">0.</font>, <font color="blue">-0.7</font>], [<font color="blue">3.5</font>, <font color="blue">.7</font>]])
stretched_gaussian = np.dot(np.random.randn(n_samples, <font color="blue">2</font>), C)
<font color="green"># concatenate the two datasets into the final training set</font>
X_train = np.vstack([shifted_gaussian, stretched_gaussian])
<font color="green"># fit a Gaussian Mixture Model with two components</font>
clf = mixture.GaussianMixture(n_components=<font color="blue">2</font>, covariance_type=<font color="red">'full'</font>)
clf.fit(X_train)
<font color="green"># display predicted scores by the model as a contour plot</font>
x = np.linspace(<font color="blue">-20.</font>, <font color="blue">30.</font>)
y = np.linspace(<font color="blue">-20.</font>, <font color="blue">40.</font>)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -clf.score_samples(XX)
Z = Z.reshape(X.shape)
CS = plt.contour(X, Y, Z, norm=LogNorm(vmin=<font color="blue">1.0</font>, vmax=<font color="blue">1000.0</font>),
levels=np.logspace(<font color="blue">0</font>, <font color="blue">3</font>, <font color="blue">10</font>))
CB = plt.colorbar(CS, shrink=<font color="blue">0.8</font>, extend=<font color="red">'both'</font>)
plt.scatter(X_train[:, <font color="blue">0</font>], X_train[:, <font color="blue">1</font>], <font color="blue">.8</font>)
plt.title(<font color="red">'Negative log-likelihood predicted by a GMM'</font>)
plt.axis(<font color="red">'tight'</font>)
plt.show()
 
[[File:Em.png|400px|none|super]]
 
====Уменьшение размерности====
{{Main|Уменьшение размерности#Пример кода scikit-learn|l1=Уменьшение размерности: пример через scikit-learn}}
==Tensorflow==
===Примеры кода===
====Сверточная нейронная сеть====
Основная статья: [[{{Main|Сверточные нейронные сети]].}}
Реализация сверточной нейронной сети для классификации цифр из датасета MNIST:
===Примеры кода===
====Сверточная нейронная сеть====
Основная статья: [[{{Main|Сверточные нейронные сети]].}}
Реализация сверточной нейронной сети для классификации текста:
==Другие библиотеки для машинного обучения на Python==
===Вспомогательные библиотеки===
* NumPy<ref>[http://www.numpy.org Библиотека NumPy]</ref> {{---}} библиотека, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами. Данная библиотека предоставляет реализации вычислительных алгоритмов (в виде функций и операторов), оптимизированные для работы с многомерными массивами. В результате любой алгоритм, который может быть выражен в виде последовательности операций над массивами (матрицами) и реализованный с использованием NumPy, работает так же быстро, как эквивалентный код, выполняемый в MATLAB<ref>[https://www.mathworks.com/products/matlab.html MATLAB]</ref>.;* SciPy<ref>[https://www.scipy.org Библиотека SciPy]</ref> {{---}} открытая библиотека высококачественных научных инструментов для языка программирования Python. SciPy содержит модули для оптимизации, интегрирования, специальных функций, обработки сигналов, обработки изображений, генетических алгоритмов, решения обыкновенных дифференциальных уравнений и других задач, обычно решаемых в науке и при инженерной разработке.;* Pandas<ref>[https://pandas.pydata.org Библиотека Pandas]</ref> {{---}} библиотека Python, которая является мощным инструментом для анализа данных. Пакет дает возможность строить сводные таблицы, выполнять группировки, предоставляет удобный доступ к табличным данным и позволяет строить графики на полученных наборах данных при помощи библиотеки Matplotlib.;
* Matplotlib<ref>[https://matplotlib.org Библиотека Matplotlib]</ref> {{---}} библиотека Python для построения качественных двумерных графиков. Matplotlib является гибким, легко конфигурируемым пакетом, который вместе с NumPy, SciPy и IPython<ref>[https://ipython.org IPython Notebook]</ref> предоставляет возможности, подобные MATLAB.
 
===Библиотеки для глубокого обучения===
* PyTorch<ref>[https://pytorch.org Библиотека PyTorch]</ref> {{---}} библиотека для глубокого обучения, созданная на базе Torch<ref>[https://en.wikipedia.org/wiki/Torch_(machine_learning) Torch]</ref> и развиваемая компанией Facebook. Две ключевые функциональности данной библиотеки {{---}} тензорные вычисления с развитой поддержкой ускорения на GPU и глубокие нейронные сети на базе системы autodiff;* Theano<ref>[http://deeplearning.net/software/theano/ Библиотека Theano]</ref> {{---}} расширение языка программирования Python, позволяющее эффективно вычислять математические выражения, содержащие многомерные массивы. Библиотека предоставляет базовый набор инструментов для конфигурации нейронных сетей и их обучения. Наибольшее признание данная библиотека получила в задачах машинного обучения при решении задач оптимизации. Она позволяет использовать возможности GPU без изменения кода программы, что делает ее незаменимой при выполнении ресурсоемких задач.;* Caffe<ref>[http://caffe.berkeleyvision.org Библиотека Caffe]</ref> {{---}} фреймворк для обучения нейронных сетей, созданный университетом Беркли. Как и Tensorflow, использует cuDNN для работы с видеокартами NVIDIA.;
* Microsoft Cognitive Toolkit (CNTK)<ref>[https://www.microsoft.com/en-us/cognitive-toolkit/ Библиотека CNTK]</ref> {{---}} фреймворк от корпорации Microsoft, предоставляющий реализации архитектур различных нейронных сетей.
 
===Библиотеки для обработки естественного языка===
* NLTK<ref>[https://www.nltk.org Библиотека NLTK]</ref> {{---}} пакет библиотек и программ для символьной и статистической обработки естественного языка, написанных на языке программирования Python.;
* Gensim<ref>[https://radimrehurek.com/gensim/ Библиотека Gensim]</ref> {{---}} инструмент для автоматической обработки языка, основанный на машинном обучении. В Gensim реализованы алгоритмы дистрибутивной семантики word2vec и doc2vec, он позволяет решать задачи тематического моделирования и выделять основные темы текста или документа.
 
===Библиотеки для градиентного бустинга===
* [[XGBoost|Xgboost]]<sup>[на 28.01.19 не создан]</sup><ref>[https://xgboost.readthedocs.io/en/latest/python/index.html Библиотека Xgboost]</ref> {{---}} библиотека с реализацией градиентного бустинга, которая для выбора разбиения использует сортировку и модели, основанные на анализе гистограмм.;* LightGBM<ref>[http://www.dmtk.io Библиотека LightGBM]</ref> {{---}} фреймворк с реализацией градиентного бустинга от корпорации Microsoft. Является частью проекта Microsoft DMTK, посвященного реализации подходов машинного обучения для .Net.;* [[CatBoost|CatBoost]]<ref>[https://catboost.ai Библиотека CatBoost]</ref> {{---}} библиотека с градиентным бустингом от компании Яндекс, в которой реализуется особый подход к обработке категориальных признаков, основанный на подмене категориальных признаков статистиками на основе предсказываемого значения.
==См. также==
*[[:Примеры кода на Scala|Примеры кода на Scala]]
*[[:Примеры кода на R|Примеры кода на R]]<sup>[на 28.01.19 не создан]</sup>*[[:Примеры кода на Java|Примеры кода на Java]]<sup>[на 28.01.19 не создан]</sup> 
==Примечания==
<references/>
[[Категория: Машинное обучение]] [[Категория: Примеры кода]]
77
правок

Навигация