機器學習——Naive Bayes 樸素貝葉斯

Naive Bayes 樸素貝葉斯

Created: Apr 14, 2020 5:28 PM

概概率的基本概念

機器學習——Naive Bayes 樸素貝葉斯

左邊黑色圈是X發生的概率

機器學習——Naive Bayes 樸素貝葉斯

右邊黑色圈是Y發生的概率

機器學習——Naive Bayes 樸素貝葉斯

X發生的情況下Y發生的概率


機器學習——Naive Bayes 樸素貝葉斯

Y發生的情況下X發生的概率

機器學習——Naive Bayes 樸素貝葉斯

交叉的紫色是 XY同時發生的概率

機器學習——Naive Bayes 樸素貝葉斯

條件概率公式

機器學習——Naive Bayes 樸素貝葉斯

貝葉斯公式

定理: 設A1,A2,...An,是一個完備的事件組,且P(Ai)>0.i=1,2,3,...n,對於任意的事件B,有P(B)>0.有

機器學習——Naive Bayes 樸素貝葉斯

下面舉例說明,C是類別,X是特徵,一般情況下我們都會忽略掉歸一化因子,因為我們嚴格地說這裡是優化,因此只要比例就夠了

機器學習——Naive Bayes 樸素貝葉斯

由於聯合概率比較難計算,所以可以假設所有的特徵是相互獨立的,所以就有

機器學習——Naive Bayes 樸素貝葉斯

機器學習——Naive Bayes 樸素貝葉斯

這個假設就是樸素概念,根據最大後驗(MAP)規則選擇分類

機器學習——Naive Bayes 樸素貝葉斯

由於連乘會導致下溢,所以我們轉換為log

機器學習——Naive Bayes 樸素貝葉斯

例子

根據天氣、溫度、溼度、風速預測小明在sunny、cool、high、strong條件下是否會去打網球

機器學習——Naive Bayes 樸素貝葉斯

P(Play=Yes) = 9/14 P(Play=no)=5/14

我們可以計算除不同特徵下小明去打網球的概率

機器學習——Naive Bayes 樸素貝葉斯

機器學習——Naive Bayes 樸素貝葉斯

我們可以在上表中看到有些概率是0,在這種情況下,我們可以使用拉普拉斯修正,可以在分子分母都加1

機器學習——Naive Bayes 樸素貝葉斯

- 處理連續值的一種常用技術是使用合併來離散化特徵值,以獲得一組新的伯努利分佈特徵

- 另一種方法:假設(j| C = ci)具有高斯分佈(正態分佈)。

<code># -*- coding: utf-8 -*-

"""

Created on Wed Jan 17 16:49:36 2018

@author: dawa

"""

from __future__ import print_function

from sklearn.naive_bayes import GaussianNB, BernoulliNB, MultinomialNB

from sklearn.model_selection import cross_val_score

import os

import pandas as pd

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

data_path = ['D:\\BaiduYunDownload\\Intel\\Intel-ML101-Class6\\data']

# Question1

file_path = os.sep.join(data_path + ['Iris_Data.csv'])

data = pd.read_csv(file_path, sep=',', header=0)

skew = pd.DataFrame(data.skew())

skew.columns = ['skew']

skew['too_skewed'] = skew['skew'] > .75

#skew

sns.pairplot(data, hue='species')

# Question2

X = data[data.columns[:-1]]

y = data.species

GNB = GaussianNB()

cv_N = 4

scores = cross_val_score(GNB, X, y, cv=cv_N)

print(scores)

np.mean(scores)

# Question3

#GaussianNB

#MultinomialNB

#BernoulliNB

X = data[data.columns[:-1]]

y = data.species

nb = {'gaussian': GaussianNB(),

'bernoulli': BernoulliNB(),

'multinomial': MultinomialNB()}

scores = {}

for key, model in nb.items():

s = cross_val_score(model, X, y, cv=cv_N, scoring='accuracy')

scores[key] = np.mean(s)

print(scores)

# Question5

n_copies = [0, 1, 3, 5, 10, 50, 100]

def create_copies_sepal_length(X, n):

X_new = X.copy()

for i in range(n):

X_new['sepal_length_copy%s' % i] = X['sepal_length']

return X_new

cv_N = 4

def get_cross_val_score(n):

X_new = create_copies_sepal_length(X, n)

scores = cross_val_score(GaussianNB(), X_new, y, cv=cv_N)

return np.mean(scores)

plt.figure(2)

avg_scores = pd.Series(

[get_cross_val_score(n) for n in n_copies],

index=n_copies)

ax = avg_scores.plot()

ax.set(

xlabel='number of extra copies of "sepal_length"',

ylabel='average accuracy score',

title='Decline in Naive Bayes performance');

/<code>


分享到:


相關文章: