Я новичок в этом, поэтому извиняюсь, если это очевидно.
lr = LogisticRegression(penalty = 'l1')
parameters = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}
clf = GridSearchCV(lr, parameters, scoring='roc_auc', cv = 5)
clf.fit(X, Y)
print clf.score(X, Y)
tn, fp, fn, tp = metrics.confusion_matrix(Y, clf.predict(X)).ravel()
print tn, fp, fn, tp
Я хочу запустить логистическую регрессию - я использую штраф L1, потому что хочу уменьшить количество функций, которые я использую. Я использую GridSearchCV, чтобы найти лучшее значение C для логистической регрессии
Я запускаю это и получаю C = 0,001, AUC = 0,59, матрицу путаницы: 46, 0, 35, 0. Только 1 функция имеет ненулевой коэффициент. Я возвращаюсь к своему коду, удаляю вариант C = 0,001 из своего списка параметров и снова запускаю его. Теперь я получаю C = 1, AUC = 0,95, матрицу путаницы: 42, 4, 6, 29. Многие, но не все функции имеют ненулевой коэффициент.
Я подумал, что, поскольку у меня есть оценка как «roc_auc», не следует ли создавать модель с лучшим AUC?
Думая, что это может быть связано с моим штрафом l1, я переключил его на l2. Но это дало C = 0,001, AUC = 0,80, CM = 42,4,16,19 и снова, когда я удалил C = 0,001 как вариант, он дал C = 0,01, AUC = 0,88, CM = 41,5,13,22. .
Со штрафом l2 меньше проблем, но, похоже, это довольно большая разница в l1. Это штраф?
Из некоторых моих чтений я знаю, что ElasticNet должен сочетать некоторые l1 и l2 - это то, где я должен искать?
Кроме того, это не совсем актуально, но пока я публикую - я не делал для этого никакой нормализации данных. Это нормально для логистической регрессии?