Scikit-learn - это библиотека на Python, которая предоставляет множество алгоритмов неконтролируемого и контролируемого обучения. Он построен на некоторых технологиях, с которыми вы, возможно, уже знакомы, например, NumPy, pandas и Matplotlib!

Функции, предоставляемые scikit-learn, включают:

  • Регрессия, включая линейную и логистическую регрессию
  • Классификация, включая K-ближайших соседей
  • Кластеризация, включая K-средние и K-средние ++
  • Выбор модели
  • Предварительная обработка, включая минимальную и максимальную нормализацию

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

Начнем с импорта библиотек:

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.linear_model import LinearRegression
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from scipy import stats
import pylab as pl

Оценщик

Для объекта оценки scikit-learn с именем model доступны следующие методы:

Доступно во всех оценщиках

  • model.fit (): соответствие тренировочным данным. Для приложений контролируемого обучения это принимает два аргумента: данные X и метки y (например, model.fit (X, y)). Для приложений неконтролируемого обучения это принимает только один аргумент, данные X (например, model.fit (X)).

Доступно в контролируемых оценщиках

  • model.predict (): для обученной модели спрогнозируйте метку нового набора данных. Этот метод принимает один аргумент, новые данные X_new (например, model.predict (X_new)), и возвращает изученную метку для каждого объекта в массиве.
  • model.predict_proba (): для задач классификации некоторые оценщики также предоставляют этот метод, который возвращает вероятность того, что новое наблюдение имеет каждую категориальную метку. В этом случае метка с наибольшей вероятностью возвращается с помощью model.predict (). model.score (): для задач классификации или регрессии большинство (все?) оценщиков реализуют метод оценки. Баллы находятся в диапазоне от 0 до 1, причем большее значение указывает на лучшее соответствие.

Доступно в неконтролируемых оценщиках

  • model.predict (): прогнозирование меток в алгоритмах кластеризации. model.transform (): для неконтролируемой модели преобразовать новые данные в новую основу. Это также принимает один аргумент X_new и возвращает новое представление данных на основе неконтролируемой модели. model.fit_transform (): некоторые оценщики реализуют этот метод, который более эффективно выполняет подгонку и преобразование одних и тех же входных данных.

Давайте загрузим чтение набора данных

Это набор данных из 75 000 сортов домашнего пива более 176 различных стилей. Записи о пиве регистрируются пользователями и классифицируются по одному из 176 различных стилей. Эти рецепты содержат столько или меньше деталей, сколько предоставил пользователь, но есть как минимум 5 полезных столбцов, в которые были введены данные для каждого: исходная плотность, конечная плотность, ABV, IBU и цвет.

Вы можете скачать форму Kaggle, используя API Kaggle.



Рецепты пива« Друг пивовара
Данные о более чем 75 000 сортов домашнего пива www.kaggle.com»



! kaggle datasets download -d jtrofe/beer-recipes

Разархивируйте набор данных

! unzip beer-recipes.zip

Кодировать

file = open("recipeData.csv", encoding="latin1")
data_raw = pd.read_csv(file)
data_raw.head()

