Что представляет собой этот наивный байесовский код из учебника? - PullRequest
0 голосов
/ 02 апреля 2019

Я сейчас изучаю науку данных из учебника ( ссылка ), но я не совсем понимаю, что код пытается сказать.

Код показывает, как Наивный Байесработает, но книга не рассказывает о том, что происходит, и плохо объясняет.Часть, которую я не понимаю, является последней частью.Что представляет собой результат печати?Кажется, это вероятность, но я не совсем понимаю, как на это смотреть.

Зачем брать последние 8 вероятностей?Есть ли какая-либо причина для этого?

Я немного изменил код, чтобы использовать его на Spyder, чтобы он отличался от ссылки.

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

from sklearn.datasets import make_blobs
x, y = make_blobs(100, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(x[:, 0], x[:, 1], c=y, s=50, cmap='RdBu')

from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(x, y)

rng = np.random.RandomState(0)
xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model.predict(xnew)

plt.scatter(x[:, 0], x[:, 1], c=y, s=50, cmap='RdBu')
lim = plt.axis()

plt.scatter(xnew[:, 0], xnew[:, 1], c=ynew, s=20, cmap='RdBu', alpha=0.1)
plt.axis(lim)

yprob = model.predict_proba(xnew)
print(yprob[-8:].round(2))

Результат печати:

[[0.89 0.11]
 [1.   0.  ]
 [1.   0.  ]
 [1.   0.  ]
 [1.   0.  ]
 [1.   0.  ]
 [0.   1.  ]
 [0.15 0.85]]

Любая помощь?

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Рабочий процесс кода

  1. Использование набора данных для обучения модели (гауссовский наивный Байес)
  2. Прогнозирование вероятности попадания y в классы для 2000 случайных значений x (оценка максимальной вероятности с использованием обученной модели)

Все графики и распечатки предназначены только для визуализации. Он просто представляет вероятность попадания y в класс A и B (результаты шага 2) для каждого события.

1 голос
/ 02 апреля 2019

Весь смысл обучения модели состоит в том, чтобы предсказать вероятную классификацию y (yprob) в один из двух классов для заданного значения x.

Итак, сначала вы обучаете генерируемую модельс model.fit(x, y).

Затем с помощью этой модели вы прогнозируете класс для y с помощью model.predict_proba(xnew).

Здесь вы прогнозируете вероятность попадания y в один из двух классов (binary classification)для 2000 случайно сгенерированных значений х.В реальном мире x исходит из реального источника данных.

В этой строке просто выводится вероятность y класса для последних 8 значений x.

print(yprob[-8:].round(2))

Примечаниечто каждый из выходных данных представляет собой, например, список из 2 элементов - первый выход - [0.89 0.11].Это означает, что для данного значения x вероятность того, что он принадлежит первому классу, составляет 89%, в то время как принадлежность ко второму классу составляет всего 11% - обе вероятности составляют до 100%

...