2016-05-09 101 views
3

我一直在環顧四周,似乎無法找到這個問題的答案:
如果我訓練樸素貝葉斯是一些數據的分類器。然後我重新使用這個訓練數據作爲測試數據。我不應該獲得100%的分類成功嗎?謝謝閱讀!瞭解樸素貝葉斯

編輯:我似乎已經刺激了我的理解水平以上的討論。因此,我不認爲取決於「接受」答案的角色取決於我。不過,我很感謝您的意見,並會閱讀所有答案。

回答

1

不是。數據中的所有可變性都可能在所選功能中解釋。想象一下,你正在分類是否是打網球的好日子。你的特徵是溫度,風,高度。這些可能是很好的描述,但你並沒有訓練鎮上是否有遊行!在遊行的日子裏,網球場被封鎖了,所以儘管你的特徵應該很好地解釋已知的數據,但是有些離羣值並不適合這些特徵。

通常,數據中存在隨機性,您將無法捕獲100%。

每個評論下面更新

的問題是訓練和測試在同一數據集是否將是100%準確的,這個我想大家都同意是不行的(他們沒有問什麼的假設NB)。這裏是一個樣本數據集展示上面的情形:

import pandas as pd 
import numpy as np 
from sklearn.naive_bayes import GaussianNB 

gnb = GaussianNB() 

df = pd.DataFrame([[1,1,0],[1,0,0],[0,0,1],[1,0,1],[1,1,0]], columns = ['hot','windy','rainy']) 
targets = [1,1,0,0,0] 
preds = gnb.fit(df, targets).predict(df) 

print preds 
array([1, 1, 0, 0, 1]) 

注意,第一殼體和所述最後一種情況下是相同的,但分類器錯過了最後一種情況下預測。這是因爲手邊的數據並不總是完全描述伴隨的分類。 NB還有很多其他的假設,也可以描述它失敗的情況(你很好地指出),但我的目標只是提出一個快速示範,希望他們能夠理解並回答這個問題。

+0

感謝您的幫助 – OctaveParango

+1

讓我們假設一個假設的「完美」特徵選擇,在這裏我們訓練重要的「全部」和「唯一」特徵空間。樸素貝葉斯在這種情況下會有100%的準確性嗎?只是試圖讓這個話題更有趣! ;) – Gevorg

+0

對於任何分類器,如果您使用100%描述的數據訓練它,您將具有100%的準確性。 – flyingmeatball

2

其實,儘管被接受的答案,@ flyingmeatball的答案是(至少部分)在這種特殊情況下是錯誤的。它描述了相關現象,但顯然不是所給出情況的關鍵。

您所描述的是一種情況,您希望您的模型具有100%的培訓準確性,而事實並非如此。這與「數據不足以表達現象」無關 - 這可能是高泛化錯誤,而不是培訓一

不到100%的訓練錯誤意味着,也許數據本身的噪音太大以至於不能模擬(哪些flymeatball表明),但實際上,對於訓練集來說,當且僅當兩個完全相同的點時,情況纔是與不同的標籤。如果情況並非如此(可能不是),那麼實際的「問題」是您選擇的模型有一些內部偏差。簡單地說 - 假設假設關於數據,甚至約束,即使數據明顯不遵循它,您的模型也不會改變。特別是,樸素貝葉斯有兩個這樣的假設:

  1. 特點是獨立的,也就是說,不存在相關性,比當時的單一功能的標籤,更之間沒有重要的一環。如果你的特徵是風和溫度,樸素貝葉斯會假設它可以根據溫度本身作出正確的決定,例如假定「良好的溫度大約20度」,風也是如此,例如「最多10公里/小時」 。它將無法找到基於兩個值的關係,如「它是溫度減去風至少30重要」,或者類似的東西

  2. 它假設在每個特徵值的特定分佈 - 通常是這是多項分佈或高斯分佈。這些都是很好的分佈系列,但很多功能並不遵循它們。例如,如果您的功能是「人們在我的雜貨店購買的時間」(例如,您將其視爲連續變量,在幾微秒內精確測量等),您會注意到,您有兩個「高峯時間」早上和傍晚時分,因此樸素貝葉斯將做一個可怕的工作,擬合一個高斯,而在中午將會有一個高峯!再次,錯誤的假設導致錯誤的決定。

爲什麼我們要做這樣的假設呢?那麼,由於許多原因,但其中之一是,因爲我們關心泛化而不是訓練,因此這是一種以「不足」訓練集爲代價來防止我們的模型過度擬合的方法。這也有助於處理噪音,簡化優化,並使許多其他美好的事情:-)

希望這會有所幫助。

+0

爲了跟進,我認爲唯一的假設是功能是獨立的?我的特徵向量是一組布爾值,我試圖執行二進制分類。我想知道,因爲:可能有幾種情況下兩個相同的向量/數據點映射到不同的類/標籤。 – OctaveParango