Логическая регрессия Python дает неправильные коэффициенты - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь использовать модель LogisticRegression от scikit-learn для решения Excercise 2 из курса машинного обучения Эндрю Нг на Coursera.Но результат, который я получаю, неверен:

1) Коэффициенты результата не совпадают с ответами:

Что я получаю с моделью

LogisticRegression Outcome

Что я должен получить согласно ответам

[- 25,16, 0,21, 0,20]

вы можете увидеть на графике ( неверный график ), эта граница решения кажется немного ниже границы решения интуитивно.

2) Результат графика кажется неверным

Как видите, граница принятия решения ниже

LogisticRegression LogisticRegression Plot

Ответ

Answers Plot

МОЙ КОД:

% matplotlib notebook



# IMPORT DATA

ex2_folder = 'machine-learning-ex2/ex2'
input_1 = pd.read_csv(folder + ex2_folder +'/ex2data1.txt', header = None)
X = input_1[[0,1]]
y = input_1[2]


# IMPORT AND FIT MODEL

from sklearn.linear_model  import LogisticRegression
model = LogisticRegression(fit_intercept = True)
model.fit(X,y)
print('Intercept (Theta 0: {}). Coefficients: {}'.format(model.intercept_, model.coef_))



# CALCULATE GRID
n = 5

xx1, xx2 = np.mgrid[25:101:n, 25:101:n]
grid = np.c_[xx1.ravel(), xx2.ravel()]
probs = model.predict_proba(grid)[:, 1]
probs = probs.reshape(xx1.shape)


# PLOTTING

f = plt.figure()
ax = plt.gca()


for outcome in [0,1]:
    xo = 'yo' if  outcome == 0 else 'k+'
    selection = y == outcome
    plt.plot(X.loc[selection, 0],X.loc[selection,1],xo, mec = 'k')
plt.xlim([25,100])
plt.ylim([25,100])

plt.xlabel('Exam 1 Score')
plt.ylabel('Exam 2 Score')
plt.title('Exam 1 & 2 and admission outcome')

contour = ax.contourf(xx1,xx2, probs, 100, cmap="RdBu",
                      vmin=0, vmax=1)
ax_c = f.colorbar(contour)
ax_c.set_label("$P(y = 1)$")
ax_c.set_ticks([0, .25, .5, .75, 1])

plt.contour(xx1, xx2, probs, [0.5], linewidths=1, colors='b', alpha = 0.3);

plt.plot(xx1[probs > 0.5], xx2[probs > 0.5],'.b', alpha = 0.3)

ССЫЛКИ

DataFileв формате txt

PDF Задачи и решения в Octave

1 Ответ

0 голосов
/ 18 сентября 2018

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

Одним очевидным отличием является количество итераций.Sklearn LogisticRegression Количество итераций по умолчанию для классификатора равно 100, а пример кода Эндрю Н.Г. выполняется за 400 итераций.Это, безусловно, даст вам результат, отличный от курса Нгуена.

Я больше не уверен, какую функцию стоимости Нгуен использует для этого упражнения, но я уверен, что это перекрестная энтропия, а не L2, которая является функцией по умолчанию для классификатора LogisticRecression в scikit learn.

И последнее замечание: прежде чем внедрять высокоуровневые решения (scikitlearn / tenorflow / keras), вы должны сначала попытаться реализовать их на чистом python, чтобы понять, как они работают.Будет проще (и веселее) попробовать сделать пакеты более высокого уровня для вас.

...