ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ Edu.Vsu.Ru

Простой подсчет слов

Составим словарь всех слов с помощью CountVectorizer. Всего в выборке 74849 уникальных слов. Если посмотреть на примеры полученных «слов» (лучше их называть токенами), то можно увидеть, что многие важные этапы обработки текста мы тут пропустили (автоматическая обработка текстов – это могло бы быть темой отдельной серии статей).

   cv = CountVectorizer()
cv.fit(text_train)

print(len(cv.vocabulary_)) #74849  
  

   print(cv.get_feature_names()[:50])
print(cv.get_feature_names()[50000:50050])  
  

Закодируем предложения из текстов обучающей выборки индексами входящих слов. Используем разреженный формат. Преобразуем так же тестовую выборку.

   X_train = cv.transform(text_train)
X_test = cv.transform(text_test)  
  

Обучим логистическую регрессию и посмотрим на доли правильных ответов на обучающей и тестовой выборках. Получается, на тестовой выборке мы правильно угадываем тональность примерно 86.7% отзывов.

   %%time
logit = LogisticRegression(n_jobs=-1, random_state=7)
logit.fit(X_train, y_train)
print(round(logit.score(X_train, y_train), 3), round(logit.score(X_test, y_test), 3))  
  

Коэффициенты модели можно красиво отобразить.

Код визуализации коэффициентов модели

   def visualize_coefficients(classifier, feature_names, n_top_features=25):
# get coefficients with large absolute values 
coef = classifier.coef_.ravel()
positive_coefficients = np.argsort(coef)[-n_top_features:]
negative_coefficients = np.argsort(coef)[:n_top_features]
interesting_coefficients = np.hstack([negative_coefficients, positive_coefficients])
# plot them
plt.figure(figsize=(15, 5))
colors = ["red" if c < 0 else "blue" for c in coef[interesting_coefficients]]
plt.bar(np.arange(2 * n_top_features), coef[interesting_coefficients], color=colors)
feature_names = np.array(feature_names)
plt.xticks(np.arange(1, 1 + 2 * n_top_features), feature_names[interesting_coefficients], rotation=60, ha="right");
  
  

   def plot_grid_scores(grid, param_name):
plt.plot(grid.param_grid[param_name], grid.cv_results_['mean_train_score'],
color='green', label='train')
plt.plot(grid.param_grid[param_name], grid.cv_results_['mean_test_score'],
color='red', label='test')
plt.legend();
  
  

   visualize_coefficients(logit, cv.get_feature_names())  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Подберем коэффициент регуляризации для логистической регрессии. Используем sklearn.pipeline, поскольку CountVectorizer правильно применять только на тех данных, на которых в текущий момент обучается модель (чтоб не «подсматривать» в тестовую выборку и не считать по ней частоты вхождения слов). В данном случае pipeline задает последовательность действий: применить CountVectorizer, затем обучить логистическую регрессию. Так мы поднимаем долю правильных ответов до 88.5% на кросс-валидации и 87.9% – на отложенной выборке.

   from sklearn.pipeline import make_pipeline

text_pipe_logit = make_pipeline(CountVectorizer(), 
LogisticRegression(n_jobs=-1, random_state=7))

text_pipe_logit.fit(text_train, y_train)
print(text_pipe_logit.score(text_test, y_test))

from sklearn.model_selection import GridSearchCV

param_grid_logit = {'logisticregression__C': np.logspace(-5, 0, 6)}
grid_logit = GridSearchCV(text_pipe_logit, param_grid_logit, cv=3, n_jobs=-1)

grid_logit.fit(text_train, y_train)
grid_logit.best_params_, grid_logit.best_score_
plot_grid_scores(grid_logit, 'logisticregression__C')
grid_logit.score(text_test, y_test)  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Теперь то же самое, но со случайным лесом. Видим, что с логистической регрессией мы достигаем большей доли правильных ответов меньшими усилиями. Лес работает дольше, на отложенной выборке 85.5% правильных ответов.

Код для обучения случайного леса

   from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators=200, n_jobs=-1, random_state=17)
forest.fit(X_train, y_train)
print(round(forest.score(X_test, y_test), 3))  
  

XOR-проблема

Теперь рассмотрим пример, где линейные модели справляются хуже.

Линейные методы классификации строят все же очень простую разделяющую поверхность – гиперплоскость. Самый известный игрушечный пример, в котором классы нельзя без ошибок поделить гиперплоскостью (то есть прямой, если это 2D), получил имя «the XOR problem».

XOR – это «исключающее ИЛИ», булева функция со следующей таблицей истинности:

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

Код, рисующий следующие 3 картинки

   # порождаем данные
rng = np.random.RandomState(0)
X = rng.randn(200, 2)
y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)  
  

   plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired);  
  

  def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
  def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_1$inline(
5)lt;/math -->

lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;!-- math>$inline$x_1$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!-- math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_1$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_1$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;!-- math>$inline$x_1$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;!— math>$inline$x_1$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;!-- math>$inline$x_1$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;!-- math>$inline$x_1$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;!— math>$inline$x_1$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;!— math>$inline$x_1$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_1$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_1$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_1$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_1$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_1$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;!-- math>$inline$x_2$inline(
5)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;!— math>$inline$x_2$inline(
5)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(
5)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;!— math>$inline$x_2$inlinedef plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_1$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_1$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_1$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(
5)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r'(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;!-- math>$inline$x_2$inline(
5)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;!— math>$inline$x_2$inline(
5)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;!— math>$inline$x_2$inline(def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'
5lt;!-- math>$inline$x_1$inline
5lt;/math -->)lt;/math -->lt;/math -->
lt;!-- math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math -->

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.ylabel(r’
5lt;!— math>$inline$x_2$inline
5lt;/math —>)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);)lt;/math —>lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);lt;/math —>
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Очевидно, нельзя провести прямую так, чтобы без ошибок отделить один класс от другого. Поэтому логистическая регрессия плохо справляется с такой задачей. )
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);
lt;!— math>$inline$x_1$inline

def plot_boundary(clf, X, y, plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# plot the decision function for each datapoint on the grid
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

image = plt.imshow(Z, interpolation='nearest',
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
linetypes='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$<!-- math>$inline$x_1$inline$</math -->$')
plt.ylabel(r'$<!-- math>$inline$x_2$inline$</math -->$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(image)
plt.title(plot_title, fontsize=12);

lt;/math —>

   plot_boundary(LogisticRegression(), X, y,
"Logistic Regression, XOR problem")  
  

   from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline  
  

   logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
('logit', LogisticRegression())])  
  

   plot_boundary(logit_pipe, X, y,
"Logistic Regression + quadratic features. XOR problem")  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Здесь логистическая регрессия все равно строила гиперплоскость, но в 6-мерном пространстве признаков $1, x_1, x_2, x_1^2, x_1x_2$
и $x_2^2$
. В проекции на исходное пространство признаков $x_1, x_2$
граница получилась нелинейной.

На практике полиномиальные признаки действительно помогают, но строить их явно – вычислительно неэффективно. Гораздо быстрее работает SVM с ядровым трюком. При таком подходе в пространстве высокой размерности считается только расстояние между объектами (задаваемое функцией-ядром), а явно плодить комбинаторно большое число признаков не приходится. Про это подробно можно почитать в курсе
Евгения Соколова (математика уже серьезная).

5. Кривые валидации и обучения

Мы уже получили представление о проверке модели, кросс-валидации и регуляризации.

Теперь рассмотрим главный вопрос:

Если качество модели нас не устраивает, что делать?

  • Сделать модель сложнее или упростить?
  • Добавить больше признаков?
  • Или нам просто нужно больше данных для обучения?

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

Будем работать со знакомыми данными по оттоку клиентов телеком-оператора.

Импорт библиотек и чтение данных

   from __future__ import division, print_function
# отключим всякие предупреждения Anaconda
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
from matplotlib import pyplot as plt
import seaborn as sns

import numpy as np
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression, LogisticRegressionCV, SGDClassifier
from sklearn.model_selection import validation_curve

data = pd.read_csv('../../data/telecom_churn.csv').drop('State', axis=1)
data['International plan'] = data['International plan'].map({'Yes': 1, 'No': 0})
data['Voice mail plan'] = data['Voice mail plan'].map({'Yes': 1, 'No': 0})

y = data['Churn'].astype('int').values
X = data.drop('Churn', axis=1).values  
  

Логистическую регрессию будем обучать стохастическим градиентным спуском. Пока объясним это тем, что так быстрее, но далее в программе у нас отдельная статья про это дело. Построим валидационные кривые, показывающие, как качество (ROC AUC) на обучающей и проверочной выборке меняется с изменением параметра регуляризации.

  alphas = np.logspace(-2, 0, 20)
sgd_logit = SGDClassifier(loss='log', n_jobs=-1, random_state=17)
logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=2)), 
('sgd_logit', sgd_logit)])
val_train, val_test = validation_curve(logit_pipe, X, y,
'sgd_logit__alpha', alphas, cv=5,
scoring='roc_auc')

def plot_with_err(x, data, **kwargs):
mu, std = data.mean

, data.std lines = plt.plot(x, mu, '-', **kwargs) plt.fill_between(x, mu - std, mu + std, edgecolor='none', facecolor=lines[0].get_color(), alpha=0.2) plot_with_err(alphas, val_train, label='training scores') plot_with_err(alphas, val_test, label='validation scores') plt.xlabel(r'$\alpha

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Тенденция видна сразу, и она очень часто встречается.


  • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась : то есть она не имеет достаточное кол-во параметров.


  • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением : когда параметров слишком много либо не хватает регуляризации, алгоритм может "отвлекаться" на шум в данных и упускать основной тренд.


Сколько нужно данных?

Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения ( learning curves ).

Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.


   from sklearn.model_selection import learning_curve

def plot_learning_curve(degree=2, alpha=0.01):
train_sizes = np.linspace(0.05, 1, 20)
logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
N_train, val_train, val_test = learning_curve(logit_pipe,
X, y, train_sizes=train_sizes, cv=5,
scoring='roc_auc')
plot_with_err(N_train, val_train, label='training scores')
plot_with_err(N_train, val_test, label='validation scores')
plt.xlabel('Training Set Size'); plt.ylabel('AUC')
plt.legend()

plot_learning_curve(degree=2, alpha=10)  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки "сходятся", что указывается на недообучение.

Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

Получается, ошибки "сошлись", и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия "настроил один раз – дальше использую 10 раз" может и не работать.

Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

А если усложнить модель ещё больше ( $alpha=10^{-4}$
)?

Проявляется переобучение – AUC падает как на обучении, так и на валидации.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Строя подобные кривые, можно понять, в какую сторону двигаться, и как правильно настроить сложность модели на новых данных.

Выводы по кривым валидации и обучения

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

Наглядный пример регуляризации логистической регрессии

В 1 статье уже приводился пример того, как полиномиальные признаки позволяют линейным моделям строить нелинейные разделяющие поверхности. Покажем это в картинках.

Посмотрим, как регуляризация влияет на качество классификации на наборе данных по тестированию микрочипов из курса Andrew Ng по машинному обучению.

Будем использовать логистическую регрессию с полиномиальными признаками и варьировать параметр регуляризации C.

Сначала посмотрим, как регуляризация влияет на разделяющую границу классификатора, интуитивно распознаем переобучение и недообучение.

Потом численно установим близкий к оптимальному параметр регуляризации с помощью кросс-валидации (cross-validation) и перебора по сетке (GridSearch).

   from __future__ import division, print_function
# отключим всякие предупреждения Anaconda
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
from matplotlib import pyplot as plt
import seaborn as sns

import numpy as np
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
from sklearn.model_selection import cross_val_score, StratifiedKFold
from sklearn.model_selection import GridSearchCV  
  

Загружаем данные с помощью метода read_csv библиотеки pandas. В этом наборе данных для 118 микрочипов (объекты) указаны результаты двух тестов по контролю качества (два числовых признака) и сказано, пустили ли микрочип в производство. Признаки уже центрированы, то есть из всех значений вычтены средние по столбцам. Таким образом, "среднему" микрочипу соответствуют нулевые значения результатов тестов.

   data = pd.read_csv('../../data/microchip_tests.txt',
header=None, names = ('test1','test2','released'))
# информация о наборе данных
data.info()  
  

<class 'pandas.core.frame. DataFrame'>

RangeIndex: 118 entries, 0 to 117

Data columns (total 3 columns):

test1 118 non-null float64

test2 118 non-null float64

released 118 non-null int64

dtypes: float64

, int64

memory usage: 2.8 KB

Посмотрим на первые и последние 5 строк.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Сохраним обучающую выборку и метки целевого класса в отдельных массивах NumPy. Отобразим данные. Красный цвет соответствует бракованным чипам, зеленый – нормальным.

   X = data.ix[:,:2].values
y = data.ix[:,2].values  
  

   plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
plt.xlabel("Тест 1")
plt.ylabel("Тест 2")
plt.title('2 теста микрочипов')
plt.legend();  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Определяем функцию для отображения разделяющей кривой классификатора

   def plot_boundary(clf, X, y, grid_step=.01, poly_featurizer=None):
x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
xx, yy = np.meshgrid(np.arange(x_min, x_max, grid_step),
np.arange(y_min, y_max, grid_step))

# каждой точке в сетке [x_min, m_max]x[y_min, y_max]
# ставим в соответствие свой цвет
Z = clf.predict(poly_featurizer.transform(np.c_[xx.ravel(), yy.ravel()]))
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, cmap=plt.cm.Paired)  
  

Полиномиальными признаками до степени $d$
для двух переменных $x_1$
и $x_2$
мы называем следующие:

$\large \{x_1^d, x_1^{d-1}x_2, \ldots x_2^d\} = \{x_1^ix_2^j\}_{i+j \leq d, i,j \in \mathbb{N}}$

Например, для $d=3$
это будут следующие признаки:

$\large 1, x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3$

Нарисовав треугольник Пифагора, Вы сообразите, сколько таких признаков будет для $d=4,5...$
и вообще для любого $d$
.

Попросту говоря, таких признаков экспоненциально много, и строить, скажем, для 100 признаков полиномиальные степени 10 может оказаться затратно (а более того, и не нужно).

Создадим объект sklearn, который добавит в матрицу $X$
полиномиальные признаки вплоть до степени 7 и обучим логистическую регрессию с параметром регуляризации $C = 10^{-2}$
. Изобразим разделяющую границу.

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

   poly = PolynomialFeatures(degree=7)
X_poly = poly.fit_transform(X)  
  

   C = 1e-2
logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
logit.fit(X_poly, y)

plot_boundary(logit, X, y, grid_step=.01, poly_featurizer=poly)

plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
plt.xlabel("Тест 1")
plt.ylabel("Тест 2")
plt.title('2 теста микрочипов. Логит с C=0.01')
plt.legend();

print("Доля правильных ответов классификатора на обучающей выборке:", 
round(logit.score(X_poly, y), 3))  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Увеличим $C$
до 1. Тем самым мы ослабляем
регуляризацию, теперь в решении значения весов логистической регрессии могут оказаться больше (по модулю), чем в прошлом случае. Теперь доля правильных ответов классификатора на обучающей выборке – 0.831.

   C = 1
logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
logit.fit(X_poly, y)

plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)

plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
plt.xlabel("Тест 1")
plt.ylabel("Тест 2")
plt.title('2 теста микрочипов. Логит с C=1')
plt.legend();

print("Доля правильных ответов классификатора на обучающей выборке:", 
round(logit.score(X_poly, y), 3))  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Еще увеличим $C$
– до 10 тысяч. Теперь регуляризации явно недостаточно, и мы наблюдаем переобучение. Можно заметить, что в прошлом случае (при $C$
=1 и "гладкой" границе) доля правильных ответов модели на обучающей выборке не намного ниже, чем в 3 случае, зато на новой выборке, можно себе представить, 2 модель сработает намного лучше.

Доля правильных ответов классификатора на обучающей выборке – 0.873.

   C = 1e4
logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
logit.fit(X_poly, y)

plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)

plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
plt.xlabel("Тест 1")
plt.ylabel("Тест 2")
plt.title('2 теста микрочипов. Логит с C=10k')
plt.legend();

print("Доля правильных ответов классификатора на обучающей выборке:", 
round(logit.score(X_poly, y), 3))  
  

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Чтоб обсудить результаты, перепишем формулу для функционала, который оптимизируется в логистической регрессии, в таком виде:

$\large J(X,y,w) = \mathcal{L} + \frac{1}{C}||w||^2,$

  • чем больше параметр $C$
    , тем более сложные зависимости в данных может восстанавливать модель (интуитивно $C$
    соответствует "сложности" модели (model capacity))
  • если регуляризация слишком сильная (малые значения $C$
    ), то решением задачи минимизации логистической функции потерь может оказаться то, когда многие веса занулились или стали слишком малыми. Еще говорят, что модель недостаточно "штрафуется" за ошибки (то есть в функционале $J$
    "перевешивает" сумма квадратов весов, а ошибка $\mathcal{L}$
    может быть относительно большой). В таком случае модель окажется недообученной
    (1 случай)
  • наоборот, если регуляризация слишком слабая (большие значения $C$
    ), то решением задачи оптимизации может стать вектор $w$
    с большими по модулю компонентами. В таком случае больший вклад в оптимизируемый функционал $J$
    имеет $\mathcal{L}$
    и, вольно выражаясь, модель слишком "боится" ошибиться на объектах обучающей выборки, поэтому окажется переобученной
    (3 случай)
  • то, какое значение $C$
    выбрать, сама логистическая регрессия "не поймет" (или еще говорят "не выучит"), то есть это не может быть определено решением оптимизационной задачи, которой является логистическая регрессия (в отличие от весов $w$
    ). Так же точно, дерево решений не может "само понять", какое ограничение на глубину выбрать (за один процесс обучения). Поэтому $C$
    – это гиперпараметр
    модели, который настраивается на кросс-валидации, как и max_depth
    для дерева.

Настройка параметра регуляризации

Теперь найдем оптимальное (в данном примере) значение параметра регуляризации $C$
. Сделать это можно с помощью LogisticRegressionCV – перебора параметров по сетке с последующей кросс-валидацией. Этот класс создан специально для логистической регрессии (для нее известны эффективные алгоритмы перебора параметров), для произвольной модели мы бы использовали GridSearchCV, RandomizedSearchCV или, например, специальные алгоритмы оптимизации гиперпараметров, реализованные в hyperopt.

   
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)

c_values = np.logspace(-2, 3, 500)

logit_searcher = LogisticRegressionCV(Cs=c_values, cv=skf, verbose=1, n_jobs=-1)
logit_searcher.fit(X_poly, y)  
  

Посмотрим, как качество модели (доля правильных ответов на обучающей и валидационной выборках) меняется при изменении гиперпараметра $C$
.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Выделим участок с "лучшими" значениями C.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

Полезные ресурсы

  • Перевод материала этой статьи на английский – Jupyter notebooks
    в репозитории курса
  • Видеозаписи лекций по мотивам этой статьи: классификация
    , регрессия
  • Основательный обзор классики машинного обучения и, конечно же, линейных моделей сделан в книге
    "Deep Learning" (I. Goodfellow, Y. Bengio, A. Courville, 2016);
  • Реализация многих алгоритмов машинного обучения с нуля – репозиторий
    rushter
    . Рекомендуем изучить реализацию логистической регрессии;
  • Курс
    Евгения Соколова по машинному обучению (материалы на GitHub). Хорошая теория, нужна неплохая математическая подготовка;
  • Курс
    Дмитрия Ефимова на GitHub (англ.). Тоже очень качественные материалы.

Статья написана в соавторстве с mephistopheies
(Павлом Нестеровым). Он же – автор домашнего задания. Авторы домашнего задания в первой сессии курса (февраль-май 2017)– aiho
(Ольга Дайховская) и das19
(Юрий Исаков). Благодарю bauchgefuehl
(Анастасию Манохину) за редактирование.

Домашнее задание № 4

В качестве закрепления изученного материала предлагаем следующее задание
: разобраться с тем, как работает TfidfVectorize
r и DictVectorizer
, обучить и настроить модель линейной регрессии Ridge
на данных о публикациях на Хабрахабре и воспроизвести бенчмарк в соревновании
. Проверить себя можно отправив ответы в веб-форме
(там же найдете и решение).

Актуальные и обновляемые версии демо-заданий – на английском на сайте курса
. Также по подписке на Patreon ( "Bonus Assignments" tier
) доступны расширенные домашние задания
по каждой теме (только на англ.)

Реализация цикла обучения логистической регрессии в Python

Реализуем цикл обучения логистической регрессии используя Python. В этом нам снова поможет PyTorch
. Для начала импортируем все библиотеки которые нам в этом пригодятся:

  import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
from sklearn.datasets import make_classification
from sklearn.metrics import classification_report  

Далее напишем класс реализующий логистическую регрессию. Прошу обратить внимание, что от линейной регрессии, которую мы реализовывали в ряде предыдущих статей, отличает лишь применение сигмоиды и новый метод predict (так как теперь мы решаем задачу классификации).

  class LogisticRegression(nn. Module):
 def __init__(self, input_size):
 super().__init__()
 self.weights = nn. Parameter(torch.randn(input_size, 1))
 self.sigmoid = nn. Sigmoid()

 def forward(self, x):
 x = x @ self.weights
 x = self.sigmoid(x)
 return x

 def fit(self, X, y, lr=0.01, num_iterations=1000):
 X = torch.from_numpy(X).float()
 y = torch.from_numpy(y).float().view(-1, 1) 

 # Инициализируем функцию потерь и оптимизатор
 criterion = nn. BCELoss()
 optimizer = optim. SGD(self.parameters(), lr=lr)

 for epoch in range(num_iterations):
 # Зануляем градиенты
 optimizer.zero_grad()

 # Получаем предсказания модели и вычисляем функцию потерь
 y_pred = self(X)
 loss = criterion(y_pred, y)

 # Обновляем веса
 loss.backward()
 optimizer.step()
 

 def predict(self, X):
 X = torch.from_numpy(X).float()

 # Получаем предсказания модели и присваиваем метки классов на основе вероятности
 y_pred = self(X)
 y_pred_labels = [1 if i > 0.5 else 0 for i in y_pred.detach().numpy().flatten()]

 return y_pred_labels
  

На этот раз сгенерируем выборку для классификации самостоятельно, используя make_classification из библиотеки scikit-learn
. А далее обучим нашу модель и оценим её качество:

  # Генерируем данные
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,
 random_state=1, n_clusters_per_class=1)

# Создаем экземпляр класса и обучаем на обучающей выборке
model = LogisticRegression(X.shape[1])
model.fit(X, y, lr=0.1, num_iterations=100)

# Прогнозируем метки классов на тестовой выборке
y_pred = model.predict(X)

print(classification_report(y, y_pred))

OUT:
precision recall f1-score support

 0 0.85 0.96 0.90 500
 1 0.95 0.83 0.88 500

 accuracy 0.89 1000
 macro avg 0.90 0.89 0.89 1000
weighted avg 0.90 0.89 0.89 1000
  

Для чистоты эксперимента обучим логистическую регрессию из библиотеки scikit-learn
и увидим, что качество полученных моделей примерно одинаково:

  from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X, y)
y_pred = model.predict(X)

print(classification_report(y, y_pred))

OUT:
 precision recall f1-score support

 0 0.90 0.90 0.90 500
 1 0.90 0.90 0.90 500

 accuracy 0.90 1000
 macro avg 0.90 0.90 0.90 1000
weighted avg 0.90 0.90 0.90 1000
  

Далее давайте визуально оценим как модель принимает свое решение:

machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

Как видим, результатом работы алгоритма выступает линия разделяющая классы. Если бы мы визуализировали модель в процессе обучения градиентным спуском, то увидели бы как эта линия подбирается в процессе оптимизации:

machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

Машинное обучение на Python

Код курса
PYML
Ближайшая дата курса

26 февраля, 2024

Длительность обучения
24 ак.часов
Стоимость обучения
49 500 руб.

Плюсы логистической регрессии:

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

Минусы логистической регрессии:

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

Логистическая регрессия

Линейный классификатор

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

Если это можно сделать без ошибок, то обучающая выборка называется линейно разделимой
.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Мы уже знакомы с линейной регрессией и методом наименьших квадратов. Рассмотрим задачу бинарной классификации, причем метки целевого класса обозначим "+1" (положительные примеры) и "-1" (отрицательные примеры).

Один из самых простых линейных классификаторов получается на основе регрессии вот таким образом:

$\large a(\vec{x}) = sign(\vec{w}^Tx),$

Логистическая регрессия как линейный классификатор

Логистическая регрессия является частным случаем линейного классификатора, но она обладает хорошим "умением" – прогнозировать вероятность $p_+$
отнесения примера $\vec{x_i}$
к классу "+":

$\large p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) $

Прогнозирование не просто ответа ("+1" или "-1"), а именно вероятности
отнесения к классу "+1" во многих задачах является очень важным бизнес-требованием. Например, в задаче кредитного скоринга, где традиционно применяется логистическая регрессия, часто прогнозируют вероятность невозврата кредита ( $p_+$
). Клиентов, обратившихся за кредитом, сортируют по этой предсказанной вероятности (по убыванию), и получается скоркарта — по сути, рейтинг клиентов от плохих к хорошим. Ниже приведен игрушечный пример такой скоркарты.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Банк выбирает для себя порог $p_*$
предсказанной вероятности невозврата кредита (на картинке – $0.15$
) и начиная с этого значения уже не выдает кредит. Более того, можно умножить предсказанную вероятность на выданную сумму и получить матожидание потерь с клиента, что тоже будет хорошей бизнес-метрикой ( Далее в комментариях специалисты по скорингу могут поправить, но главная суть примерно такая
).

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Обозначим $P(X)$
вероятностью происходящего события $X$
. Тогда отношение вероятностей $OR(X)$
определяется из $\frac{P(X)}{1-P(X)}$
, а это — отношение вероятностей того, произойдет ли событие или не произойдет. Очевидно, что вероятность и отношение шансов содержат одинаковую информацию. Но в то время как $P(X)$
находится в пределах от 0 до 1, $OR(X)$
находится в пределах от 0 до $\infty$
.

Если вычислить логарифм $OR(X)$
(то есть называется логарифм шансов, или логарифм отношения вероятностей), то легко заметить, что $\log{OR(X)} \in \mathbb{R}$
. Его-то мы и будем прогнозировать с помощью МНК.

Посмотрим, как логистическая регрессия будет делать прогноз $p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right)$
(пока считаем, что веса $\vec{w}$
мы как-то получили (т.е. обучили модель), далее разберемся, как именно).

  • Шаг 1.
    Вычислить значение $w_{0}+w_{1}x_1 + w_{2}x_2 + ... = \vec{w}^T\vec{x}$
    . (уравнение $\vec{w}^T\vec{x} = 0$
    задает гиперплоскость, разделяющую примеры на 2 класса);

  • Шаг 2.
    Вычислить логарифм отношения шансов: $ \log(OR_{+}) = \vec{w}^T\vec{x}$
    .

  • Шаг 3.
    Имея прогноз шансов на отнесение к классу "+" – $OR_{+}$
    , вычислить $p_{+}$
    с помощью простой зависимости:

$\large p_{+} = \frac{OR_{+}}{1 + OR_{+}} = \frac{\exp^{\vec{w}^T\vec{x}}}{1 + \exp^{\vec{w}^T\vec{x}}} = \frac{1}{1 + \exp^{-\vec{w}^T\vec{x}}} = \sigma(\vec{w}^T\vec{x})$

В правой части мы получили как раз сигмоид-функцию.

Итак, логистическая регрессия прогнозирует вероятность отнесения примера к классу "+" (при условии, что мы знаем его признаки и веса модели) как сигмоид-преобразование линейной комбинации вектора весов модели и вектора признаков примера:

$\large p_+(x_i) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i}). $

Следующий вопрос: как модель обучается? Тут мы опять обращаемся к принципу максимального правдоподобия.

Принцип максимального правдоподобия и логистическая регрессия

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

Только что мы увидели, что логистическая регрессия моделирует вероятность отнесения примера к классу "+" как

$\large p_+(\vec{x_i}) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i})$

Тогда для класса "-" аналогичная вероятность:

$\large p_-(\vec{x_i}) = P\left(y_i = -1 \mid \vec{x_i}, \vec{w}\right) = 1 - \sigma(\vec{w}^T\vec{x_i}) = \sigma(-\vec{w}^T\vec{x_i}) $

Оба этих выражения можно ловко объединить в одно (следите за моими руками – не обманывают ли вас):

$\large P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) = \sigma(y_i\vec{w}^T\vec{x_i})$

Выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$
называется отступом
( margin
) классификации на объекте $\vec{x_i}$
(не путать с зазором (тоже margin), про который чаще всего говорят в контексте SVM). Если он неотрицателен, модель не ошибается на объекте $\vec{x_i}$
, если же отрицателен – значит, класс для $\vec{x_i}$
спрогнозирован неправильно.

Заметим, что отступ определен для объектов именно обучающей выборки, для которых известны реальные метки целевого класса $y_i$
.

Чтобы понять, почему это мы сделали такие выводы, обратимся к геометрической интерпретации линейного классификатора. Подробно про это можно почитать в материалах
Евгения Соколова.

Рекомендую решить почти классическую задачу из начального курса линейной алгебры: найти расстояние от точки с радиус-вектором $\vec{x_A}$
до плоскости, которая задается уравнением $\vec{w}^T\vec{x} = 0.$

$\large \rho(\vec{x_A}, \vec{w}^T\vec{x} = 0) = \frac{\vec{w}^T\vec{x_A}}{||\vec{w}||}$

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Когда получим (или посмотрим) ответ, то поймем, что чем больше по модулю выражение $\vec{w}^T\vec{x_i}$
, тем дальше точка $\vec{x_i}$
находится от плоскости $\vec{w}^T\vec{x} = 0.$

Значит, выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$
– это своего рода "уверенность" модели в классификации объекта $\vec{x_i}$
:

  • если отступ большой (по модулю) и положительный, это значит, что метка класса поставлена правильно, а объект находится далеко от разделяющей гиперплоскости (такой объект классифицируется уверенно). На рисунке – $x_3$
    .
  • если отступ большой (по модулю) и отрицательный, значит метка класса поставлена неправильно, а объект находится далеко от разделяющей гиперплоскости (скорее всего такой объект – аномалия, например, его метка в обучающей выборке поставлена неправильно). На рисунке – $x_1$
    .
  • если отступ малый (по модулю), то объект находится близко к разделяющей гиперплоскости, а знак отступа определяет, правильно ли объект классифицирован. На рисунке – $x_2$
    и $x_4$
    .

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Теперь распишем правдоподобие выборки, а именно, вероятность наблюдать данный вектор $\vec{y}$
у выборки $X$
. Делаем сильное предположение: объекты приходят независимо, из одного распределения ( i.i.d.
). Тогда

$\large P\left(\vec{y} \mid X, \vec{w}\right) = \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right),$

где $\ell$
– длина выборки $X$
(число строк).

Как водится, возьмем логарифм данного выражения (сумму оптимизировать намного проще, чем произведение):

$\large \begin{array}{rcl} \log P\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) \\ &=& \log \prod_{i=1}^{\ell} \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \frac{1}{1 + \exp^{-y_i\vec{w}^T\vec{x_i}}} \\ &=& - \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}) \end{array}$

То есть в даном случае принцип максимизации правдоподобия приводит к минимизации выражения

$\large \mathcal{L_{log}} (X, \vec{y}, \vec{w}) = \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}).$

Это логистическая
функция потерь, просуммированная по всем объектам обучающей выборки.

Посмотрим на новую фунцию как на функцию от отступа: $L(M) = \log (1 + \exp^{-M})$
. Нарисуем ее график, а также график 1/0 функциий потерь ( zero-one loss
), которая просто штрафует модель на 1 за ошибку на каждом объекте (отступ отрицательный): <img src="https://habrastorage.org/getpro/habr/formulas/279/e2d/d4f/279e2dd4f16fba5aaba3bb74abc2ca6a.svg" alt="$L_{1/0}(M) = [M
.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

<img src="https://habrastorage.org/getpro/habr/formulas/6f7/6f6/465/6f76f64653b4699ea79de2f9844a8d76.svg" alt="$\large \begin{array}{rcl} \mathcal{L_{1/0}} (X, \vec{y}, \vec{w}) &=& \sum_{i=1}^{\ell} [M(\vec{x_i})

где $\mathcal{L_{1/0}} (X, \vec{y}, \vec{w})$
– попросту число ошибок логистической регрессии с весами $\vec{w}$
на выборке $(X, \vec{y})$
.

То есть уменьшая верхнюю оценку $\mathcal{L_{log}}$
на число ошибок классификации, мы таким образом надеемся уменьшить и само число ошибок.

$L_2$
-регуляризация логистических потерь

