1. 程式人生 > >機器學習分類演算法之樸素貝葉斯

機器學習分類演算法之樸素貝葉斯

一、概念

樸素貝葉斯模型(Naive Bayesian Model,NBM)是以條件概率為基礎的分類器,是一種監督演算法,常被用於文字分類和垃圾郵件過濾。
貝葉斯理論解決的是逆向概率問題,即通過已經發生的已知的概率來推測未發生的事將會發生的概率。

 

 二、計算

樸素貝葉斯各個事件發生的概率是彼此獨立的,即m事件概率P(m)和n事件概率P(n)同時發生的概率為P(mn)=P(m)*P(n)。
條件概率的含義,B發生時A發生的概率為:

A發生時B發生的概率為:

所以:

即,通過已知結果算出概率,然後根據一些條件推測即將發生的結果。

 

三、實現

features = ['looks', 'credit', 'education', 'height']
samples = [['nice', 'bad', 'S', 'low', 'no'],
           ['ugly', 'good', 'S', 'high', 'no'],
           ['nice', 'good', 'S', 'high', 'yes'],
           ['ugly', 'good', 'H', 'high', 'yes'],
           ['nice', 'bad', 'S', 'high', 'no'],
           [
'nice', 'bad', 'S', 'high', 'no'], ['nice', 'good', 'H', 'low', 'yes'], ['ugly', 'good', 'M', 'high', 'yes'], ['nice', 'good', 'M', 'high', 'yes'], ['ugly', 'bad', 'H', 'high', 'yes'], ['nice', 'good', 'S', 'low', 'no'], ['nice', 'good
', 'S', 'low', 'no'], ['nice', 'bad', 'H', 'low', 'no']] def train(): data = {} results = {} for sample in samples: for index in range(len(sample) - 1): element = sample[index] relation = '%s_%s' % (element, sample[-1]) if element in data: data[element] += 1 else: data[element] = 1 if relation in data: data[relation] += 1 else: data[relation] = 1 if sample[-1] in results: results[sample[-1]] += 1 else: results[sample[-1]] = 1 return data, results def classify(new_data): data, results = train() classify_result = [] for ret_key, ret_value in results.items(): dividend_probabilities = [] divisor_probabilities = [] for element in new_data: divisor_probabilities.append(data[element] / len(samples)) relation = '%s_%s' % (element, ret_key) dividend_probabilities.append(data.get(relation, 0) / ret_value) value_probability = ret_value / len(samples) final_probability = reduce(lambda x, y: x * y, dividend_probabilities) * value_probability / reduce( lambda x, y: x * y, divisor_probabilities) classify_result.append((ret_key, final_probability)) return classify_result print(classify(['nice', 'bad', 'S', 'low']))