簡體   English   中英

WEKA 在名義數據集上的表現

[英]WEKA's performance on nominal dataset

我使用WEKA進行分類。 我使用了WEKA數據文件夾中的乳腺癌數據集。 該數據集是名義數據集。 .arff 文件可以在這個鏈接中找到。

我使用朴素貝葉斯分類器進行了分類。 分類后收到了准確率、准確率、召回率、ROC 等指標的分類報告。

我熟悉SkLearn - python package。我知道當輸入特征是標稱值時,我們需要使用label 編碼器或其他編碼技術將這些特征轉換為數值。 只有在那之后,我們才能進行分類。

所有這些機器學習方法都在后台進行某種數學運算以給出預測結果。

因此,我對 WEKA 中的任何分類器如何為我們提供名義數據集的預測結果感到困惑?

TL;DR :在設計軟件時,復雜性將存在於某處。

scikit-learn假定用戶可以編寫代碼來處理復雜性; WEKA假定用戶可以用元數據解釋復雜性。


2009 年 WEKA“更新”出版物描述了該軟件背后的一些設計動機:

4.1 核心

....“WEKA 核心的另一個補充是‘功能’元數據設施。該框架允許單獨的學習算法和過濾器聲明它們能夠處理的數據特征。這反過來又使 WEKA 的用戶界面成為可能呈現此信息並向用戶提供有關該方案對手頭數據的適用性的反饋。”

換句話說,假定用戶可以描述數據的屬性。 Wisconsin 數據集包括關於變量(年齡、更年期、...、類別)和它們可能采用的序數值('10-19'、'20-29'、...)的廣泛注釋:

@relation breast-cancer
@attribute age {'10-19','20-29','30-39','40-49','50-59','60-69','70-79','80-89','90-99'}
@attribute menopause {'lt40','ge40','premeno'}
...
@attribute 'Class' {'no-recurrence-events','recurrence-events'}
@data
'40-49','premeno','15-19','0-2','yes','3','right','left_up','no','recurrence-events'
'50-59','ge40','15-19','0-2','no','1','right','central','no','no-recurrence-events'

這為輸入的外觀提供了足夠的上下文,這反過來又暗示了哪些方法是合適的。


2013 scikit-learn API Design publication並沒有明確排除這樣的序數字符串輸入。 N.盡管如此,“一致性”的核心 API 設計原則提出了一些限制。

考慮一下:

from sklearn.naive_bayes import MultinomialNB

clf = MultinomialNB()
clf.fit([["a", "b"], ["b", "a"], ["a", "a"]], [0, 0, 1])

scikit-learn==1.2.0中產生錯誤:

ValueError: dtype='numeric' is not compatible with arrays of bytes/strings.
            Convert your data to numeric values explicitly instead.

可以想象一個多項式朴素貝葉斯的版本,其中此代碼不會引發錯誤。 但是,如果某些估算器允許這些輸入而其他估算器不允許,那么這將是不一致的。 如果我們要對這些數據應用邏輯回歸怎么辦? 我們應該對值進行單熱編碼還是對它們進行序號編碼? 最好將該細節留給用戶。

作者將此作為“數據表示”問題進行了簡短的處理,並且(也許)建議 WEKA 是一個有趣的替代方案 model:

2.2 數據表示

“在scikit-learn中,我們選擇了一種盡可能接近矩陣表示的數據表示:數據集被編碼為 NumPy 多維 arrays...。雖然與更多面向對象的構造相比,這些數據表示可能看起來相當簡單,例如正如 Weka 使用的那樣(Hall 等人,2009 年),它們帶來的主要優勢是讓我們能夠依靠高效的 NumPy 和 SciPy 向量化操作,同時保持代碼簡短和可讀。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM