Получение весов функций с использованием логистической регрессии scikit-learn

Я немного новичок в этом. Я использую простой классификатор логистической регрессии в python scikit-learn. У меня есть 4 функции. Мой код

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state = 42) 
classifier = LogisticRegression(random_state = 0, C=100)
classifier.fit(X_train, y_train)
coef = classifier.coef_[0]
print (coef)

[-1.07091645 -0.07848958  0.66913624  0.43500273]
  • Я хочу знать, что означает массив coef?
  • можем ли мы использовать эти функции coef * для ранжирования?
  • Означает ли это, что последние два признака наиболее важны при классификации результатов?

person Naufal Khalid    schedule 15.11.2017    source источник
comment
Возьмите абсолютные значения для ранжирования. Не те значения, которые даны как есть.   -  person Vivek Kumar    schedule 15.11.2017
comment
Я отредактировал вопрос, что я хотел сказать здесь, из этого массива мы можем получить c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 = some value Позже мы можем ранжировать, используя это значение   -  person Naufal Khalid    schedule 15.11.2017
comment
Разве не то же самое сделал classifier.predict()   -  person Vivek Kumar    schedule 15.11.2017
comment
я точно не знаю   -  person Naufal Khalid    schedule 15.11.2017
comment
Можем ли мы использовать эти функции coef * для ранжирования: означает ли это ранжирование выходных данных или ранжирование функций?   -  person amanbirs    schedule 16.11.2017


Ответы (2)


Я ответил на ваши вопросы ниже, но, судя по вашим вопросам и комментариям, вы все еще изучаете логистические регрессии. Я могу порекомендовать расширенный анализ данных (http://www.stat.cmu.edu/~cshalizi/ADAfaEPoV/), в котором есть отличная глава о логистической регрессии, а также учебники «Элементы статистического обучения» или «Введение в статистическое обучение» для углубления в тему.

Я хочу знать, что означает массив coef?

Массив коэффициентов представляет собой список значений коэффициентов. Значения упорядочены по порядку столбцов в вашем наборе данных X_train. то есть -1,07091645 — значение коэффициента для первого столбца в X_train, -0,07848958 — значение коэффициента для второго столбца и т. д.

Итак, уравнение из вашего комментария станет:

-1.07091645*f1 + -0.07848958*f2 + 0.66913624*f3 + 0.43500273*f4

можно ли использовать эти функции coef * для ранжирования?

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

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

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

Значит, в данном случае возраст важнее дохода? Сложно сказать.

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

Означает ли это, что последние два признака наиболее важны для классификации результатов?

Нет. Как указывает @Vivek Kumar в своем комментарии, вы должны смотреть на абсолютное значение. Так что в этом случае, если вы чувствуете, что переменные сопоставимы, то в порядке важности это 1, 3, 4, 2.

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

person amanbirs    schedule 16.11.2017

Когда вы выполняете простую логистическую регрессию, вы пытаетесь решить, что Y верно/неверно, 1/0, да/нет и т. д. Верно?

У вас есть эти функции X, которые, вероятно, помогут вам принять решение. Математика базовой логистической регрессии использует сигмовидную функцию (также известную как логистическая функция), которая в Numpy/Python выглядит так:

y = 1/(1 + np.exp(-x) )

x в данном случае — это линейная комбинация ваших характеристик и коэффициента:

coeaf[0] + coef[1] * feature[0] + coef[2] * coef[1] # etc.

По мере увеличения логистическая функция приближается к 1, а при уменьшении асимптотически приближается к 0.

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

Если вы используете Numpy, вы можете взять образец Xи свои коэффициенты и включить их в логистическое уравнение с помощью:

import numpy as np
X = np.array([1, .2 , .1, 1.5]) # one element from your data set
c = np.array([.5, .1, -.7, .2]) # the coefficients that (hopefully) minimize error
z = X @ c.T                     # matrix multiply - linear combination

y = 1/(1 + np.exp(-z)           # logistic function

y будет вероятностью того, что ваша модель считает этот образец X верным.

person Mark    schedule 17.11.2017
comment
Не могли бы вы сообщить мне, следует ли возводить коэффициенты в степень, чтобы определить направление влияния каждой функции? Я имею в виду следующее: stats.idre.ucla.edu/other/mult-pkg/faq/general/, а также второй ответ на этот пост: stats.stackexchange.com/questions/309935/ @Mark_M Большое спасибо. - person ebrahimi; 22.06.2018
comment
Мне понравилось выделение кода/математики и простое объяснение коэффициентов. - person Dave C; 26.07.2018