0

Я думаю, что логистическая регрессия может использоваться для обеих регрессий (получить число от 0 до 1, например, с использованием логистической регрессии для прогнозирования вероятности между 0 и 1) и классификации. Вопрос в том, что после предоставления данных обучения и целевого показателя логистическая регрессия может автоматически определить, выполняем ли регрессию или делаем классификацию?Как scikit узнает логистическую регрессию для классификации или регрессии

Например, в приведенном ниже примере коде, логистическая регрессия выясняла нам нужна просто выход, чтобы быть один из 3 класса 0, 1, 2, кроме любого числа между 0 и 2? Просто любопытно, как логистическая регрессия автоматически выяснила, делает ли она регрессию (выход непрерывный) или классификация (выход дискретная)?

http://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html

print(__doc__) 


# Code source: Gaël Varoquaux 
# Modified for documentation by Jaques Grobler 
# License: BSD 3 clause 

import numpy as np 
import matplotlib.pyplot as plt 
from sklearn import linear_model, datasets 

# import some data to play with 
iris = datasets.load_iris() 
X = iris.data[:, :2] # we only take the first two features. 
Y = iris.target 

h = .02 # step size in the mesh 

logreg = linear_model.LogisticRegression(C=1e5) 

# we create an instance of Neighbours Classifier and fit the data. 
logreg.fit(X, Y) 

# Plot the decision boundary. For that, we will assign a color to each 
# point in the mesh [x_min, m_max]x[y_min, y_max]. 
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5 
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5 
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) 
Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()]) 

# Put the result into a color plot 
Z = Z.reshape(xx.shape) 
plt.figure(1, figsize=(4, 3)) 
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired) 

# Plot also the training points 
plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolors='k', cmap=plt.cm.Paired) 
plt.xlabel('Sepal length') 
plt.ylabel('Sepal width') 

plt.xlim(xx.min(), xx.max()) 
plt.ylim(yy.min(), yy.max()) 
plt.xticks(()) 
plt.yticks(()) 

plt.show() 
+4

«Я думаю, что логистическая регрессия может использоваться как для регрессии [...], так и для классификации» - в принципе да, но если люди говорят о логистической регрессии, они всегда ссылаются на алгоритм классификации (да, это странно). Случай регрессии является частным случаем «обобщенных линейных моделей» с логической связью. – cel

+0

@cel, приятно поймать и проголосовать. Если мне нужна логистическая регрессия для вывода значения от 0 до 1, как мне это сделать? Предположим, что 0 означает, что люди ничего не купили, 1 означает, что люди что-то покупают, я хочу предсказать вероятность покупки с использованием логистической регрессии. В моем случае цель имеет только 0 и 1, но я хочу предсказать число с плавающей точкой от 0 до 1 для вероятности. –

+2

@LinMa использует logreg.predict_proba() http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.predict_proba – joc

ответ

1

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

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

Вы можете посмотреть курс Курсеры Эндрю Нг, в котором есть набор классов по логистической регрессии. This - первый из классов. У меня есть репозиторий github, который является R-версией этого класса, here, который может оказаться полезным для лучшего понимания логистической регрессии.

+0

Привет, Джон, спасибо за ответ. Я понимаю, как работает логистическая регрессия. Мой вопрос больше о scikit learn part, вы можете ссылаться на мой пример кода сообщения, мой вопрос, почему результат предсказания дискретный 0, 1 или 2, кроме непрерывной сигмоидной функции выхода? Просто интересно, как scikit учится автоматически выяснить, мне нужен выход классификации (дискретный), отличный от непрерывного вывода. –

+0

BTW, Джон, проголосуйте за ответ своего пациента. Для вашего ответа есть одна вещь, которую я не совсем понимаю. Я всегда использую EM (максимальная вероятность) для оценки параметра 'w', как он здесь связан с кросс-энтропией? –

+1

Когда вы говорите параметр w, вы имеете в виду class_weight? Я не вижу параметр w в документах scikit-learn. Извините за путаницу. –

Смежные вопросы