- 大資料分析教程
- 大資料分析 - 首頁
- 大資料分析 - 概述
- 大資料分析 - 特徵
- 大資料分析 - 資料生命週期
- 大資料分析 - 架構
- 大資料分析 - 方法論
- 大資料分析 - 核心交付成果
- 大資料採用及規劃考慮
- 大資料分析 - 關鍵利益相關者
- 大資料分析 - 資料分析師
- 大資料分析 - 資料科學家
- 大資料分析有用資源
- 大資料分析 - 快速指南
- 大資料分析 - 資源
- 大資料分析 - 討論
大資料分析 - 樸素貝葉斯分類器
樸素貝葉斯是一種用於構建分類器的機率技術。樸素貝葉斯分類器的特徵假設是認為,給定類別變數,特定特徵的值獨立於任何其他特徵的值。
儘管前面提到了過於簡化的假設,但樸素貝葉斯分類器在複雜的現實世界情況下仍然取得了良好的結果。樸素貝葉斯的優勢在於,它只需要少量訓練資料來估計分類所需的引數,並且可以增量式地訓練分類器。
樸素貝葉斯是一個條件機率模型:給定一個要分類的問題例項,由向量x = (x1, …, xn)表示一些n個特徵(自變數),它為每個K個可能的輸出或類別分配該例項的機率。
$$p(C_k|x_1,....., x_n)$$
上述公式的問題是,如果特徵數n很大,或者一個特徵可以取很多值,那麼基於機率表構建這樣的模型是不可行的。因此,我們重新制定模型使其更簡單。使用貝葉斯定理,條件機率可以分解為:
$$p(C_k|x) = \frac{p(C_k)p(x|C_k)}{p(x)}$$
這意味著在上述獨立性假設下,類變數C上的條件分佈為:
$$p(C_k|x_1,....., x_n)\: = \: \frac{1}{Z}p(C_k)\prod_{i = 1}^{n}p(x_i|C_k)$$
其中證據Z = p(x)是一個僅依賴於x1, …, xn的比例因子,如果特徵變數的值已知,則為常數。一個常見的規則是選擇最可能的假設;這被稱為最大後驗機率或MAP決策規則。相應的分類器,貝葉斯分類器,是一個函式,它如下分配一個類標籤$\hat{y} = C_k$:
$$\hat{y} = argmax\: p(C_k)\prod_{i = 1}^{n}p(x_i|C_k)$$
在R中實現該演算法是一個簡單的過程。下面的例子演示瞭如何訓練一個樸素貝葉斯分類器並將其用於垃圾郵件過濾問題中的預測。
以下指令碼可在bda/part3/naive_bayes/naive_bayes.R檔案中找到。
# Install these packages
pkgs = c("klaR", "caret", "ElemStatLearn")
install.packages(pkgs)
library('ElemStatLearn')
library("klaR")
library("caret")
# Split the data in training and testing
inx = sample(nrow(spam), round(nrow(spam) * 0.9))
train = spam[inx,]
test = spam[-inx,]
# Define a matrix with features, X_train
# And a vector with class labels, y_train
X_train = train[,-58]
y_train = train$spam
X_test = test[,-58]
y_test = test$spam
# Train the model
nb_model = train(X_train, y_train, method = 'nb',
trControl = trainControl(method = 'cv', number = 3))
# Compute
preds = predict(nb_model$finalModel, X_test)$class
tbl = table(y_test, yhat = preds)
sum(diag(tbl)) / sum(tbl)
# 0.7217391
從結果可以看出,樸素貝葉斯模型的準確率為72%。這意味著該模型正確分類了72%的例項。