1 Наивная байесовская модель
Наивный байесовский метод — это метод классификации, основанный на теореме Байеса и предположении о независимости условий признаков. При прогнозировании для входа x найдите y с наибольшей апостериорной вероятностью в качестве прогноза.
Модель NB:
Априорное распределение вероятностей:P(Y=ck),k=1,2,⋯,KУсловное распределение вероятностей:P(X=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck),k=1,2,⋯,KСреди них размер входных данных X равенn.
- Выход: апостериорная вероятность тестовых данных
в соответствии сЗаднийконтрольная работа=какКонечно*Первыйконтрольная работа/возвращениеодинизменять, имеют:P(Y=ck∣X=x)=∑kP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)
Классификатор NB:y=f(x)=argmaxck∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
где знаменатель представляет собой нормировочный коэффициент, которым можно пренебречь.
Наивный байес можно разделить на гауссовский наивный байес, полиномиальный наивный байес, наивный бернуллиевский байес и т. д.
2. Оценка параметров для наивного байесовского метода
Наивный Байес требует оценки априорных вероятностейP(Y=ck)и условная вероятностьP(X(j)=x(j)∣Y=ck)Ниже рассматривается только случай дискретного атрибута.
2.1 Максимальное правдоподобие (MLE)
Используйте оценку максимального правдоподобия для оценки априорных вероятностей:P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,⋯,KУсловная возможность:
&P\left(X^{(j)}=a_{jl} | Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^ {j}=a_{jl}, y_{i}=c_{k}\right)}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right) }\\ &j=1,2, \cdots, n ;\quad l=1,2, \cdots, S_{j};\quad k=1,2, \cdots, K \end{aligned}$$ # ### 2.2 Байесовская оценка Метод максимального правдоподобия может иметь значение вероятности 0. Байесовская оценка использует сглаживание по Лапласу Байесовская оценка априорной вероятности: $$P_{\lambda} \left(Y=c_{k}\right) =\frac{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)+\lambda}{N+ Байесовская оценка условной вероятности K \lambda}$ $ равно: $$P_{\lambda}\left(X^{(j)}=a_{jl} | Y=c_{k}\right)=\frac {\sum_{l=1}^{N} I\left(x_{i}^{(j)}=a_{jl}, y_{i}=c_{k}\right)+\lambda}{\ sum_{i=1}^{N} I\ left(y_{i}=c_{k}\right)+S_{j} \lambda}$$ Q1: Здесь чувствуется оценка максимального правдоподобия и байесовская оценка. Есть ли разница в описании? A1: В книге «Машинное обучение» нет упоминания о сглаживании Лапласа как о байесовской оценке, что все еще немного сомнительно. ### 3 Наивная байесовская реализация#### 3.1 Гауссовская наивная байесовская реализация Гауссовская наивная байесовская реализация используется для прогнозирования непрерывных данных.Принцип состоит в том, чтобы предположить, что каждая функция обучающего набора удовлетворяет распределению Гаусса, и получить различные типы данных наборы, соответствующие разным. Рассчитываются среднее значение распределения Гаусса и дисперсия признака, а затем вычисляется вероятность того, что каждый признак тестовой выборки принадлежит соответствующему распределению Гаусса, чтобы получить вероятность того, что он принадлежит к определенной категории, и метка с наибольшей вероятностью используется как метка выборки. ```python import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris import pandas as pd from sklearn.model_selection import train_test_split import math sqrt, exp, pi = np. sqrt, np.exp, np.pi def createData(): iris = load_iris() df = pd.DataFrame(iris.data, columns = iris.feature_names) df['label'] = iris.target df.columns = ['длина чашелистика', 'ширина чашелистика', 'длина лепестка', 'ширина лепестка', 'метка'] return df.iloc[:,:-1],df.iloc[:,-1] X,y = createData() Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size = 0,5, random_state = 1028) class GaussianNaiveBayes(object): ''' Gaussian NaiveBayes, используется для обработки непрерывных данных, ввод с использованием numpy.array. ''' def __init__(self): self. model = None @staticmethod def mean(x): ''' Найти среднее значение признака (столбца) типа массива''' return sum(x)/float(len(x)) def var(self, x): ' '' Найти дисперсию признаков''' return sum(pow(x-self.mean(x),2)*1.0/len(x)) def gaussianProba(self, x, mean, var): ''' использовать Gaussian плотность вероятности, найти значение тестового набора, принадлежащего функции ''' return 1/(sqrt(2*pi*var))*exp(-pow(x-mean,2)/(2.0*var)) def обобщать (себя, данные ): ''' Возвращает среднее значение дисперсии каждого признака тренировочного набора. ''' data = np.array(data) return [self.mean(data),self.var(data)] def fit(self, x, y): ''' Получите каждую метку, соответствующую каждой функции в обучении установить среднее значение, дисперсию. ''' labels = np.unique(y) data = {label:[] for label in labels} for f, label in zip(x, y): data[label].append(f.tolist()) self. model = {label: self.summarize(value) for label, value in data.items()} return data,self.model def calculateProba(self, data): ''' Вычислить вероятность того, что тестовый набор соответствует каждой категории . ''' prob = {} data = data.transpose() для метки, значение в self.model.items(): prob[label] = 1 для i в диапазоне (len(data)): prob[label] *= self.gaussianProba(data[i], value[0][i], value[1][i]) return prob def predict(self, data): ''' Используйте значение с наибольшей вероятностью в качестве метки образец. ''' res = [] для метки, значение в self.calculateProba(data).items(): res.append(value) res = np.array(res) return np.argmax(res, axis = 0) def score (self, x, y): ''' Рассчитать точность предсказания. ''' оценка = 0 метка = self.predict(x) для i в диапазоне (len(метка)): если метка[i] ==y[i]: оценка+=1 вернуть оценку*1.0/len(метка) если __name__ == '__main__': model = данные GaussianNaiveBayes(), m1 = model.fit(Xtrain.values, Ytrain.values) prob = model.calculateProba(Xtest.values) label = model.predict(Xtest.values) score = model.score(Xtest.values, Ytest.values) print('accuary', score) ``` Результат: `accuary 0.9466666666666667` #### 3.2 Полиномиальный Наивный Байес MultinomialNB Полиномиальный Наивный Байес может использоваться для дискретных данных в классификации . Вызовите API sklearn: «python import numpy as np rng = np.random.RandomState(1) X = rng.randint(5, size=(6, 100)) y = np.array([1, 2, 3 , 4, 5, 6]) из sklearn.naive_bayes import MultinomialNB clf = MultinomialNB() clf.fit(X, y) print(clf.predict(X[2:3])) ``` ### 4. Расширения: разница между оценкой максимального правдоподобия и байесовской оценкой. Байесовский метод **предполагает, что параметры модели подчиняются определенному распределению**, а затем оценивает распределение параметров модели. Это очень отличается от метода максимального правдоподобия (метод максимального правдоподобия предполагает, что параметр имеет определенное значение, просто оценивает параметр, который принадлежит диапазону точечной оценки). Существует два типа приложений байесовской оценки.Оценка дискретных данных и оценка непрерывных данных не сильно отличаются, но предположения о распределении параметров различны.Для непрерывных данных параметры модели в основном предполагаются как распределение Гаусса. --- Ссылка: 1. [GitHub Bayesian подробное объяснение и код] (https://github.com/endymecy/spark-ml-source-analysis/blob/master/%E5%88%86%E7%B1% BB %E5%92%8C%E5%9B%9E%E5%BD%92/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF / nb.md); 2. [CSDN. О наивном байесовском методе](http://blog.csdn.net/u012162613/article/details/48323777); 3. [Код Huang Haiguang GitHub](https:///github. com/fengdu78/lihang-code/blob/master/code/%E7%AC%AC4%E7%AB%A0%20%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F %B6%E6%96%AF(NaiveBayes)/GaussianNB.ipynb); 4. [wepon blog](https://blog.csdn.net/u012162613/article/details/48323777); 5. [Bayes Courseware Utdallas. edu](http://www.utdallas.edu/~nrr150130/cs7301/2016fa/lects/Lecture_14_Bayes.pdf); aarti/Class/10701_Spring14/slides/MLE_MAP_Part1.pdf); 7. [Объяснение MLE на английском языке] (https://newonlinecourses.science.psu.edu/stat414/node/191/); 8. [sklearn Naive Bayes]( https://scikit-learn.org/stable/modules/naive_bayes.html);