L2-регуляризация логистической регрессии устроена почти так же, как и в случае с гребневой (Ridge регрессией). Вместо функционала $\mathcal{L_{log}} (X, \vec{y}, \vec{w})$
минимизируется следующий:

$\large J(X, \vec{y}, \vec{w}) = \mathcal{L_{log}} (X, \vec{y}, \vec{w}) + \lambda |\vec{w}|^2$

В случае логистической регрессии принято введение обратного коэффициента регуляризации $C = \frac{1}{\lambda}$
. И тогда решением задачи будет

$\large \hat{w} = \arg \min_{\vec{w}} J(X, \vec{y}, \vec{w}) = \arg \min_{\vec{w}}\ (C\sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}})+ |\vec{w}|^2)$

Далее рассмотрим пример, позволяющий интуитивно понять один из смыслов регуляризации.

Линейная регрессия

Метод наименьших квадратов

Рассказ про линейные модели мы начнем с линейной регрессии. В первую очередь, необходимо задать модель зависимости объясняемой переменной $y$
от объясняющих ее факторов, функция зависимости будет линейной: $y = w_0 + \sum_{i=1}^m w_i x_i$
. Если мы добавим фиктивную размерность $x_0 = 1$
для каждого наблюдения, тогда линейную форму можно переписать чуть более компактно, записав свободный член $w_0$
под сумму: $y = \sum_{i=0}^m w_i x_i = \vec{w}^T \vec{x}$
. Если рассматривать матрицу наблюдения-признаки, у которой в строках находятся примеры из набора данных, то нам необходимо добавить единичную колонку слева. Зададим модель следующим образом:

$\large \vec y = X \vec w + \epsilon,$

Можем выписать выражение для каждого конкретного наблюдения

$\large y_i = \sum_{j=0}^m w_j X_{ij} + \epsilon_i$

Также на модель накладываются следующие ограничения (иначе это будет какая то другая регрессия, но точно не линейная):

Оценка $\hat{w}_i$
весов $w_i$
называется линейной, если

$\large \hat{w}_i = \omega_{1i}y_1 + \omega_{2i}y_2 + \cdots + \omega_{ni}y_n,$

где $\forall\ k\ \omega_{ki}$
зависит только от наблюдаемых данных $X$
и почти наверняка нелинейно. Так как решением задачи поиска оптимальных весов будет именно линейная оценка, то и модель называется линейной регрессией
. Введем еще одно определение. Оценка $\hat{w}_i$
называется несмещенной тогда, когда матожидание оценки равно реальному, но неизвестному значению оцениваемого параметра:

$\large \mathbb{E}\left[\hat{w}_i\right] = w_i$

Один из способов вычислить значения параметров модели является метод наименьших квадратов
(МНК), который минимизирует среднеквадратичную ошибку между реальным значением зависимой переменной и прогнозом, выданным моделью:

$\large \begin{array}{rcl}\mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 \\ &=& \frac{1}{2n} \left(\vec{y} - X \vec{w}\right)^T \left(\vec{y} - X \vec{w}\right) \end{array}$

Для решения данной оптимизационной задачи необходимо вычислить производные по параметрам модели, приравнять их к нулю и решить полученные уравнения относительно $\vec w$
(матричное дифференцирование неподготовленному читателю может показаться затруднительным, попробуйте расписать все через суммы, чтобы убедиться в ответе):

Шпаргалка по матричным производным

$\large \begin{array}{rcl} \frac{\partial}{\partial x} x^T a &=& a \\ \frac{\partial}{\partial x} x^T A x &=& \left(A + A^T\right)x \\ \frac{\partial}{\partial A} x^T A y &=& xy^T\\ \frac{\partial}{\partial x} A^{-1} &=& -A^{-1} \frac{\partial A}{\partial x} A^{-1} \end{array}$

$\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} &=& \frac{\partial}{\partial \vec{w}} \frac{1}{2n} \left( \vec{y}^T \vec{y} -2\vec{y}^T X \vec{w} + \vec{w}^T X^T X \vec{w}\right) \\ &=& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) \end{array}$

$\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} = 0 &\Leftrightarrow& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) = 0 \\ &\Leftrightarrow& -X^T \vec{y} + X^T X \vec{w} = 0 \\ &\Leftrightarrow& X^T X \vec{w} = X^T \vec{y} \\ &\Leftrightarrow& \vec{w} = \left(X^T X\right)^{-1} X^T \vec{y} \end{array}$

Итак, имея в виду все определения и условия описанные выше, мы можем утверждать, опираясь на теорему Маркова-Гаусса
, что оценка МНК является лучшей оценкой параметров модели, среди всех линейных
и несмещенных
оценок, то есть обладающей наименьшей дисперсией.

Метод максимального правдоподобия

У читателя вполне резонно могли возникнуть вопросы: например, почему мы минимизируем среднеквадратичную ошибку, а не что-то другое. Ведь можно минимизировать среднее абсолютное значение невязки или еще что-то. Единственное, что произойдёт в случае изменения минимизируемого значения, так это то, что мы выйдем из условий теоремы Маркова-Гаусса, и наши оценки перестанут быть лучшими среди линейных и несмещенных.

Давайте перед тем как продолжить, сделаем лирическое отступление, чтобы проиллюстрировать метод максимального правдоподобия на простом примере.

Как-то после школы я заметил, что все помнят формулу этилового спирта. Тогда я решил провести эксперимент: помнят ли люди более простую формулу метилового спирта: $CH_3OH$
. Мы опросили 400 человек и оказалось, что формулу помнят всего 117 человек. Разумно предположить, что вероятность того, что следующий опрошенный знает формулу метилового спирта – $\frac{117}{400} \approx 0.29%$
. Покажем, что такая интуитивно понятная оценка не просто хороша, а еще и является оценкой максимального правдоподобия.

Разберемся, откуда берется эта оценка, а для этого вспомним определение распределения Бернулли
: случайная величина $X$
имеет распределение Бернулли, если она принимает всего два значения ( $1$
и $0$
с вероятностями $\theta$
и $1 - \theta$
соответственно) и имеет следующую функцию распределения вероятности:

$\large p\left(\theta, x\right) = \theta^{x} \left(1 - \theta\right)^\left(1 - x\right), x \in \left\{0, 1\right\}$

Похоже, это распределение – то, что нам нужно, а параметр распределения $\theta$
и есть та оценка вероятности того, что человек знает формулу метилового спирта. Мы проделали $400$
независимых
экспериментов, обозначим их исходы как $\vec{x} = \left(x_1, x_2, \ldots, x_{400}\right)$
. Запишем правдоподобие
наших данных (наблюдений), то есть вероятность наблюдать 117 реализаций случайной величины $X = 1$
и 283 реализации $X = 0$
:

$\large p(\vec{x} \mid \theta) = \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = \theta^{117} \left(1 - \theta\right)^{283}$

Далее будем максимизировать это выражение по $\theta$
, и чаще всего это делают не с правдоподобием $p(\vec{x} \mid \theta)$
, а с его логарифмом (применение монотонного преобразования не изменит решение, но упростит вычисления):

$\large \log p(\vec{x} \mid \theta) = \log \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = $

$ \large = \log \theta^{117} \left(1 - \theta\right)^{283} = 117 \log \theta + 283 \log \left(1 - \theta\right)$

Теперь мы хотим найти такое значение $\theta$
, которое максимизирует правдоподобие, для этого мы возьмем производную по $\theta$
, приравняем к нулю и решим полученное уравнение:

$\large \frac{\partial p(\vec{x} \mid \theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left(117 \log \theta + 283 \log \left(1 - \theta\right)\right) = \frac{117}{\theta} - \frac{283}{1 - \theta};$

$\large \begin{array}{rcl} \frac{117}{\theta} - \frac{283}{1 - \theta} = 0 \Rightarrow \theta = \frac{117}{400} \end{array}.$

Получается, что наша интуитивная оценка – это и есть оценка максимального правдоподобия. Применим теперь те же рассуждения для задачи линейной регрессии и попробуем выяснить, что лежит за среднеквадратичной ошибкой. Для этого нам придется посмотреть на линейную регрессию с вероятностной точки зрения. Модель, естественно, остается такой же:

$\large \vec y = X \vec w + \epsilon,$

но будем теперь считать, что случайные ошибки берутся из центрированного нормального распределения
:

$C = \frac{1}{\lambda}$ Перепишем модель в новом свете:

$\mathcal{L_{log}} (X, \vec{y}, \vec{w})$

Так как примеры берутся независимо (ошибки не скоррелированы – одно из условий теоремы Маркова-Гаусса), то полное правдоподобие данных будет выглядеть как произведение функций плотности $\large J(X, \vec{y}, \vec{w}) = \mathcal{L_{log}} (X, \vec{y}, \vec{w}) + \lambda |\vec{w}|^2$
. Рассмотрим логарифм правдоподобия, что позволит нам перейти от произведения к сумме:

$\large \begin{array}{rcl} \log p\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^n \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& \sum_{i=1}^n \log \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \end{array}$

Мы хотим найти гипотезу максимального правдоподобия, т.е. нам нужно максимизировать выражение $p\left(\vec{y} \mid X, \vec{w}\right)$
, а это то же самое, что и максимизация его логарифма. Обратите внимание, что при максимизации функции по какому-то параметру можно выкинуть все члены, не зависящие от этого параметра:

$\large \begin{array}{rcl} \hat{w} &=& \arg \max_{w} p\left(\vec{y} \mid X, \vec{w}\right) \\ &=& \arg \max_{w} -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\mathcal{L}\left(X, \vec{y}, \vec{w} \right) \end{array}$

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

Разложение ошибки на смещение и разброс (Bias-variance decomposition)

Поговорим немного о свойствах ошибки прогноза линейной регрессии (в принципе эти рассуждения верны для всех алгоритмов машинного обучения). В свете предыдущего пункта мы выяснили, что:

Тогда ошибка в точке $\vec{x}$
раскладывается следующим образом:

$\large \begin{array}{rcl} \text{Err}\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\left(\hat{f}\left(\vec{x}\right)\right)^2\right] - 2\mathbb{E}\left[y\hat{f}\left(\vec{x}\right)\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\hat{f}^2\right] - 2\mathbb{E}\left[y\hat{f}\right] \\ \end{array}$

Для наглядности опустим обозначение аргумента функций. Рассмотрим каждый член в отдельности, первые два расписываются легко по формуле $\text{Var}\left(z\right) = \mathbb{E}\left[z^2\right] - \mathbb{E}\left[z\right]^2$
:

$\large \begin{array}{rcl} \mathbb{E}\left[y^2\right] &=& \text{Var}\left(y\right) + \mathbb{E}\left[y\right]^2 = \sigma^2 + f^2\\ \mathbb{E}\left[\hat{f}^2\right] &=& \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{f}\right]^2 \\ \end{array}$

$\large \begin{array}{rcl} \text{Var}\left(y\right) &=& \mathbb{E}\left[\left(y - \mathbb{E}\left[y\right]\right)^2\right] \\ &=& \mathbb{E}\left[\left(y - f\right)^2\right] \\ &=& \mathbb{E}\left[\left(f + \epsilon - f\right)^2\right] \\ &=& \mathbb{E}\left[\epsilon^2\right] = \sigma^2 \end{array}$

$\large \mathbb{E}[y] = \mathbb{E}[f + \epsilon] = \mathbb{E}[f] + \mathbb{E}[\epsilon] = f$

И теперь последний член суммы. Мы помним, что ошибка и целевая переменная независимы друг от друга:

$\large \begin{array}{rcl} \mathbb{E}\left[y\hat{f}\right] &=& \mathbb{E}\left[\left(f + \epsilon\right)\hat{f}\right] \\ &=& \mathbb{E}\left[f\hat{f}\right] + \mathbb{E}\left[\epsilon\hat{f}\right] \\ &=& f\mathbb{E}\left[\hat{f}\right] + \mathbb{E}\left[\epsilon\right] \mathbb{E}\left[\hat{f}\right] = f\mathbb{E}\left[\hat{f}\right] \end{array}$

Наконец, собираем все вместе:

$\large \begin{array}{rcl} \text{Err}\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\right] \\ &=& \sigma^2 + f^2 + \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{f}\right]^2 - 2f\mathbb{E}\left[\hat{f}\right] \\ &=& \left(f - \mathbb{E}\left[\hat{f}\right]\right)^2 + \text{Var}\left(\hat{f}\right) + \sigma^2 \\ &=& \text{Bias}\left(\hat{f}\right)^2 + \text{Var}\left(\hat{f}\right) + \sigma^2 \end{array}$

Итак, мы достигли цели всех вычислений, описанных выше, последняя формула говорит нам, что ошибка прогноза любой модели вида $y = f\left(\vec{x}\right) + \epsilon$
складывается из:

Если с последней мы ничего сделать не можем, то на первые два слагаемых мы можем как-то влиять. В идеале, конечно же, хотелось бы свести на нет оба этих слагаемых (левый верхний квадрат рисунка), но на практике часто приходится балансировать между смещенными и нестабильными оценками (высокая дисперсия).

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Теорема Маркова-Гаусса как раз утверждает, что МНК-оценка параметров линейной модели является самой лучшей в классе несмещенных линейных оценок, то есть с наименьшей дисперсией. Это значит, что если существует какая-либо другая несмещенная модель $g$
тоже из класса линейных моделей, то мы можем быть уверены, что $Var\left(\hat{f}\right) \leq Var\left(g\right)$
.

Регуляризация линейной регрессии

Иногда бывают ситуации, когда мы намеренно увеличиваем смещенность модели ради ее стабильности, т.е. ради уменьшения дисперсии модели $\text{Var}\left(\hat{f}\right)$
. Одним из условий теоремы Маркова-Гаусса является полный столбцовый ранг матрицы $X$
. В противном случае решение МНК $\vec{w} = \left(X^T X\right)^{-1} X^T \vec{y}$
не существует, т.к. не будет существовать обратная матрица $\left(X^T X\right)^{-1}.$
Другими словами, матрица $X^T X$
будет сингулярна, или вырожденна. Такая задача называется некорректно поставленной
. Задачу нужно скорректировать, а именно, сделать матрицу $X^TX$
невырожденной, или регулярной (именно поэтому этот процесс называется регуляризацией). Чаще в данных мы можем наблюдать так называемую мультиколлинеарность
— когда два или несколько признаков сильно коррелированы, в матрице $X$
это проявляется в виде "почти" линейной зависимости столбцов. Например, в задаче прогнозирования цены квартиры по ее параметрам "почти" линейная зависимость будет у признаков "площадь с учетом балкона" и "площадь без учета балкона". Формально для таких данных матрица $X^T X$
будет обратима, но из-за мультиколлинеарности у матрицы $X^T X$
некоторые собственные значения будут близки к нулю, а в обратной матрице $\left(X^T X\right)^{-1}$
появятся экстремально большие собственные значения, т.к. собственные значения обратной матрицы – это $\frac{1}{\lambda_i}$
. Итогом такого шатания собственных значений станет нестабильная оценка параметров модели, т.е. добавление нового наблюдения в набор тренировочных данных приведёт к совершенно другому решению. Иллюстрации роста коэффициентов вы найдете в одном из наших прошлых постов
. Одним из способов регуляризации является регуляризация Тихонова
, которая в общем виде выглядит как добавление нового члена к среднеквадратичной ошибке:

$\large \begin{array}{rcl} \mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 + \left\|\Gamma \vec{w}\right\|^2\\ \end{array}$

Часто матрица Тихонова выражается как произведение некоторого числа на единичную матрицу: $\Gamma = \frac{\lambda}{2} E$
. В этом случае задача минимизации среднеквадратичной ошибки становится задачей с ограничением на $L_2$
норму. Если продифференцировать новую функцию стоимости по параметрам модели, приравнять полученную функцию к нулю и выразить $\vec{w}$
, то мы получим точное решение задачи.

$\large \begin{array}{rcl} \vec{w} &=& \left(X^T X + \lambda E\right)^{-1} X^T \vec{y} \end{array}$

Такая регрессия называется гребневой регрессией (ridge regression). А гребнем является как раз диагональная матрица, которую мы прибавляем к матрице $X^T X$
, в результате получается гарантированно регулярная матрица.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Такое решение уменьшает дисперсию, но становится смещенным, т.к. минимизируется также и норма вектора параметров, что заставляет решение сдвигаться в сторону нуля. На рисунке ниже на пересечении белых пунктирных линий находится МНК-решение. Голубыми точками обозначены различные решения гребневой регрессии. Видно, что при увеличении параметра регуляризации $\lambda$
решение сдвигается в сторону нуля.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

Логистическая регрессия

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

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

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

Y — бинарный выходной результат (0 или 1)

X — вектор признаков, используемый для прогнозирования $Y$

e — число Эйлера

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

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

Машинное обучение на Python

Код курса
PYML
Ближайшая дата курса

26 февраля, 2024