print(data_raw.shape)
(73861, 23)
data_raw.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 73861 entries, 0 to 73860
Data columns (total 23 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   BeerID         73861 non-null  int64  
 1   Name           73860 non-null  object 
 2   URL            73861 non-null  object 
 3   Style          73265 non-null  object 
 4   StyleID        73861 non-null  int64  
 5   Size(L)        73861 non-null  float64
 6   OG             73861 non-null  float64
 7   FG             73861 non-null  float64
 8   ABV            73861 non-null  float64
 9   IBU            73861 non-null  float64
 10  Color          73861 non-null  float64
 11  BoilSize       73861 non-null  float64
 12  BoilTime       73861 non-null  int64  
 13  BoilGravity    70871 non-null  float64
 14  Efficiency     73861 non-null  float64
 15  MashThickness  43997 non-null  float64
 16  SugarScale     73861 non-null  object 
 17  BrewMethod     73861 non-null  object 
 18  PitchRate      34609 non-null  float64
 19  PrimaryTemp    51199 non-null  float64
 20  PrimingMethod  6766 non-null   object 
 21  PrimingAmount  4774 non-null   object 
 22  UserId         23371 non-null  float64
dtypes: float64(13), int64(3), object(7)
memory usage: 13.0+ MB

ETL

Набор данных уже преобразован и очищен. Он сократился с 75 000 записей до выборки из 1000 строк.

data =  pd.read_csv('MyData.csv')
data.head()

print(data.shape)
(1000, 5)
data = data[['Color', 'BoilGravity', 'IBU', 'ABV', 'Clase']]
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 5 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   Color        1000 non-null   float64
 1   BoilGravity  1000 non-null   int64  
 2   IBU          1000 non-null   float64
 3   ABV          1000 non-null   float64
 4   Clase        1000 non-null   object 
dtypes: float64(3), int64(1), object(1)
memory usage: 39.2+ KB

Визуализация

Некоторое графическое представление информации и данных.

sns.FacetGrid(data,hue='Clase',size=5)\
.map(plt.scatter,'Color','IBU')\
.add_legend()

sns.pairplot(data,hue='Clase')

Подготовить тренировку и испытание

Scikit-learn предоставляет полезную функцию для разделения данных train_test_split, которая разделяет ваши данные на обучающий набор и тестовый набор.

Обучение и тестирование обычно составляют 70% для обучения и 30% для тестирования.

Учебный набор для подгонки модели Тестовый набор только для ознакомления

X = data.iloc[:, :-1].values    #   X -> Feature Variables
y = data.iloc[:, -1].values #   y ->  Target
# Splitting the data into Train and Test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

Время работать

Алгоритм 1 - линейная регрессия

Он используется для оценки реальных значений (стоимость домов, количество звонков, общий объем продаж и т. Д.) На основе непрерывных переменных. Здесь мы устанавливаем взаимосвязь между независимыми и зависимыми переменными, подбирая лучшую линию. Эта линия наилучшего соответствия известна как линия регрессии и представлена ​​линейным уравнением ** Y = a * X + b.

#converting object data type into int data type using labelEncoder for Linear reagration in this case

XL = data.iloc[:, :-1].values    #   X -> Feature Variables
yL = data.iloc[:, -1].values #   y ->  Target

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
Y_train= le.fit_transform(yL)

print(Y_train)  # this is Y_train categotical to numerical
# This is only for Linear Regretion 
X_trainL, X_testL, y_trainL, y_testL = train_test_split(XL, Y_train, test_size = 0.3, random_state = 0)

from sklearn.linear_model import LinearRegression
modelLR = LinearRegression()
modelLR.fit(X_trainL, y_trainL)
Y_pred = modelLR.predict(X_testL)
from sklearn import metrics
#calculating the residuals
print('y-intercept             :' , modelLR.intercept_)
print('beta coefficients       :' , modelLR.coef_)
print('Mean Abs Error MAE      :' ,metrics.mean_absolute_error(y_testL,Y_pred))
print('Mean Sqrt Error MSE     :' ,metrics.mean_squared_error(y_testL,Y_pred))
print('Root Mean Sqrt Error RMSE:' ,np.sqrt(metrics.mean_squared_error(y_testL,Y_pred)))
print('r2 value                :' ,metrics.r2_score(y_testL,Y_pred))
y-intercept             : 1.3387807147212312
beta coefficients       : [ 0.0774304  -0.00204902 -0.00129162 -0.08929801]
Mean Abs Error MAE      : 0.4751251900979613
Mean Sqrt Error MSE     : 0.34378571937495755
Root Mean Sqrt Error RMSE: 0.586332430771962
r2 value                : 0.7081587758444602

Алгоритм 2 - дерево решений

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

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

# Decision Tree's
from sklearn.tree import DecisionTreeClassifier

Model = DecisionTreeClassifier()

Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score
print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.48      0.65      0.55        17
         IPA       0.88      0.85      0.86       149
        PALE       0.69      0.68      0.68        78
      PORTER       0.48      0.50      0.49        20
       STOUT       0.71      0.69      0.70        36

    accuracy                           0.75       300
   macro avg       0.65      0.67      0.66       300
weighted avg       0.76      0.75      0.75       300

[[ 11   2   4   0   0]
 [  3 126  20   0   0]
 [  9  16  53   0   0]
 [  0   0   0  10  10]
 [  0   0   0  11  25]]

Accuracy is 0.75

Алгоритм 3- RandomForest

Случайный лес - это товарный знак для обозначения совокупности деревьев решений. В Random Forest у нас есть набор деревьев решений (так называемый «лес»). Чтобы классифицировать новый объект на основе атрибутов, каждое дерево дает классификацию, и мы говорим, что дерево «голосует» за этот класс. Лес выбирает классификацию, имеющую наибольшее количество голосов (по всем деревьям в лесу).

from sklearn.ensemble import RandomForestClassifier
Model=RandomForestClassifier(max_depth=2)
Model.fit(X_train,y_train)
y_pred=Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test,y_pred))
print(confusion_matrix(y_pred,y_test))
#Accuracy Score
print('Accuracy is ',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.48      0.65      0.55        17
         IPA       0.88      0.85      0.86       149
        PALE       0.69      0.68      0.68        78
      PORTER       0.48      0.50      0.49        20
       STOUT       0.71      0.69      0.70        36

    accuracy                           0.75       300
   macro avg       0.65      0.67      0.66       300
weighted avg       0.76      0.75      0.75       300

[[ 11   3   9   0   0]
 [  2 126  16   0   0]
 [  4  20  53   0   0]
 [  0   0   0  10  11]
 [  0   0   0  10  25]]
Accuracy is  0.75

Алгоритм 4 - логистическая регрессия

Не запутайтесь по названию! Это классификация, а не алгоритм регрессии. Он используется для оценки дискретных значений (двоичных значений, таких как 0/1, да / нет, истина / ложь) на основе заданного набора независимых переменных.

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

# LogisticRegression
from sklearn.linear_model import LogisticRegression
Model = LogisticRegression()
Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score
print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.45      0.59      0.51        17
         IPA       0.78      0.91      0.84       149
        PALE       0.69      0.44      0.54        78
      PORTER       0.50      0.10      0.17        20
       STOUT       0.66      0.97      0.79        36

    accuracy                           0.72       300
   macro avg       0.62      0.60      0.57       300
weighted avg       0.71      0.72      0.69       300

[[ 10   0   7   0   0]
 [  4 135   8   2   0]
 [  8  36  34   0   0]
 [  0   0   0   2  18]
 [  0   1   0   0  35]]

Accuracy is 0.72

Алгоритм 5- Ближайшие соседи

Его можно использовать как для задач классификации, так и для задач регрессии. Однако он более широко используется в задачах классификации в промышленности. K ближайших соседей - это простой алгоритм, который хранит все доступные случаи и классифицирует новые случаи большинством голосов своих k соседей. Случай, отнесенный к классу, наиболее распространен среди его K ближайших соседей, измеренных функцией расстояния.

# K-Nearest Neighbours
from sklearn.neighbors import KNeighborsClassifier

Model = KNeighborsClassifier(n_neighbors=8)
Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score

print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.48      0.76      0.59        17
         IPA       0.87      0.88      0.87       149
        PALE       0.76      0.65      0.70        78
      PORTER       0.65      0.55      0.59        20
       STOUT       0.79      0.83      0.81        36

    accuracy                           0.79       300
   macro avg       0.71      0.74      0.71       300
weighted avg       0.79      0.79      0.79       300

[[ 13   1   3   0   0]
 [  5 131  13   0   0]
 [  9  18  51   0   0]
 [  0   1   0  11   8]
 [  0   0   0   6  30]]

Accuracy is 0.7866666666666666

Алгоритм 6 - наивный байесовский

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

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

# Naive Bayes
from sklearn.naive_bayes import GaussianNB
Model = GaussianNB()
Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score
print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.52      0.82      0.64        17
         IPA       0.92      0.81      0.86       149
        PALE       0.66      0.71      0.68        78
      PORTER       0.69      0.55      0.61        20
       STOUT       0.79      0.92      0.85        36

    accuracy                           0.78       300
   macro avg       0.71      0.76      0.73       300
weighted avg       0.80      0.78      0.78       300

[[ 14   1   2   0   0]
 [  0 121  26   2   0]
 [ 13  10  55   0   0]
 [  0   0   0  11   9]
 [  0   0   0   3  33]]

Accuracy is 0.78

Алгоритм 7 - машины опорных векторов

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

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

# Support Vector Machine
from sklearn.svm import SVC

Model = SVC()
Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score

print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.52      0.82      0.64        17
         IPA       0.92      0.81      0.86       149
        PALE       0.66      0.71      0.68        78
      PORTER       0.69      0.55      0.61        20
       STOUT       0.79      0.92      0.85        36

    accuracy                           0.78       300
   macro avg       0.71      0.76      0.73       300
weighted avg       0.80      0.78      0.78       300

[[ 14   1   2   0   0]
 [  0 121  26   2   0]
 [ 13  10  55   0   0]
 [  0   0   0  11   9]
 [  0   0   0   3  33]]

Accuracy is 0.78

Алгоритм 8 - Классификатор соседей по радиусу

В scikit-learn RadiusNeighborsClassifier очень похож на KNeighborsClassifier за исключением двух параметров. Во-первых, в RadiusNeighborsClassifier нам нужно указать радиус фиксированной области, используемой, чтобы определить, является ли наблюдение соседом, используя радиус.

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

#Output
from sklearn.neighbors import  RadiusNeighborsClassifier
Model=RadiusNeighborsClassifier(radius=18.0)
Model.fit(X_train,y_train)
y_pred=Model.predict(X_test)
#summary of the predictions made by the classifier
print(classification_report(y_test,y_pred))
print(confusion_matrix(y_test,y_pred))

#Accouracy score
print('Accuracy is ', accuracy_score(y_test,y_pred))
precision    recall  f1-score   support

         ALE       0.44      0.41      0.42        17
         IPA       0.87      0.88      0.88       149
        PALE       0.71      0.72      0.71        78
      PORTER       0.00      0.00      0.00        20
       STOUT       0.63      0.92      0.75        36

    accuracy                           0.76       300
   macro avg       0.53      0.59      0.55       300
weighted avg       0.72      0.76      0.73       300

[[  7   0  10   0   0]
 [  5 131  13   0   0]
 [  4  18  56   0   0]
 [  0   1   0   0  19]
 [  0   0   0   3  33]]

Accuracy is  0.7566666666666667

Алгоритм 9 - пассивно-агрессивный классификатор

Алгоритм PA - это алгоритм онлайн-обучения на основе маржи для двоичной классификации. В отличие от алгоритма PA, который является методом с жестким запасом, алгоритм PA-I является методом с мягким запасом и устойчив к шуму.

from sklearn.linear_model import PassiveAggressiveClassifier
Model = PassiveAggressiveClassifier()
Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score
print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.20      0.06      0.09        17
         IPA       1.00      0.06      0.11       149
        PALE       0.33      1.00      0.49        78
      PORTER       0.00      0.00      0.00        20
       STOUT       0.66      0.86      0.75        36

    accuracy                           0.40       300
   macro avg       0.44      0.40      0.29       300
weighted avg       0.67      0.40      0.28       300

[[  1   0  16   0   0]
 [  4   9 136   0   0]
 [  0   0  78   0   0]
 [  0   0   4   0  16]
 [  0   0   5   0  31]]

Accuracy is 0.39666666666666667

Алгоритм 10 - BernoulliNB

Как и MultinomialNB, этот классификатор подходит для дискретных данных. Разница в том, что в то время как MultinomialNB работает с подсчетом вхождений, BernoulliNB предназначен для двоичных / логических функций.

# BernoulliNB
from sklearn.naive_bayes import BernoulliNB
Model = BernoulliNB()
Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score
print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.00      0.00      0.00        17
         IPA       0.50      1.00      0.66       149
        PALE       0.00      0.00      0.00        78
      PORTER       0.00      0.00      0.00        20
       STOUT       0.00      0.00      0.00        36

    accuracy                           0.50       300
   macro avg       0.10      0.20      0.13       300
weighted avg       0.25      0.50      0.33       300

[[  0  17   0   0   0]
 [  0 149   0   0   0]
 [  0  78   0   0   0]
 [  0  20   0   0   0]
 [  0  36   0   0   0]]

Accuracy is 0.49666666666666665

Алгоритм 11 - ExtraTreeClassifier

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

# ExtraTreeClassifier
from sklearn.tree import ExtraTreeClassifier

Model = ExtraTreeClassifier()

Model.fit(X_train, y_train)

y_pred = Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# Accuracy score
print('Accuracy is',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.39      0.71      0.50        17
         IPA       0.86      0.81      0.83       149
        PALE       0.60      0.55      0.57        78
      PORTER       0.48      0.60      0.53        20
       STOUT       0.75      0.67      0.71        36

    accuracy                           0.70       300
   macro avg       0.61      0.67      0.63       300
weighted avg       0.72      0.70      0.71       300

[[ 12   0   5   0   0]
 [  3 120  24   2   0]
 [ 16  19  43   0   0]
 [  0   0   0  12   8]
 [  0   1   0  11  24]]

Accuracy is 0.7033333333333334

Алгоритм 12 - Классификатор упаковки

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

from sklearn.ensemble import BaggingClassifier
Model=BaggingClassifier()
Model.fit(X_train,y_train)
y_pred=Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test,y_pred))
print(confusion_matrix(y_pred,y_test))

