В этом разделе мы узнаем, как работать с логистической регрессией в 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)
В этом выводе мы можем получить точность модели, используя метод оценки.
- Стандартные ошибки
- Коэффициенты логистической регрессии Scikit-learn
- Значение p логистической регрессии
- Важность функции
- Категориальные переменные логистической регрессии
- Перекрестная проверка
- Порог логистической регрессии
Стандартные ошибки
Как мы знаем, логистическая регрессия — это статический метод предотвращения бинарных классов, и мы знаем, что логистическая регрессия проводится, когда зависимая переменная является дихотомической.
Здесь мы можем работать над стандартной логистической ошибкой. Стандартная ошибка определяется как коэффициент модели, являющийся квадратным корнем из диагональных элементов ковариационной матрицы.
В следующем коде мы будем работать со стандартной ошибкой логистической регрессии, поскольку мы знаем, что стандартная ошибка — это квадратный корень из диагональных элементов ковариационной матрицы.
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-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 печатается на экране.
Значение 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-значение логистической регрессии.
Важность функции
Важность признака определяется как метод, который присваивает значение входному признаку и этим значениям, которые мы распределяем в зависимости от того, насколько они полезны для прогнозирования целевой переменной.
В следующем коде мы импортируем 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()
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором видим, что важность функции логистической регрессии отображается на экране.
Категориальные переменные логистической регрессии
Как следует из названия, разделите данные на разные категории, или мы можем сказать, что категориальная переменная — это переменная, которая индивидуально присваивает определенной группе какое-то базовое качественное свойство.
В следующем коде мы импортируем некоторые библиотеки, такие как импортировать панды как 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()
В следующем выводе мы видим, что получаем первые пять строк из набора данных, показанного на экране.
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 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))
Выход:
После запуска приведенного выше кода мы получаем следующий вывод, в котором мы видим, что значение порога напечатано на экране.