Длительность обучения
24 ак.часов
Стоимость обучения
49 500 руб.


)
plt.ylabel(r'

defplot_boundary(clf, X, y,plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# построим функцию решения для каждой точки данных в сетке
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

изображение = plt.imshow(Z, интерполяция = 'ближайший',
экстент=(xx.min(), xx.max(), yy.min(), yy.max()),
аспект = 'авто', происхождение = 'нижний', cmap = plt.cm. ПуОр_р)
контуры = plt.contour(xx, yy, Z, level=[0], linewidths=2,
типы линий='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. В паре)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$$')
plt.ylabel(r'$$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(изображение)
plt.title(plot_title, fontsize=12);

lt;!-- math>$inline$x_2$inline

defplot_boundary(clf, X, y,plot_title):
xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
np.linspace(-3, 3, 50))
clf.fit(X, y)
# построим функцию решения для каждой точки данных в сетке
Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
Z = Z.reshape(xx.shape)

изображение = plt.imshow(Z, интерполяция = 'ближайший',
экстент=(xx.min(), xx.max(), yy.min(), yy.max()),
аспект = 'авто', происхождение = 'нижний', cmap = plt.cm. ПуОр_р)
контуры = plt.contour(xx, yy, Z, level=[0], linewidths=2,
типы линий='--')
plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. В паре)
plt.xticks(())
plt.yticks(())
plt.xlabel(r'$$')
plt.ylabel(r'$$')
plt.axis([-3, 3, -3, 3])
plt.colorbar(изображение)
plt.title(plot_title, fontsize=12);

lt;/math -->

plot_boundary(LogisticRegrade(), X, y,
«Логистическая регрессия, проблема XOR»)

из sklearn.preprocessing import PolynomialFeatures
из конвейера импорта sklearn.pipeline

logit_pipe = Pipeline([('poly', PolynomialFeatures(grade=2)),
('logit', ЛогистическаяРегрессия())])

plot_boundary(logit_pipe, X, y,
«Логистическая регрессия + квадратичные функции. Задача X ИЛИ»)

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

Здесь логистическая регрессия все равно построила гиперплоскость, но в 6-мерном пространстве условий  $1, x_1, x_2, x_1^2, x_1x_2$ и $x_2^2$. В проекции на исходное пространство признаков $x_1, x_2$граница получилась нелинейной.

На примере полиномиальных признаков действительно помогают, но строить их явно – явно неэффективно. Гораздо быстрее работает SVM с ядровым трюком. При таком подходе в пространстве высокой размерности считается только расстояние между объектами (задаваемое умеренное число), и явно плодить комбинаторно большое число критериев не приходится. Про это подробно можно почитать в курсе Евгении Соколовой (математика уже серьёзная).

5. Кривые валидации и обучение

Мы уже получили представление о боковых моделях, кросс-валидации и регуляризации.
Теперь рассмотрим главный вопрос:

Если качественные модели нас не устраивают, что делать?

  • Сделать модель сложнее или проще?
  • Добавить больше признаков?
  • Или нам просто нужно больше данных для обучения?
  • Ответы на данные вопросы не всегда остаются на поверхности. В частности, иногда использование более сложных моделей приводит к ухудшению показателей. Либо добавление результатов не привело к ощутимым изменениям. Способность принять правильное решение и выбрать правильный способ улучшения модели, собственно говоря, и отличает хорошего специалиста от плохого.

    Будем работать с известными данными по оттоку клиентов телеком-оператора.

    Импорт библиотек и чтение данных

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV, SGDClassifier
    from sklearn.model_selection import validation_curve
    
    data = pd.read_csv('././data/telecom_churn.csv').drop('State', axis=1)
    data['International plan'] = data['International plan'].map({'Yes': 1, 'No': 0})
    data['Voice mail plan'] = data['Voice mail plan'].map({'Yes': 1, 'No': 0})
    
    y = data['Churn'].astype('int').values
    X = data.drop('Churn', axis=1).values

    Логистическую регрессию будем обучать стохастическим градиентным спуском. Пока объясним это тем, что так быстрее, но далее в программе у нас отдельная статья про это дело. Построим валидационные кривые, показывающие, как качество (ROC AUC) на обучающей и проверочной выборке меняется с изменением параметра регуляризации.

      alphas = np.logspace(-2, 0, 20)
    sgd_logit = SGDClassifier(loss='log', n_jobs=-1, random_state=17)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=2)), 
    ('sgd_logit', sgd_logit)])
    val_train, val_test = validation_curve(logit_pipe, X, y,
    'sgd_logit__alpha', alphas, cv=5,
    scoring='roc_auc')
    
    def plot_with_err(x, data, **kwargs):
    mu, std = data.meanalphas = np.logspace(-2, 0, 20)
    sgd_logit = SGDClassifier(loss='log', n_jobs=-1, random_state=17)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=2)), 
    ('sgd_logit', sgd_logit)])
    val_train, val_test = validation_curve(logit_pipe, X, y,
    'sgd_logit__alpha', alphas, cv=5,
    scoring='roc_auc')
    
    def plot_with_err(x, data, **kwargs):
    mu, std = data.mean(1), data.std(1)
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)
    
    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha, data.std(1)
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)
    
    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha  
    

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может "отвлекаться" на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки "сходятся", что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки "сошлись", и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия "настроил один раз – дальше использую 10 раз" может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации. ); plt.ylabel('ROC AUC')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может "отвлекаться" на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки "сходятся", что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки "сошлись", и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия "настроил один раз – дальше использую 10 раз" может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации. ); plt.ylabel('ROC AUC')
    plt.legend();
    , data.stdalphas = np.logspace(-2, 0, 20)
    sgd_logit = SGDClassifier(loss='log', n_jobs=-1, random_state=17)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=2)),
    ('sgd_logit', sgd_logit)])
    val_train, val_test = validation_curve(logit_pipe, X, y,
    'sgd_logit__alpha', alphas, cv=5,
    scoring='roc_auc')

    def plot_with_err(x, data, **kwargs):
    mu, std = data.mean(1), data.std(1)
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)

    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)

    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может "отвлекаться" на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки "сходятся", что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки "сошлись", и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия "настроил один раз – дальше использую 10 раз" может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации. ); plt.ylabel('ROC AUC')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может "отвлекаться" на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки "сходятся", что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки "сошлись", и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия "настроил один раз – дальше использую 10 раз" может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации. ); plt.ylabel('ROC AUC')
    plt.legend();
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)

    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может «отвлекаться» на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки «сходятся», что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки «сошлись», и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия «настроил один раз – дальше использую 10 раз» может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации. ); plt.ylabel(‘ROC AUC’)
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может «отвлекаться» на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки «сходятся», что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки «сошлись», и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия «настроил один раз – дальше использую 10 раз» может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    А если усложнить модель ещё больше ($alpha=10^{-4}$)?

    Проявляется переобучение – AUC падает как на обучении, так и на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Строя подобные кривые, можно понять, в какую сторону двигаться, и как правильно настроить сложность модели на новых данных.

    Выводы по кривым валидации и обучения

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

    Наглядный пример регуляризации логистической регрессии

    В 1 статье уже приводился пример того, как полиномиальные признаки позволяют линейным моделям строить нелинейные разделяющие поверхности. Покажем это в картинках.

    Посмотрим, как регуляризация влияет на качество классификации на наборе данных по тестированию микрочипов из курса Andrew Ng по машинному обучению.
    Будем использовать логистическую регрессию с полиномиальными признаками и варьировать параметр регуляризации C.
    Сначала посмотрим, как регуляризация влияет на разделяющую границу классификатора, интуитивно распознаем переобучение и недообучение.
    Потом численно установим близкий к оптимальному параметр регуляризации с помощью кросс-валидации (cross-validation) и перебора по сетке (GridSearch).

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
    from sklearn.model_selection import cross_val_score, StratifiedKFold
    from sklearn.model_selection import GridSearchCV

    Загружаем данные с помощью метода read_csv библиотеки pandas. В этом наборе данных для 118 микрочипов (объекты) указаны результаты двух тестов по контролю качества (два числовых признака) и сказано, пустили ли микрочип в производство. Признаки уже центрированы, то есть из всех значений вычтены средние по столбцам. Таким образом, «среднему» микрочипу соответствуют нулевые значения результатов тестов.

    data = pd.read_csv('././data/microchip_tests.txt',
    header=None, names = ('test1','test2','released'))
    # информация о наборе данных
    data.info()

    <class ‘pandas.core.frame. DataFrame’>
    RangeIndex: 118 entries, 0 to 117
    Data columns (total 3 columns):
    test1 118 non-null float64
    test2 118 non-null float64
    released 118 non-null int64
    dtypes: float64(2), int64(1)
    memory usage: 2.8 KB

    Посмотрим на первые и последние 5 строк.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Сохраним обучающую выборку и метки целевого класса в отдельных массивах NumPy. Отобразим данные. Красный цвет соответствует бракованным чипам, зеленый – нормальным.

    X = data.ix[:,:2].values
    y = data.ix[:,2].values

    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Определяем функцию для отображения разделяющей кривой классификатора

    def plot_boundary(clf, X, y, grid_step=.01, poly_featurizer=None):
    x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
    y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, grid_step),
    np.arange(y_min, y_max, grid_step))
    
    # каждой точке в сетке [x_min, m_max]x[y_min, y_max]
    # ставим в соответствие свой цвет
    Z = clf.predict(poly_featurizer.transform(np.c_[xx.ravel(), yy.ravel()]))
    Z = Z.reshape(xx.shape)
    plt.contour(xx, yy, Z, cmap=plt.cm. Paired)

    Полиномиальными признаками до степени $d$ для двух переменных $x_1$ и $x_2$ мы называем следующие:

    $\large \{x_1^d, x_1^{d-1}x_2, \ldots x_2^d\} = \{x_1^ix_2^j\}_{i+j \leq d, i,j \in \mathbb{N}}$

    Например, для $d=3$ это будут следующие признаки:

    $\large 1, x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3$

    Нарисовав треугольник Пифагора, Вы сообразите, сколько таких признаков будет для $d=4,5.$ и вообще для любого $d$.
    Попросту говоря, таких признаков экспоненциально много, и строить, скажем, для 100 признаков полиномиальные степени 10 может оказаться затратно (а более того, и не нужно).

    Создадим объект sklearn, который добавит в матрицу $X$ полиномиальные признаки вплоть до степени 7 и обучим логистическую регрессию с параметром регуляризации $C = 10^{-2}$. Изобразим разделяющую границу.
    Также проверим долю правильных ответов классификатора на обучающей выборке. Видим, что регуляризация оказалась слишком сильной, и модель «недообучилась». Доля правильных ответов классификатора на обучающей выборке оказалась равной 0.627.

    poly = PolynomialFeatures(degree=7)
    X_poly = poly.fit_transform(X)

    C = 1e-2
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.01, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=0.01')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Увеличим $C$ до 1. Тем самым мы ослабляем регуляризацию, теперь в решении значения весов логистической регрессии могут оказаться больше (по модулю), чем в прошлом случае. Теперь доля правильных ответов классификатора на обучающей выборке – 0.831.

    C = 1
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов. Логит с C=1')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Еще увеличим $C$ – до 10 тысяч. Теперь регуляризации явно недостаточно, и мы наблюдаем переобучение. Можно заметить, что в прошлом случае (при $C$=1 и «гладкой» границе) доля правильных ответов модели на обучающей выборке не намного ниже, чем в 3 случае, зато на новой выборке, можно себе представить, 2 модель сработает намного лучше.
    Доля правильных ответов классификатора на обучающей выборке – 0.873.

    C = 1e4
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=10k')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Чтоб обсудить результаты, перепишем формулу для функционала, который оптимизируется в логистической регрессии, в таком виде:

    $\large J(X,y,w) = \mathcal{L} + \frac{1}{C}||w||^2,$

    • чем больше параметр $C$, тем более сложные зависимости в данных может восстанавливать модель (интуитивно $C$ соответствует «сложности» модели (model capacity))
    • если регуляризация слишком сильная (малые значения $C$), то решением задачи минимизации логистической функции потерь может оказаться то, когда многие веса занулились или стали слишком малыми. Еще говорят, что модель недостаточно «штрафуется» за ошибки (то есть в функционале $J$ «перевешивает» сумма квадратов весов, а ошибка $\mathcal{L}$ может быть относительно большой). В таком случае модель окажется недообученной (1 случай)
    • наоборот, если регуляризация слишком слабая (большие значения $C$), то решением задачи оптимизации может стать вектор $w$ с большими по модулю компонентами. В таком случае больший вклад в оптимизируемый функционал $J$ имеет $\mathcal{L}$ и, вольно выражаясь, модель слишком «боится» ошибиться на объектах обучающей выборки, поэтому окажется переобученной (3 случай)
    • то, какое значение $C$ выбрать, сама логистическая регрессия «не поймет» (или еще говорят «не выучит»), то есть это не может быть определено решением оптимизационной задачи, которой является логистическая регрессия (в отличие от весов $w$). Так же точно, дерево решений не может «само понять», какое ограничение на глубину выбрать (за один процесс обучения). Поэтому $C$ – это гиперпараметр модели, который настраивается на кросс-валидации, как и max_depth для дерева.

    Настройка параметра регуляризации

    Теперь найдем оптимальное (в данном примере) значение параметра регуляризации $C$. Сделать это можно с помощью LogisticRegressionCV – перебора параметров по сетке с последующей кросс-валидацией. Этот класс создан специально для логистической регрессии (для нее известны эффективные алгоритмы перебора параметров), для произвольной модели мы бы использовали GridSearchCV, RandomizedSearchCV или, например, специальные алгоритмы оптимизации гиперпараметров, реализованные в hyperopt.

    
    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)
    
    c_values = np.logspace(-2, 3, 500)
    
    logit_searcher = LogisticRegressionCV(Cs=c_values, cv=skf, verbose=1, n_jobs=-1)
    logit_searcher.fit(X_poly, y)

    Посмотрим, как качество модели (доля правильных ответов на обучающей и валидационной выборках) меняется при изменении гиперпараметра $C$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Выделим участок с «лучшими» значениями C.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Полезные ресурсы

    • Перевод материала этой статьи на английский – Jupyter notebooks в репозитории курса
    • Видеозаписи лекций по мотивам этой статьи: классификация, регрессия
    • Основательный обзор классики машинного обучения и, конечно же, линейных моделей сделан в книге «Deep Learning» (I. Goodfellow, Y. Bengio, A. Courville, 2016);
    • Реализация многих алгоритмов машинного обучения с нуля – репозиторий rushter. Рекомендуем изучить реализацию логистической регрессии;
    • Курс Евгения Соколова по машинному обучению (материалы на GitHub). Хорошая теория, нужна неплохая математическая подготовка;
    • Курс Дмитрия Ефимова на GitHub (англ.). Тоже очень качественные материалы.

    Статья написана в соавторстве с mephistopheies (Павлом Нестеровым). Он же – автор домашнего задания. Авторы домашнего задания в первой сессии курса (февраль-май 2017)– aiho (Ольга Дайховская) и das19 (Юрий Исаков). Благодарю bauchgefuehl (Анастасию Манохину) за редактирование.

    Домашнее задание № 4

    В качестве закрепления изученного материала предлагаем следующее задание: разобраться с тем, как работает TfidfVectorizer и DictVectorizer, обучить и настроить модель линейной регрессии Ridge на данных о публикациях на Хабрахабре и воспроизвести бенчмарк в соревновании. Проверить себя можно отправив ответы в веб-форме (там же найдете и решение).

    Актуальные и обновляемые версии демо-заданий – на английском на сайте курса. Также по подписке на Patreon («Bonus Assignments» tier) доступны расширенные домашние задания по каждой теме (только на англ.)

    Реализация цикла обучения логистической регрессии в Python

    Реализуем цикл обучения логистической регрессии используя Python. В этом нам снова поможет PyTorch. Для начала импортируем все библиотеки которые нам в этом пригодятся:

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import numpy as np
    from sklearn.datasets import make_classification
    from sklearn.metrics import classification_report

    Далее напишем класс реализующий логистическую регрессию. Прошу обратить внимание, что от линейной регрессии, которую мы реализовывали в ряде предыдущих статей, отличает лишь применение сигмоиды и новый метод predict (так как теперь мы решаем задачу классификации).

    class LogisticRegression(nn. Module):
     def __init__(self, input_size):
     super().__init__()
     self.weights = nn. Parameter(torch.randn(input_size, 1))
     self.sigmoid = nn. Sigmoid()
    
     def forward(self, x):
     x = x @ self.weights
     x = self.sigmoid(x)
     return x
    
     def fit(self, X, y, lr=0.01, num_iterations=1000):
     X = torch.from_numpy(X).float()
     y = torch.from_numpy(y).float().view(-1, 1) 
    
     # Инициализируем функцию потерь и оптимизатор
     criterion = nn. BCELoss()
     optimizer = optim. SGD(self.parameters(), lr=lr)
    
     for epoch in range(num_iterations):
     # Зануляем градиенты
     optimizer.zero_grad()
    
     # Получаем предсказания модели и вычисляем функцию потерь
     y_pred = self(X)
     loss = criterion(y_pred, y)
    
     # Обновляем веса
     loss.backward()
     optimizer.step()
     
    
     def predict(self, X):
     X = torch.from_numpy(X).float()
    
     # Получаем предсказания модели и присваиваем метки классов на основе вероятности
     y_pred = self(X)
     y_pred_labels = [1 if i > 0.5 else 0 for i in y_pred.detach().numpy().flatten()]
    
     return y_pred_labels
    

    На этот раз сгенерируем выборку для классификации самостоятельно, используя make_classification из библиотеки scikit-learn. А далее обучим нашу модель и оценим её качество:

    # Генерируем данные
    X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,
     random_state=1, n_clusters_per_class=1)
    
    # Создаем экземпляр класса и обучаем на обучающей выборке
    model = LogisticRegression(X.shape[1])
    model.fit(X, y, lr=0.1, num_iterations=100)
    
    # Прогнозируем метки классов на тестовой выборке
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
    precision recall f1-score support
    
     0 0.85 0.96 0.90 500
     1 0.95 0.83 0.88 500
    
     accuracy 0.89 1000
     macro avg 0.90 0.89 0.89 1000
    weighted avg 0.90 0.89 0.89 1000
    

    Для чистоты эксперимента обучим логистическую регрессию из библиотеки scikit-learn и увидим, что качество полученных моделей примерно одинаково:

    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    model.fit(X, y)
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
     precision recall f1-score support
    
     0 0.90 0.90 0.90 500
     1 0.90 0.90 0.90 500
    
     accuracy 0.90 1000
     macro avg 0.90 0.90 0.90 1000
    weighted avg 0.90 0.90 0.90 1000
    

    Далее давайте визуально оценим как модель принимает свое решение:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Как видим, результатом работы алгоритма выступает линия разделяющая классы. Если бы мы визуализировали модель в процессе обучения градиентным спуском, то увидели бы как эта линия подбирается в процессе оптимизации:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    Плюсы логистической регрессии:

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

    Минусы логистической регрессии:

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

    Логистическая регрессия

    Линейный классификатор

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Мы уже знакомы с линейной регрессией и методом наименьших квадратов. Рассмотрим задачу бинарной классификации, причем метки целевого класса обозначим «+1» (положительные примеры) и «-1» (отрицательные примеры).
    Один из самых простых линейных классификаторов получается на основе регрессии вот таким образом:

    $\large a(\vec{x}) = sign(\vec{w}^Tx),$

    Логистическая регрессия как линейный классификатор

    Логистическая регрессия является частным случаем линейного классификатора, но она обладает хорошим «умением» – прогнозировать вероятность $p_+$ отнесения примера $\vec{x_i}$ к классу «+»:

    $\large p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) $

    Прогнозирование не просто ответа («+1» или «-1»), а именно вероятности отнесения к классу «+1» во многих задачах является очень важным бизнес-требованием. Например, в задаче кредитного скоринга, где традиционно применяется логистическая регрессия, часто прогнозируют вероятность невозврата кредита ($p_+$). Клиентов, обратившихся за кредитом, сортируют по этой предсказанной вероятности (по убыванию), и получается скоркарта — по сути, рейтинг клиентов от плохих к хорошим. Ниже приведен игрушечный пример такой скоркарты.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Банк выбирает для себя порог $p_*$ предсказанной вероятности невозврата кредита (на картинке – $0.15$) и начиная с этого значения уже не выдает кредит. Более того, можно умножить предсказанную вероятность на выданную сумму и получить матожидание потерь с клиента, что тоже будет хорошей бизнес-метрикой (Далее в комментариях специалисты по скорингу могут поправить, но главная суть примерно такая).

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Обозначим $P(X)$ вероятностью происходящего события $X$. Тогда отношение вероятностей $OR(X)$ определяется из $\frac{P(X)}{1-P(X)}$, а это — отношение вероятностей того, произойдет ли событие или не произойдет. Очевидно, что вероятность и отношение шансов содержат одинаковую информацию. Но в то время как $P(X)$ находится в пределах от 0 до 1, $OR(X)$ находится в пределах от 0 до $\infty$.

    Если вычислить логарифм $OR(X)$ (то есть называется логарифм шансов, или логарифм отношения вероятностей), то легко заметить, что $\log{OR(X)} \in \mathbb{R}$. Его-то мы и будем прогнозировать с помощью МНК.

    Посмотрим, как логистическая регрессия будет делать прогноз $p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right)$ (пока считаем, что веса $\vec{w}$ мы как-то получили (т.е. обучили модель), далее разберемся, как именно).

    • Шаг 1. Вычислить значение $w_{0}+w_{1}x_1 + w_{2}x_2 + .  = \vec{w}^T\vec{x}$. (уравнение $\vec{w}^T\vec{x} = 0$ задает гиперплоскость, разделяющую примеры на 2 класса);

    • Шаг 2. Вычислить логарифм отношения шансов: $ \log(OR_{+}) = \vec{w}^T\vec{x}$.

    • Шаг 3. Имея прогноз шансов на отнесение к классу «+» – $OR_{+}$, вычислить $p_{+}$ с помощью простой зависимости:

    $\large p_{+} = \frac{OR_{+}}{1 + OR_{+}} = \frac{\exp^{\vec{w}^T\vec{x}}}{1 + \exp^{\vec{w}^T\vec{x}}} = \frac{1}{1 + \exp^{-\vec{w}^T\vec{x}}} = \sigma(\vec{w}^T\vec{x})$

    В правой части мы получили как раз сигмоид-функцию.

    Итак, логистическая регрессия прогнозирует вероятность отнесения примера к классу «+» (при условии, что мы знаем его признаки и веса модели) как сигмоид-преобразование линейной комбинации вектора весов модели и вектора признаков примера:

    $\large p_+(x_i) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i}).  $

    Следующий вопрос: как модель обучается? Тут мы опять обращаемся к принципу максимального правдоподобия.

    Принцип максимального правдоподобия и логистическая регрессия

    Теперь посмотрим, как из принципа максимального правдоподобия получается оптимизационная задача, которую решает логистическая регрессия, а именно, – минимизация логистической функции потерь.
    Только что мы увидели, что логистическая регрессия моделирует вероятность отнесения примера к классу «+» как

    $\large p_+(\vec{x_i}) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i})$

    Тогда для класса «-» аналогичная вероятность:

    $\large p_-(\vec{x_i}) = P\left(y_i = -1 \mid \vec{x_i}, \vec{w}\right) = 1 - \sigma(\vec{w}^T\vec{x_i}) = \sigma(-\vec{w}^T\vec{x_i}) $

    Оба этих выражения можно ловко объединить в одно (следите за моими руками – не обманывают ли вас):

    $\large P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) = \sigma(y_i\vec{w}^T\vec{x_i})$

    Выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ называется отступом (margin) классификации на объекте $\vec{x_i}$ (не путать с зазором (тоже margin), про который чаще всего говорят в контексте SVM). Если он неотрицателен, модель не ошибается на объекте $\vec{x_i}$, если же отрицателен – значит, класс для $\vec{x_i}$ спрогнозирован неправильно.
    Заметим, что отступ определен для объектов именно обучающей выборки, для которых известны реальные метки целевого класса $y_i$.

    Чтобы понять, почему это мы сделали такие выводы, обратимся к геометрической интерпретации линейного классификатора. Подробно про это можно почитать в материалах Евгения Соколова.

    Рекомендую решить почти классическую задачу из начального курса линейной алгебры: найти расстояние от точки с радиус-вектором $\vec{x_A}$ до плоскости, которая задается уравнением $\vec{w}^T\vec{x} = 0.$

    $\large \rho(\vec{x_A}, \vec{w}^T\vec{x} = 0) = \frac{\vec{w}^T\vec{x_A}}{||\vec{w}||}$

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Когда получим (или посмотрим) ответ, то поймем, что чем больше по модулю выражение $\vec{w}^T\vec{x_i}$, тем дальше точка $\vec{x_i}$ находится от плоскости $\vec{w}^T\vec{x} = 0.$

    Значит, выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ – это своего рода «уверенность» модели в классификации объекта $\vec{x_i}$:

    • если отступ большой (по модулю) и положительный, это значит, что метка класса поставлена правильно, а объект находится далеко от разделяющей гиперплоскости (такой объект классифицируется уверенно). На рисунке – $x_3$.
    • если отступ большой (по модулю) и отрицательный, значит метка класса поставлена неправильно, а объект находится далеко от разделяющей гиперплоскости (скорее всего такой объект – аномалия, например, его метка в обучающей выборке поставлена неправильно). На рисунке – $x_1$.
    • если отступ малый (по модулю), то объект находится близко к разделяющей гиперплоскости, а знак отступа определяет, правильно ли объект классифицирован. На рисунке – $x_2$ и $x_4$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Теперь распишем правдоподобие выборки, а именно, вероятность наблюдать данный вектор $\vec{y}$ у выборки $X$. Делаем сильное предположение: объекты приходят независимо, из одного распределения (i.i.d.). Тогда

    $\large P\left(\vec{y} \mid X, \vec{w}\right) = \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right),$

    где $\ell$ – длина выборки $X$ (число строк).

    Как водится, возьмем логарифм данного выражения (сумму оптимизировать намного проще, чем произведение):

    $\large \begin{array}{rcl} \log P\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) \\ &=& \log \prod_{i=1}^{\ell} \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \frac{1}{1 + \exp^{-y_i\vec{w}^T\vec{x_i}}} \\ &=& - \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}) \end{array}$

    То есть в даном случае принцип максимизации правдоподобия приводит к минимизации выражения

    $\large \mathcal{L_{log}} (X, \vec{y}, \vec{w}) = \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}).$

    Это логистическая функция потерь, просуммированная по всем объектам обучающей выборки.

    Посмотрим на новую фунцию как на функцию от отступа: $L(M) = \log (1 + \exp^{-M})$. Нарисуем ее график, а также график 1/0 функциий потерь (zero-one loss), которая просто штрафует модель на 1 за ошибку на каждом объекте (отступ отрицательный): <img src="https://habrastorage.org/getpro/habr/formulas/279/e2d/d4f/279e2dd4f16fba5aaba3bb74abc2ca6a.svg" alt="$L_{1/0}(M) = [M .

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    <img src="https://habrastorage.org/getpro/habr/formulas/6f7/6f6/465/6f76f64653b4699ea79de2f9844a8d76.svg" alt="$\large \begin{array}{rcl} \mathcal{L_{1/0}} (X, \vec{y}, \vec{w}) &=& \sum_{i=1}^{\ell} [M(\vec{x_i})

    где $\mathcal{L_{1/0}} (X, \vec{y}, \vec{w})$ – попросту число ошибок логистической регрессии с весами $\vec{w}$ на выборке $(X, \vec{y})$.

    То есть уменьшая верхнюю оценку $\mathcal{L_{log}}$ на число ошибок классификации, мы таким образом надеемся уменьшить и само число ошибок.

    $L_2$-регуляризация логистических потерь

    L2-регуляризация логистической регрессии устроена почти так же, как и в случае с гребневой (Ridge регрессией). Вместо функционала $\mathcal{L_{log}} (X, \vec{y}, \vec{w})$ минимизируется следующий:

    $\large J(X, \vec{y}, \vec{w}) = \mathcal{L_{log}} (X, \vec{y}, \vec{w}) + \lambda |\vec{w}|^2$

    В случае логистической регрессии принято введение обратного коэффициента регуляризации $C = \frac{1}{\lambda}$. И тогда решением задачи будет

    $\large \hat{w} = \arg \min_{\vec{w}} J(X, \vec{y}, \vec{w}) = \arg \min_{\vec{w}}\ (C\sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}})+ |\vec{w}|^2)$

    Далее рассмотрим пример, позволяющий интуитивно понять один из смыслов регуляризации.

    Линейная регрессия

    Метод наименьших квадратов

    Рассказ про линейные модели мы начнем с линейной регрессии. В первую очередь, необходимо задать модель зависимости объясняемой переменной $y$ от объясняющих ее факторов, функция зависимости будет линейной: $y = w_0 + \sum_{i=1}^m w_i x_i$. Если мы добавим фиктивную размерность $x_0 = 1$ для каждого наблюдения, тогда линейную форму можно переписать чуть более компактно, записав свободный член $w_0$ под сумму: $y = \sum_{i=0}^m w_i x_i = \vec{w}^T \vec{x}$. Если рассматривать матрицу наблюдения-признаки, у которой в строках находятся примеры из набора данных, то нам необходимо добавить единичную колонку слева. Зададим модель следующим образом:

    $\large \vec y = X \vec w + \epsilon,$

    Можем выписать выражение для каждого конкретного наблюдения

    $\large y_i = \sum_{j=0}^m w_j X_{ij} + \epsilon_i$

    Также на модель накладываются следующие ограничения (иначе это будет какая то другая регрессия, но точно не линейная):

    Оценка $\hat{w}_i$ весов $w_i$ называется линейной, если

    $\large \hat{w}_i = \omega_{1i}y_1 + \omega_{2i}y_2 + \cdots + \omega_{ni}y_n,$

    где $\forall\ k\ \omega_{ki}$ зависит только от наблюдаемых данных $X$ и почти наверняка нелинейно. Так как решением задачи поиска оптимальных весов будет именно линейная оценка, то и модель называется линейной регрессией. Введем еще одно определение. Оценка $\hat{w}_i$ называется несмещенной тогда, когда матожидание оценки равно реальному, но неизвестному значению оцениваемого параметра:

    $\large \mathbb{E}\left[\hat{w}_i\right] = w_i$

    Один из способов вычислить значения параметров модели является метод наименьших квадратов (МНК), который минимизирует среднеквадратичную ошибку между реальным значением зависимой переменной и прогнозом, выданным моделью:

    $\large \begin{array}{rcl}\mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 \\ &=& \frac{1}{2n} \left(\vec{y} - X \vec{w}\right)^T \left(\vec{y} - X \vec{w}\right) \end{array}$

    Для решения данной оптимизационной задачи необходимо вычислить производные по параметрам модели, приравнять их к нулю и решить полученные уравнения относительно $\vec w$ (матричное дифференцирование неподготовленному читателю может показаться затруднительным, попробуйте расписать все через суммы, чтобы убедиться в ответе):

    Шпаргалка по матричным производным

    $\large \begin{array}{rcl} \frac{\partial}{\partial x} x^T a &=& a \\ \frac{\partial}{\partial x} x^T A x &=& \left(A + A^T\right)x \\ \frac{\partial}{\partial A} x^T A y &=& xy^T\\ \frac{\partial}{\partial x} A^{-1} &=& -A^{-1} \frac{\partial A}{\partial x} A^{-1} \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} &=& \frac{\partial}{\partial \vec{w}} \frac{1}{2n} \left( \vec{y}^T \vec{y} -2\vec{y}^T X \vec{w} + \vec{w}^T X^T X \vec{w}\right) \\ &=& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} = 0 &\Leftrightarrow& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) = 0 \\ &\Leftrightarrow& -X^T \vec{y} + X^T X \vec{w} = 0 \\ &\Leftrightarrow& X^T X \vec{w} = X^T \vec{y} \\ &\Leftrightarrow& \vec{w} = \left(X^T X\right)^{-1} X^T \vec{y} \end{array}$

    Итак, имея в виду все определения и условия описанные выше, мы можем утверждать, опираясь на теорему Маркова-Гаусса, что оценка МНК является лучшей оценкой параметров модели, среди всех линейных и несмещенных оценок, то есть обладающей наименьшей дисперсией.

    Метод максимального правдоподобия

    У читателя вполне резонно могли возникнуть вопросы: например, почему мы минимизируем среднеквадратичную ошибку, а не что-то другое. Ведь можно минимизировать среднее абсолютное значение невязки или еще что-то. Единственное, что произойдёт в случае изменения минимизируемого значения, так это то, что мы выйдем из условий теоремы Маркова-Гаусса, и наши оценки перестанут быть лучшими среди линейных и несмещенных.

    Давайте перед тем как продолжить, сделаем лирическое отступление, чтобы проиллюстрировать метод максимального правдоподобия на простом примере.

    Как-то после школы я заметил, что все помнят формулу этилового спирта. Тогда я решил провести эксперимент: помнят ли люди более простую формулу метилового спирта: $CH_3OH$. Мы опросили 400 человек и оказалось, что формулу помнят всего 117 человек. Разумно предположить, что вероятность того, что следующий опрошенный знает формулу метилового спирта – $\frac{117}{400} \approx 0.29%$. Покажем, что такая интуитивно понятная оценка не просто хороша, а еще и является оценкой максимального правдоподобия.

    Разберемся, откуда берется эта оценка, а для этого вспомним определение распределения Бернулли: случайная величина $X$ имеет распределение Бернулли, если она принимает всего два значения ($1$ и $0$ с вероятностями $\theta$ и $1 - \theta$ соответственно) и имеет следующую функцию распределения вероятности:

    $\large p\left(\theta, x\right) = \theta^{x} \left(1 - \theta\right)^\left(1 - x\right), x \in \left\{0, 1\right\}$

    Похоже, это распределение – то, что нам нужно, а параметр распределения $\theta$ и есть та оценка вероятности того, что человек знает формулу метилового спирта. Мы проделали $400$ независимых экспериментов, обозначим их исходы как $\vec{x} = \left(x_1, x_2, \ldots, x_{400}\right)$. Запишем правдоподобие наших данных (наблюдений), то есть вероятность наблюдать 117 реализаций случайной величины $X = 1$ и 283 реализации $X = 0$:

    $\large p(\vec{x} \mid \theta) = \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = \theta^{117} \left(1 - \theta\right)^{283}$

    Далее будем максимизировать это выражение по $\theta$, и чаще всего это делают не с правдоподобием $p(\vec{x} \mid \theta)$, а с его логарифмом (применение монотонного преобразования не изменит решение, но упростит вычисления):

    $\large \log p(\vec{x} \mid \theta) = \log \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = $

    $ \large = \log \theta^{117} \left(1 - \theta\right)^{283} = 117 \log \theta + 283 \log \left(1 - \theta\right)$

    Теперь мы хотим найти такое значение $\theta$, которое максимизирует правдоподобие, для этого мы возьмем производную по $\theta$, приравняем к нулю и решим полученное уравнение:

    $\large \frac{\partial p(\vec{x} \mid \theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left(117 \log \theta + 283 \log \left(1 - \theta\right)\right) = \frac{117}{\theta} - \frac{283}{1 - \theta};$

    $\large \begin{array}{rcl} \frac{117}{\theta} - \frac{283}{1 - \theta} = 0 \Rightarrow \theta = \frac{117}{400} \end{array}.$

    Получается, что наша интуитивная оценка – это и есть оценка максимального правдоподобия. Применим теперь те же рассуждения для задачи линейной регрессии и попробуем выяснить, что лежит за среднеквадратичной ошибкой. Для этого нам придется посмотреть на линейную регрессию с вероятностной точки зрения. Модель, естественно, остается такой же:

    $\large \vec y = X \vec w + \epsilon,$

    но будем теперь считать, что случайные ошибки берутся из центрированного нормального распределения:

    $\large \epsilon_i \sim \mathcal{N}\left(0, \sigma^2\right)$

    Перепишем модель в новом свете:

    $\large \begin{array}{rcl} p\left(y_i \mid X, \vec{w}\right) &=& \sum_{j=1}^m w_j X_{ij} + \mathcal{N}\left(0, \sigma^2\right) \\ &=& \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \end{array}$

    Так как примеры берутся независимо (ошибки не скоррелированы – одно из условий теоремы Маркова-Гаусса), то полное правдоподобие данных будет выглядеть как произведение функций плотности $p\left(y_i\right)$. Рассмотрим логарифм правдоподобия, что позволит нам перейти от произведения к сумме:

    $\large \begin{array}{rcl} \log p\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^n \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& \sum_{i=1}^n \log \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \end{array}$

    Мы хотим найти гипотезу максимального правдоподобия, т.е. нам нужно максимизировать выражение $p\left(\vec{y} \mid X, \vec{w}\right)$, а это то же самое, что и максимизация его логарифма. Обратите внимание, что при максимизации функции по какому-то параметру можно выкинуть все члены, не зависящие от этого параметра:

    $\large \begin{array}{rcl} \hat{w} &=& \arg \max_{w} p\left(\vec{y} \mid X, \vec{w}\right) \\ &=& \arg \max_{w} -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\mathcal{L}\left(X, \vec{y}, \vec{w} \right) \end{array}$

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

    Разложение ошибки на смещение и разброс (Bias-variance decomposition)

    Поговорим немного о свойствах ошибки прогноза линейной регрессии (в принципе эти рассуждения верны для всех алгоритмов машинного обучения). В свете предыдущего пункта мы выяснили, что:

    Тогда ошибка в точке $\vec{x}$ раскладывается следующим образом:

    $\large \begin{array}{rcl} \text{Err}\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\left(\hat{f}\left(\vec{x}\right)\right)^2\right] - 2\mathbb{E}\left[y\hat{f}\left(\vec{x}\right)\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\hat{f}^2\right] - 2\mathbb{E}\left[y\hat{f}\right] \\ \end{array}$

    Для наглядности опустим обозначение аргумента функций. Рассмотрим каждый член по отдельности, два первых вас пишутся легко на странице ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ:

    $\large\begin{array}{rcl}\mathbb{E }\left[y^2\right] &=& \text{Var}\left(y\right) + \mathbb{E}\left[y\right]^2 = \sigma^2 + f^2\ \ \mathbb{E}\left[\hat{f}^2\right] &=& \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{ f}\right]^2 \\\end{array}$

    $\large\begin{array}{rcl}\text{Var }\left(y\right) &=& \mathbb{E}\left[\left(y - \mathbb{E}\left[y\right]\right)^2\right]\\&=&\ mathbb{E}\left[\left(y - f\right)^2\right]\\&=&\mathbb{E}\left[\left(f + \epsilon - f\right)^2\right ] \\ &=& \mathbb{E}\left[\epsilon^2\right] = \sigma^2\end{array}$

    $\large\mathbb{E}[y] = \mathbb{ E}[f + \epsilon] = \mathbb{E}[f] + \mathbb{E}[\epsilon] = f$

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

    $\large\begin{array}{rcl}\mathbb{E }\left[y\hat{f}\right] &=& \mathbb{E}\left[\left(f + \epsilon\right)\hat{f}\right] \\ &=& \mathbb{ E}\left[f\hat{f}\right] + \mathbb{E}\left[\epsilon\hat{f}\right] \\ &=& f\mathbb{E}\left[\hat{ f}\right] + \mathbb{E}\left[\epsilon\right] \mathbb{E}\left[\hat{f}\right] = f\mathbb{E}\left[\hat{f} \right] \end{array}$

    Особенный, немного другой:

    $\large\begin{array}{rcl}\text{Err }\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\ right] \\ &=& \sigma^2 + f^2 + \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{f}\right]^ 2 - 2f\mathbb{E}\left[\hat{f}\right] \\ &=& \left(f - \mathbb{E}\left[\hat{f}\right]\right)^2 + \text{Var}\left(\right{of}\right) + \sigma^2 \\ &=& \text{Bias}\left(\right{of}\right)^2 + \text{Var }\left(\hat{f}\right) + \sigma^2 \end{array}$

    Не то чтобы я собираюсь это сделать, я собираюсь это сделать, я собираюсь это сделать. Для получения дополнительной информации подпишитесь на следующий список $y = f\left(\vec{x}\right) + \epsilon$ file размер:

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Это снежинка, это снежинка, это снежинка Цена на снежинку) снежинка снежинка (снежинка) снежинка, но уменьшение смещения. Если вы хотите получить на лице немного другую улыбку На самом деле белоснежные белоснежные снежинки (витрина).). Если вы не любитель, то сможете получить в руки белоснежные снежинки, белоснежные снежинки.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Видео Маркова-Гаусса, как утверждает раз, МНК-оцека параметров линейной Ни одна из самых лучших в классе несмещенных линейных оценок, то есть с наименьшей дисперсией. Для получения дополнительной информации свяжитесь с нами по адресу https://habrastorage.org/getpro/habr/formulas/7a4/a7d/183/7a4a7d183a691556d2592ebf22e11365.svg» alt=»$g$» data- tex=»inline»> Если вы ищете книгу, вы сможете сделать это по адресу $Was\ left(\hat{f}\right) \leq Was\left(g\right)$.

    Регуляризация Линейной Регрессии

    Это снежинка, это снежинка, снежинка ради ее стабильности, т.е. ради уменьшения дисперсии модели $\text{Var}\left(\hat{f}\right)$. Одним из условий теоремы Маркова-Гаусса является полный столбцовый ранг матрицы $X$. В противном случае решение МНК $\vec{w} = \left(X^T X\right)^{-1} X^T \vec{y}$ не существует, т.к. не будет существовать обратная матрица $\left(X^T X\right)^{-1}.$ Другими словами, матрица $X^T X$ будет сингулярна, или вырожденна. Такая задача называется некорректно поставленной. Задачу нужно скорректировать, а именно, сделать матрицу $X^TX$ невырожденной, или регулярной (именно поэтому этот процесс называется регуляризацией). Чаще в данных мы можем наблюдать так называемую мультиколлинеарность — когда два или несколько признаков сильно коррелированы, в матрице $X$ это проявляется в виде «почти» линейной зависимости столбцов. Например, в задаче прогнозирования цены квартиры по ее параметрам «почти» линейная зависимость будет у признаков «площадь с учетом балкона» и «площадь без учета балкона». Формально для таких данных матрица $X^T X$ будет обратима, но из-за мультиколлинеарности у матрицы $X^T X$ некоторые собственные значения будут близки к нулю, а в обратной матрице $\left(X^T X\right)^{-1}$ появятся экстремально большие собственные значения, т.к. собственные значения обратной матрицы – это $\frac{1}{\lambda_i}$. Итогом такого шатания собственных значений станет нестабильная оценка параметров модели, т.е. добавление нового наблюдения в набор тренировочных данных приведёт к совершенно другому решению. Иллюстрации роста коэффициентов вы найдете в одном из наших прошлых постов. Одним из способов регуляризации является регуляризация Тихонова, которая в общем виде выглядит как добавление нового члена к среднеквадратичной ошибке:

    $\large \begin{array}{rcl} \mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 + \left\|\Gamma \vec{w}\right\|^2\\ \end{array}$

    Часто матрица Тихонова выражается как произведение некоторого числа на единичную матрицу: $\Gamma = \frac{\lambda}{2} E$. В этом случае задача минимизации среднеквадратичной ошибки становится задачей с ограничением на $L_2$ норму. Если продифференцировать новую функцию стоимости по параметрам модели, приравнять полученную функцию к нулю и выразить $\vec{w}$, то мы получим точное решение задачи.

    $\large \begin{array}{rcl} \vec{w} &=& \left(X^T X + \lambda E\right)^{-1} X^T \vec{y} \end{array}$

    Такая регрессия называется гребневой регрессией (ridge regression). А гребнем является как раз диагональная матрица, которую мы прибавляем к матрице $X^T X$, в результате получается гарантированно регулярная матрица.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Такое решение уменьшает дисперсию, но становится смещенным, т.к. минимизируется также и норма вектора параметров, что заставляет решение сдвигаться в сторону нуля. На рисунке ниже на пересечении белых пунктирных линий находится МНК-решение. Голубыми точками обозначены различные решения гребневой регрессии. Видно, что при увеличении параметра регуляризации $\lambda$ решение сдвигается в сторону нуля.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Логистическая регрессия

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

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

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

    Y — бинарный выходной результат (0 или 1)

    X — вектор признаков, используемый для прогнозирования $Y$

    e — число Эйлера

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

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

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    )
    plt.axis([-3, 3, -3, 3])
    plt.colorbar(image)
    plt.title(plot_title, fontsize=12);

    plot_boundary(LogisticRegression(), X, y,
    "Logistic Regression, XOR problem")

    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline

    logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
    ('logit', LogisticRegression())])

    plot_boundary(logit_pipe, X, y,
    "Logistic Regression + quadratic features.  X OR problem")

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Здесь логистическая регрессия все равно строила гиперплоскость, но в 6-мерном пространстве признаков $1, x_1, x_2, x_1^2, x_1x_2$ и $x_2^2$. В проекции на исходное пространство признаков $x_1, x_2$ граница получилась нелинейной.

    На практике полиномиальные признаки действительно помогают, но строить их явно – вычислительно неэффективно. Гораздо быстрее работает SVM с ядровым трюком. При таком подходе в пространстве высокой размерности считается только расстояние между объектами (задаваемое функцией-ядром), а явно плодить комбинаторно большое число признаков не приходится. Про это подробно можно почитать в курсе Евгения Соколова (математика уже серьезная).

    5. Кривые валидации и обучения

    Мы уже получили представление о проверке модели, кросс-валидации и регуляризации.
    Теперь рассмотрим главный вопрос:

    Если качество модели нас не устраивает, что делать?

    • Сделать модель сложнее или упростить?
    • Добавить больше признаков?
    • Или нам просто нужно больше данных для обучения?

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

    Будем работать со знакомыми данными по оттоку клиентов телеком-оператора.

    Импорт библиотек и чтение данных

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV, SGDClassifier
    from sklearn.model_selection import validation_curve
    
    data = pd.read_csv('././data/telecom_churn.csv').drop('State', axis=1)
    data['International plan'] = data['International plan'].map({'Yes': 1, 'No': 0})
    data['Voice mail plan'] = data['Voice mail plan'].map({'Yes': 1, 'No': 0})
    
    y = data['Churn'].astype('int').values
    X = data.drop('Churn', axis=1).values

    Логистическую регрессию будем обучать стохастическим градиентным спуском. Пока объясним это тем, что так быстрее, но далее в программе у нас отдельная статья про это дело. Построим валидационные кривые, показывающие, как качество (ROC AUC) на обучающей и проверочной выборке меняется с изменением параметра регуляризации.

    alphas = np.logspace(-2, 0, 20)
    sgd_logit = SGDClassifier(loss='log', n_jobs=-1, random_state=17)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=2)), 
    ('sgd_logit', sgd_logit)])
    val_train, val_test = validation_curve(logit_pipe, X, y,
    'sgd_logit__alpha', alphas, cv=5,
    scoring='roc_auc')
    
    def plot_with_err(x, data, **kwargs):
    mu, std = data.mean(1), data.std(1)
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)
    
    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha$'); plt.ylabel('ROC AUC')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может «отвлекаться» на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки «сходятся», что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки «сошлись», и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия «настроил один раз – дальше использую 10 раз» может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    А если усложнить модель ещё больше ($alpha=10^{-4}$)?

    Проявляется переобучение – AUC падает как на обучении, так и на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Строя подобные кривые, можно понять, в какую сторону двигаться, и как правильно настроить сложность модели на новых данных.

    Выводы по кривым валидации и обучения

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

    Наглядный пример регуляризации логистической регрессии

    В 1 статье уже приводился пример того, как полиномиальные признаки позволяют линейным моделям строить нелинейные разделяющие поверхности. Покажем это в картинках.

    Посмотрим, как регуляризация влияет на качество классификации на наборе данных по тестированию микрочипов из курса Andrew Ng по машинному обучению.
    Будем использовать логистическую регрессию с полиномиальными признаками и варьировать параметр регуляризации C.
    Сначала посмотрим, как регуляризация влияет на разделяющую границу классификатора, интуитивно распознаем переобучение и недообучение.
    Потом численно установим близкий к оптимальному параметр регуляризации с помощью кросс-валидации (cross-validation) и перебора по сетке (GridSearch).

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
    from sklearn.model_selection import cross_val_score, StratifiedKFold
    from sklearn.model_selection import GridSearchCV

    Загружаем данные с помощью метода read_csv библиотеки pandas. В этом наборе данных для 118 микрочипов (объекты) указаны результаты двух тестов по контролю качества (два числовых признака) и сказано, пустили ли микрочип в производство. Признаки уже центрированы, то есть из всех значений вычтены средние по столбцам. Таким образом, «среднему» микрочипу соответствуют нулевые значения результатов тестов.

    data = pd.read_csv('././data/microchip_tests.txt',
    header=None, names = ('test1','test2','released'))
    # информация о наборе данных
    data.info()

    RangeIndex: 118 entries, 0 to 117
    Data columns (total 3 columns):
    test1 118 non-null float64
    test2 118 non-null float64
    released 118 non-null int64
    dtypes: float64(2), int64(1)
    memory usage: 2.8 KB

    Посмотрим на первые и последние 5 строк.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Сохраним обучающую выборку и метки целевого класса в отдельных массивах NumPy. Отобразим данные. Красный цвет соответствует бракованным чипам, зеленый – нормальным.

    X = data.ix[:,:2].values
    y = data.ix[:,2].values

    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Определяем функцию для отображения разделяющей кривой классификатора

    def plot_boundary(clf, X, y, grid_step=.01, poly_featurizer=None):
    x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
    y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, grid_step),
    np.arange(y_min, y_max, grid_step))
    
    # каждой точке в сетке [x_min, m_max]x[y_min, y_max]
    # ставим в соответствие свой цвет
    Z = clf.predict(poly_featurizer.transform(np.c_[xx.ravel(), yy.ravel()]))
    Z = Z.reshape(xx.shape)
    plt.contour(xx, yy, Z, cmap=plt.cm. Paired)

    Полиномиальными признаками до степени $d$ для двух переменных $x_1$ и $x_2$ мы называем следующие:

    $\large \{x_1^d, x_1^{d-1}x_2, \ldots x_2^d\} = \{x_1^ix_2^j\}_{i+j \leq d, i,j \in \mathbb{N}}$

    Например, для $d=3$ это будут следующие признаки:

    $\large 1, x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3$

    Нарисовав треугольник Пифагора, Вы сообразите, сколько таких признаков будет для $d=4,5.$ и вообще для любого $d$.
    Попросту говоря, таких признаков экспоненциально много, и строить, скажем, для 100 признаков полиномиальные степени 10 может оказаться затратно (а более того, и не нужно).

    Создадим объект sklearn, который добавит в матрицу $X$ полиномиальные признаки вплоть до степени 7 и обучим логистическую регрессию с параметром регуляризации $C = 10^{-2}$. Изобразим разделяющую границу.
    Также проверим долю правильных ответов классификатора на обучающей выборке. Видим, что регуляризация оказалась слишком сильной, и модель «недообучилась». Доля правильных ответов классификатора на обучающей выборке оказалась равной 0.627.

    poly = PolynomialFeatures(degree=7)
    X_poly = poly.fit_transform(X)

    C = 1e-2
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.01, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=0.01')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Увеличим $C$ до 1. Тем самым мы ослабляем регуляризацию, теперь в решении значения весов логистической регрессии могут оказаться больше (по модулю), чем в прошлом случае. Теперь доля правильных ответов классификатора на обучающей выборке – 0.831.

    C = 1
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=1')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Еще увеличим $C$ – до 10 тысяч. Теперь регуляризации явно недостаточно, и мы наблюдаем переобучение. Можно заметить, что в прошлом случае (при $C$=1 и «гладкой» границе) доля правильных ответов модели на обучающей выборке не намного ниже, чем в 3 случае, зато на новой выборке, можно себе представить, 2 модель сработает намного лучше.
    Доля правильных ответов классификатора на обучающей выборке – 0.873.

    C = 1e4
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=10k')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Чтоб обсудить результаты, перепишем формулу для функционала, который оптимизируется в логистической регрессии, в таком виде:

    $\large J(X,y,w) = \mathcal{L} + \frac{1}{C}||w||^2,$

    • чем больше параметр $C$, тем более сложные зависимости в данных может восстанавливать модель (интуитивно $C$ соответствует «сложности» модели (model capacity))
    • если регуляризация слишком сильная (малые значения $C$), то решением задачи минимизации логистической функции потерь может оказаться то, когда многие веса занулились или стали слишком малыми. Еще говорят, что модель недостаточно «штрафуется» за ошибки (то есть в функционале $J$ «перевешивает» сумма квадратов весов, а ошибка $\mathcal{L}$ может быть относительно большой). В таком случае модель окажется недообученной (1 случай)
    • наоборот, если регуляризация слишком слабая (большие значения $C$), то решением задачи оптимизации может стать вектор $w$ с большими по модулю компонентами. В таком случае больший вклад в оптимизируемый функционал $J$ имеет $\mathcal{L}$ и, вольно выражаясь, модель слишком «боится» ошибиться на объектах обучающей выборки, поэтому окажется переобученной (3 случай)
    • то, какое значение $C$ выбрать, сама логистическая регрессия «не поймет» (или еще говорят «не выучит»), то есть это не может быть определено решением оптимизационной задачи, которой является логистическая регрессия (в отличие от весов $w$). Так же точно, дерево решений не может «само понять», какое ограничение на глубину выбрать (за один процесс обучения). Поэтому $C$ – это гиперпараметр модели, который настраивается на кросс-валидации, как и max_depth для дерева.

    Настройка параметра регуляризации

    Теперь найдем оптимальное (в данном примере) значение параметра регуляризации $C$. Сделать это можно с помощью LogisticRegressionCV – перебора параметров по сетке с последующей кросс-валидацией. Этот класс создан специально для логистической регрессии (для нее известны эффективные алгоритмы перебора параметров), для произвольной модели мы бы использовали GridSearchCV, RandomizedSearchCV или, например, специальные алгоритмы оптимизации гиперпараметров, реализованные в hyperopt.

    
    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)
    
    c_values = np.logspace(-2, 3, 500)
    
    logit_searcher = LogisticRegressionCV(Cs=c_values, cv=skf, verbose=1, n_jobs=-1)
    logit_searcher.fit(X_poly, y)

    Посмотрим, как качество модели (доля правильных ответов на обучающей и валидационной выборках) меняется при изменении гиперпараметра $C$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Выделим участок с «лучшими» значениями C.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Полезные ресурсы

    • Перевод материала этой статьи на английский – Jupyter notebooks в репозитории курса
    • Видеозаписи лекций по мотивам этой статьи: классификация, регрессия
    • Основательный обзор классики машинного обучения и, конечно же, линейных моделей сделан в книге «Deep Learning» (I. Goodfellow, Y. Bengio, A. Courville, 2016);
    • Реализация многих алгоритмов машинного обучения с нуля – репозиторий rushter. Рекомендуем изучить реализацию логистической регрессии;
    • Курс Евгения Соколова по машинному обучению (материалы на GitHub). Хорошая теория, нужна неплохая математическая подготовка;
    • Курс Дмитрия Ефимова на GitHub (англ.). Тоже очень качественные материалы.

    Статья написана в соавторстве с mephistopheies (Павлом Нестеровым). Он же – автор домашнего задания. Авторы домашнего задания в первой сессии курса (февраль-май 2017)– aiho (Ольга Дайховская) и das19 (Юрий Исаков). Благодарю bauchgefuehl (Анастасию Манохину) за редактирование.

    Домашнее задание № 4

    В качестве закрепления изученного материала предлагаем следующее задание: разобраться с тем, как работает TfidfVectorizer и DictVectorizer, обучить и настроить модель линейной регрессии Ridge на данных о публикациях на Хабрахабре и воспроизвести бенчмарк в соревновании. Проверить себя можно отправив ответы в веб-форме (там же найдете и решение).

    Актуальные и обновляемые версии демо-заданий – на английском на сайте курса. Также по подписке на Patreon («Bonus Assignments» tier) доступны расширенные домашние задания по каждой теме (только на англ.)

    Реализация цикла обучения логистической регрессии в Python

    Реализуем цикл обучения логистической регрессии используя Python. В этом нам снова поможет PyTorch. Для начала импортируем все библиотеки которые нам в этом пригодятся:

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import numpy as np
    from sklearn.datasets import make_classification
    from sklearn.metrics import classification_report

    Далее напишем класс реализующий логистическую регрессию. Прошу обратить внимание, что от линейной регрессии, которую мы реализовывали в ряде предыдущих статей, отличает лишь применение сигмоиды и новый метод predict (так как теперь мы решаем задачу классификации).

    class LogisticRegression(nn. Module):
     def __init__(self, input_size):
     super().__init__()
     self.weights = nn. Parameter(torch.randn(input_size, 1))
     self.sigmoid = nn. Sigmoid()
    
     def forward(self, x):
     x = x @ self.weights
     x = self.sigmoid(x)
     return x
    
     def fit(self, X, y, lr=0.01, num_iterations=1000):
     X = torch.from_numpy(X).float()
     y = torch.from_numpy(y).float().view(-1, 1) 
    
     # Инициализируем функцию потерь и оптимизатор
     criterion = nn. BCELoss()
     optimizer = optim. SGD(self.parameters(), lr=lr)
    
     for epoch in range(num_iterations):
     # Зануляем градиенты
     optimizer.zero_grad()
    
     # Получаем предсказания модели и вычисляем функцию потерь
     y_pred = self(X)
     loss = criterion(y_pred, y)
    
     # Обновляем веса
     loss.backward()
     optimizer.step()
     
    
     def predict(self, X):
     X = torch.from_numpy(X).float()
    
     # Получаем предсказания модели и присваиваем метки классов на основе вероятности
     y_pred = self(X)
     y_pred_labels = [1 if i > 0.5 else 0 for i in y_pred.detach().numpy().flatten()]
    
     return y_pred_labels
    

    На этот раз сгенерируем выборку для классификации самостоятельно, используя make_classification из библиотеки scikit-learn. А далее обучим нашу модель и оценим её качество:

    # Генерируем данные
    X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,
     random_state=1, n_clusters_per_class=1)
    
    # Создаем экземпляр класса и обучаем на обучающей выборке
    model = LogisticRegression(X.shape[1])
    model.fit(X, y, lr=0.1, num_iterations=100)
    
    # Прогнозируем метки классов на тестовой выборке
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
    precision recall f1-score support
    
     0 0.85 0.96 0.90 500
     1 0.95 0.83 0.88 500
    
     accuracy 0.89 1000
     macro avg 0.90 0.89 0.89 1000
    weighted avg 0.90 0.89 0.89 1000
    

    Для чистоты эксперимента обучим логистическую регрессию из библиотеки scikit-learn и увидим, что качество полученных моделей примерно одинаково:

    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    model.fit(X, y)
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
     precision recall f1-score support
    
     0 0.90 0.90 0.90 500
     1 0.90 0.90 0.90 500
    
     accuracy 0.90 1000
     macro avg 0.90 0.90 0.90 1000
    weighted avg 0.90 0.90 0.90 1000
    

    Далее давайте визуально оценим как модель принимает свое решение:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Как видим, результатом работы алгоритма выступает линия разделяющая классы. Если бы мы визуализировали модель в процессе обучения градиентным спуском, то увидели бы как эта линия подбирается в процессе оптимизации:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    Плюсы логистической регрессии:

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

    Минусы логистической регрессии:

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

    Логистическая регрессия

    Линейный классификатор

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Мы уже знакомы с линейной регрессией и методом наименьших квадратов. Рассмотрим задачу бинарной классификации, причем метки целевого класса обозначим «+1» (положительные примеры) и «-1» (отрицательные примеры).
    Один из самых простых линейных классификаторов получается на основе регрессии вот таким образом:

    $\large a(\vec{x}) = sign(\vec{w}^Tx),$

    Логистическая регрессия как линейный классификатор

    Логистическая регрессия является частным случаем линейного классификатора, но она обладает хорошим «умением» – прогнозировать вероятность $p_+$ отнесения примера $\vec{x_i}$ к классу «+»:

    $\large p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) $

    Прогнозирование не просто ответа («+1» или «-1»), а именно вероятности отнесения к классу «+1» во многих задачах является очень важным бизнес-требованием. Например, в задаче кредитного скоринга, где традиционно применяется логистическая регрессия, часто прогнозируют вероятность невозврата кредита ($p_+$). Клиентов, обратившихся за кредитом, сортируют по этой предсказанной вероятности (по убыванию), и получается скоркарта — по сути, рейтинг клиентов от плохих к хорошим. Ниже приведен игрушечный пример такой скоркарты.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Банк выбирает для себя порог $p_*$ предсказанной вероятности невозврата кредита (на картинке – $0.15$) и начиная с этого значения уже не выдает кредит. Более того, можно умножить предсказанную вероятность на выданную сумму и получить матожидание потерь с клиента, что тоже будет хорошей бизнес-метрикой (Далее в комментариях специалисты по скорингу могут поправить, но главная суть примерно такая).

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Обозначим $P(X)$ вероятностью происходящего события $X$. Тогда отношение вероятностей $OR(X)$ определяется из $\frac{P(X)}{1-P(X)}$, а это — отношение вероятностей того, произойдет ли событие или не произойдет. Очевидно, что вероятность и отношение шансов содержат одинаковую информацию. Но в то время как $P(X)$ находится в пределах от 0 до 1, $OR(X)$ находится в пределах от 0 до $\infty$.

    Если вычислить логарифм $OR(X)$ (то есть называется логарифм шансов, или логарифм отношения вероятностей), то легко заметить, что $\log{OR(X)} \in \mathbb{R}$. Его-то мы и будем прогнозировать с помощью МНК.

    Посмотрим, как логистическая регрессия будет делать прогноз $p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right)$ (пока считаем, что веса $\vec{w}$ мы как-то получили (т.е. обучили модель), далее разберемся, как именно).

    • Шаг 1. Вычислить значение $w_{0}+w_{1}x_1 + w_{2}x_2 + .  = \vec{w}^T\vec{x}$. (уравнение $\vec{w}^T\vec{x} = 0$ задает гиперплоскость, разделяющую примеры на 2 класса);

    • Шаг 2. Вычислить логарифм отношения шансов: $ \log(OR_{+}) = \vec{w}^T\vec{x}$.

    • Шаг 3. Имея прогноз шансов на отнесение к классу «+» – $OR_{+}$, вычислить $p_{+}$ с помощью простой зависимости:

    $\large p_{+} = \frac{OR_{+}}{1 + OR_{+}} = \frac{\exp^{\vec{w}^T\vec{x}}}{1 + \exp^{\vec{w}^T\vec{x}}} = \frac{1}{1 + \exp^{-\vec{w}^T\vec{x}}} = \sigma(\vec{w}^T\vec{x})$

    В правой части мы получили как раз сигмоид-функцию.

    Итак, логистическая регрессия прогнозирует вероятность отнесения примера к классу «+» (при условии, что мы знаем его признаки и веса модели) как сигмоид-преобразование линейной комбинации вектора весов модели и вектора признаков примера:

    $\large p_+(x_i) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i}).  $

    Следующий вопрос: как модель обучается? Тут мы опять обращаемся к принципу максимального правдоподобия.

    Принцип максимального правдоподобия и логистическая регрессия

    Теперь посмотрим, как из принципа максимального правдоподобия получается оптимизационная задача, которую решает логистическая регрессия, а именно, – минимизация логистической функции потерь.
    Только что мы увидели, что логистическая регрессия моделирует вероятность отнесения примера к классу «+» как

    $\large p_+(\vec{x_i}) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i})$

    Тогда для класса «-» аналогичная вероятность:

    $\large p_-(\vec{x_i}) = P\left(y_i = -1 \mid \vec{x_i}, \vec{w}\right) = 1 - \sigma(\vec{w}^T\vec{x_i}) = \sigma(-\vec{w}^T\vec{x_i}) $

    Оба этих выражения можно ловко объединить в одно (следите за моими руками – не обманывают ли вас):

    $\large P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) = \sigma(y_i\vec{w}^T\vec{x_i})$

    Выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ называется отступом (margin) классификации на объекте $\vec{x_i}$ (не путать с зазором (тоже margin), про который чаще всего говорят в контексте SVM). Если он неотрицателен, модель не ошибается на объекте $\vec{x_i}$, если же отрицателен – значит, класс для $\vec{x_i}$ спрогнозирован неправильно.
    Заметим, что отступ определен для объектов именно обучающей выборки, для которых известны реальные метки целевого класса $y_i$.

    Чтобы понять, почему это мы сделали такие выводы, обратимся к геометрической интерпретации линейного классификатора. Подробно про это можно почитать в материалах Евгения Соколова.

    Рекомендую решить почти классическую задачу из начального курса линейной алгебры: найти расстояние от точки с радиус-вектором $\vec{x_A}$ до плоскости, которая задается уравнением $\vec{w}^T\vec{x} = 0.$

    $\large \rho(\vec{x_A}, \vec{w}^T\vec{x} = 0) = \frac{\vec{w}^T\vec{x_A}}{||\vec{w}||}$

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Когда получим (или посмотрим) ответ, то поймем, что чем больше по модулю выражение $\vec{w}^T\vec{x_i}$, тем дальше точка $\vec{x_i}$ находится от плоскости $\vec{w}^T\vec{x} = 0.$

    Значит, выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ – это своего рода «уверенность» модели в классификации объекта $\vec{x_i}$:

    • если отступ большой (по модулю) и положительный, это значит, что метка класса поставлена правильно, а объект находится далеко от разделяющей гиперплоскости (такой объект классифицируется уверенно). На рисунке – $x_3$.
    • если отступ большой (по модулю) и отрицательный, значит метка класса поставлена неправильно, а объект находится далеко от разделяющей гиперплоскости (скорее всего такой объект – аномалия, например, его метка в обучающей выборке поставлена неправильно). На рисунке – $x_1$.
    • если отступ малый (по модулю), то объект находится близко к разделяющей гиперплоскости, а знак отступа определяет, правильно ли объект классифицирован. На рисунке – $x_2$ и $x_4$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Теперь распишем правдоподобие выборки, а именно, вероятность наблюдать данный вектор $\vec{y}$ у выборки $X$. Делаем сильное предположение: объекты приходят независимо, из одного распределения (i.i.d.). Тогда

    $\large P\left(\vec{y} \mid X, \vec{w}\right) = \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right),$

    где $\ell$ – длина выборки $X$ (число строк).

    Как водится, возьмем логарифм данного выражения (сумму оптимизировать намного проще, чем произведение):

    $\large \begin{array}{rcl} \log P\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) \\ &=& \log \prod_{i=1}^{\ell} \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \frac{1}{1 + \exp^{-y_i\vec{w}^T\vec{x_i}}} \\ &=& - \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}) \end{array}$

    То есть в даном случае принцип максимизации правдоподобия приводит к минимизации выражения

    $\large \mathcal{L_{log}} (X, \vec{y}, \vec{w}) = \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}).$

    Это логистическая функция потерь, просуммированная по всем объектам обучающей выборки.

    Посмотрим на новую фунцию как на функцию от отступа: $L(M) = \log (1 + \exp^{-M})$. Нарисуем ее график, а также график 1/0 функциий потерь (zero-one loss), которая просто штрафует модель на 1 за ошибку на каждом объекте (отступ отрицательный): <img src="https://habrastorage.org/getpro/habr/formulas/279/e2d/d4f/279e2dd4f16fba5aaba3bb74abc2ca6a.svg" alt="$L_{1/0}(M) = [M .

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    <img src="https://habrastorage.org/getpro/habr/formulas/6f7/6f6/465/6f76f64653b4699ea79de2f9844a8d76.svg" alt="$\large \begin{array}{rcl} \mathcal{L_{1/0}} (X, \vec{y}, \vec{w}) &=& \sum_{i=1}^{\ell} [M(\vec{x_i})

    где $\mathcal{L_{1/0}} (X, \vec{y}, \vec{w})$ – попросту число ошибок логистической регрессии с весами $\vec{w}$ на выборке $(X, \vec{y})$.

    То есть уменьшая верхнюю оценку $\mathcal{L_{log}}$ на число ошибок классификации, мы таким образом надеемся уменьшить и само число ошибок.

    $L_2$-регуляризация логистических потерь

    L2-регуляризация логистической регрессии устроена почти так же, как и в случае с гребневой (Ridge регрессией). Вместо функционала $\mathcal{L_{log}} (X, \vec{y}, \vec{w})$ минимизируется следующий:

    $\large J(X, \vec{y}, \vec{w}) = \mathcal{L_{log}} (X, \vec{y}, \vec{w}) + \lambda |\vec{w}|^2$

    В случае логистической регрессии принято введение обратного коэффициента регуляризации $C = \frac{1}{\lambda}$. И тогда решением задачи будет

    $\large \hat{w} = \arg \min_{\vec{w}} J(X, \vec{y}, \vec{w}) = \arg \min_{\vec{w}}\ (C\sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}})+ |\vec{w}|^2)$

    Далее рассмотрим пример, позволяющий интуитивно понять один из смыслов регуляризации.

    Линейная регрессия

    Метод наименьших квадратов

    Рассказ про линейные модели мы начнем с линейной регрессии. В первую очередь, необходимо задать модель зависимости объясняемой переменной $y$ от объясняющих ее факторов, функция зависимости будет линейной: $y = w_0 + \sum_{i=1}^m w_i x_i$. Если мы добавим фиктивную размерность $x_0 = 1$ для каждого наблюдения, тогда линейную форму можно переписать чуть более компактно, записав свободный член $w_0$ под сумму: $y = \sum_{i=0}^m w_i x_i = \vec{w}^T \vec{x}$. Если рассматривать матрицу наблюдения-признаки, у которой в строках находятся примеры из набора данных, то нам необходимо добавить единичную колонку слева. Зададим модель следующим образом:

    $\large \vec y = X \vec w + \epsilon,$

    Можем выписать выражение для каждого конкретного наблюдения

    $\large y_i = \sum_{j=0}^m w_j X_{ij} + \epsilon_i$

    Также на модель накладываются следующие ограничения (иначе это будет какая то другая регрессия, но точно не линейная):

    Оценка $\hat{w}_i$ весов $w_i$ называется линейной, если

    $\large \hat{w}_i = \omega_{1i}y_1 + \omega_{2i}y_2 + \cdots + \omega_{ni}y_n,$

    где $\forall\ k\ \omega_{ki}$ зависит только от наблюдаемых данных $X$ и почти наверняка нелинейно. Так как решением задачи поиска оптимальных весов будет именно линейная оценка, то и модель называется линейной регрессией. Введем еще одно определение. Оценка $\hat{w}_i$ называется несмещенной тогда, когда матожидание оценки равно реальному, но неизвестному значению оцениваемого параметра:

    $\large \mathbb{E}\left[\hat{w}_i\right] = w_i$

    Один из способов вычислить значения параметров модели является метод наименьших квадратов (МНК), который минимизирует среднеквадратичную ошибку между реальным значением зависимой переменной и прогнозом, выданным моделью:

    $\large \begin{array}{rcl}\mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 \\ &=& \frac{1}{2n} \left(\vec{y} - X \vec{w}\right)^T \left(\vec{y} - X \vec{w}\right) \end{array}$

    Для решения данной оптимизационной задачи необходимо вычислить производные по параметрам модели, приравнять их к нулю и решить полученные уравнения относительно $\vec w$ (матричное дифференцирование неподготовленному читателю может показаться затруднительным, попробуйте расписать все через суммы, чтобы убедиться в ответе):

    Шпаргалка по матричным производным

    $\large \begin{array}{rcl} \frac{\partial}{\partial x} x^T a &=& a \\ \frac{\partial}{\partial x} x^T A x &=& \left(A + A^T\right)x \\ \frac{\partial}{\partial A} x^T A y &=& xy^T\\ \frac{\partial}{\partial x} A^{-1} &=& -A^{-1} \frac{\partial A}{\partial x} A^{-1} \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} &=& \frac{\partial}{\partial \vec{w}} \frac{1}{2n} \left( \vec{y}^T \vec{y} -2\vec{y}^T X \vec{w} + \vec{w}^T X^T X \vec{w}\right) \\ &=& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} = 0 &\Leftrightarrow& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) = 0 \\ &\Leftrightarrow& -X^T \vec{y} + X^T X \vec{w} = 0 \\ &\Leftrightarrow& X^T X \vec{w} = X^T \vec{y} \\ &\Leftrightarrow& \vec{w} = \left(X^T X\right)^{-1} X^T \vec{y} \end{array}$

    Итак, имея в виду все определения и условия описанные выше, мы можем утверждать, опираясь на теорему Маркова-Гаусса, что оценка МНК является лучшей оценкой параметров модели, среди всех линейных и несмещенных оценок, то есть обладающей наименьшей дисперсией.

    Метод максимального правдоподобия

    У читателя вполне резонно могли возникнуть вопросы: например, почему мы минимизируем среднеквадратичную ошибку, а не что-то другое. Ведь можно минимизировать среднее абсолютное значение невязки или еще что-то. Единственное, что произойдёт в случае изменения минимизируемого значения, так это то, что мы выйдем из условий теоремы Маркова-Гаусса, и наши оценки перестанут быть лучшими среди линейных и несмещенных.

    Давайте перед тем как продолжить, сделаем лирическое отступление, чтобы проиллюстрировать метод максимального правдоподобия на простом примере.

    Как-то после школы я заметил, что все помнят формулу этилового спирта. Тогда я решил провести эксперимент: помнят ли люди более простую формулу метилового спирта: $CH_3OH$. Мы опросили 400 человек и оказалось, что формулу помнят всего 117 человек. Разумно предположить, что вероятность того, что следующий опрошенный знает формулу метилового спирта – $\frac{117}{400} \approx 0.29%$. Покажем, что такая интуитивно понятная оценка не просто хороша, а еще и является оценкой максимального правдоподобия.

    Разберемся, откуда берется эта оценка, а для этого вспомним определение распределения Бернулли: случайная величина $X$ имеет распределение Бернулли, если она принимает всего два значения ($1$ и $0$ с вероятностями $\theta$ и $1 - \theta$ соответственно) и имеет следующую функцию распределения вероятности:

    $\large p\left(\theta, x\right) = \theta^{x} \left(1 - \theta\right)^\left(1 - x\right), x \in \left\{0, 1\right\}$

    Похоже, это распределение – то, что нам нужно, а параметр распределения $\theta$ и есть та оценка вероятности того, что человек знает формулу метилового спирта. Мы проделали $400$ независимых экспериментов, обозначим их исходы как $\vec{x} = \left(x_1, x_2, \ldots, x_{400}\right)$. Запишем правдоподобие наших данных (наблюдений), то есть вероятность наблюдать 117 реализаций случайной величины $X = 1$ и 283 реализации $X = 0$:

    $\large p(\vec{x} \mid \theta) = \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = \theta^{117} \left(1 - \theta\right)^{283}$

    Далее будем максимизировать это выражение по $\theta$, и чаще всего это делают не с правдоподобием $p(\vec{x} \mid \theta)$, а с его логарифмом (применение монотонного преобразования не изменит решение, но упростит вычисления):

    $\large \log p(\vec{x} \mid \theta) = \log \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = $

    $ \large = \log \theta^{117} \left(1 - \theta\right)^{283} = 117 \log \theta + 283 \log \left(1 - \theta\right)$

    Теперь мы хотим найти такое значение $\theta$, которое максимизирует правдоподобие, для этого мы возьмем производную по $\theta$, приравняем к нулю и решим полученное уравнение:

    $\large \frac{\partial p(\vec{x} \mid \theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left(117 \log \theta + 283 \log \left(1 - \theta\right)\right) = \frac{117}{\theta} - \frac{283}{1 - \theta};$

    $\large \begin{array}{rcl} \frac{117}{\theta} - \frac{283}{1 - \theta} = 0 \Rightarrow \theta = \frac{117}{400} \end{array}.$

    Получается, что наша интуитивная оценка – это и есть оценка максимального правдоподобия. Применим теперь те же рассуждения для задачи линейной регрессии и попробуем выяснить, что лежит за среднеквадратичной ошибкой. Для этого нам придется посмотреть на линейную регрессию с вероятностной точки зрения. Модель, естественно, остается такой же:

    $\large \vec y = X \vec w + \epsilon,$

    но будем теперь считать, что случайные ошибки берутся из центрированного нормального распределения:

    $\large \epsilon_i \sim \mathcal{N}\left(0, \sigma^2\right)$

    Перепишем модель в новом свете:

    $\large \begin{array}{rcl} p\left(y_i \mid X, \vec{w}\right) &=& \sum_{j=1}^m w_j X_{ij} + \mathcal{N}\left(0, \sigma^2\right) \\ &=& \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \end{array}$

    Так как примеры берутся независимо (ошибки не скоррелированы – одно из условий теоремы Маркова-Гаусса), то полное правдоподобие данных будет выглядеть как произведение функций плотности $p\left(y_i\right)$. Рассмотрим логарифм правдоподобия, что позволит нам перейти от произведения к сумме:

    $\large \begin{array}{rcl} \log p\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^n \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& \sum_{i=1}^n \log \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \end{array}$

    Мы хотим найти гипотезу максимального правдоподобия, т.е. нам нужно максимизировать выражение $p\left(\vec{y} \mid X, \vec{w}\right)$, а это то же самое, что и максимизация его логарифма. Обратите внимание, что при максимизации функции по какому-то параметру можно выкинуть все члены, не зависящие от этого параметра:

    $\large \begin{array}{rcl} \hat{w} &=& \arg \max_{w} p\left(\vec{y} \mid X, \vec{w}\right) \\ &=& \arg \max_{w} -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\mathcal{L}\left(X, \vec{y}, \vec{w} \right) \end{array}$

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

    Разложение ошибки на смещение и разброс (Bias-variance decomposition)

    Поговорим немного о свойствах ошибки прогноза линейной регрессии (в принципе эти рассуждения верны для всех алгоритмов машинного обучения). В свете предыдущего пункта мы выяснили, что:

    Тогда ошибка в точке $\vec{x}$ раскладывается следующим образом:

    $\large \begin{array}{rcl} \text{Err}\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\left(\hat{f}\left(\vec{x}\right)\right)^2\right] - 2\mathbb{E}\left[y\hat{f}\left(\vec{x}\right)\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\hat{f}^2\right] - 2\mathbb{E}\left[y\hat{f}\right] \\ \end{array}$

    Для наглядности опустим обозначение аргумента функций. Рассмотрим каждый член по отдельности, два первых вас пишутся легко на странице ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ:

    $\large\begin{array}{rcl}\mathbb{E }\left[y^2\right] &=& \text{Var}\left(y\right) + \mathbb{E}\left[y\right]^2 = \sigma^2 + f^2\ \ \mathbb{E}\left[\hat{f}^2\right] &=& \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{ f}\right]^2 \\\end{array}$

    $\large\begin{array}{rcl}\text{Var }\left(y\right) &=& \mathbb{E}\left[\left(y - \mathbb{E}\left[y\right]\right)^2\right]\\&=&\ mathbb{E}\left[\left(y - f\right)^2\right]\\&=&\mathbb{E}\left[\left(f + \epsilon - f\right)^2\right ] \\ &=& \mathbb{E}\left[\epsilon^2\right] = \sigma^2\end{array}$

    $\large\mathbb{E}[y] = \mathbb{ E}[f + \epsilon] = \mathbb{E}[f] + \mathbb{E}[\epsilon] = f$

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

    $\large\begin{array}{rcl}\mathbb{E }\left[y\hat{f}\right] &=& \mathbb{E}\left[\left(f + \epsilon\right)\hat{f}\right] \\ &=& \mathbb{ E}\left[f\hat{f}\right] + \mathbb{E}\left[\epsilon\hat{f}\right] \\ &=& f\mathbb{E}\left[\hat{ f}\right] + \mathbb{E}\left[\epsilon\right] \mathbb{E}\left[\hat{f}\right] = f\mathbb{E}\left[\hat{f} \right] \end{array}$

    Особенный, немного другой:

    $\large\begin{array}{rcl}\text{Err }\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\ right] \\ &=& \sigma^2 + f^2 + \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{f}\right]^ 2 - 2f\mathbb{E}\left[\hat{f}\right] \\ &=& \left(f - \mathbb{E}\left[\hat{f}\right]\right)^2 + \text{Var}\left(\right{of}\right) + \sigma^2 \\ &=& \text{Bias}\left(\right{of}\right)^2 + \text{Var }\left(\hat{f}\right) + \sigma^2 \end{array}$

    Не то чтобы я собираюсь это сделать, я собираюсь это сделать, я собираюсь это сделать. Для получения дополнительной информации подпишитесь на следующий список $y = f\left(\vec{x}\right) + \epsilon$ file размер:

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Это снежинка, это снежинка, это снежинка Цена на снежинку) снежинка снежинка (снежинка) снежинка, но уменьшение смещения. Если вы хотите получить на лице немного другую улыбку На самом деле белоснежные белоснежные снежинки (витрина).). Если вы не любитель, то сможете получить в руки белоснежные снежинки, белоснежные снежинки.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Видео Маркова-Гаусса, как утверждает раз, МНК-оцека параметров линейной Ни одна из самых лучших в классе несмещенных линейных оценок, то есть с наименьшей дисперсией. Для получения дополнительной информации свяжитесь с нами по адресу https://habrastorage.org/getpro/habr/formulas/7a4/a7d/183/7a4a7d183a691556d2592ebf22e11365.svg» alt=»$g$» data- tex=»inline»> Если вы ищете книгу, вы сможете сделать это по адресу $Was\ left(\hat{f}\right) \leq Was\left(g\right)$.

    Регуляризация Линейной Регрессии

    Это снежинка, это снежинка, снежинка ради ее стабильности, т.е. ради уменьшения дисперсии модели $\text{Var}\left(\hat{f}\right)$. Одним из условий теоремы Маркова-Гаусса является полный столбцовый ранг матрицы $X$. В противном случае решение МНК $\vec{w} = \left(X^T X\right)^{-1} X^T \vec{y}$ не существует, т.к. не будет существовать обратная матрица $\left(X^T X\right)^{-1}.$ Другими словами, матрица $X^T X$ будет сингулярна, или вырожденна. Такая задача называется некорректно поставленной. Задачу нужно скорректировать, а именно, сделать матрицу $X^TX$ невырожденной, или регулярной (именно поэтому этот процесс называется регуляризацией). Чаще в данных мы можем наблюдать так называемую мультиколлинеарность — когда два или несколько признаков сильно коррелированы, в матрице $X$ это проявляется в виде «почти» линейной зависимости столбцов. Например, в задаче прогнозирования цены квартиры по ее параметрам «почти» линейная зависимость будет у признаков «площадь с учетом балкона» и «площадь без учета балкона». Формально для таких данных матрица $X^T X$ будет обратима, но из-за мультиколлинеарности у матрицы $X^T X$ некоторые собственные значения будут близки к нулю, а в обратной матрице $\left(X^T X\right)^{-1}$ появятся экстремально большие собственные значения, т.к. собственные значения обратной матрицы – это $\frac{1}{\lambda_i}$. Итогом такого шатания собственных значений станет нестабильная оценка параметров модели, т.е. добавление нового наблюдения в набор тренировочных данных приведёт к совершенно другому решению. Иллюстрации роста коэффициентов вы найдете в одном из наших прошлых постов. Одним из способов регуляризации является регуляризация Тихонова, которая в общем виде выглядит как добавление нового члена к среднеквадратичной ошибке:

    $\large \begin{array}{rcl} \mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 + \left\|\Gamma \vec{w}\right\|^2\\ \end{array}$

    Часто матрица Тихонова выражается как произведение некоторого числа на единичную матрицу: $\Gamma = \frac{\lambda}{2} E$. В этом случае задача минимизации среднеквадратичной ошибки становится задачей с ограничением на $L_2$ норму. Если продифференцировать новую функцию стоимости по параметрам модели, приравнять полученную функцию к нулю и выразить $\vec{w}$, то мы получим точное решение задачи.

    $\large \begin{array}{rcl} \vec{w} &=& \left(X^T X + \lambda E\right)^{-1} X^T \vec{y} \end{array}$

    Такая регрессия называется гребневой регрессией (ridge regression). А гребнем является как раз диагональная матрица, которую мы прибавляем к матрице $X^T X$, в результате получается гарантированно регулярная матрица.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Такое решение уменьшает дисперсию, но становится смещенным, т.к. минимизируется также и норма вектора параметров, что заставляет решение сдвигаться в сторону нуля. На рисунке ниже на пересечении белых пунктирных линий находится МНК-решение. Голубыми точками обозначены различные решения гребневой регрессии. Видно, что при увеличении параметра регуляризации $\lambda$ решение сдвигается в сторону нуля.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Логистическая регрессия

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

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

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

    Y — бинарный выходной результат (0 или 1)

    X — вектор признаков, используемый для прогнозирования $Y$

    e — число Эйлера

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

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

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    ); plt.ylabel(‘ROC AUC’)
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может «отвлекаться» на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки «сходятся», что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки «сошлись», и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия «настроил один раз – дальше использую 10 раз» может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    А если усложнить модель ещё больше ($alpha=10^{-4}$)?

    Проявляется переобучение – AUC падает как на обучении, так и на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Строя подобные кривые, можно понять, в какую сторону двигаться, и как правильно настроить сложность модели на новых данных.

    Выводы по кривым валидации и обучения

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

    Наглядный пример регуляризации логистической регрессии

    В 1 статье уже приводился пример того, как полиномиальные признаки позволяют линейным моделям строить нелинейные разделяющие поверхности. Покажем это в картинках.

    Посмотрим, как регуляризация влияет на качество классификации на наборе данных по тестированию микрочипов из курса Andrew Ng по машинному обучению.
    Будем использовать логистическую регрессию с полиномиальными признаками и варьировать параметр регуляризации C.
    Сначала посмотрим, как регуляризация влияет на разделяющую границу классификатора, интуитивно распознаем переобучение и недообучение.
    Потом численно установим близкий к оптимальному параметр регуляризации с помощью кросс-валидации (cross-validation) и перебора по сетке (GridSearch).

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
    from sklearn.model_selection import cross_val_score, StratifiedKFold
    from sklearn.model_selection import GridSearchCV

    Загружаем данные с помощью метода read_csv библиотеки pandas. В этом наборе данных для 118 микрочипов (объекты) указаны результаты двух тестов по контролю качества (два числовых признака) и сказано, пустили ли микрочип в производство. Признаки уже центрированы, то есть из всех значений вычтены средние по столбцам. Таким образом, «среднему» микрочипу соответствуют нулевые значения результатов тестов.

    data = pd.read_csv('././data/microchip_tests.txt',
    header=None, names = ('test1','test2','released'))
    # информация о наборе данных
    data.info()

    <class ‘pandas.core.frame. DataFrame’>
    RangeIndex: 118 entries, 0 to 117
    Data columns (total 3 columns):
    test1 118 non-null float64
    test2 118 non-null float64
    released 118 non-null int64
    dtypes: float64(2), int64(1)
    memory usage: 2.8 KB

    Посмотрим на первые и последние 5 строк.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Сохраним обучающую выборку и метки целевого класса в отдельных массивах NumPy. Отобразим данные. Красный цвет соответствует бракованным чипам, зеленый – нормальным.

    X = data.ix[:,:2].values
    y = data.ix[:,2].values

    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Определяем функцию для отображения разделяющей кривой классификатора

    def plot_boundary(clf, X, y, grid_step=.01, poly_featurizer=None):
    x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
    y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, grid_step),
    np.arange(y_min, y_max, grid_step))
    
    # каждой точке в сетке [x_min, m_max]x[y_min, y_max]
    # ставим в соответствие свой цвет
    Z = clf.predict(poly_featurizer.transform(np.c_[xx.ravel(), yy.ravel()]))
    Z = Z.reshape(xx.shape)
    plt.contour(xx, yy, Z, cmap=plt.cm. Paired)

    Полиномиальными признаками до степени $d$ для двух переменных $x_1$ и $x_2$ мы называем следующие:

    $\large \{x_1^d, x_1^{d-1}x_2, \ldots x_2^d\} = \{x_1^ix_2^j\}_{i+j \leq d, i,j \in \mathbb{N}}$

    Например, для $d=3$ это будут следующие признаки:

    $\large 1, x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3$

    Нарисовав треугольник Пифагора, Вы сообразите, сколько таких признаков будет для $d=4,5.$ и вообще для любого $d$.
    Попросту говоря, таких признаков экспоненциально много, и строить, скажем, для 100 признаков полиномиальные степени 10 может оказаться затратно (а более того, и не нужно).

    Создадим объект sklearn, который добавит в матрицу $X$ полиномиальные признаки вплоть до степени 7 и обучим логистическую регрессию с параметром регуляризации $C = 10^{-2}$. Изобразим разделяющую границу.
    Также проверим долю правильных ответов классификатора на обучающей выборке. Видим, что регуляризация оказалась слишком сильной, и модель «недообучилась». Доля правильных ответов классификатора на обучающей выборке оказалась равной 0.627.

    poly = PolynomialFeatures(degree=7)
    X_poly = poly.fit_transform(X)

    C = 1e-2
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.01, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=0.01')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Увеличим $C$ до 1. Тем самым мы ослабляем регуляризацию, теперь в решении значения весов логистической регрессии могут оказаться больше (по модулю), чем в прошлом случае. Теперь доля правильных ответов классификатора на обучающей выборке – 0.831.

    C = 1
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=1')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Еще увеличим $C$ – до 10 тысяч. Теперь регуляризации явно недостаточно, и мы наблюдаем переобучение. Можно заметить, что в прошлом случае (при $C$=1 и «гладкой» границе) доля правильных ответов модели на обучающей выборке не намного ниже, чем в 3 случае, зато на новой выборке, можно себе представить, 2 модель сработает намного лучше.
    Доля правильных ответов классификатора на обучающей выборке – 0.873.

    C = 1e4
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=10k')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Чтоб обсудить результаты, перепишем формулу для функционала, который оптимизируется в логистической регрессии, в таком виде:

    $\large J(X,y,w) = \mathcal{L} + \frac{1}{C}||w||^2,$

    • чем больше параметр $C$, тем более сложные зависимости в данных может восстанавливать модель (интуитивно $C$ соответствует «сложности» модели (model capacity))
    • если регуляризация слишком сильная (малые значения $C$), то решением задачи минимизации логистической функции потерь может оказаться то, когда многие веса занулились или стали слишком малыми. Еще говорят, что модель недостаточно «штрафуется» за ошибки (то есть в функционале $J$ «перевешивает» сумма квадратов весов, а ошибка $\mathcal{L}$ может быть относительно большой). В таком случае модель окажется недообученной (1 случай)
    • наоборот, если регуляризация слишком слабая (большие значения $C$), то решением задачи оптимизации может стать вектор $w$ с большими по модулю компонентами. В таком случае больший вклад в оптимизируемый функционал $J$ имеет $\mathcal{L}$ и, вольно выражаясь, модель слишком «боится» ошибиться на объектах обучающей выборки, поэтому окажется переобученной (3 случай)
    • то, какое значение $C$ выбрать, сама логистическая регрессия «не поймет» (или еще говорят «не выучит»), то есть это не может быть определено решением оптимизационной задачи, которой является логистическая регрессия (в отличие от весов $w$). Так же точно, дерево решений не может «само понять», какое ограничение на глубину выбрать (за один процесс обучения). Поэтому $C$ – это гиперпараметр модели, который настраивается на кросс-валидации, как и max_depth для дерева.

    Настройка параметра регуляризации

    Теперь найдем оптимальное (в данном примере) значение параметра регуляризации $C$. Сделать это можно с помощью LogisticRegressionCV – перебора параметров по сетке с последующей кросс-валидацией. Этот класс создан специально для логистической регрессии (для нее известны эффективные алгоритмы перебора параметров), для произвольной модели мы бы использовали GridSearchCV, RandomizedSearchCV или, например, специальные алгоритмы оптимизации гиперпараметров, реализованные в hyperopt.

    
    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)
    
    c_values = np.logspace(-2, 3, 500)
    
    logit_searcher = LogisticRegressionCV(Cs=c_values, cv=skf, verbose=1, n_jobs=-1)
    logit_searcher.fit(X_poly, y)

    Посмотрим, как качество модели (доля правильных ответов на обучающей и валидационной выборках) меняется при изменении гиперпараметра $C$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Выделим участок с «лучшими» значениями C.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Полезные ресурсы

    • Перевод материала этой статьи на английский – Jupyter notebooks в репозитории курса
    • Видеозаписи лекций по мотивам этой статьи: классификация, регрессия
    • Основательный обзор классики машинного обучения и, конечно же, линейных моделей сделан в книге «Deep Learning» (I. Goodfellow, Y. Bengio, A. Courville, 2016);
    • Реализация многих алгоритмов машинного обучения с нуля – репозиторий rushter. Рекомендуем изучить реализацию логистической регрессии;
    • Курс Евгения Соколова по машинному обучению (материалы на GitHub). Хорошая теория, нужна неплохая математическая подготовка;
    • Курс Дмитрия Ефимова на GitHub (англ.). Тоже очень качественные материалы.

    Статья написана в соавторстве с mephistopheies (Павлом Нестеровым). Он же – автор домашнего задания. Авторы домашнего задания в первой сессии курса (февраль-май 2017)– aiho (Ольга Дайховская) и das19 (Юрий Исаков). Благодарю bauchgefuehl (Анастасию Манохину) за редактирование.

    Домашнее задание № 4

    В качестве закрепления изученного материала предлагаем следующее задание: разобраться с тем, как работает TfidfVectorizer и DictVectorizer, обучить и настроить модель линейной регрессии Ridge на данных о публикациях на Хабрахабре и воспроизвести бенчмарк в соревновании. Проверить себя можно отправив ответы в веб-форме (там же найдете и решение).

    Актуальные и обновляемые версии демо-заданий – на английском на сайте курса. Также по подписке на Patreon («Bonus Assignments» tier) доступны расширенные домашние задания по каждой теме (только на англ.)

    Реализация цикла обучения логистической регрессии в Python

    Реализуем цикл обучения логистической регрессии используя Python. В этом нам снова поможет PyTorch. Для начала импортируем все библиотеки которые нам в этом пригодятся:

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import numpy as np
    from sklearn.datasets import make_classification
    from sklearn.metrics import classification_report

    Далее напишем класс реализующий логистическую регрессию. Прошу обратить внимание, что от линейной регрессии, которую мы реализовывали в ряде предыдущих статей, отличает лишь применение сигмоиды и новый метод predict (так как теперь мы решаем задачу классификации).

    class LogisticRegression(nn. Module):
     def __init__(self, input_size):
     super().__init__()
     self.weights = nn. Parameter(torch.randn(input_size, 1))
     self.sigmoid = nn. Sigmoid()
    
     def forward(self, x):
     x = x @ self.weights
     x = self.sigmoid(x)
     return x
    
     def fit(self, X, y, lr=0.01, num_iterations=1000):
     X = torch.from_numpy(X).float()
     y = torch.from_numpy(y).float().view(-1, 1) 
    
     # Инициализируем функцию потерь и оптимизатор
     criterion = nn. BCELoss()
     optimizer = optim. SGD(self.parameters(), lr=lr)
    
     for epoch in range(num_iterations):
     # Зануляем градиенты
     optimizer.zero_grad()
    
     # Получаем предсказания модели и вычисляем функцию потерь
     y_pred = self(X)
     loss = criterion(y_pred, y)
    
     # Обновляем веса
     loss.backward()
     optimizer.step()
     
    
     def predict(self, X):
     X = torch.from_numpy(X).float()
    
     # Получаем предсказания модели и присваиваем метки классов на основе вероятности
     y_pred = self(X)
     y_pred_labels = [1 if i > 0.5 else 0 for i in y_pred.detach().numpy().flatten()]
    
     return y_pred_labels
    

    На этот раз сгенерируем выборку для классификации самостоятельно, используя make_classification из библиотеки scikit-learn. А далее обучим нашу модель и оценим её качество:

    # Генерируем данные
    X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,
     random_state=1, n_clusters_per_class=1)
    
    # Создаем экземпляр класса и обучаем на обучающей выборке
    model = LogisticRegression(X.shape[1])
    model.fit(X, y, lr=0.1, num_iterations=100)
    
    # Прогнозируем метки классов на тестовой выборке
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
    precision recall f1-score support
    
     0 0.85 0.96 0.90 500
     1 0.95 0.83 0.88 500
    
     accuracy 0.89 1000
     macro avg 0.90 0.89 0.89 1000
    weighted avg 0.90 0.89 0.89 1000
    

    Для чистоты эксперимента обучим логистическую регрессию из библиотеки scikit-learn и увидим, что качество полученных моделей примерно одинаково:

    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    model.fit(X, y)
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
     precision recall f1-score support
    
     0 0.90 0.90 0.90 500
     1 0.90 0.90 0.90 500
    
     accuracy 0.90 1000
     macro avg 0.90 0.90 0.90 1000
    weighted avg 0.90 0.90 0.90 1000
    

    Далее давайте визуально оценим как модель принимает свое решение:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Как видим, результатом работы алгоритма выступает линия разделяющая классы. Если бы мы визуализировали модель в процессе обучения градиентным спуском, то увидели бы как эта линия подбирается в процессе оптимизации:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    Плюсы логистической регрессии:

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

    Минусы логистической регрессии:

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

    Логистическая регрессия

    Линейный классификатор

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Мы уже знакомы с линейной регрессией и методом наименьших квадратов. Рассмотрим задачу бинарной классификации, причем метки целевого класса обозначим «+1» (положительные примеры) и «-1» (отрицательные примеры).
    Один из самых простых линейных классификаторов получается на основе регрессии вот таким образом:

    $\large a(\vec{x}) = sign(\vec{w}^Tx),$

    Логистическая регрессия как линейный классификатор

    Логистическая регрессия является частным случаем линейного классификатора, но она обладает хорошим «умением» – прогнозировать вероятность $p_+$ отнесения примера $\vec{x_i}$ к классу «+»:

    $\large p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) $

    Прогнозирование не просто ответа («+1» или «-1»), а именно вероятности отнесения к классу «+1» во многих задачах является очень важным бизнес-требованием. Например, в задаче кредитного скоринга, где традиционно применяется логистическая регрессия, часто прогнозируют вероятность невозврата кредита ($p_+$). Клиентов, обратившихся за кредитом, сортируют по этой предсказанной вероятности (по убыванию), и получается скоркарта — по сути, рейтинг клиентов от плохих к хорошим. Ниже приведен игрушечный пример такой скоркарты.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Банк выбирает для себя порог $p_*$ предсказанной вероятности невозврата кредита (на картинке – $0.15$) и начиная с этого значения уже не выдает кредит. Более того, можно умножить предсказанную вероятность на выданную сумму и получить матожидание потерь с клиента, что тоже будет хорошей бизнес-метрикой (Далее в комментариях специалисты по скорингу могут поправить, но главная суть примерно такая).

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Обозначим $P(X)$ вероятностью происходящего события $X$. Тогда отношение вероятностей $OR(X)$ определяется из $\frac{P(X)}{1-P(X)}$, а это — отношение вероятностей того, произойдет ли событие или не произойдет. Очевидно, что вероятность и отношение шансов содержат одинаковую информацию. Но в то время как $P(X)$ находится в пределах от 0 до 1, $OR(X)$ находится в пределах от 0 до $\infty$.

    Если вычислить логарифм $OR(X)$ (то есть называется логарифм шансов, или логарифм отношения вероятностей), то легко заметить, что $\log{OR(X)} \in \mathbb{R}$. Его-то мы и будем прогнозировать с помощью МНК.

    Посмотрим, как логистическая регрессия будет делать прогноз $p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right)$ (пока считаем, что веса $\vec{w}$ мы как-то получили (т.е. обучили модель), далее разберемся, как именно).

    • Шаг 1. Вычислить значение $w_{0}+w_{1}x_1 + w_{2}x_2 + .  = \vec{w}^T\vec{x}$. (уравнение $\vec{w}^T\vec{x} = 0$ задает гиперплоскость, разделяющую примеры на 2 класса);

    • Шаг 2. Вычислить логарифм отношения шансов: $ \log(OR_{+}) = \vec{w}^T\vec{x}$.

    • Шаг 3. Имея прогноз шансов на отнесение к классу «+» – $OR_{+}$, вычислить $p_{+}$ с помощью простой зависимости:

    $\large p_{+} = \frac{OR_{+}}{1 + OR_{+}} = \frac{\exp^{\vec{w}^T\vec{x}}}{1 + \exp^{\vec{w}^T\vec{x}}} = \frac{1}{1 + \exp^{-\vec{w}^T\vec{x}}} = \sigma(\vec{w}^T\vec{x})$

    В правой части мы получили как раз сигмоид-функцию.

    Итак, логистическая регрессия прогнозирует вероятность отнесения примера к классу «+» (при условии, что мы знаем его признаки и веса модели) как сигмоид-преобразование линейной комбинации вектора весов модели и вектора признаков примера:

    $\large p_+(x_i) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i}).  $

    Следующий вопрос: как модель обучается? Тут мы опять обращаемся к принципу максимального правдоподобия.

    Принцип максимального правдоподобия и логистическая регрессия

    Теперь посмотрим, как из принципа максимального правдоподобия получается оптимизационная задача, которую решает логистическая регрессия, а именно, – минимизация логистической функции потерь.
    Только что мы увидели, что логистическая регрессия моделирует вероятность отнесения примера к классу «+» как

    $\large p_+(\vec{x_i}) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i})$

    Тогда для класса «-» аналогичная вероятность:

    $\large p_-(\vec{x_i}) = P\left(y_i = -1 \mid \vec{x_i}, \vec{w}\right) = 1 - \sigma(\vec{w}^T\vec{x_i}) = \sigma(-\vec{w}^T\vec{x_i}) $

    Оба этих выражения можно ловко объединить в одно (следите за моими руками – не обманывают ли вас):

    $\large P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) = \sigma(y_i\vec{w}^T\vec{x_i})$

    Выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ называется отступом (margin) классификации на объекте $\vec{x_i}$ (не путать с зазором (тоже margin), про который чаще всего говорят в контексте SVM). Если он неотрицателен, модель не ошибается на объекте $\vec{x_i}$, если же отрицателен – значит, класс для $\vec{x_i}$ спрогнозирован неправильно.
    Заметим, что отступ определен для объектов именно обучающей выборки, для которых известны реальные метки целевого класса $y_i$.

    Чтобы понять, почему это мы сделали такие выводы, обратимся к геометрической интерпретации линейного классификатора. Подробно про это можно почитать в материалах Евгения Соколова.

    Рекомендую решить почти классическую задачу из начального курса линейной алгебры: найти расстояние от точки с радиус-вектором $\vec{x_A}$ до плоскости, которая задается уравнением $\vec{w}^T\vec{x} = 0.$

    $\large \rho(\vec{x_A}, \vec{w}^T\vec{x} = 0) = \frac{\vec{w}^T\vec{x_A}}{||\vec{w}||}$

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Когда получим (или посмотрим) ответ, то поймем, что чем больше по модулю выражение $\vec{w}^T\vec{x_i}$, тем дальше точка $\vec{x_i}$ находится от плоскости $\vec{w}^T\vec{x} = 0.$

    Значит, выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ – это своего рода «уверенность» модели в классификации объекта $\vec{x_i}$:

    • если отступ большой (по модулю) и положительный, это значит, что метка класса поставлена правильно, а объект находится далеко от разделяющей гиперплоскости (такой объект классифицируется уверенно). На рисунке – $x_3$.
    • если отступ большой (по модулю) и отрицательный, значит метка класса поставлена неправильно, а объект находится далеко от разделяющей гиперплоскости (скорее всего такой объект – аномалия, например, его метка в обучающей выборке поставлена неправильно). На рисунке – $x_1$.
    • если отступ малый (по модулю), то объект находится близко к разделяющей гиперплоскости, а знак отступа определяет, правильно ли объект классифицирован. На рисунке – $x_2$ и $x_4$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Теперь распишем правдоподобие выборки, а именно, вероятность наблюдать данный вектор $\vec{y}$ у выборки $X$. Делаем сильное предположение: объекты приходят независимо, из одного распределения (i.i.d.). Тогда

    $\large P\left(\vec{y} \mid X, \vec{w}\right) = \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right),$

    где $\ell$ – длина выборки $X$ (число строк).

    Как водится, возьмем логарифм данного выражения (сумму оптимизировать намного проще, чем произведение):

    $\large \begin{array}{rcl} \log P\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) \\ &=& \log \prod_{i=1}^{\ell} \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \frac{1}{1 + \exp^{-y_i\vec{w}^T\vec{x_i}}} \\ &=& - \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}) \end{array}$

    То есть в даном случае принцип максимизации правдоподобия приводит к минимизации выражения

    $\large \mathcal{L_{log}} (X, \vec{y}, \vec{w}) = \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}).$

    Это логистическая функция потерь, просуммированная по всем объектам обучающей выборки.

    Посмотрим на новую фунцию как на функцию от отступа: $L(M) = \log (1 + \exp^{-M})$. Нарисуем ее график, а также график 1/0 функциий потерь (zero-one loss), которая просто штрафует модель на 1 за ошибку на каждом объекте (отступ отрицательный): <img src="https://habrastorage.org/getpro/habr/formulas/279/e2d/d4f/279e2dd4f16fba5aaba3bb74abc2ca6a.svg" alt="$L_{1/0}(M) = [M .

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    <img src="https://habrastorage.org/getpro/habr/formulas/6f7/6f6/465/6f76f64653b4699ea79de2f9844a8d76.svg" alt="$\large \begin{array}{rcl} \mathcal{L_{1/0}} (X, \vec{y}, \vec{w}) &=& \sum_{i=1}^{\ell} [M(\vec{x_i})

    где $\mathcal{L_{1/0}} (X, \vec{y}, \vec{w})$ – попросту число ошибок логистической регрессии с весами $\vec{w}$ на выборке $(X, \vec{y})$.

    То есть уменьшая верхнюю оценку $\mathcal{L_{log}}$ на число ошибок классификации, мы таким образом надеемся уменьшить и само число ошибок.

    $L_2$-регуляризация логистических потерь

    L2-регуляризация логистической регрессии устроена почти так же, как и в случае с гребневой (Ridge регрессией). Вместо функционала $\mathcal{L_{log}} (X, \vec{y}, \vec{w})$ минимизируется следующий:

    $\large J(X, \vec{y}, \vec{w}) = \mathcal{L_{log}} (X, \vec{y}, \vec{w}) + \lambda |\vec{w}|^2$

    В случае логистической регрессии принято введение обратного коэффициента регуляризации $C = \frac{1}{\lambda}$. И тогда решением задачи будет

    $\large \hat{w} = \arg \min_{\vec{w}} J(X, \vec{y}, \vec{w}) = \arg \min_{\vec{w}}\ (C\sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}})+ |\vec{w}|^2)$

    Далее рассмотрим пример, позволяющий интуитивно понять один из смыслов регуляризации.

    Линейная регрессия

    Метод наименьших квадратов

    Рассказ про линейные модели мы начнем с линейной регрессии. В первую очередь, необходимо задать модель зависимости объясняемой переменной $y$ от объясняющих ее факторов, функция зависимости будет линейной: $y = w_0 + \sum_{i=1}^m w_i x_i$. Если мы добавим фиктивную размерность $x_0 = 1$ для каждого наблюдения, тогда линейную форму можно переписать чуть более компактно, записав свободный член $w_0$ под сумму: $y = \sum_{i=0}^m w_i x_i = \vec{w}^T \vec{x}$. Если рассматривать матрицу наблюдения-признаки, у которой в строках находятся примеры из набора данных, то нам необходимо добавить единичную колонку слева. Зададим модель следующим образом:

    $\large \vec y = X \vec w + \epsilon,$

    Можем выписать выражение для каждого конкретного наблюдения

    $\large y_i = \sum_{j=0}^m w_j X_{ij} + \epsilon_i$

    Также на модель накладываются следующие ограничения (иначе это будет какая то другая регрессия, но точно не линейная):

    Оценка $\hat{w}_i$ весов $w_i$ называется линейной, если

    $\large \hat{w}_i = \omega_{1i}y_1 + \omega_{2i}y_2 + \cdots + \omega_{ni}y_n,$

    где $\forall\ k\ \omega_{ki}$ зависит только от наблюдаемых данных $X$ и почти наверняка нелинейно. Так как решением задачи поиска оптимальных весов будет именно линейная оценка, то и модель называется линейной регрессией. Введем еще одно определение. Оценка $\hat{w}_i$ называется несмещенной тогда, когда матожидание оценки равно реальному, но неизвестному значению оцениваемого параметра:

    $\large \mathbb{E}\left[\hat{w}_i\right] = w_i$

    Один из способов вычислить значения параметров модели является метод наименьших квадратов (МНК), который минимизирует среднеквадратичную ошибку между реальным значением зависимой переменной и прогнозом, выданным моделью:

    $\large \begin{array}{rcl}\mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 \\ &=& \frac{1}{2n} \left(\vec{y} - X \vec{w}\right)^T \left(\vec{y} - X \vec{w}\right) \end{array}$

    Для решения данной оптимизационной задачи необходимо вычислить производные по параметрам модели, приравнять их к нулю и решить полученные уравнения относительно $\vec w$ (матричное дифференцирование неподготовленному читателю может показаться затруднительным, попробуйте расписать все через суммы, чтобы убедиться в ответе):

    Шпаргалка по матричным производным

    $\large \begin{array}{rcl} \frac{\partial}{\partial x} x^T a &=& a \\ \frac{\partial}{\partial x} x^T A x &=& \left(A + A^T\right)x \\ \frac{\partial}{\partial A} x^T A y &=& xy^T\\ \frac{\partial}{\partial x} A^{-1} &=& -A^{-1} \frac{\partial A}{\partial x} A^{-1} \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} &=& \frac{\partial}{\partial \vec{w}} \frac{1}{2n} \left( \vec{y}^T \vec{y} -2\vec{y}^T X \vec{w} + \vec{w}^T X^T X \vec{w}\right) \\ &=& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} = 0 &\Leftrightarrow& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) = 0 \\ &\Leftrightarrow& -X^T \vec{y} + X^T X \vec{w} = 0 \\ &\Leftrightarrow& X^T X \vec{w} = X^T \vec{y} \\ &\Leftrightarrow& \vec{w} = \left(X^T X\right)^{-1} X^T \vec{y} \end{array}$

    Итак, имея в виду все определения и условия описанные выше, мы можем утверждать, опираясь на теорему Маркова-Гаусса, что оценка МНК является лучшей оценкой параметров модели, среди всех линейных и несмещенных оценок, то есть обладающей наименьшей дисперсией.

    Метод максимального правдоподобия

    У читателя вполне резонно могли возникнуть вопросы: например, почему мы минимизируем среднеквадратичную ошибку, а не что-то другое. Ведь можно минимизировать среднее абсолютное значение невязки или еще что-то. Единственное, что произойдёт в случае изменения минимизируемого значения, так это то, что мы выйдем из условий теоремы Маркова-Гаусса, и наши оценки перестанут быть лучшими среди линейных и несмещенных.

    Давайте перед тем как продолжить, сделаем лирическое отступление, чтобы проиллюстрировать метод максимального правдоподобия на простом примере.

    Как-то после школы я заметил, что все помнят формулу этилового спирта. Тогда я решил провести эксперимент: помнят ли люди более простую формулу метилового спирта: $CH_3OH$. Мы опросили 400 человек и оказалось, что формулу помнят всего 117 человек. Разумно предположить, что вероятность того, что следующий опрошенный знает формулу метилового спирта – $\frac{117}{400} \approx 0.29%$. Покажем, что такая интуитивно понятная оценка не просто хороша, а еще и является оценкой максимального правдоподобия.

    Разберемся, откуда берется эта оценка, а для этого вспомним определение распределения Бернулли: случайная величина $X$ имеет распределение Бернулли, если она принимает всего два значения ($1$ и $0$ с вероятностями $\theta$ и $1 - \theta$ соответственно) и имеет следующую функцию распределения вероятности:

    $\large p\left(\theta, x\right) = \theta^{x} \left(1 - \theta\right)^\left(1 - x\right), x \in \left\{0, 1\right\}$

    Похоже, это распределение – то, что нам нужно, а параметр распределения $\theta$ и есть та оценка вероятности того, что человек знает формулу метилового спирта. Мы проделали $400$ независимых экспериментов, обозначим их исходы как $\vec{x} = \left(x_1, x_2, \ldots, x_{400}\right)$. Запишем правдоподобие наших данных (наблюдений), то есть вероятность наблюдать 117 реализаций случайной величины $X = 1$ и 283 реализации $X = 0$:

    $\large p(\vec{x} \mid \theta) = \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = \theta^{117} \left(1 - \theta\right)^{283}$

    Далее будем максимизировать это выражение по $\theta$, и чаще всего это делают не с правдоподобием $p(\vec{x} \mid \theta)$, а с его логарифмом (применение монотонного преобразования не изменит решение, но упростит вычисления):

    $\large \log p(\vec{x} \mid \theta) = \log \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = $

    $ \large = \log \theta^{117} \left(1 - \theta\right)^{283} = 117 \log \theta + 283 \log \left(1 - \theta\right)$

    Теперь мы хотим найти такое значение $\theta$, которое максимизирует правдоподобие, для этого мы возьмем производную по $\theta$, приравняем к нулю и решим полученное уравнение:

    $\large \frac{\partial p(\vec{x} \mid \theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left(117 \log \theta + 283 \log \left(1 - \theta\right)\right) = \frac{117}{\theta} - \frac{283}{1 - \theta};$

    $\large \begin{array}{rcl} \frac{117}{\theta} - \frac{283}{1 - \theta} = 0 \Rightarrow \theta = \frac{117}{400} \end{array}.$

    Получается, что наша интуитивная оценка – это и есть оценка максимального правдоподобия. Применим теперь те же рассуждения для задачи линейной регрессии и попробуем выяснить, что лежит за среднеквадратичной ошибкой. Для этого нам придется посмотреть на линейную регрессию с вероятностной точки зрения. Модель, естественно, остается такой же:

    $\large \vec y = X \vec w + \epsilon,$

    но будем теперь считать, что случайные ошибки берутся из центрированного нормального распределения:

    $\large \epsilon_i \sim \mathcal{N}\left(0, \sigma^2\right)$

    Перепишем модель в новом свете:

    $\large \begin{array}{rcl} p\left(y_i \mid X, \vec{w}\right) &=& \sum_{j=1}^m w_j X_{ij} + \mathcal{N}\left(0, \sigma^2\right) \\ &=& \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \end{array}$

    Так как примеры берутся независимо (ошибки не скоррелированы – одно из условий теоремы Маркова-Гаусса), то полное правдоподобие данных будет выглядеть как произведение функций плотности $p\left(y_i\right)$. Рассмотрим логарифм правдоподобия, что позволит нам перейти от произведения к сумме:

    $\large \begin{array}{rcl} \log p\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^n \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& \sum_{i=1}^n \log \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \end{array}$

    Мы хотим найти гипотезу максимального правдоподобия, т.е. нам нужно максимизировать выражение $p\left(\vec{y} \mid X, \vec{w}\right)$, а это то же самое, что и максимизация его логарифма. Обратите внимание, что при максимизации функции по какому-то параметру можно выкинуть все члены, не зависящие от этого параметра:

    $\large \begin{array}{rcl} \hat{w} &=& \arg \max_{w} p\left(\vec{y} \mid X, \vec{w}\right) \\ &=& \arg \max_{w} -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\mathcal{L}\left(X, \vec{y}, \vec{w} \right) \end{array}$

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

    Разложение ошибки на смещение и разброс (Bias-variance decomposition)

    Поговорим немного о свойствах ошибки прогноза линейной регрессии (в принципе эти рассуждения верны для всех алгоритмов машинного обучения). В свете предыдущего пункта мы выяснили, что:

    Тогда ошибка в точке $\vec{x}$ раскладывается следующим образом:

    $\large \begin{array}{rcl} \text{Err}\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\left(\hat{f}\left(\vec{x}\right)\right)^2\right] - 2\mathbb{E}\left[y\hat{f}\left(\vec{x}\right)\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\hat{f}^2\right] - 2\mathbb{E}\left[y\hat{f}\right] \\ \end{array}$

    Для наглядности опустим обозначение аргумента функций. Рассмотрим каждый член по отдельности, два первых вас пишутся легко на странице ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ:

    $\large\begin{array}{rcl}\mathbb{E }\left[y^2\right] &=& \text{Var}\left(y\right) + \mathbb{E}\left[y\right]^2 = \sigma^2 + f^2\ \ \mathbb{E}\left[\hat{f}^2\right] &=& \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{ f}\right]^2 \\\end{array}$

    $\large\begin{array}{rcl}\text{Var }\left(y\right) &=& \mathbb{E}\left[\left(y - \mathbb{E}\left[y\right]\right)^2\right]\\&=&\ mathbb{E}\left[\left(y - f\right)^2\right]\\&=&\mathbb{E}\left[\left(f + \epsilon - f\right)^2\right ] \\ &=& \mathbb{E}\left[\epsilon^2\right] = \sigma^2\end{array}$

    $\large\mathbb{E}[y] = \mathbb{ E}[f + \epsilon] = \mathbb{E}[f] + \mathbb{E}[\epsilon] = f$

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

    $\large\begin{array}{rcl}\mathbb{E }\left[y\hat{f}\right] &=& \mathbb{E}\left[\left(f + \epsilon\right)\hat{f}\right] \\ &=& \mathbb{ E}\left[f\hat{f}\right] + \mathbb{E}\left[\epsilon\hat{f}\right] \\ &=& f\mathbb{E}\left[\hat{ f}\right] + \mathbb{E}\left[\epsilon\right] \mathbb{E}\left[\hat{f}\right] = f\mathbb{E}\left[\hat{f} \right] \end{array}$

    Особенный, немного другой:

    $\large\begin{array}{rcl}\text{Err }\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\ right] \\ &=& \sigma^2 + f^2 + \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{f}\right]^ 2 - 2f\mathbb{E}\left[\hat{f}\right] \\ &=& \left(f - \mathbb{E}\left[\hat{f}\right]\right)^2 + \text{Var}\left(\right{of}\right) + \sigma^2 \\ &=& \text{Bias}\left(\right{of}\right)^2 + \text{Var }\left(\hat{f}\right) + \sigma^2 \end{array}$

    Не то чтобы я собираюсь это сделать, я собираюсь это сделать, я собираюсь это сделать. Для получения дополнительной информации подпишитесь на следующий список $y = f\left(\vec{x}\right) + \epsilon$ file размер:

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Это снежинка, это снежинка, это снежинка Цена на снежинку) снежинка снежинка (снежинка) снежинка, но уменьшение смещения. Если вы хотите получить на лице немного другую улыбку На самом деле белоснежные белоснежные снежинки (витрина).). Если вы не любитель, то сможете получить в руки белоснежные снежинки, белоснежные снежинки.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Видео Маркова-Гаусса, как утверждает раз, МНК-оцека параметров линейной Ни одна из самых лучших в классе несмещенных линейных оценок, то есть с наименьшей дисперсией. Для получения дополнительной информации свяжитесь с нами по адресу https://habrastorage.org/getpro/habr/formulas/7a4/a7d/183/7a4a7d183a691556d2592ebf22e11365.svg» alt=»$g$» data- tex=»inline»> Если вы ищете книгу, вы сможете это сделать по адресу $Was \left(\hat{f}\right) \leq Was\left(g\right)$.

    Регуляризация линейной регрессии

    Это снежинка, это снежинка, снежинка ради ее стабильности, т.е. ради уменьшения дисперсии модели $\text{Var}\left(\hat{f}\right)$. Одним из условий теоремы Маркова-Гаусса является полный столбцовый ранг матрицы $X$. В противном случае решение МНК $\vec{w} = \left(X^T X\right)^{-1} X^T \vec{y}$ не существует, т.к. не будет существовать обратная матрица $\left(X^T X\right)^{-1}.$ Другими словами, матрица $X^T X$ будет сингулярна, или вырожденна. Такая задача называется некорректно поставленной. Задачу нужно скорректировать, а именно, сделать матрицу $X^TX$ невырожденной, или регулярной (именно поэтому этот процесс называется регуляризацией). Чаще в данных мы можем наблюдать так называемую мультиколлинеарность — когда два или несколько признаков сильно коррелированы, в матрице $X$ это проявляется в виде «почти» линейной зависимости столбцов. Например, в задаче прогнозирования цены квартиры по ее параметрам «почти» линейная зависимость будет у признаков «площадь с учетом балкона» и «площадь без учета балкона». Формально для таких данных матрица $X^T X$ будет обратима, но из-за мультиколлинеарности у матрицы $X^T X$ некоторые собственные значения будут близки к нулю, а в обратной матрице $\left(X^T X\right)^{-1}$ появятся экстремально большие собственные значения, т.к. собственные значения обратной матрицы – это $\frac{1}{\lambda_i}$. Итогом такого шатания собственных значений станет нестабильная оценка параметров модели, т.е. добавление нового наблюдения в набор тренировочных данных приведёт к совершенно другому решению. Иллюстрации роста коэффициентов вы найдете в одном из наших прошлых постов. Одним из способов регуляризации является регуляризация Тихонова, которая в общем виде выглядит как добавление нового члена к среднеквадратичной ошибке:

    $\large \begin{array}{rcl} \mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 + \left\|\Gamma \vec{w}\right\|^2\\ \end{array}$

    Часто матрица Тихонова выражается как произведение некоторого числа на единичную матрицу: $\Gamma = \frac{\lambda}{2} E$. В этом случае задача минимизации среднеквадратичной ошибки становится задачей с ограничением на $L_2$ норму. Если продифференцировать новую функцию стоимости по параметрам модели, приравнять полученную функцию к нулю и выразить $\vec{w}$, то мы получим точное решение задачи.

    $\large \begin{array}{rcl} \vec{w} &=& \left(X^T X + \lambda E\right)^{-1} X^T \vec{y} \end{array}$

    Такая регрессия называется гребневой регрессией (ridge regression). А гребнем является как раз диагональная матрица, которую мы прибавляем к матрице $X^T X$, в результате получается гарантированно регулярная матрица.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Такое решение уменьшает дисперсию, но становится смещенным, т.к. минимизируется также и норма вектора параметров, что заставляет решение сдвигаться в сторону нуля. На рисунке ниже на пересечении белых пунктирных линий находится МНК-решение. Голубыми точками обозначены различные решения гребневой регрессии. Видно, что при увеличении параметра регуляризации $\lambda$ решение сдвигается в сторону нуля.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Логистическая регрессия

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

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

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

    Y — бинарный выходной результат (0 или 1)

    X — вектор признаков, используемый для прогнозирования $Y$

    e — число Эйлера

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

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

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    )
    plt.ylabel(r’

    def plot_boundary(clf, X, y, plot_title):
    xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
    np.linspace(-3, 3, 50))
    clf.fit(X, y)
    # plot the decision function for each datapoint on the grid
    Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
    Z = Z.reshape(xx.shape)
    
    image = plt.imshow(Z, interpolation='nearest',
    extent=(xx.min(), xx.max(), yy.min(), yy.max()),
    aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
    contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
    linetypes='--')
    plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
    plt.xticks(())
    plt.yticks(())
    plt.xlabel(r'$$')
    plt.ylabel(r'$$')
    plt.axis([-3, 3, -3, 3])
    plt.colorbar(image)
    plt.title(plot_title, fontsize=12);

    lt;!— math>$inline$x_2$inline

    def plot_boundary(clf, X, y, plot_title):
    xx, yy = np.meshgrid(np.linspace(-3, 3, 50),
    np.linspace(-3, 3, 50))
    clf.fit(X, y)
    # plot the decision function for each datapoint on the grid
    Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())). T)[:, 1]
    Z = Z.reshape(xx.shape)
    
    image = plt.imshow(Z, interpolation='nearest',
    extent=(xx.min(), xx.max(), yy.min(), yy.max()),
    aspect='auto', origin='lower', cmap=plt.cm. PuOr_r)
    contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
    linetypes='--')
    plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm. Paired)
    plt.xticks(())
    plt.yticks(())
    plt.xlabel(r'$$')
    plt.ylabel(r'$$')
    plt.axis([-3, 3, -3, 3])
    plt.colorbar(image)
    plt.title(plot_title, fontsize=12);

    lt;/math —>

    plot_boundary(LogisticRegression(), X, y,
    "Logistic Regression, XOR problem")

    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline

    logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
    ('logit', LogisticRegression())])

    plot_boundary(logit_pipe, X, y,
    "Logistic Regression + quadratic features.  X OR problem")

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Здесь логистическая регрессия все равно строила гиперплоскость, но в 6-мерном пространстве признаков $1, x_1, x_2, x_1^2, x_1x_2$ и $x_2^2$. В проекции на исходное пространство признаков $x_1, x_2$ граница получилась нелинейной.

    На практике полиномиальные признаки действительно помогают, но строить их явно – вычислительно неэффективно. Гораздо быстрее работает SVM с ядровым трюком. При таком подходе в пространстве высокой размерности считается только расстояние между объектами (задаваемое функцией-ядром), а явно плодить комбинаторно большое число признаков не приходится. Про это подробно можно почитать в курсе Евгения Соколова (математика уже серьезная).

    5. Кривые валидации и обучения

    Мы уже получили представление о проверке модели, кросс-валидации и регуляризации.
    Теперь рассмотрим главный вопрос:

    Если качество модели нас не устраивает, что делать?

    • Сделать модель сложнее или упростить?
    • Добавить больше признаков?
    • Или нам просто нужно больше данных для обучения?

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

    Будем работать со знакомыми данными по оттоку клиентов телеком-оператора.

    Импорт библиотек и чтение данных

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV, SGDClassifier
    from sklearn.model_selection import validation_curve
    
    data = pd.read_csv('././data/telecom_churn.csv').drop('State', axis=1)
    data['International plan'] = data['International plan'].map({'Yes': 1, 'No': 0})
    data['Voice mail plan'] = data['Voice mail plan'].map({'Yes': 1, 'No': 0})
    
    y = data['Churn'].astype('int').values
    X = data.drop('Churn', axis=1).values

    Логистическую регрессию будем обучать стохастическим градиентным спуском. Пока объясним это тем, что так быстрее, но далее в программе у нас отдельная статья про это дело. Построим валидационные кривые, показывающие, как качество (ROC AUC) на обучающей и проверочной выборке меняется с изменением параметра регуляризации.

    alphas = np.logspace(-2, 0, 20)
    sgd_logit = SGDClassifier(loss='log', n_jobs=-1, random_state=17)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=2)), 
    ('sgd_logit', sgd_logit)])
    val_train, val_test = validation_curve(logit_pipe, X, y,
    'sgd_logit__alpha', alphas, cv=5,
    scoring='roc_auc')
    
    def plot_with_err(x, data, **kwargs):
    mu, std = data.mean(1), data.std(1)
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)
    
    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha$'); plt.ylabel('ROC AUC')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может «отвлекаться» на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки «сходятся», что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки «сошлись», и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия «настроил один раз – дальше использую 10 раз» может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    А если усложнить модель ещё больше ($alpha=10^{-4}$)?

    Проявляется переобучение – AUC падает как на обучении, так и на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Строя подобные кривые, можно понять, в какую сторону двигаться, и как правильно настроить сложность модели на новых данных.

    Выводы по кривым валидации и обучения

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

    Наглядный пример регуляризации логистической регрессии

    В 1 статье уже приводился пример того, как полиномиальные признаки позволяют линейным моделям строить нелинейные разделяющие поверхности. Покажем это в картинках.

    Посмотрим, как регуляризация влияет на качество классификации на наборе данных по тестированию микрочипов из курса Andrew Ng по машинному обучению.
    Будем использовать логистическую регрессию с полиномиальными признаками и варьировать параметр регуляризации C.
    Сначала посмотрим, как регуляризация влияет на разделяющую границу классификатора, интуитивно распознаем переобучение и недообучение.
    Потом численно установим близкий к оптимальному параметр регуляризации с помощью кросс-валидации (cross-validation) и перебора по сетке (GridSearch).

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
    from sklearn.model_selection import cross_val_score, StratifiedKFold
    from sklearn.model_selection import GridSearchCV

    Загружаем данные с помощью метода read_csv библиотеки pandas. В этом наборе данных для 118 микрочипов (объекты) указаны результаты двух тестов по контролю качества (два числовых признака) и сказано, пустили ли микрочип в производство. Признаки уже центрированы, то есть из всех значений вычтены средние по столбцам. Таким образом, «среднему» микрочипу соответствуют нулевые значения результатов тестов.

    data = pd.read_csv('././data/microchip_tests.txt',
    header=None, names = ('test1','test2','released'))
    # информация о наборе данных
    data.info()

    RangeIndex: 118 entries, 0 to 117
    Data columns (total 3 columns):
    test1 118 non-null float64
    test2 118 non-null float64
    released 118 non-null int64
    dtypes: float64(2), int64(1)
    memory usage: 2.8 KB

    Посмотрим на первые и последние 5 строк.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Сохраним обучающую выборку и метки целевого класса в отдельных массивах NumPy. Отобразим данные. Красный цвет соответствует бракованным чипам, зеленый – нормальным.

    X = data.ix[:,:2].values
    y = data.ix[:,2].values

    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Определяем функцию для отображения разделяющей кривой классификатора

    def plot_boundary(clf, X, y, grid_step=.01, poly_featurizer=None):
    x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
    y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, grid_step),
    np.arange(y_min, y_max, grid_step))
    
    # каждой точке в сетке [x_min, m_max]x[y_min, y_max]
    # ставим в соответствие свой цвет
    Z = clf.predict(poly_featurizer.transform(np.c_[xx.ravel(), yy.ravel()]))
    Z = Z.reshape(xx.shape)
    plt.contour(xx, yy, Z, cmap=plt.cm. Paired)

    Полиномиальными признаками до степени $d$ для двух переменных $x_1$ и $x_2$ мы называем следующие:

    $\large \{x_1^d, x_1^{d-1}x_2, \ldots x_2^d\} = \{x_1^ix_2^j\}_{i+j \leq d, i,j \in \mathbb{N}}$

    Например, для $d=3$ это будут следующие признаки:

    $\large 1, x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3$

    Нарисовав треугольник Пифагора, Вы сообразите, сколько таких признаков будет для $d=4,5.$ и вообще для любого $d$.
    Попросту говоря, таких признаков экспоненциально много, и строить, скажем, для 100 признаков полиномиальные степени 10 может оказаться затратно (а более того, и не нужно).

    Создадим объект sklearn, который добавит в матрицу $X$ полиномиальные признаки вплоть до степени 7 и обучим логистическую регрессию с параметром регуляризации $C = 10^{-2}$. Изобразим разделяющую границу.
    Также проверим долю правильных ответов классификатора на обучающей выборке. Видим, что регуляризация оказалась слишком сильной, и модель «недообучилась». Доля правильных ответов классификатора на обучающей выборке оказалась равной 0.627.

    poly = PolynomialFeatures(degree=7)
    X_poly = poly.fit_transform(X)

    C = 1e-2
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.01, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов. Логит с C=0.01')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Увеличим $C$ до 1. Тем самым мы ослабляем регуляризацию, теперь в решении значения весов логистической регрессии могут оказаться больше (по модулю), чем в прошлом случае. Теперь доля правильных ответов классификатора на обучающей выборке – 0.831.

    C = 1
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=1')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Еще увеличим $C$ – до 10 тысяч. Теперь регуляризации явно недостаточно, и мы наблюдаем переобучение. Можно заметить, что в прошлом случае (при $C$=1 и «гладкой» границе) доля правильных ответов модели на обучающей выборке не намного ниже, чем в 3 случае, зато на новой выборке, можно себе представить, 2 модель сработает намного лучше.
    Доля правильных ответов классификатора на обучающей выборке – 0.873.

    C = 1e4
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=10k')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Чтоб обсудить результаты, перепишем формулу для функционала, который оптимизируется в логистической регрессии, в таком виде:

    $\large J(X,y,w) = \mathcal{L} + \frac{1}{C}||w||^2,$

    • чем больше параметр $C$, тем более сложные зависимости в данных может восстанавливать модель (интуитивно $C$ соответствует «сложности» модели (model capacity))
    • если регуляризация слишком сильная (малые значения $C$), то решением задачи минимизации логистической функции потерь может оказаться то, когда многие веса занулились или стали слишком малыми. Еще говорят, что модель недостаточно «штрафуется» за ошибки (то есть в функционале $J$ «перевешивает» сумма квадратов весов, а ошибка $\mathcal{L}$ может быть относительно большой). В таком случае модель окажется недообученной (1 случай)
    • наоборот, если регуляризация слишком слабая (большие значения $C$), то решением задачи оптимизации может стать вектор $w$ с большими по модулю компонентами. В таком случае больший вклад в оптимизируемый функционал $J$ имеет $\mathcal{L}$ и, вольно выражаясь, модель слишком «боится» ошибиться на объектах обучающей выборки, поэтому окажется переобученной (3 случай)
    • то, какое значение $C$ выбрать, сама логистическая регрессия «не поймет» (или еще говорят «не выучит»), то есть это не может быть определено решением оптимизационной задачи, которой является логистическая регрессия (в отличие от весов $w$). Так же точно, дерево решений не может «само понять», какое ограничение на глубину выбрать (за один процесс обучения). Поэтому $C$ – это гиперпараметр модели, который настраивается на кросс-валидации, как и max_depth для дерева.

    Настройка параметра регуляризации

    Теперь найдем оптимальное (в данном примере) значение параметра регуляризации $C$. Сделать это можно с помощью LogisticRegressionCV – перебора параметров по сетке с последующей кросс-валидацией. Этот класс создан специально для логистической регрессии (для нее известны эффективные алгоритмы перебора параметров), для произвольной модели мы бы использовали GridSearchCV, RandomizedSearchCV или, например, специальные алгоритмы оптимизации гиперпараметров, реализованные в hyperopt.

    
    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)
    
    c_values = np.logspace(-2, 3, 500)
    
    logit_searcher = LogisticRegressionCV(Cs=c_values, cv=skf, verbose=1, n_jobs=-1)
    logit_searcher.fit(X_poly, y)

    Посмотрим, как качество модели (доля правильных ответов на обучающей и валидационной выборках) меняется при изменении гиперпараметра $C$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Выделим участок с «лучшими» значениями C.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Полезные ресурсы

    • Перевод материала этой статьи на английский – Jupyter notebooks в репозитории курса
    • Видеозаписи лекций по мотивам этой статьи: классификация, регрессия
    • Основательный обзор классики машинного обучения и, конечно же, линейных моделей сделан в книге «Deep Learning» (I. Goodfellow, Y. Bengio, A. Courville, 2016);
    • Реализация многих алгоритмов машинного обучения с нуля – репозиторий rushter. Рекомендуем изучить реализацию логистической регрессии;
    • Курс Евгения Соколова по машинному обучению (материалы на GitHub). Хорошая теория, нужна неплохая математическая подготовка;
    • Курс Дмитрия Ефимова на GitHub (англ.). Тоже очень качественные материалы.

    Статья написана в соавторстве с mephistopheies (Павлом Нестеровым). Он же – автор домашнего задания. Авторы домашнего задания в первой сессии курса (февраль-май 2017)– aiho (Ольга Дайховская) и das19 (Юрий Исаков). Благодарю bauchgefuehl (Анастасию Манохину) за редактирование.

    Домашнее задание № 4

    В качестве закрепления изученного материала предлагаем следующее задание: разобраться с тем, как работает TfidfVectorizer и DictVectorizer, обучить и настроить модель линейной регрессии Ridge на данных о публикациях на Хабрахабре и воспроизвести бенчмарк в соревновании. Проверить себя можно отправив ответы в веб-форме (там же найдете и решение).

    Актуальные и обновляемые версии демо-заданий – на английском на сайте курса. Также по подписке на Patreon («Bonus Assignments» tier) доступны расширенные домашние задания по каждой теме (только на англ.)

    Реализация цикла обучения логистической регрессии в Python

    Реализуем цикл обучения логистической регрессии используя Python. В этом нам снова поможет PyTorch. Для начала импортируем все библиотеки которые нам в этом пригодятся:

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import numpy as np
    from sklearn.datasets import make_classification
    from sklearn.metrics import classification_report

    Далее напишем класс реализующий логистическую регрессию. Прошу обратить внимание, что от линейной регрессии, которую мы реализовывали в ряде предыдущих статей, отличает лишь применение сигмоиды и новый метод predict (так как теперь мы решаем задачу классификации).

    class LogisticRegression(nn. Module):
     def __init__(self, input_size):
     super().__init__()
     self.weights = nn. Parameter(torch.randn(input_size, 1))
     self.sigmoid = nn. Sigmoid()
    
     def forward(self, x):
     x = x @ self.weights
     x = self.sigmoid(x)
     return x
    
     def fit(self, X, y, lr=0.01, num_iterations=1000):
     X = torch.from_numpy(X).float()
     y = torch.from_numpy(y).float().view(-1, 1) 
    
     # Инициализируем функцию потерь и оптимизатор
     criterion = nn. BCELoss()
     optimizer = optim. SGD(self.parameters(), lr=lr)
    
     for epoch in range(num_iterations):
     # Зануляем градиенты
     optimizer.zero_grad()
    
     # Получаем предсказания модели и вычисляем функцию потерь
     y_pred = self(X)
     loss = criterion(y_pred, y)
    
     # Обновляем веса
     loss.backward()
     optimizer.step()
     
    
     def predict(self, X):
     X = torch.from_numpy(X).float()
    
     # Получаем предсказания модели и присваиваем метки классов на основе вероятности
     y_pred = self(X)
     y_pred_labels = [1 if i > 0.5 else 0 for i in y_pred.detach().numpy().flatten()]
    
     return y_pred_labels
    

    На этот раз сгенерируем выборку для классификации самостоятельно, используя make_classification из библиотеки scikit-learn. А далее обучим нашу модель и оценим её качество:

    # Генерируем данные
    X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,
     random_state=1, n_clusters_per_class=1)
    
    # Создаем экземпляр класса и обучаем на обучающей выборке
    model = LogisticRegression(X.shape[1])
    model.fit(X, y, lr=0.1, num_iterations=100)
    
    # Прогнозируем метки классов на тестовой выборке
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
    precision recall f1-score support
    
     0 0.85 0.96 0.90 500
     1 0.95 0.83 0.88 500
    
     accuracy 0.89 1000
     macro avg 0.90 0.89 0.89 1000
    weighted avg 0.90 0.89 0.89 1000
    

    Для чистоты эксперимента обучим логистическую регрессию из библиотеки scikit-learn и увидим, что качество полученных моделей примерно одинаково:

    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    model.fit(X, y)
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
     precision recall f1-score support
    
     0 0.90 0.90 0.90 500
     1 0.90 0.90 0.90 500
    
     accuracy 0.90 1000
     macro avg 0.90 0.90 0.90 1000
    weighted avg 0.90 0.90 0.90 1000
    

    Далее давайте визуально оценим как модель принимает свое решение:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Как видим, результатом работы алгоритма выступает линия разделяющая классы. Если бы мы визуализировали модель в процессе обучения градиентным спуском, то увидели бы как эта линия подбирается в процессе оптимизации:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    Плюсы логистической регрессии:

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

    Минусы логистической регрессии:

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

    Логистическая регрессия

    Линейный классификатор

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Мы уже знакомы с линейной регрессией и методом наименьших квадратов. Рассмотрим задачу бинарной классификации, причем метки целевого класса обозначим «+1» (положительные примеры) и «-1» (отрицательные примеры).
    Один из самых простых линейных классификаторов получается на основе регрессии вот таким образом:

    $\large a(\vec{x}) = sign(\vec{w}^Tx),$

    Логистическая регрессия как линейный классификатор

    Логистическая регрессия является частным случаем линейного классификатора, но она обладает хорошим «умением» – прогнозировать вероятность $p_+$ отнесения примера $\vec{x_i}$ к классу «+»:

    $\large p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) $

    Прогнозирование не просто ответа («+1» или «-1»), а именно вероятности отнесения к классу «+1» во многих задачах является очень важным бизнес-требованием. Например, в задаче кредитного скоринга, где традиционно применяется логистическая регрессия, часто прогнозируют вероятность невозврата кредита ($p_+$). Клиентов, обратившихся за кредитом, сортируют по этой предсказанной вероятности (по убыванию), и получается скоркарта — по сути, рейтинг клиентов от плохих к хорошим. Ниже приведен игрушечный пример такой скоркарты.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Банк выбирает для себя порог $p_*$ предсказанной вероятности невозврата кредита (на картинке – $0.15$) и начиная с этого значения уже не выдает кредит. Более того, можно умножить предсказанную вероятность на выданную сумму и получить матожидание потерь с клиента, что тоже будет хорошей бизнес-метрикой (Далее в комментариях специалисты по скорингу могут поправить, но главная суть примерно такая).

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Обозначим $P(X)$ вероятностью происходящего события $X$. Тогда отношение вероятностей $OR(X)$ определяется из $\frac{P(X)}{1-P(X)}$, а это — отношение вероятностей того, произойдет ли событие или не произойдет. Очевидно, что вероятность и отношение шансов содержат одинаковую информацию. Но в то время как $P(X)$ находится в пределах от 0 до 1, $OR(X)$ находится в пределах от 0 до $\infty$.

    Если вычислить логарифм $OR(X)$ (то есть называется логарифм шансов, или логарифм отношения вероятностей), то легко заметить, что $\log{OR(X)} \in \mathbb{R}$. Его-то мы и будем прогнозировать с помощью МНК.

    Посмотрим, как логистическая регрессия будет делать прогноз $p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right)$ (пока считаем, что веса $\vec{w}$ мы как-то получили (т.е. обучили модель), далее разберемся, как именно).

    • Шаг 1. Вычислить значение $w_{0}+w_{1}x_1 + w_{2}x_2 + .  = \vec{w}^T\vec{x}$. (уравнение $\vec{w}^T\vec{x} = 0$ задает гиперплоскость, разделяющую примеры на 2 класса);

    • Шаг 2. Вычислить логарифм отношения шансов: $ \log(OR_{+}) = \vec{w}^T\vec{x}$.

    • Шаг 3. Имея прогноз шансов на отнесение к классу «+» – $OR_{+}$, вычислить $p_{+}$ с помощью простой зависимости:

    $\large p_{+} = \frac{OR_{+}}{1 + OR_{+}} = \frac{\exp^{\vec{w}^T\vec{x}}}{1 + \exp^{\vec{w}^T\vec{x}}} = \frac{1}{1 + \exp^{-\vec{w}^T\vec{x}}} = \sigma(\vec{w}^T\vec{x})$

    В правой части мы получили как раз сигмоид-функцию.

    Итак, логистическая регрессия прогнозирует вероятность отнесения примера к классу «+» (при условии, что мы знаем его признаки и веса модели) как сигмоид-преобразование линейной комбинации вектора весов модели и вектора признаков примера:

    $\large p_+(x_i) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i}).  $

    Следующий вопрос: как модель обучается? Тут мы опять обращаемся к принципу максимального правдоподобия.

    Принцип максимального правдоподобия и логистическая регрессия

    Теперь посмотрим, как из принципа максимального правдоподобия получается оптимизационная задача, которую решает логистическая регрессия, а именно, – минимизация логистической функции потерь.
    Только что мы увидели, что логистическая регрессия моделирует вероятность отнесения примера к классу «+» как

    $\large p_+(\vec{x_i}) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i})$

    Тогда для класса «-» аналогичная вероятность:

    $\large p_-(\vec{x_i}) = P\left(y_i = -1 \mid \vec{x_i}, \vec{w}\right) = 1 - \sigma(\vec{w}^T\vec{x_i}) = \sigma(-\vec{w}^T\vec{x_i}) $

    Оба этих выражения можно ловко объединить в одно (следите за моими руками – не обманывают ли вас):

    $\large P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) = \sigma(y_i\vec{w}^T\vec{x_i})$

    Выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ называется отступом (margin) классификации на объекте $\vec{x_i}$ (не путать с зазором (тоже margin), про который чаще всего говорят в контексте SVM). Если он неотрицателен, модель не ошибается на объекте $\vec{x_i}$, если же отрицателен – значит, класс для $\vec{x_i}$ спрогнозирован неправильно.
    Заметим, что отступ определен для объектов именно обучающей выборки, для которых известны реальные метки целевого класса $y_i$.

    Чтобы понять, почему это мы сделали такие выводы, обратимся к геометрической интерпретации линейного классификатора. Подробно про это можно почитать в материалах Евгения Соколова.

    Рекомендую решить почти классическую задачу из начального курса линейной алгебры: найти расстояние от точки с радиус-вектором $\vec{x_A}$ до плоскости, которая задается уравнением $\vec{w}^T\vec{x} = 0.$

    $\large \rho(\vec{x_A}, \vec{w}^T\vec{x} = 0) = \frac{\vec{w}^T\vec{x_A}}{||\vec{w}||}$

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Когда получим (или посмотрим) ответ, то поймем, что чем больше по модулю выражение $\vec{w}^T\vec{x_i}$, тем дальше точка $\vec{x_i}$ находится от плоскости $\vec{w}^T\vec{x} = 0.$

    Значит, выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ – это своего рода «уверенность» модели в классификации объекта $\vec{x_i}$:

    • если отступ большой (по модулю) и положительный, это значит, что метка класса поставлена правильно, а объект находится далеко от разделяющей гиперплоскости (такой объект классифицируется уверенно). На рисунке – $x_3$.
    • если отступ большой (по модулю) и отрицательный, значит метка класса поставлена неправильно, а объект находится далеко от разделяющей гиперплоскости (скорее всего такой объект – аномалия, например, его метка в обучающей выборке поставлена неправильно). На рисунке – $x_1$.
    • если отступ малый (по модулю), то объект находится близко к разделяющей гиперплоскости, а знак отступа определяет, правильно ли объект классифицирован. На рисунке – $x_2$ и $x_4$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Теперь распишем правдоподобие выборки, а именно, вероятность наблюдать данный вектор $\vec{y}$ у выборки $X$. Делаем сильное предположение: объекты приходят независимо, из одного распределения (i.i.d.). Тогда

    $\large P\left(\vec{y} \mid X, \vec{w}\right) = \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right),$

    где $\ell$ – длина выборки $X$ (число строк).

    Как водится, возьмем логарифм данного выражения (сумму оптимизировать намного проще, чем произведение):

    $\large \begin{array}{rcl} \log P\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) \\ &=& \log \prod_{i=1}^{\ell} \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \frac{1}{1 + \exp^{-y_i\vec{w}^T\vec{x_i}}} \\ &=& - \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}) \end{array}$

    То есть в даном случае принцип максимизации правдоподобия приводит к минимизации выражения

    $\large \mathcal{L_{log}} (X, \vec{y}, \vec{w}) = \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}).$

    Это логистическая функция потерь, просуммированная по всем объектам обучающей выборки.

    Посмотрим на новую фунцию как на функцию от отступа: $L(M) = \log (1 + \exp^{-M})$. Нарисуем ее график, а также график 1/0 функциий потерь (zero-one loss), которая просто штрафует модель на 1 за ошибку на каждом объекте (отступ отрицательный): <img src="https://habrastorage.org/getpro/habr/formulas/279/e2d/d4f/279e2dd4f16fba5aaba3bb74abc2ca6a.svg" alt="$L_{1/0}(M) = [M .

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    <img src="https://habrastorage.org/getpro/habr/formulas/6f7/6f6/465/6f76f64653b4699ea79de2f9844a8d76.svg" alt="$\large \begin{array}{rcl} \mathcal{L_{1/0}} (X, \vec{y}, \vec{w}) &=& \sum_{i=1}^{\ell} [M(\vec{x_i})

    где $\mathcal{L_{1/0}} (X, \vec{y}, \vec{w})$ – попросту число ошибок логистической регрессии с весами $\vec{w}$ на выборке $(X, \vec{y})$.

    То есть уменьшая верхнюю оценку $\mathcal{L_{log}}$ на число ошибок классификации, мы таким образом надеемся уменьшить и само число ошибок.

    $L_2$-регуляризация логистических потерь

    L2-регуляризация логистической регрессии устроена почти так же, как и в случае с гребневой (Ridge регрессией). Вместо функционала $\mathcal{L_{log}} (X, \vec{y}, \vec{w})$ минимизируется следующий:

    $\large J(X, \vec{y}, \vec{w}) = \mathcal{L_{log}} (X, \vec{y}, \vec{w}) + \lambda |\vec{w}|^2$

    В случае логистической регрессии принято введение обратного коэффициента регуляризации $C = \frac{1}{\lambda}$. И тогда решением задачи будет

    $\large \hat{w} = \arg \min_{\vec{w}} J(X, \vec{y}, \vec{w}) = \arg \min_{\vec{w}}\ (C\sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}})+ |\vec{w}|^2)$

    Далее рассмотрим пример, позволяющий интуитивно понять один из смыслов регуляризации.

    Линейная регрессия

    Метод наименьших квадратов

    Рассказ про линейные модели мы начнем с линейной регрессии. В первую очередь, необходимо задать модель зависимости объясняемой переменной $y$ от объясняющих ее факторов, функция зависимости будет линейной: $y = w_0 + \sum_{i=1}^m w_i x_i$. Если мы добавим фиктивную размерность $x_0 = 1$ для каждого наблюдения, тогда линейную форму можно переписать чуть более компактно, записав свободный член $w_0$ под сумму: $y = \sum_{i=0}^m w_i x_i = \vec{w}^T \vec{x}$. Если рассматривать матрицу наблюдения-признаки, у которой в строках находятся примеры из набора данных, то нам необходимо добавить единичную колонку слева. Зададим модель следующим образом:

    $\large \vec y = X \vec w + \epsilon,$

    Можем выписать выражение для каждого конкретного наблюдения

    $\large y_i = \sum_{j=0}^m w_j X_{ij} + \epsilon_i$

    Также на модель накладываются следующие ограничения (иначе это будет какая то другая регрессия, но точно не линейная):

    Оценка $\hat{w}_i$ весов $w_i$ называется линейной, если

    $\large \hat{w}_i = \omega_{1i}y_1 + \omega_{2i}y_2 + \cdots + \omega_{ni}y_n,$

    где $\forall\ k\ \omega_{ki}$ зависит только от наблюдаемых данных $X$ и почти наверняка нелинейно. Так как решением задачи поиска оптимальных весов будет именно линейная оценка, то и модель называется линейной регрессией. Введем еще одно определение. Оценка $\hat{w}_i$ называется несмещенной тогда, когда матожидание оценки равно реальному, но неизвестному значению оцениваемого параметра:

    $\large \mathbb{E}\left[\hat{w}_i\right] = w_i$

    Один из способов вычислить значения параметров модели является метод наименьших квадратов (МНК), который минимизирует среднеквадратичную ошибку между реальным значением зависимой переменной и прогнозом, выданным моделью:

    $\large \begin{array}{rcl}\mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 \\ &=& \frac{1}{2n} \left(\vec{y} - X \vec{w}\right)^T \left(\vec{y} - X \vec{w}\right) \end{array}$

    Для решения данной оптимизационной задачи необходимо вычислить производные по параметрам модели, приравнять их к нулю и решить полученные уравнения относительно $\vec w$ (матричное дифференцирование неподготовленному читателю может показаться затруднительным, попробуйте расписать все через суммы, чтобы убедиться в ответе):

    Шпаргалка по матричным производным

    $\large \begin{array}{rcl} \frac{\partial}{\partial x} x^T a &=& a \\ \frac{\partial}{\partial x} x^T A x &=& \left(A + A^T\right)x \\ \frac{\partial}{\partial A} x^T A y &=& xy^T\\ \frac{\partial}{\partial x} A^{-1} &=& -A^{-1} \frac{\partial A}{\partial x} A^{-1} \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} &=& \frac{\partial}{\partial \vec{w}} \frac{1}{2n} \left( \vec{y}^T \vec{y} -2\vec{y}^T X \vec{w} + \vec{w}^T X^T X \vec{w}\right) \\ &=& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} = 0 &\Leftrightarrow& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) = 0 \\ &\Leftrightarrow& -X^T \vec{y} + X^T X \vec{w} = 0 \\ &\Leftrightarrow& X^T X \vec{w} = X^T \vec{y} \\ &\Leftrightarrow& \vec{w} = \left(X^T X\right)^{-1} X^T \vec{y} \end{array}$

    Итак, имея в виду все определения и условия описанные выше, мы можем утверждать, опираясь на теорему Маркова-Гаусса, что оценка МНК является лучшей оценкой параметров модели, среди всех линейных и несмещенных оценок, то есть обладающей наименьшей дисперсией.

    Метод максимального правдоподобия

    У читателя вполне резонно могли возникнуть вопросы: например, почему мы минимизируем среднеквадратичную ошибку, а не что-то другое. Ведь можно минимизировать среднее абсолютное значение невязки или еще что-то. Единственное, что произойдёт в случае изменения минимизируемого значения, так это то, что мы выйдем из условий теоремы Маркова-Гаусса, и наши оценки перестанут быть лучшими среди линейных и несмещенных.

    Давайте перед тем как продолжить, сделаем лирическое отступление, чтобы проиллюстрировать метод максимального правдоподобия на простом примере.

    Как-то после школы я заметил, что все помнят формулу этилового спирта. Тогда я решил провести эксперимент: помнят ли люди более простую формулу метилового спирта: $CH_3OH$. Мы опросили 400 человек и оказалось, что формулу помнят всего 117 человек. Разумно предположить, что вероятность того, что следующий опрошенный знает формулу метилового спирта – $\frac{117}{400} \approx 0.29%$. Покажем, что такая интуитивно понятная оценка не просто хороша, а еще и является оценкой максимального правдоподобия.

    Разберемся, откуда берется эта оценка, а для этого вспомним определение распределения Бернулли: случайная величина $X$ имеет распределение Бернулли, если она принимает всего два значения ($1$ и $0$ с вероятностями $\theta$ и $1 - \theta$ соответственно) и имеет следующую функцию распределения вероятности:

    $\large p\left(\theta, x\right) = \theta^{x} \left(1 - \theta\right)^\left(1 - x\right), x \in \left\{0, 1\right\}$

    Похоже, это распределение – то, что нам нужно, а параметр распределения $\theta$ и есть та оценка вероятности того, что человек знает формулу метилового спирта. Мы проделали $400$ независимых экспериментов, обозначим их исходы как $\vec{x} = \left(x_1, x_2, \ldots, x_{400}\right)$. Запишем правдоподобие наших данных (наблюдений), то есть вероятность наблюдать 117 реализаций случайной величины $X = 1$ и 283 реализации $X = 0$:

    $\large p(\vec{x} \mid \theta) = \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = \theta^{117} \left(1 - \theta\right)^{283}$

    Далее будем максимизировать это выражение по $\theta$, и чаще всего это делают не с правдоподобием $p(\vec{x} \mid \theta)$, а с его логарифмом (применение монотонного преобразования не изменит решение, но упростит вычисления):

    $\large \log p(\vec{x} \mid \theta) = \log \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = $

    $ \large = \log \theta^{117} \left(1 - \theta\right)^{283} = 117 \log \theta + 283 \log \left(1 - \theta\right)$

    Теперь мы хотим найти такое значение $\theta$, которое максимизирует правдоподобие, для этого мы возьмем производную по $\theta$, приравняем к нулю и решим полученное уравнение:

    $\large \frac{\partial p(\vec{x} \mid \theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left(117 \log \theta + 283 \log \left(1 - \theta\right)\right) = \frac{117}{\theta} - \frac{283}{1 - \theta};$

    $\large \begin{array}{rcl} \frac{117}{\theta} - \frac{283}{1 - \theta} = 0 \Rightarrow \theta = \frac{117}{400} \end{array}.$

    Получается, что наша интуитивная оценка – это и есть оценка максимального правдоподобия. Применим теперь те же рассуждения для задачи линейной регрессии и попробуем выяснить, что лежит за среднеквадратичной ошибкой. Для этого нам придется посмотреть на линейную регрессию с вероятностной точки зрения. Модель, естественно, остается такой же:

    $\large \vec y = X \vec w + \epsilon,$

    но будем теперь считать, что случайные ошибки берутся из центрированного нормального распределения:

    $\large \epsilon_i \sim \mathcal{N}\left(0, \sigma^2\right)$

    Перепишем модель в новом свете:

    $\large \begin{array}{rcl} p\left(y_i \mid X, \vec{w}\right) &=& \sum_{j=1}^m w_j X_{ij} + \mathcal{N}\left(0, \sigma^2\right) \\ &=& \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \end{array}$

    Так как примеры берутся независимо (ошибки не скоррелированы – одно из условий теоремы Маркова-Гаусса), то полное правдоподобие данных будет выглядеть как произведение функций плотности $p\left(y_i\right)$. Рассмотрим логарифм правдоподобия, что позволит нам перейти от произведения к сумме:

    $\large \begin{array}{rcl} \log p\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^n \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& \sum_{i=1}^n \log \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \end{array}$

    Мы хотим найти гипотезу максимального правдоподобия, т.е. нам нужно максимизировать выражение $p\left(\vec{y} \mid X, \vec{w}\right)$, а это то же самое, что и максимизация его логарифма. Обратите внимание, что при максимизации функции по какому-то параметру можно выкинуть все члены, не зависящие от этого параметра:

    $\large \begin{array}{rcl} \hat{w} &=& \arg \max_{w} p\left(\vec{y} \mid X, \vec{w}\right) \\ &=& \arg \max_{w} -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\mathcal{L}\left(X, \vec{y}, \vec{w} \right) \end{array}$

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

    Разложение ошибки на смещение и разброс (Bias-variance decomposition)

    Поговорим немного о свойствах ошибки прогноза линейной регрессии (в принципе эти рассуждения верны для всех алгоритмов машинного обучения). В свете предыдущего пункта мы выяснили, что:

    Тогда ошибка в точке $\vec{x}$ раскладывается следующим образом:

    $\large \begin{array}{rcl} \text{Err}\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\left(\hat{f}\left(\vec{x}\right)\right)^2\right] - 2\mathbb{E}\left[y\hat{f}\left(\vec{x}\right)\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\hat{f}^2\right] - 2\mathbb{E}\left[y\hat{f}\right] \\ \end{array}$

    Для наглядности опустим обозначение аргумента функций. Рассмотрим каждый член по отдельности, два первых вас пишутся легко на странице ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ:

    $\large\begin{array}{rcl}\mathbb{E }\left[y^2\right] &=& \text{Var}\left(y\right) + \mathbb{E}\left[y\right]^2 = \sigma^2 + f^2\ \ \mathbb{E}\left[\hat{f}^2\right] &=& \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{ f}\right]^2 \\\end{array}$

    $\large\begin{array}{rcl}\text{Var }\left(y\right) &=& \mathbb{E}\left[\left(y - \mathbb{E}\left[y\right]\right)^2\right]\\&=&\ mathbb{E}\left[\left(y - f\right)^2\right]\\&=&\mathbb{E}\left[\left(f + \epsilon - f\right)^2\right ] \\ &=& \mathbb{E}\left[\epsilon^2\right] = \sigma^2\end{array}$

    $\large\mathbb{E}[y] = \mathbb{ E}[f + \epsilon] = \mathbb{E}[f] + \mathbb{E}[\epsilon] = f$

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

    $\large\begin{array}{rcl}\mathbb{E }\left[y\hat{f}\right] &=& \mathbb{E}\left[\left(f + \epsilon\right)\hat{f}\right] \\ &=& \mathbb{ E}\left[f\hat{f}\right] + \mathbb{E}\left[\epsilon\hat{f}\right] \\ &=& f\mathbb{E}\left[\hat{ f}\right] + \mathbb{E}\left[\epsilon\right] \mathbb{E}\left[\hat{f}\right] = f\mathbb{E}\left[\hat{f} \right] \end{array}$

    Особенный, немного другой:

    $\large\begin{array}{rcl}\text{Err }\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\ right] \\ &=& \sigma^2 + f^2 + \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{f}\right]^ 2 - 2f\mathbb{E}\left[\hat{f}\right] \\ &=& \left(f - \mathbb{E}\left[\hat{f}\right]\right)^2 + \text{Var}\left(\right{of}\right) + \sigma^2 \\ &=& \text{Bias}\left(\right{of}\right)^2 + \text{Var }\left(\hat{f}\right) + \sigma^2 \end{array}$

    Не то чтобы я собираюсь это сделать, я собираюсь это сделать, я собираюсь это сделать. Для получения дополнительной информации подпишитесь на следующий список $y = f\left(\vec{x}\right) + \epsilon$ file размер:

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Это снежинка, это снежинка, это снежинка Цена на снежинку) снежинка снежинка (снежинка) снежинка, но уменьшение смещения. Если вы хотите получить на лице немного другую улыбку На самом деле белоснежные белоснежные снежинки (витрина).). Если вы не любитель, то сможете получить в руки белоснежные снежинки, белоснежные снежинки.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Видео Маркова-Гаусса, как утверждает раз, МНК-оцека параметров линейной Ни одна из самых лучших в классе несмещенных линейных оценок, то есть с наименьшей дисперсией. Для получения дополнительной информации свяжитесь с нами по адресу https://habrastorage.org/getpro/habr/formulas/7a4/a7d/183/7a4a7d183a691556d2592ebf22e11365.svg» alt=»$g$» data- tex=»inline»> Если вы ищете книгу, вы сможете сделать это по адресу $Was\ left(\hat{f}\right) \leq Was\left(g\right)$.

    Регуляризация Линейной Регрессии

    Это снежинка, это снежинка, снежинка ради ее стабильности, т.е. ради уменьшения дисперсии модели $\text{Var}\left(\hat{f}\right)$. Одним из условий теоремы Маркова-Гаусса является полный столбцовый ранг матрицы $X$. В противном случае решение МНК $\vec{w} = \left(X^T X\right)^{-1} X^T \vec{y}$ не существует, т.к. не будет существовать обратная матрица $\left(X^T X\right)^{-1}.$ Другими словами, матрица $X^T X$ будет сингулярна, или вырожденна. Такая задача называется некорректно поставленной. Задачу нужно скорректировать, а именно, сделать матрицу $X^TX$ невырожденной, или регулярной (именно поэтому этот процесс называется регуляризацией). Чаще в данных мы можем наблюдать так называемую мультиколлинеарность — когда два или несколько признаков сильно коррелированы, в матрице $X$ это проявляется в виде «почти» линейной зависимости столбцов. Например, в задаче прогнозирования цены квартиры по ее параметрам «почти» линейная зависимость будет у признаков «площадь с учетом балкона» и «площадь без учета балкона». Формально для таких данных матрица $X^T X$ будет обратима, но из-за мультиколлинеарности у матрицы $X^T X$ некоторые собственные значения будут близки к нулю, а в обратной матрице $\left(X^T X\right)^{-1}$ появятся экстремально большие собственные значения, т.к. собственные значения обратной матрицы – это $\frac{1}{\lambda_i}$. Итогом такого шатания собственных значений станет нестабильная оценка параметров модели, т.е. добавление нового наблюдения в набор тренировочных данных приведёт к совершенно другому решению. Иллюстрации роста коэффициентов вы найдете в одном из наших прошлых постов. Одним из способов регуляризации является регуляризация Тихонова, которая в общем виде выглядит как добавление нового члена к среднеквадратичной ошибке:

    $\large \begin{array}{rcl} \mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 + \left\|\Gamma \vec{w}\right\|^2\\ \end{array}$

    Часто матрица Тихонова выражается как произведение некоторого числа на единичную матрицу: $\Gamma = \frac{\lambda}{2} E$. В этом случае задача минимизации среднеквадратичной ошибки становится задачей с ограничением на $L_2$ норму. Если продифференцировать новую функцию стоимости по параметрам модели, приравнять полученную функцию к нулю и выразить $\vec{w}$, то мы получим точное решение задачи.

    $\large \begin{array}{rcl} \vec{w} &=& \left(X^T X + \lambda E\right)^{-1} X^T \vec{y} \end{array}$

    Такая регрессия называется гребневой регрессией (ridge regression). А гребнем является как раз диагональная матрица, которую мы прибавляем к матрице $X^T X$, в результате получается гарантированно регулярная матрица.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Такое решение уменьшает дисперсию, но становится смещенным, т.к. минимизируется также и норма вектора параметров, что заставляет решение сдвигаться в сторону нуля. На рисунке ниже на пересечении белых пунктирных линий находится МНК-решение. Голубыми точками обозначены различные решения гребневой регрессии. Видно, что при увеличении параметра регуляризации $\lambda$ решение сдвигается в сторону нуля.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Логистическая регрессия

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

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

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

    Y — бинарный выходной результат (0 или 1)

    X — вектор признаков, используемый для прогнозирования $Y$

    e — число Эйлера

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

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

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    )
    plt.axis([-3, 3, -3, 3])
    plt.colorbar(image)
    plt.title(plot_title, fontsize=12);

    plot_boundary(LogisticRegression(), X, y,
    "Logistic Regression, XOR problem")

    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline

    logit_pipe = Pipeline([('poly', PolynomialFeatures(degree=2)), 
    ('logit', LogisticRegression())])

    plot_boundary(logit_pipe, X, y,
    "Logistic Regression + quadratic features.  X OR problem")

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Здесь логистическая регрессия все равно строила гиперплоскость, но в 6-мерном пространстве признаков $1, x_1, x_2, x_1^2, x_1x_2$ и $x_2^2$. В проекции на исходное пространство признаков $x_1, x_2$ граница получилась нелинейной.

    На практике полиномиальные признаки действительно помогают, но строить их явно – вычислительно неэффективно. Гораздо быстрее работает SVM с ядровым трюком. При таком подходе в пространстве высокой размерности считается только расстояние между объектами (задаваемое функцией-ядром), а явно плодить комбинаторно большое число признаков не приходится. Про это подробно можно почитать в курсе Евгения Соколова (математика уже серьезная).

    5. Кривые валидации и обучения

    Мы уже получили представление о проверке модели, кросс-валидации и регуляризации.
    Теперь рассмотрим главный вопрос:

    Если качество модели нас не устраивает, что делать?

    • Сделать модель сложнее или упростить?
    • Добавить больше признаков?
    • Или нам просто нужно больше данных для обучения?

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

    Будем работать со знакомыми данными по оттоку клиентов телеком-оператора.

    Импорт библиотек и чтение данных

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV, SGDClassifier
    from sklearn.model_selection import validation_curve
    
    data = pd.read_csv('././data/telecom_churn.csv').drop('State', axis=1)
    data['International plan'] = data['International plan'].map({'Yes': 1, 'No': 0})
    data['Voice mail plan'] = data['Voice mail plan'].map({'Yes': 1, 'No': 0})
    
    y = data['Churn'].astype('int').values
    X = data.drop('Churn', axis=1).values

    Логистическую регрессию будем обучать стохастическим градиентным спуском. Пока объясним это тем, что так быстрее, но далее в программе у нас отдельная статья про это дело. Построим валидационные кривые, показывающие, как качество (ROC AUC) на обучающей и проверочной выборке меняется с изменением параметра регуляризации.

    alphas = np.logspace(-2, 0, 20)
    sgd_logit = SGDClassifier(loss='log', n_jobs=-1, random_state=17)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=2)), 
    ('sgd_logit', sgd_logit)])
    val_train, val_test = validation_curve(logit_pipe, X, y,
    'sgd_logit__alpha', alphas, cv=5,
    scoring='roc_auc')
    
    def plot_with_err(x, data, **kwargs):
    mu, std = data.mean(1), data.std(1)
    lines = plt.plot(x, mu, '-', **kwargs)
    plt.fill_between(x, mu - std, mu + std, edgecolor='none',
    facecolor=lines[0].get_color(), alpha=0.2)
    
    plot_with_err(alphas, val_train, label='training scores')
    plot_with_err(alphas, val_test, label='validation scores')
    plt.xlabel(r'$\alpha$'); plt.ylabel('ROC AUC')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Тенденция видна сразу, и она очень часто встречается.

    • Для простых моделей тренировочная и валидационная ошибка находятся где-то рядом, и они велики. Это говорит о том, что модель недообучилась: то есть она не имеет достаточное кол-во параметров.

    • Для сильно усложненных моделей тренировочная и валидационная ошибки значительно отличаются. Это можно объяснить переобучением: когда параметров слишком много либо не хватает регуляризации, алгоритм может «отвлекаться» на шум в данных и упускать основной тренд.

    Сколько нужно данных?

    Известно, что чем больше данных использует модель, тем лучше. Но как нам понять в конкретной ситуации, помогут ли новые данные? Скажем, целесообразно ли нам потратить N\$ на труд асессоров, чтобы увеличить выборку вдвое?

    Поскольку новых данных пока может и не быть, разумно поварьировать размер имеющейся обучающей выборки и посмотреть, как качество решения задачи зависит от объема данных, на котором мы обучали модель. Так получаются кривые обучения (learning curves).

    Идея простая: мы отображаем ошибку как функцию от количества примеров, используемых для обучения. При этом параметры модели фиксируются заранее.

    Давайте посмотрим, что мы получим для линейной модели. Коэффициент регуляризации выставим большим.

    from sklearn.model_selection import learning_curve
    
    def plot_learning_curve(degree=2, alpha=0.01):
    train_sizes = np.linspace(0.05, 1, 20)
    logit_pipe = Pipeline([('scaler', StandardScaler()), ('poly', PolynomialFeatures(degree=degree)), 
    ('sgd_logit', SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha))])
    N_train, val_train, val_test = learning_curve(logit_pipe,
    X, y, train_sizes=train_sizes, cv=5,
    scoring='roc_auc')
    plot_with_err(N_train, val_train, label='training scores')
    plot_with_err(N_train, val_test, label='validation scores')
    plt.xlabel('Training Set Size'); plt.ylabel('AUC')
    plt.legend()
    
    plot_learning_curve(degree=2, alpha=10)

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Типичная ситуация: для небольшого объема данных ошибки на обучающей выборке и в процессе кросс-валидации довольно сильно отличаются, что указывает на переобучение. Для той же модели, но с большим объемом данных ошибки «сходятся», что указывается на недообучение.

    Если добавить еще данные, ошибка на обучающей выборке не будет расти, но с другой стороны, ошибка на тестовых данных не будет уменьшаться.

    Получается, ошибки «сошлись», и добавление новых данных не поможет. Собственно, это случай – самый интересный для бизнеса. Возможна ситуация, когда мы увеличиваем выборку в 10 раз. Но если не менять сложность модели, это может и не помочь. То есть стратегия «настроил один раз – дальше использую 10 раз» может и не работать.

    Что будет, если изменить коэффициент регуляризации (уменьшить до 0.05)?

    Видим хорошую тенденцию – кривые постепенно сходятся, и если дальше двигаться направо (добавлять в модель данные), можно еще повысить качество на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    А если усложнить модель ещё больше ($alpha=10^{-4}$)?

    Проявляется переобучение – AUC падает как на обучении, так и на валидации.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Строя подобные кривые, можно понять, в какую сторону двигаться, и как правильно настроить сложность модели на новых данных.

    Выводы по кривым валидации и обучения

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

    Наглядный пример регуляризации логистической регрессии

    В 1 статье уже приводился пример того, как полиномиальные признаки позволяют линейным моделям строить нелинейные разделяющие поверхности. Покажем это в картинках.

    Посмотрим, как регуляризация влияет на качество классификации на наборе данных по тестированию микрочипов из курса Andrew Ng по машинному обучению.
    Будем использовать логистическую регрессию с полиномиальными признаками и варьировать параметр регуляризации C.
    Сначала посмотрим, как регуляризация влияет на разделяющую границу классификатора, интуитивно распознаем переобучение и недообучение.
    Потом численно установим близкий к оптимальному параметр регуляризации с помощью кросс-валидации (cross-validation) и перебора по сетке (GridSearch).

    from __future__ import division, print_function
    # отключим всякие предупреждения Anaconda
    import warnings
    warnings.filterwarnings('ignore')
    %matplotlib inline
    from matplotlib import pyplot as plt
    import seaborn as sns
    
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
    from sklearn.model_selection import cross_val_score, StratifiedKFold
    from sklearn.model_selection import GridSearchCV

    Загружаем данные с помощью метода read_csv библиотеки pandas. В этом наборе данных для 118 микрочипов (объекты) указаны результаты двух тестов по контролю качества (два числовых признака) и сказано, пустили ли микрочип в производство. Признаки уже центрированы, то есть из всех значений вычтены средние по столбцам. Таким образом, «среднему» микрочипу соответствуют нулевые значения результатов тестов.

    data = pd.read_csv('././data/microchip_tests.txt',
    header=None, names = ('test1','test2','released'))
    # информация о наборе данных
    data.info()

    RangeIndex: 118 entries, 0 to 117
    Data columns (total 3 columns):
    test1 118 non-null float64
    test2 118 non-null float64
    released 118 non-null int64
    dtypes: float64(2), int64(1)
    memory usage: 2.8 KB

    Посмотрим на первые и последние 5 строк.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Сохраним обучающую выборку и метки целевого класса в отдельных массивах NumPy. Отобразим данные. Красный цвет соответствует бракованным чипам, зеленый – нормальным.

    X = data.ix[:,:2].values
    y = data.ix[:,2].values

    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов')
    plt.legend();

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Определяем функцию для отображения разделяющей кривой классификатора

    def plot_boundary(clf, X, y, grid_step=.01, poly_featurizer=None):
    x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
    y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, grid_step),
    np.arange(y_min, y_max, grid_step))
    
    # каждой точке в сетке [x_min, m_max]x[y_min, y_max]
    # ставим в соответствие свой цвет
    Z = clf.predict(poly_featurizer.transform(np.c_[xx.ravel(), yy.ravel()]))
    Z = Z.reshape(xx.shape)
    plt.contour(xx, yy, Z, cmap=plt.cm. Paired)

    Полиномиальными признаками до степени $d$ для двух переменных $x_1$ и $x_2$ мы называем следующие:

    $\large \{x_1^d, x_1^{d-1}x_2, \ldots x_2^d\} = \{x_1^ix_2^j\}_{i+j \leq d, i,j \in \mathbb{N}}$

    Например, для $d=3$ это будут следующие признаки:

    $\large 1, x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3$

    Нарисовав треугольник Пифагора, Вы сообразите, сколько таких признаков будет для $d=4,5.$ и вообще для любого $d$.
    Попросту говоря, таких признаков экспоненциально много, и строить, скажем, для 100 признаков полиномиальные степени 10 может оказаться затратно (а более того, и не нужно).

    Создадим объект sklearn, который добавит в матрицу $X$ полиномиальные признаки вплоть до степени 7 и обучим логистическую регрессию с параметром регуляризации $C = 10^{-2}$. Изобразим разделяющую границу.
    Также проверим долю правильных ответов классификатора на обучающей выборке. Видим, что регуляризация оказалась слишком сильной, и модель «недообучилась». Доля правильных ответов классификатора на обучающей выборке оказалась равной 0.627.

    poly = PolynomialFeatures(degree=7)
    X_poly = poly.fit_transform(X)

    C = 1e-2
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.01, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=0.01')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Увеличим $C$ до 1. Тем самым мы ослабляем регуляризацию, теперь в решении значения весов логистической регрессии могут оказаться больше (по модулю), чем в прошлом случае. Теперь доля правильных ответов классификатора на обучающей выборке – 0.831.

    C = 1
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=1')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Еще увеличим $C$ – до 10 тысяч. Теперь регуляризации явно недостаточно, и мы наблюдаем переобучение. Можно заметить, что в прошлом случае (при $C$=1 и «гладкой» границе) доля правильных ответов модели на обучающей выборке не намного ниже, чем в 3 случае, зато на новой выборке, можно себе представить, 2 модель сработает намного лучше.
    Доля правильных ответов классификатора на обучающей выборке – 0.873.

    C = 1e4
    logit = LogisticRegression(C=C, n_jobs=-1, random_state=17)
    logit.fit(X_poly, y)
    
    plot_boundary(logit, X, y, grid_step=.005, poly_featurizer=poly)
    
    plt.scatter(X[y == 1, 0], X[y == 1, 1], c='green', label='Выпущен')
    plt.scatter(X[y == 0, 0], X[y == 0, 1], c='red', label='Бракован')
    plt.xlabel("Тест 1")
    plt.ylabel("Тест 2")
    plt.title('2 теста микрочипов.  Логит с C=10k')
    plt.legend();
    
    print("Доля правильных ответов классификатора на обучающей выборке:", 
    round(logit.score(X_poly, y), 3))

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Чтоб обсудить результаты, перепишем формулу для функционала, который оптимизируется в логистической регрессии, в таком виде:

    $\large J(X,y,w) = \mathcal{L} + \frac{1}{C}||w||^2,$

    • чем больше параметр $C$, тем более сложные зависимости в данных может восстанавливать модель (интуитивно $C$ соответствует «сложности» модели (model capacity))
    • если регуляризация слишком сильная (малые значения $C$), то решением задачи минимизации логистической функции потерь может оказаться то, когда многие веса занулились или стали слишком малыми. Еще говорят, что модель недостаточно «штрафуется» за ошибки (то есть в функционале $J$ «перевешивает» сумма квадратов весов, а ошибка $\mathcal{L}$ может быть относительно большой). В таком случае модель окажется недообученной (1 случай)
    • наоборот, если регуляризация слишком слабая (большие значения $C$), то решением задачи оптимизации может стать вектор $w$ с большими по модулю компонентами. В таком случае больший вклад в оптимизируемый функционал $J$ имеет $\mathcal{L}$ и, вольно выражаясь, модель слишком «боится» ошибиться на объектах обучающей выборки, поэтому окажется переобученной (3 случай)
    • то, какое значение $C$ выбрать, сама логистическая регрессия «не поймет» (или еще говорят «не выучит»), то есть это не может быть определено решением оптимизационной задачи, которой является логистическая регрессия (в отличие от весов $w$). Так же точно, дерево решений не может «само понять», какое ограничение на глубину выбрать (за один процесс обучения). Поэтому $C$ – это гиперпараметр модели, который настраивается на кросс-валидации, как и max_depth для дерева.

    Настройка параметра регуляризации

    Теперь найдем оптимальное (в данном примере) значение параметра регуляризации $C$. Сделать это можно с помощью LogisticRegressionCV – перебора параметров по сетке с последующей кросс-валидацией. Этот класс создан специально для логистической регрессии (для нее известны эффективные алгоритмы перебора параметров), для произвольной модели мы бы использовали GridSearchCV, RandomizedSearchCV или, например, специальные алгоритмы оптимизации гиперпараметров, реализованные в hyperopt.

    
    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)
    
    c_values = np.logspace(-2, 3, 500)
    
    logit_searcher = LogisticRegressionCV(Cs=c_values, cv=skf, verbose=1, n_jobs=-1)
    logit_searcher.fit(X_poly, y)

    Посмотрим, как качество модели (доля правильных ответов на обучающей и валидационной выборках) меняется при изменении гиперпараметра $C$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Выделим участок с «лучшими» значениями C.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Полезные ресурсы

    • Перевод материала этой статьи на английский – Jupyter notebooks в репозитории курса
    • Видеозаписи лекций по мотивам этой статьи: классификация, регрессия
    • Основательный обзор классики машинного обучения и, конечно же, линейных моделей сделан в книге «Deep Learning» (I. Goodfellow, Y. Bengio, A. Courville, 2016);
    • Реализация многих алгоритмов машинного обучения с нуля – репозиторий rushter. Рекомендуем изучить реализацию логистической регрессии;
    • Курс Евгения Соколова по машинному обучению (материалы на GitHub). Хорошая теория, нужна неплохая математическая подготовка;
    • Курс Дмитрия Ефимова на GitHub (англ.). Тоже очень качественные материалы.

    Статья написана в соавторстве с mephistopheies (Павлом Нестеровым). Он же – автор домашнего задания. Авторы домашнего задания в первой сессии курса (февраль-май 2017)– aiho (Ольга Дайховская) и das19 (Юрий Исаков). Благодарю bauchgefuehl (Анастасию Манохину) за редактирование.

    Домашнее задание № 4

    В качестве закрепления изученного материала предлагаем следующее задание: разобраться с тем, как работает TfidfVectorizer и DictVectorizer, обучить и настроить модель линейной регрессии Ridge на данных о публикациях на Хабрахабре и воспроизвести бенчмарк в соревновании. Проверить себя можно отправив ответы в веб-форме (там же найдете и решение).

    Актуальные и обновляемые версии демо-заданий – на английском на сайте курса. Также по подписке на Patreon («Bonus Assignments» tier) доступны расширенные домашние задания по каждой теме (только на англ.)

    Реализация цикла обучения логистической регрессии в Python

    Реализуем цикл обучения логистической регрессии используя Python. В этом нам снова поможет PyTorch. Для начала импортируем все библиотеки которые нам в этом пригодятся:

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import numpy as np
    from sklearn.datasets import make_classification
    from sklearn.metrics import classification_report

    Далее напишем класс реализующий логистическую регрессию. Прошу обратить внимание, что от линейной регрессии, которую мы реализовывали в ряде предыдущих статей, отличает лишь применение сигмоиды и новый метод predict (так как теперь мы решаем задачу классификации).

    class LogisticRegression(nn. Module):
     def __init__(self, input_size):
     super().__init__()
     self.weights = nn. Parameter(torch.randn(input_size, 1))
     self.sigmoid = nn. Sigmoid()
    
     def forward(self, x):
     x = x @ self.weights
     x = self.sigmoid(x)
     return x
    
     def fit(self, X, y, lr=0.01, num_iterations=1000):
     X = torch.from_numpy(X).float()
     y = torch.from_numpy(y).float().view(-1, 1) 
    
     # Инициализируем функцию потерь и оптимизатор
     criterion = nn. BCELoss()
     optimizer = optim. SGD(self.parameters(), lr=lr)
    
     for epoch in range(num_iterations):
     # Зануляем градиенты
     optimizer.zero_grad()
    
     # Получаем предсказания модели и вычисляем функцию потерь
     y_pred = self(X)
     loss = criterion(y_pred, y)
    
     # Обновляем веса
     loss.backward()
     optimizer.step()
     
    
     def predict(self, X):
     X = torch.from_numpy(X).float()
    
     # Получаем предсказания модели и присваиваем метки классов на основе вероятности
     y_pred = self(X)
     y_pred_labels = [1 if i > 0.5 else 0 for i in y_pred.detach().numpy().flatten()]
    
     return y_pred_labels
    

    На этот раз сгенерируем выборку для классификации самостоятельно, используя make_classification из библиотеки scikit-learn. А далее обучим нашу модель и оценим её качество:

    # Генерируем данные
    X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,
     random_state=1, n_clusters_per_class=1)
    
    # Создаем экземпляр класса и обучаем на обучающей выборке
    model = LogisticRegression(X.shape[1])
    model.fit(X, y, lr=0.1, num_iterations=100)
    
    # Прогнозируем метки классов на тестовой выборке
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
    precision recall f1-score support
    
     0 0.85 0.96 0.90 500
     1 0.95 0.83 0.88 500
    
     accuracy 0.89 1000
     macro avg 0.90 0.89 0.89 1000
    weighted avg 0.90 0.89 0.89 1000
    

    Для чистоты эксперимента обучим логистическую регрессию из библиотеки scikit-learn и увидим, что качество полученных моделей примерно одинаково:

    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    model.fit(X, y)
    y_pred = model.predict(X)
    
    print(classification_report(y, y_pred))
    
    OUT:
     precision recall f1-score support
    
     0 0.90 0.90 0.90 500
     1 0.90 0.90 0.90 500
    
     accuracy 0.90 1000
     macro avg 0.90 0.90 0.90 1000
    weighted avg 0.90 0.90 0.90 1000
    

    Далее давайте визуально оценим как модель принимает свое решение:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Как видим, результатом работы алгоритма выступает линия разделяющая классы. Если бы мы визуализировали модель в процессе обучения градиентным спуском, то увидели бы как эта линия подбирается в процессе оптимизации:

    machine learning курсы, python machine learning уроки, курсы по машинному обучению, машинное обучение python курс, предобработка данных python, нейронные сети python, machine learning курсы, задача регрессии python, Logistic Regression, Логистическая регрессия

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    Плюсы логистической регрессии:

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

    Минусы логистической регрессии:

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

    Логистическая регрессия

    Линейный классификатор

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Мы уже знакомы с линейной регрессией и методом наименьших квадратов. Рассмотрим задачу бинарной классификации, причем метки целевого класса обозначим «+1» (положительные примеры) и «-1» (отрицательные примеры).
    Один из самых простых линейных классификаторов получается на основе регрессии вот таким образом:

    $\large a(\vec{x}) = sign(\vec{w}^Tx),$

    Логистическая регрессия как линейный классификатор

    Логистическая регрессия является частным случаем линейного классификатора, но она обладает хорошим «умением» – прогнозировать вероятность $p_+$ отнесения примера $\vec{x_i}$ к классу «+»:

    $\large p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) $

    Прогнозирование не просто ответа («+1» или «-1»), а именно вероятности отнесения к классу «+1» во многих задачах является очень важным бизнес-требованием. Например, в задаче кредитного скоринга, где традиционно применяется логистическая регрессия, часто прогнозируют вероятность невозврата кредита ($p_+$). Клиентов, обратившихся за кредитом, сортируют по этой предсказанной вероятности (по убыванию), и получается скоркарта — по сути, рейтинг клиентов от плохих к хорошим. Ниже приведен игрушечный пример такой скоркарты.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Банк выбирает для себя порог $p_*$ предсказанной вероятности невозврата кредита (на картинке – $0.15$) и начиная с этого значения уже не выдает кредит. Более того, можно умножить предсказанную вероятность на выданную сумму и получить матожидание потерь с клиента, что тоже будет хорошей бизнес-метрикой (Далее в комментариях специалисты по скорингу могут поправить, но главная суть примерно такая).

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Обозначим $P(X)$ вероятностью происходящего события $X$. Тогда отношение вероятностей $OR(X)$ определяется из $\frac{P(X)}{1-P(X)}$, а это — отношение вероятностей того, произойдет ли событие или не произойдет. Очевидно, что вероятность и отношение шансов содержат одинаковую информацию. Но в то время как $P(X)$ находится в пределах от 0 до 1, $OR(X)$ находится в пределах от 0 до $\infty$.

    Если вычислить логарифм $OR(X)$ (то есть называется логарифм шансов, или логарифм отношения вероятностей), то легко заметить, что $\log{OR(X)} \in \mathbb{R}$. Его-то мы и будем прогнозировать с помощью МНК.

    Посмотрим, как логистическая регрессия будет делать прогноз $p_+ = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right)$ (пока считаем, что веса $\vec{w}$ мы как-то получили (т.е. обучили модель), далее разберемся, как именно).

    • Шаг 1. Вычислить значение $w_{0}+w_{1}x_1 + w_{2}x_2 + .  = \vec{w}^T\vec{x}$. (уравнение $\vec{w}^T\vec{x} = 0$ задает гиперплоскость, разделяющую примеры на 2 класса);

    • Шаг 2. Вычислить логарифм отношения шансов: $ \log(OR_{+}) = \vec{w}^T\vec{x}$.

    • Шаг 3. Имея прогноз шансов на отнесение к классу «+» – $OR_{+}$, вычислить $p_{+}$ с помощью простой зависимости:

    $\large p_{+} = \frac{OR_{+}}{1 + OR_{+}} = \frac{\exp^{\vec{w}^T\vec{x}}}{1 + \exp^{\vec{w}^T\vec{x}}} = \frac{1}{1 + \exp^{-\vec{w}^T\vec{x}}} = \sigma(\vec{w}^T\vec{x})$

    В правой части мы получили как раз сигмоид-функцию.

    Итак, логистическая регрессия прогнозирует вероятность отнесения примера к классу «+» (при условии, что мы знаем его признаки и веса модели) как сигмоид-преобразование линейной комбинации вектора весов модели и вектора признаков примера:

    $\large p_+(x_i) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i}).  $

    Следующий вопрос: как модель обучается? Тут мы опять обращаемся к принципу максимального правдоподобия.

    Принцип максимального правдоподобия и логистическая регрессия

    Теперь посмотрим, как из принципа максимального правдоподобия получается оптимизационная задача, которую решает логистическая регрессия, а именно, – минимизация логистической функции потерь.
    Только что мы увидели, что логистическая регрессия моделирует вероятность отнесения примера к классу «+» как

    $\large p_+(\vec{x_i}) = P\left(y_i = 1 \mid \vec{x_i}, \vec{w}\right) = \sigma(\vec{w}^T\vec{x_i})$

    Тогда для класса «-» аналогичная вероятность:

    $\large p_-(\vec{x_i}) = P\left(y_i = -1 \mid \vec{x_i}, \vec{w}\right) = 1 - \sigma(\vec{w}^T\vec{x_i}) = \sigma(-\vec{w}^T\vec{x_i}) $

    Оба этих выражения можно ловко объединить в одно (следите за моими руками – не обманывают ли вас):

    $\large P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) = \sigma(y_i\vec{w}^T\vec{x_i})$

    Выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ называется отступом (margin) классификации на объекте $\vec{x_i}$ (не путать с зазором (тоже margin), про который чаще всего говорят в контексте SVM). Если он неотрицателен, модель не ошибается на объекте $\vec{x_i}$, если же отрицателен – значит, класс для $\vec{x_i}$ спрогнозирован неправильно.
    Заметим, что отступ определен для объектов именно обучающей выборки, для которых известны реальные метки целевого класса $y_i$.

    Чтобы понять, почему это мы сделали такие выводы, обратимся к геометрической интерпретации линейного классификатора. Подробно про это можно почитать в материалах Евгения Соколова.

    Рекомендую решить почти классическую задачу из начального курса линейной алгебры: найти расстояние от точки с радиус-вектором $\vec{x_A}$ до плоскости, которая задается уравнением $\vec{w}^T\vec{x} = 0.$

    $\large \rho(\vec{x_A}, \vec{w}^T\vec{x} = 0) = \frac{\vec{w}^T\vec{x_A}}{||\vec{w}||}$

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Когда получим (или посмотрим) ответ, то поймем, что чем больше по модулю выражение $\vec{w}^T\vec{x_i}$, тем дальше точка $\vec{x_i}$ находится от плоскости $\vec{w}^T\vec{x} = 0.$

    Значит, выражение $M(\vec{x_i}) = y_i\vec{w}^T\vec{x_i}$ – это своего рода «уверенность» модели в классификации объекта $\vec{x_i}$:

    • если отступ большой (по модулю) и положительный, это значит, что метка класса поставлена правильно, а объект находится далеко от разделяющей гиперплоскости (такой объект классифицируется уверенно). На рисунке – $x_3$.
    • если отступ большой (по модулю) и отрицательный, значит метка класса поставлена неправильно, а объект находится далеко от разделяющей гиперплоскости (скорее всего такой объект – аномалия, например, его метка в обучающей выборке поставлена неправильно). На рисунке – $x_1$.
    • если отступ малый (по модулю), то объект находится близко к разделяющей гиперплоскости, а знак отступа определяет, правильно ли объект классифицирован. На рисунке – $x_2$ и $x_4$.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Теперь распишем правдоподобие выборки, а именно, вероятность наблюдать данный вектор $\vec{y}$ у выборки $X$. Делаем сильное предположение: объекты приходят независимо, из одного распределения (i.i.d.). Тогда

    $\large P\left(\vec{y} \mid X, \vec{w}\right) = \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right),$

    где $\ell$ – длина выборки $X$ (число строк).

    Как водится, возьмем логарифм данного выражения (сумму оптимизировать намного проще, чем произведение):

    $\large \begin{array}{rcl} \log P\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^{\ell} P\left(y = y_i \mid \vec{x_i}, \vec{w}\right) \\ &=& \log \prod_{i=1}^{\ell} \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \sigma(y_i\vec{w}^T\vec{x_i}) \\ &=& \sum_{i=1}^{\ell} \log \frac{1}{1 + \exp^{-y_i\vec{w}^T\vec{x_i}}} \\ &=& - \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}) \end{array}$

    То есть в даном случае принцип максимизации правдоподобия приводит к минимизации выражения

    $\large \mathcal{L_{log}} (X, \vec{y}, \vec{w}) = \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}}).$

    Это логистическая функция потерь, просуммированная по всем объектам обучающей выборки.

    Посмотрим на новую фунцию как на функцию от отступа: $L(M) = \log (1 + \exp^{-M})$. Нарисуем ее график, а также график 1/0 функциий потерь (zero-one loss), которая просто штрафует модель на 1 за ошибку на каждом объекте (отступ отрицательный): <img src="https://habrastorage.org/getpro/habr/formulas/279/e2d/d4f/279e2dd4f16fba5aaba3bb74abc2ca6a.svg" alt="$L_{1/0}(M) = [M .

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    <img src="https://habrastorage.org/getpro/habr/formulas/6f7/6f6/465/6f76f64653b4699ea79de2f9844a8d76.svg" alt="$\large \begin{array}{rcl} \mathcal{L_{1/0}} (X, \vec{y}, \vec{w}) &=& \sum_{i=1}^{\ell} [M(\vec{x_i})

    где $\mathcal{L_{1/0}} (X, \vec{y}, \vec{w})$ – попросту число ошибок логистической регрессии с весами $\vec{w}$ на выборке $(X, \vec{y})$.

    То есть уменьшая верхнюю оценку $\mathcal{L_{log}}$ на число ошибок классификации, мы таким образом надеемся уменьшить и само число ошибок.

    $L_2$-регуляризация логистических потерь

    L2-регуляризация логистической регрессии устроена почти так же, как и в случае с гребневой (Ridge регрессией). Вместо функционала $\mathcal{L_{log}} (X, \vec{y}, \vec{w})$ минимизируется следующий:

    $\large J(X, \vec{y}, \vec{w}) = \mathcal{L_{log}} (X, \vec{y}, \vec{w}) + \lambda |\vec{w}|^2$

    В случае логистической регрессии принято введение обратного коэффициента регуляризации $C = \frac{1}{\lambda}$. И тогда решением задачи будет

    $\large \hat{w} = \arg \min_{\vec{w}} J(X, \vec{y}, \vec{w}) = \arg \min_{\vec{w}}\ (C\sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\vec{w}^T\vec{x_i}})+ |\vec{w}|^2)$

    Далее рассмотрим пример, позволяющий интуитивно понять один из смыслов регуляризации.

    Линейная регрессия

    Метод наименьших квадратов

    Рассказ про линейные модели мы начнем с линейной регрессии. В первую очередь, необходимо задать модель зависимости объясняемой переменной $y$ от объясняющих ее факторов, функция зависимости будет линейной: $y = w_0 + \sum_{i=1}^m w_i x_i$. Если мы добавим фиктивную размерность $x_0 = 1$ для каждого наблюдения, тогда линейную форму можно переписать чуть более компактно, записав свободный член $w_0$ под сумму: $y = \sum_{i=0}^m w_i x_i = \vec{w}^T \vec{x}$. Если рассматривать матрицу наблюдения-признаки, у которой в строках находятся примеры из набора данных, то нам необходимо добавить единичную колонку слева. Зададим модель следующим образом:

    $\large \vec y = X \vec w + \epsilon,$

    Можем выписать выражение для каждого конкретного наблюдения

    $\large y_i = \sum_{j=0}^m w_j X_{ij} + \epsilon_i$

    Также на модель накладываются следующие ограничения (иначе это будет какая то другая регрессия, но точно не линейная):

    Оценка $\hat{w}_i$ весов $w_i$ называется линейной, если

    $\large \hat{w}_i = \omega_{1i}y_1 + \omega_{2i}y_2 + \cdots + \omega_{ni}y_n,$

    где $\forall\ k\ \omega_{ki}$ зависит только от наблюдаемых данных $X$ и почти наверняка нелинейно. Так как решением задачи поиска оптимальных весов будет именно линейная оценка, то и модель называется линейной регрессией. Введем еще одно определение. Оценка $\hat{w}_i$ называется несмещенной тогда, когда матожидание оценки равно реальному, но неизвестному значению оцениваемого параметра:

    $\large \mathbb{E}\left[\hat{w}_i\right] = w_i$

    Один из способов вычислить значения параметров модели является метод наименьших квадратов (МНК), который минимизирует среднеквадратичную ошибку между реальным значением зависимой переменной и прогнозом, выданным моделью:

    $\large \begin{array}{rcl}\mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 \\ &=& \frac{1}{2n} \left(\vec{y} - X \vec{w}\right)^T \left(\vec{y} - X \vec{w}\right) \end{array}$

    Для решения данной оптимизационной задачи необходимо вычислить производные по параметрам модели, приравнять их к нулю и решить полученные уравнения относительно $\vec w$ (матричное дифференцирование неподготовленному читателю может показаться затруднительным, попробуйте расписать все через суммы, чтобы убедиться в ответе):

    Шпаргалка по матричным производным

    $\large \begin{array}{rcl} \frac{\partial}{\partial x} x^T a &=& a \\ \frac{\partial}{\partial x} x^T A x &=& \left(A + A^T\right)x \\ \frac{\partial}{\partial A} x^T A y &=& xy^T\\ \frac{\partial}{\partial x} A^{-1} &=& -A^{-1} \frac{\partial A}{\partial x} A^{-1} \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} &=& \frac{\partial}{\partial \vec{w}} \frac{1}{2n} \left( \vec{y}^T \vec{y} -2\vec{y}^T X \vec{w} + \vec{w}^T X^T X \vec{w}\right) \\ &=& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) \end{array}$

    $\large \begin{array}{rcl} \frac{\partial \mathcal{L}}{\partial \vec{w}} = 0 &\Leftrightarrow& \frac{1}{2n} \left(-2 X^T \vec{y} + 2X^T X \vec{w}\right) = 0 \\ &\Leftrightarrow& -X^T \vec{y} + X^T X \vec{w} = 0 \\ &\Leftrightarrow& X^T X \vec{w} = X^T \vec{y} \\ &\Leftrightarrow& \vec{w} = \left(X^T X\right)^{-1} X^T \vec{y} \end{array}$

    Итак, имея в виду все определения и условия описанные выше, мы можем утверждать, опираясь на теорему Маркова-Гаусса, что оценка МНК является лучшей оценкой параметров модели, среди всех линейных и несмещенных оценок, то есть обладающей наименьшей дисперсией.

    Метод максимального правдоподобия

    У читателя вполне резонно могли возникнуть вопросы: например, почему мы минимизируем среднеквадратичную ошибку, а не что-то другое. Ведь можно минимизировать среднее абсолютное значение невязки или еще что-то. Единственное, что произойдёт в случае изменения минимизируемого значения, так это то, что мы выйдем из условий теоремы Маркова-Гаусса, и наши оценки перестанут быть лучшими среди линейных и несмещенных.

    Давайте перед тем как продолжить, сделаем лирическое отступление, чтобы проиллюстрировать метод максимального правдоподобия на простом примере.

    Как-то после школы я заметил, что все помнят формулу этилового спирта. Тогда я решил провести эксперимент: помнят ли люди более простую формулу метилового спирта: $CH_3OH$. Мы опросили 400 человек и оказалось, что формулу помнят всего 117 человек. Разумно предположить, что вероятность того, что следующий опрошенный знает формулу метилового спирта – $\frac{117}{400} \approx 0.29%$. Покажем, что такая интуитивно понятная оценка не просто хороша, а еще и является оценкой максимального правдоподобия.

    Разберемся, откуда берется эта оценка, а для этого вспомним определение распределения Бернулли: случайная величина $X$ имеет распределение Бернулли, если она принимает всего два значения ($1$ и $0$ с вероятностями $\theta$ и $1 - \theta$ соответственно) и имеет следующую функцию распределения вероятности:

    $\large p\left(\theta, x\right) = \theta^{x} \left(1 - \theta\right)^\left(1 - x\right), x \in \left\{0, 1\right\}$

    Похоже, это распределение – то, что нам нужно, а параметр распределения $\theta$ и есть та оценка вероятности того, что человек знает формулу метилового спирта. Мы проделали $400$ независимых экспериментов, обозначим их исходы как $\vec{x} = \left(x_1, x_2, \ldots, x_{400}\right)$. Запишем правдоподобие наших данных (наблюдений), то есть вероятность наблюдать 117 реализаций случайной величины $X = 1$ и 283 реализации $X = 0$:

    $\large p(\vec{x} \mid \theta) = \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = \theta^{117} \left(1 - \theta\right)^{283}$

    Далее будем максимизировать это выражение по $\theta$, и чаще всего это делают не с правдоподобием $p(\vec{x} \mid \theta)$, а с его логарифмом (применение монотонного преобразования не изменит решение, но упростит вычисления):

    $\large \log p(\vec{x} \mid \theta) = \log \prod_{i=1}^{400} \theta^{x_i} \left(1 - \theta\right)^{\left(1 - x_i\right)} = $

    $ \large = \log \theta^{117} \left(1 - \theta\right)^{283} = 117 \log \theta + 283 \log \left(1 - \theta\right)$

    Теперь мы хотим найти такое значение $\theta$, которое максимизирует правдоподобие, для этого мы возьмем производную по $\theta$, приравняем к нулю и решим полученное уравнение:

    $\large \frac{\partial p(\vec{x} \mid \theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left(117 \log \theta + 283 \log \left(1 - \theta\right)\right) = \frac{117}{\theta} - \frac{283}{1 - \theta};$

    $\large \begin{array}{rcl} \frac{117}{\theta} - \frac{283}{1 - \theta} = 0 \Rightarrow \theta = \frac{117}{400} \end{array}.$

    Получается, что наша интуитивная оценка – это и есть оценка максимального правдоподобия. Применим теперь те же рассуждения для задачи линейной регрессии и попробуем выяснить, что лежит за среднеквадратичной ошибкой. Для этого нам придется посмотреть на линейную регрессию с вероятностной точки зрения. Модель, естественно, остается такой же:

    $\large \vec y = X \vec w + \epsilon,$

    но будем теперь считать, что случайные ошибки берутся из центрированного нормального распределения:

    $\large \epsilon_i \sim \mathcal{N}\left(0, \sigma^2\right)$

    Перепишем модель в новом свете:

    $\large \begin{array}{rcl} p\left(y_i \mid X, \vec{w}\right) &=& \sum_{j=1}^m w_j X_{ij} + \mathcal{N}\left(0, \sigma^2\right) \\ &=& \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \end{array}$

    Так как примеры берутся независимо (ошибки не скоррелированы – одно из условий теоремы Маркова-Гаусса), то полное правдоподобие данных будет выглядеть как произведение функций плотности $p\left(y_i\right)$. Рассмотрим логарифм правдоподобия, что позволит нам перейти от произведения к сумме:

    $\large \begin{array}{rcl} \log p\left(\vec{y} \mid X, \vec{w}\right) &=& \log \prod_{i=1}^n \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& \sum_{i=1}^n \log \mathcal{N}\left(\sum_{j=1}^m w_j X_{ij}, \sigma^2\right) \\ &=& -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \end{array}$

    Мы хотим найти гипотезу максимального правдоподобия, т.е. нам нужно максимизировать выражение $p\left(\vec{y} \mid X, \vec{w}\right)$, а это то же самое, что и максимизация его логарифма. Обратите внимание, что при максимизации функции по какому-то параметру можно выкинуть все члены, не зависящие от этого параметра:

    $\large \begin{array}{rcl} \hat{w} &=& \arg \max_{w} p\left(\vec{y} \mid X, \vec{w}\right) \\ &=& \arg \max_{w} -\frac{n}{2}\log 2\pi\sigma^2 -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\frac{1}{2\sigma^2} \sum_{i=1}^n \left(y_i - \vec{w}^T \vec{x}_i\right)^2 \\ &=& \arg \max_{w} -\mathcal{L}\left(X, \vec{y}, \vec{w} \right) \end{array}$

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

    Разложение ошибки на смещение и разброс (Bias-variance decomposition)

    Поговорим немного о свойствах ошибки прогноза линейной регрессии (в принципе эти рассуждения верны для всех алгоритмов машинного обучения). В свете предыдущего пункта мы выяснили, что:

    Тогда ошибка в точке $\vec{x}$ раскладывается следующим образом:

    $\large \begin{array}{rcl} \text{Err}\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\left(\hat{f}\left(\vec{x}\right)\right)^2\right] - 2\mathbb{E}\left[y\hat{f}\left(\vec{x}\right)\right] \\ &=& \mathbb{E}\left[y^2\right] + \mathbb{E}\left[\hat{f}^2\right] - 2\mathbb{E}\left[y\hat{f}\right] \\ \end{array}$

    Для наглядности опустим обозначение аргумента функций. Рассмотрим каждый член по отдельности, два первых вас пишутся легко на странице ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ:

    $\large\begin{array}{rcl}\mathbb{E }\left[y^2\right] &=& \text{Var}\left(y\right) + \mathbb{E}\left[y\right]^2 = \sigma^2 + f^2\ \ \mathbb{E}\left[\hat{f}^2\right] &=& \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{ f}\right]^2 \\\end{array}$

    $\large\begin{array}{rcl}\text{Var }\left(y\right) &=& \mathbb{E}\left[\left(y - \mathbb{E}\left[y\right]\right)^2\right]\\&=&\ mathbb{E}\left[\left(y - f\right)^2\right]\\&=&\mathbb{E}\left[\left(f + \epsilon - f\right)^2\right ] \\ &=& \mathbb{E}\left[\epsilon^2\right] = \sigma^2\end{array}$

    $\large\mathbb{E}[y] = \mathbb{ E}[f + \epsilon] = \mathbb{E}[f] + \mathbb{E}[\epsilon] = f$

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

    $\large\begin{array}{rcl}\mathbb{E }\left[y\hat{f}\right] &=& \mathbb{E}\left[\left(f + \epsilon\right)\hat{f}\right] \\ &=& \mathbb{ E}\left[f\hat{f}\right] + \mathbb{E}\left[\epsilon\hat{f}\right] \\ &=& f\mathbb{E}\left[\hat{ f}\right] + \mathbb{E}\left[\epsilon\right] \mathbb{E}\left[\hat{f}\right] = f\mathbb{E}\left[\hat{f} \right] \end{array}$

    Особенный, немного другой:

    $\large\begin{array}{rcl}\text{Err }\left(\vec{x}\right) &=& \mathbb{E}\left[\left(y - \hat{f}\left(\vec{x}\right)\right)^2\ right] \\ &=& \sigma^2 + f^2 + \text{Var}\left(\hat{f}\right) + \mathbb{E}\left[\hat{f}\right]^ 2 - 2f\mathbb{E}\left[\hat{f}\right] \\ &=& \left(f - \mathbb{E}\left[\hat{f}\right]\right)^2 + \text{Var}\left(\right{of}\right) + \sigma^2 \\ &=& \text{Bias}\left(\right{of}\right)^2 + \text{Var }\left(\hat{f}\right) + \sigma^2 \end{array}$

    Не то чтобы я собираюсь это сделать, я собираюсь это сделать, я собираюсь это сделать. Для получения дополнительной информации подпишитесь на следующий список $y = f\left(\vec{x}\right) + \epsilon$ file размер:

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

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Это снежинка, это снежинка, это снежинка Цена на снежинку) снежинка снежинка (снежинка) снежинка, но уменьшение смещения. Если вы хотите получить на лице немного другую улыбку На самом деле белоснежные белоснежные снежинки (витрина).). Если вы не любитель, то сможете получить в руки белоснежные снежинки, белоснежные снежинки.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Видео Маркова-Гаусса, как утверждает раз, МНК-оцека параметров линейной Ни одна из самых лучших в классе несмещенных линейных оценок, то есть с наименьшей дисперсией. Для получения дополнительной информации свяжитесь с нами по адресу https://habrastorage.org/getpro/habr/formulas/7a4/a7d/183/7a4a7d183a691556d2592ebf22e11365.svg» alt=»$g$» data- tex=»inline»> Если вы ищете книгу, вы сможете сделать это по адресу $Was\ left(\hat{f}\right) \leq Was\left(g\right)$.

    Регуляризация Линейной Регрессии

    Это снежинка, это снежинка, снежинка ради ее стабильности, т.е. ради уменьшения дисперсии модели $\text{Var}\left(\hat{f}\right)$. Одним из условий теоремы Маркова-Гаусса является полный столбцовый ранг матрицы $X$. В противном случае решение МНК $\vec{w} = \left(X^T X\right)^{-1} X^T \vec{y}$ не существует, т.к. не будет существовать обратная матрица $\left(X^T X\right)^{-1}.$ Другими словами, матрица $X^T X$ будет сингулярна, или вырожденна. Такая задача называется некорректно поставленной. Задачу нужно скорректировать, а именно, сделать матрицу $X^TX$ невырожденной, или регулярной (именно поэтому этот процесс называется регуляризацией). Чаще в данных мы можем наблюдать так называемую мультиколлинеарность — когда два или несколько признаков сильно коррелированы, в матрице $X$ это проявляется в виде «почти» линейной зависимости столбцов. Например, в задаче прогнозирования цены квартиры по ее параметрам «почти» линейная зависимость будет у признаков «площадь с учетом балкона» и «площадь без учета балкона». Формально для таких данных матрица $X^T X$ будет обратима, но из-за мультиколлинеарности у матрицы $X^T X$ некоторые собственные значения будут близки к нулю, а в обратной матрице $\left(X^T X\right)^{-1}$ появятся экстремально большие собственные значения, т.к. собственные значения обратной матрицы – это $\frac{1}{\lambda_i}$. Итогом такого шатания собственных значений станет нестабильная оценка параметров модели, т.е. добавление нового наблюдения в набор тренировочных данных приведёт к совершенно другому решению. Иллюстрации роста коэффициентов вы найдете в одном из наших прошлых постов. Одним из способов регуляризации является регуляризация Тихонова, которая в общем виде выглядит как добавление нового члена к среднеквадратичной ошибке:

    $\large \begin{array}{rcl} \mathcal{L}\left(X, \vec{y}, \vec{w} \right) &=& \frac{1}{2n} \left\| \vec{y} - X \vec{w} \right\|_2^2 + \left\|\Gamma \vec{w}\right\|^2\\ \end{array}$

    Часто матрица Тихонова выражается как произведение некоторого числа на единичную матрицу: $\Gamma = \frac{\lambda}{2} E$. В этом случае задача минимизации среднеквадратичной ошибки становится задачей с ограничением на $L_2$ норму. Если продифференцировать новую функцию стоимости по параметрам модели, приравнять полученную функцию к нулю и выразить $\vec{w}$, то мы получим точное решение задачи.

    $\large \begin{array}{rcl} \vec{w} &=& \left(X^T X + \lambda E\right)^{-1} X^T \vec{y} \end{array}$

    Такая регрессия называется гребневой регрессией (ridge regression). А гребнем является как раз диагональная матрица, которую мы прибавляем к матрице $X^T X$, в результате получается гарантированно регулярная матрица.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

    Такое решение уменьшает дисперсию, но становится смещенным, т.к. минимизируется также и норма вектора параметров, что заставляет решение сдвигаться в сторону нуля. На рисунке ниже на пересечении белых пунктирных линий находится МНК-решение. Голубыми точками обозначены различные решения гребневой регрессии. Видно, что при увеличении параметра регуляризации $\lambda$ решение сдвигается в сторону нуля.

    ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ БИНАРНАЯ КЛАССИФИКАЦИЯ

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

    Логистическая регрессия

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

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

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

    Y — бинарный выходной результат (0 или 1)

    X — вектор признаков, используемый для прогнозирования $Y$

    e — число Эйлера

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

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

    Машинное обучение на Python

    Код курса
    PYML
    Ближайшая дата курса

    26 февраля, 2024

    Длительность обучения
    24 ак.часов
    Стоимость обучения
    49 500 руб.

    </span

    Оцените статью