#Accuracy Score
print('Accuracy is ',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.45      0.59      0.51        17
         IPA       0.87      0.89      0.88       149
        PALE       0.69      0.62      0.65        78
      PORTER       0.62      0.50      0.56        20
       STOUT       0.75      0.83      0.79        36

    accuracy                           0.77       300
   macro avg       0.68      0.68      0.68       300
weighted avg       0.77      0.77      0.77       300

[[ 10   0  12   0   0]
 [  2 132  18   0   0]
 [  5  17  48   0   0]
 [  0   0   0  10   6]
 [  0   0   0  10  30]]

Accuracy is  0.7666666666666667

Алгоритм 13-классификатор AdaBoost

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

from sklearn.ensemble import AdaBoostClassifier
Model=AdaBoostClassifier()
Model.fit(X_train,y_train)
y_pred=Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test,y_pred))
print(confusion_matrix(y_pred,y_test))
#Accuracy Score
print('Accuracy is ',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.40      0.35      0.38        17
         IPA       0.98      0.34      0.51       149
        PALE       0.41      0.94      0.57        78
      PORTER       0.50      0.20      0.29        20
       STOUT       0.67      0.89      0.76        36

    accuracy                           0.55       300
   macro avg       0.59      0.54      0.50       300
weighted avg       0.73      0.55      0.53       300

[[ 6  5  4  0  0]
 [ 0 51  1  0  0]
 [11 93 73  0  0]
 [ 0  0  0  4  4]
 [ 0  0  0 16 32]]

Accuracy is  0.5533333333333333

Алгоритм 14 - Классификатор повышения градиента

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

from sklearn.ensemble import GradientBoostingClassifier
Model=GradientBoostingClassifier()
Model.fit(X_train,y_train)
y_pred=Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test,y_pred))
print(confusion_matrix(y_pred,y_test))

