Python · 標準庫 collections
顧名思義,collections 是一系列工具的集合。我們會先說說其中 Counter 的應用,如果在 Python 與 機器學習 這個系列裡用到了其它 collections 中的工具,我會在這裡進行相應的更新
- Counter
- 先說說這個東西的用途:同樣顧名思義、它是拿來計數的。官網上的說明會更加詳盡、全面,不過個人認為大多數情況下、我們只需要用到類似如下的功能:
事實上,在我們的 決策樹 和 樸素貝葉斯 演算法中,我們也只運用了這個功能
- 不過有一點遺憾的是,Counter 似乎不支持樣本權重。為此我寫了一個小封裝:
from collections import Counter as Countnnclass Counter:n def __init__(self, arr, sample_weights=None):n if sample_weights is None:n self._counter = Count(arr)n else:n self._counter = {}n sw_len = len(sample_weights)n for elem, w in zip(arr, sample_weights):n if elem not in self._counter:n self._counter[elem] = w * sw_lenn else:n self._counter[elem] += w * sw_lennn def keys(self):n return self._counter.keys()nn def values(self):n return self._counter.values()nn def __getitem__(self, item):n return self._counter[item]n
需要注意的是,如果是用我自定義的、支持權重的 Counter,會比標準庫的慢 4 ~ 6 倍
目前差不多就這些,希望觀眾老爺們能夠喜歡~
推薦閱讀: