В этом разделе мы узнаем, как работать с логистической регрессией в scikit-learn:

  • Логистическая регрессия — это статический метод предотвращения бинарных классов, или мы можем сказать, что логистическая регрессия проводится, когда зависимая переменная является дихотомической.
  • Дихотомический означает, что существует два возможных класса, например двоичные классы(0 и 1).
  • Логистическая регрессия используется как для классификации, так и для регрессии. Он вычисляет вероятность возникновения события.

Здесь, в этом коде, мы импортируем набор данных load_digits с помощью библиотеки sklearn. Данные встроены в sklearn, нам не нужно загружать данные.

from sklearn.datasets import load_digits
digits = load_digits()

Мы уже можем импортировать данные с помощью sklearn из этих загруженных данных. С помощью приведенной ниже команды мы видим, что в наборе данных 1797 изображений и 1797 меток.

print('Image Data Shape' , digits.data.shape)

print("Label Data Shape", digits.target.shape

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

Импорт значения набора данных

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

  • plot.figure(figsize=(30,4)) используется для вывода фигуры на экран.
  • for index,(image, label) in enumerate(zip(digits.data[5:10], digits.target[5:10])): используется для придания изображению идеального размера или метки.
  • plot.subplot(1, 5, index + 1) используется для построения индекса.
  • plot.imshow(np.reshape(image,(8,8)), cmap=plt.cm.gray) используется для изменения формы изображения.
  • plot.title(‘Set: %i\n’ % label, fontsize = 30) используется для присвоения заголовка изображению.
import numpy as np 
import matplotlib.pyplot as plot
plot.figure(figsize=(30,4))
for index,(image, label) in enumerate(zip(digits.data[5:10], digits.target[5:10])):
 plot.subplot(1, 5, index + 1)
 plot.imshow(np.reshape(image,(8,8)), cmap=plt.cm.gray)
 plot.title('Set: %i\n' % label, fontsize = 30)

После запуска приведенного выше кода мы получаем следующий вывод: мы видим, что изображение отображается на экране в виде Set5, Set6, Set7, Set8, Set9.

Целевой набор перечислить цифр

В следующем коде мы разделяем наши данные на две формы: данные обучения и данные тестирования.

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.25, random_state=0)

Здесь мы импортируем логистическую регрессию из sklearn. sklearn используется только для того, чтобы сосредоточиться на моделировании набора данных.

from sklearn.linear_model import LogisticRegression

В приведенном ниже коде мы создаем экземпляр модели. Здесь для всех неуказанных параметров установлены значения по умолчанию.

logisticRegression= LogisticRegression()

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

logisticRegression.fit(x_train, y_train)

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

logisticRegression.predict(x_test[0].reshape(1,-1)

В следующем выводе мы видим, что массив NumPy возвращается после прогнозирования для одного наблюдения.

Вернуть массив

Из приведенного ниже кода мы можем предсказать, что несколько наблюдений одновременно.

logisticRegression.predict(x_test[0:10])

Из этого кода мы можем предсказать все данные.

logisticRegression.predict(x_test[0:10])

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

predictions = logisticRegression.predict(x_test)
score = logisticRegression.score(x_test, y_test)
print(score)

В этом выводе мы можем получить точность модели, используя метод оценки.

Прогнозирование точности модели

Содержание

Стандартные ошибки

Как мы знаем, логистическая регрессия — это статический метод предотвращения бинарных классов, и мы знаем, что логистическая регрессия проводится, когда зависимая переменная является дихотомической.

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

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

from sklearn.metrics import mean_squared_error
y_true = [4, -0.6, 3, 8]
y_pred = [3.5, 0.1, 3, 9]
mean_squared_error(y_true, y_pred)
0.475
y_true = [4, -0.6, 3, 8]
y_pred = [3.5, 0.1, 3, 9]
mean_squared_error(y_true, y_pred, squared=False)
0.712
y_true = [[0.6, 2],[-2, 2],[8, -7]]
y_pred = [[1, 3],[-1, 3],[7, -6]]
mean_squared_error(y_true, y_pred)
0.808
mean_squared_error(y_true, y_pred, squared=False)
0.922
mean_squared_error(y_true, y_pred, multioutput='raw_values')
array=([0.51666667, 2])
mean_squared_error(y_true, y_pred, multioutput=[0.3, 0.7])
0.925

Выход:

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

Scikit изучает песчаную ошибку логистической регрессии

Коэффициенты логистической регрессии Scikit-learn

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

В следующем коде мы импортируем библиотеки: импортируем панды как pd, импортируем numpy как np, импортируем sklearn как sl:

  • Библиотека panda используется для манипулирования данными, а numpy — для работы с массивами.
  • Библиотека sklearn используется для сосредоточения внимания на данных моделирования, а не на манипулировании данными.
  • x = np.random.randint(0, 7, size=n) используется для генерации случайной функции.
  • res_sd = sd.Logit(y, x).fit(method=»ncg», maxiter=max_iter) используется для выполнения различных статических задач.
  • print(res_sl.coef_) используется для печати коэффициента на экране.
import pandas as pd
import numpy as np
import sklearn as sl
from sklearn.linear_model import LogisticRegression
import statsmodels.api as sd

n = 250

x = np.random.randint(0, 7, size=n)
y =(x >(0.10 + np.random.normal(0, 0.10, n))).astype(int)

display(pd.crosstab( y, x ))


max_iter = 150


res_sd = sd.Logit(y, x).fit(method="ncg", maxiter=max_iter)
print(res_sd.params)


res_sl = LogisticRegression( solver='newton-cg', multi_class='multinomial', max_iter=max_iter, fit_intercept=True, C=1e8 )
res_sl.fit( x.reshape(n, 1), y )
print(res_sl.coef_)

Выход:

После запуска приведенного выше кода мы получаем следующий вывод, в котором мы видим, что коэффициент логистической регрессии обучения scikit печатается на экране.

scikit узнать коэффициент логистической регрессии

Значение p логистической регрессии

Значение pvalue логистической регрессии используется для проверки нулевой гипотезы, а ее коэффициент равен нулю. Самое низкое значение p составляет <0,05, и это самое низкое значение указывает на то, что вы можете отвергнуть нулевую гипотезу.

В следующем коде мы импортируем библиотеку import numpy как np, которая работает с массивом:

  • Сначала мы вычисляем z-показатель для логистической регрессии scikit Learning.
  • def logit_p1value(model, x): здесь мы используем некоторые параметры, такие как model и x.
  • model: используется для подгонки sklearn.linear_model.LogisticRegrade с перехватом и большой буквой C.
  • x: используется как матрица, на которой была подобрана модель.
  • model = LogisticRegrade(C=1e30).fit(x, y) используется для проверки значения pvalue.
  • print(logit_pvalue(model, x)) после дальнейшей проверки значения значение печатается на экране с помощью этого метода.
  • sd_model = sd.Logit(y, sm.add_constant(x)).fit(disp=0) используется для сравнения значения pvalue со статистическими моделями.
import numpy as np
from scipy.stats import norm
from sklearn.linear_model import LogisticRegression

def logit_p1value(model, x):
   
    p1 = model.predict_proba(x)
    n1 = len(p1)
    m1 = len(model.coef_[0]) + 1
    coefs = np.concatenate([model.intercept_, model.coef_[0]])
    x_full = np.matrix(np.insert(np.array(x), 0, 1, axis = 1))
    answ = np.zeros((m1, m1))
    for i in range(n1):
        answ = answ + np.dot(np.transpose(x_full[i, :]), x_full[i, :]) * p1[i,1] * p1[i, 0]
    vcov = np.linalg.inv(np.matrix(answ))
    se = np.sqrt(np.diag(vcov))
    t1 =  coefs/se  
    p1 =(1 - norm.cdf(abs(t1))) * 2
    return p1

x = np.arange(10)[:, np.newaxis]
y = np.array([0,0,0,1,0,0,1,1,1,1])
model = LogisticRegression(C=1e30).fit(x, y)
print(logit_pvalue(model, x))

import statsmodels.api as sd
sd_model = sd.Logit(y, sm.add_constant(x)).fit(disp=0)
print(sd_model.pvalues)
sd_model.summary()

Выход:

После запуска приведенного выше кода мы получаем следующий вывод, в котором мы видим, что на экране создается p-значение логистической регрессии.

scikit изучает значение p логистической регрессии

Важность функции

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

В следующем коде мы импортируем LogisticRegrade из sklearn.linear_model, а также импортируем pyplot для построения графиков на экране:

  • x, y = make_classification(n_samples=100, n_features=10, n_informative=5, n_redundant=5, random_state=1) используется для определения dtatset.
  • model = LogisticRegrade() используется для определения модели.
  • model.fit(x, y) используется для подгонки модели.
  • imptance = model.coef_[0] используется для определения важности функции.
  • pyplot.bar([X for X in range(len(imptance))], имптанс) используется для построения графика важности функции.
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from matplotlib import pyplot

x, y = make_classification(n_samples=100, n_features=10, n_informative=5, n_redundant=5, random_state=1)

model = LogisticRegression()

model.fit(x, y)

imptance = model.coef_[0]

for i,j in enumerate(importance):
 print('Feature: %0d, Score: %.5f' %(i,j))

pyplot.bar([X for X in range(len(imptance))], imptance)
pyplot.show()

Выход:

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

scikit изучает важность функции логистической регрессии

Категориальные переменные логистической регрессии

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

В следующем коде мы импортируем некоторые библиотеки, такие как импортировать панды как pd, импортировать NumPy как np, а также импортировать копию. Pandas используются для манипулирования и анализа данных, а NumPy — для поддержки нескольких массивов.

import pandas as pd
import numpy as np
import copy
%matplotlib inline

Здесь мы можем загрузить файл данных CSV для получения некоторых данных о клиентах.

df_data.head() используется для отображения первых пяти строк данных внутри файла.

df_data = pd.read_csv('data.csv')

df_data.head()

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

scikit изучает данные категориальных переменных логистической регрессии

print(df_data.info()) используется для печати информации о данных на экране.

print(df_data.info())

Печать информации о данных

Boxplot создается для отображения всей сводки набора данных.

df_data.boxplot('dep_time','origin',rot = 30,figsize=(5,6))

Бокс-сюжет

Здесь метод .copy() используется, если во фрейме данных вносится какое-либо изменение, и это изменение не влияет на исходные данные.

cat_df_data = df_data.select_dtypes(include=['object']).copy()

Функция .hed() используется для проверки наличия каких-либо требований к заполнению.

cat_df_data.head()

Фильтровать столбцы

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

print(cat_df_data.isnull().values.sum())

Отсутствующие значения

При этом проверяется распределение нулевого значения по столбцам.

print(cat_df_data.isnull().sum())

распределение по столбцам

Метод .value_count() используется для возврата частотного распределения каждой категории.

cat_df_data = cat_df_data.fillna(cat_df_data['tailnum'].value_counts().index[0])

Теперь мы можем снова проверить нулевое значение после назначения разных методов, результат — нулевое значение.

print(cat_df_data.isnull().values.sum())

Результат с нулевым значением

Метод .value_count() используется для распределения частоты категории категориального признака.

print(cat_df_data['carrier'].value_counts())

Распределение частоты

Это используется для подсчета отдельной категории функций.

print(cat_df_data['carrier'].value_counts().count())

Особенность другой категории

  • sns.barplot(carrier_count.index, Carrier_count.values, Alpha=0,9) используется для построения гистограммы.
  • plt.title(‘Распределение несущих по частоте’) используется для присвоения заголовка гистограмме.
  • plt.ylabel(‘Количество вхождений’, fontsize=12) используется для присвоения метки оси Y.
  • plt.xlabel(‘Carrier’, fontsize=12) используется для присвоения метки оси X.
import seaborn as sns
import matplotlib.pyplot as plt
carrier_count = cat_df_data['carrier'].value_counts()
sns.set(style="darkgrid")
sns.barplot(carrier_count.index, carrier_count.values, alpha=0.9)
plt.title('Frequency Distribution of Carriers')
plt.ylabel('Number of Occurrences', fontsize=12)
plt.xlabel('Carrier', fontsize=12)
plt.show()

На этом изображении мы видим, что на экране отображается гистограмма.

Гистограмма категориальной переменной

  • labels = cat_df_data[‘carrier’].astype(‘category’).cat.categories.tolist() используется для присвоения меток диаграмме.
  • Sizes = [counts[var_cat] для var_cat в метках] используется для указания размера круговой диаграммы.
  • fig1, ax1 = plt.subplots() используется для построения диаграммы.
labels = cat_df_data['carrier'].astype('category').cat.categories.tolist()
counts = cat_df_data['carrier'].value_counts()
sizes = [counts[var_cat] for var_cat in labels]
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True) #autopct is show the % on plot
ax1.axis('equal')
plt.show()