#Accuracy Score
print('Accuracy is ',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.48      0.59      0.53        17
         IPA       0.88      0.90      0.89       149
        PALE       0.70      0.64      0.67        78
      PORTER       0.57      0.40      0.47        20
       STOUT       0.71      0.83      0.77        36

    accuracy                           0.77       300
   macro avg       0.67      0.67      0.67       300
weighted avg       0.77      0.77      0.77       300

[[ 10   0  11   0   0]
 [  1 134  17   0   0]
 [  6  15  50   0   0]
 [  0   0   0   8   6]
 [  0   0   0  12  30]]

Accuracy is  0.7733333333333333

Алгоритм 15- линейный дискриминантный анализ.

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

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

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

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
Model=LinearDiscriminantAnalysis()
Model.fit(X_train,y_train)
y_pred=Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test,y_pred))
print(confusion_matrix(y_pred,y_test))

#Accuracy Score
print('Accuracy is ',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.56      0.29      0.38        17
         IPA       0.89      0.85      0.87       149
        PALE       0.65      0.78      0.71        78
      PORTER       0.69      0.45      0.55        20
       STOUT       0.76      0.89      0.82        36

    accuracy                           0.78       300
   macro avg       0.71      0.65      0.67       300
weighted avg       0.78      0.78      0.77       300

[[  5   2   2   0   0]
 [  0 126  15   1   0]
 [ 12  21  61   0   0]
 [  0   0   0   9   4]
 [  0   0   0  10  32]]

Accuracy is  0.7766666666666666

Алгоритм 16- квадратичный дискриминантный анализ

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

Модель соответствует гауссовой плотности для каждого класса.

from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
Model=QuadraticDiscriminantAnalysis()
Model.fit(X_train,y_train)
y_pred=Model.predict(X_test)
# Summary of the predictions made by the classifier
print(classification_report(y_test,y_pred))
print(confusion_matrix(y_pred,y_test))

#Accuracy Score
print('accuracy is ',accuracy_score(y_pred,y_test))
precision    recall  f1-score   support

         ALE       0.61      0.82      0.70        17
         IPA       0.93      0.85      0.89       149
        PALE       0.72      0.76      0.74        78
      PORTER       0.69      0.45      0.55        20
       STOUT       0.76      0.94      0.84        36

    accuracy                           0.81       300
   macro avg       0.74      0.77      0.74       300
weighted avg       0.82      0.81      0.81       300

[[ 14   0   9   0   0]
 [  0 127  10   0   0]
 [  3  20  59   0   0]
 [  0   2   0   9   2]
 [  0   0   0  11  34]]
Accuracy is  0.81

Алгоритм 17- K- означает

Это тип неконтролируемого алгоритма, который решает проблему кластеризации. Его процедура следует простому и легкому способу классификации данного набора данных по определенному количеству кластеров (предположим, что кластеров k). Точки данных внутри кластера однородны и неоднородны по отношению к одноранговым группам.

Помните, как выявляли формы из чернильных кляксов? k означает, что в чем-то похожа эта деятельность. Вы смотрите на форму и распространение, чтобы определить, сколько разных кластеров / популяций присутствует.

x = data.iloc[:, [1, 2, 3]].values

#Finding the optimum number of clusters for k-means classification
from sklearn.cluster import KMeans
wcss = []

for i in range(1, 11):
    kmeans = KMeans(n_clusters = i, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
    kmeans.fit(x)
    wcss.append(kmeans.inertia_)
#Plotting the results onto a line graph, allowing us to observe 'The elbow'
plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS') # within cluster sum of squares
plt.show()

#Applying kmeans to the dataset / Creating the kmeans classifier
kmeans = KMeans(n_clusters = 5, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
y_kmeans = kmeans.fit_predict(x)
#Visualising the clusters

plt.scatter(x[y_kmeans == 0, 0], x[y_kmeans == 0, 1], s = 100, c = 'red', label = 'ALE')
plt.scatter(x[y_kmeans == 1, 0], x[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'IPA')
plt.scatter(x[y_kmeans == 2, 0], x[y_kmeans == 2, 1], s = 100, c = 'yellow', label = 'PALE')
plt.scatter(x[y_kmeans == 3, 0], x[y_kmeans == 3, 1], s = 100, c = 'purple', label = 'PORTER')
plt.scatter(x[y_kmeans == 4, 0], x[y_kmeans == 4, 1], s = 100, c = 'black', label = 'STOUT')

#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'green', label = 'Centroids',marker='*')

plt.legend()

Заключение

Надеюсь, вам понравится эта статья о всех алгоритмах машинного обучения.

Я надеюсь, что это поможет тебе улучшить твои тренировки.

Ссылки: https://thecleverprogrammer.com/2020/06/05/all-machine-learning-algorithms-explained/

Никогда не сдавайтесь!

До встречи в Linkedin!