В следующем выводе мы видим, что на экране отображается круговая диаграмма, в которой значения разделены на категории.

Построение круговой диаграммы

Перекрестная проверка

В этом разделе мы узнаем о перекрестной проверке логистической регрессии в scikit Learning:

  • Как мы знаем, библиотека обучения scikit используется для моделирования данных. Он просто сосредоточился на моделировании данных, а не на их загрузке.
  • Здесь, используя scikit Learn, мы также создаем результат перекрестной проверки логистической регрессии.
  • Перекрестная проверка — это метод, который использует разные позиции данных для тестового поезда и тестовых моделей на разных итерациях.

В следующем коде мы импортируем различные библиотеки для получения точного значения перекрестной проверки логистической регрессии:

  • x, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1) используется для создания набора данных.
  • CV = KFold(n_splits=10, random_state=1, shuffle=True) используется для подготовки процедуры перекрестной проверки.
  • model = LogisticRegrade() используется для создания модели.
  • Evaluation = cross_val_score(model, x, y, Scoring=’accuracy’, cv=CV, n_jobs=-1) используется для оценки модели.
  • print(‘Accuracy: %.3f(%.3f)’ %(mean(score), std(score))) используется при подготовке отчета о производительности.
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression


x, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1)

CV = KFold(n_splits=10, random_state=1, shuffle=True)


model = LogisticRegression()


score = cross_val_score(model, x, y, scoring='accuracy', cv=CV, n_jobs=-1)

print('Accuracy: %.3f(%.3f)' %(mean(score), std(score)))

Выход:

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

scikit изучает перекрестную проверку логистической регрессии

Порог логистической регрессии

В этом разделе мы узнаем о том, как получить пороговое значение логистической регрессии в scikit Learn:

  • Как мы знаем, логистическая регрессия — это статический метод предотвращения двоичных классов. Бинарные классы определяются как 0 или 1, или мы можем сказать, что это правда или ложь.
  • Здесь логистическая регрессия присваивает каждой строке вероятность истины и делает прогноз, если значение меньше 0,5, его значение принимается равным 0.
  • Значение порога по умолчанию — 0,5.

В следующем коде мы импортируем различные методы, из которых мы получим порог логистической регрессии. Значение порога по умолчанию составляет 0,5, и если значение порога меньше 0,5, мы принимаем значение 0:

  • X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1, Weights=[0,99], Flip_y=0, Random_state=4) используется для генерации набора данных.
  • trainX, testX, trainy, testy = train_test_split(X, y, test_size=0,5, random_state=2, stratify=y) используется для разделения данных на обучающие и тестовые.
  • models.fit(trainX, trainy) используется для соответствия модели.
  • yhat = model.predict_proba(testX) используется для прогнозирования вероятности.
  • yhat = yhat[:, 1] используется для сохранения вероятности только положительного результата.
  • fpr, tpr, пороги = roc_curve(testy, yhat) используется для расчета кривой Roc.
from numpy import argmax
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve

X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0,
 n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)

trainX, testX, trainy, testy = train_test_split(X, y, test_size=0.5, random_state=2, stratify=y)

models = LogisticRegression(solver='lbfgs')
models.fit(trainX, trainy)

yhat = model.predict_proba(testX)

yhat = yhat[:, 1]

fpr, tpr, thresholds = roc_curve(testy, yhat)
Jt = tpr - fpr
ix = argmax(Jt)
best_threshold = thresholds[ix]
print('Best Threshold=%f' %(best_threshold))

Выход:

После запуска приведенного выше кода мы получаем следующий вывод, в котором мы видим, что значение порога напечатано на экране.

scikit изучает порог логистической регрессии

Добавить комментарий