一、貝葉斯原理的介紹
貝葉斯原理是指在得到一個新的條件後,更新我們原有的假設概率分布,得到一個新的後驗概率分布。也就是在新的條件下,我們對原有假設的概率估計會發生變化。貝葉斯原理在統計學習中有著廣泛的應用,在機器學習中也是不可或缺的一部分。
二、貝葉斯原理的公式
貝葉斯原理可以用公式來表示:
P(A|B) = P(B|A)*P(A)/P(B)
其中,P(A)稱為先驗概率,表示在觀測數據之前,我們對A的概率分布,P(B|A)稱為似然函數,表示在A的條件下,B的條件概率分布。P(A|B)稱為後驗概率,表示在觀測到B之後,我們對A的概率分布。P(B)稱為邊際似然函數,表示在不考慮假設A的情況下,觀測到B的概率分布。
三、貝葉斯分類器
在機器學習中,貝葉斯分類器是基於貝葉斯原理而來的分類器。它的基本思想是通過觀測到的數據來得到一個新的後驗概率分布,從而判斷新數據的類別。貝葉斯分類器有三種不同的分類器:
樸素貝葉斯分類器
樸素貝葉斯分類器是一種基於貝葉斯原理和特徵獨立假設的分類方法。該方法假設所有特徵對於分類都是相互獨立的,這樣可以簡化分類器的計算,加速分類的效果。樸素貝葉斯分類器的公式為:
P(y|x)=P(x|y)*P(y)/P(x)
其中,y代表類別,x代表特徵向量。
高斯樸素貝葉斯分類器
高斯樸素貝葉斯分類器是一種基於貝葉斯原理和特徵獨立假設的分類方法。該方法假設特徵之間的相關性是通過一個多元正態分布來描述的,在實際應用中表現的很好。高斯樸素貝葉斯分類器的公式為:
P(y|x)=P(x|y)*P(y)/P(x)
其中,y代表類別,x代表特徵向量,P(x|y)服從多元高斯分布。
多項式樸素貝葉斯分類器
多項式樸素貝葉斯分類器是一種專門用於處理文本分類的演算法,該演算法在處理文本分類問題時特別有效。該演算法假設特徵是出現在文檔中的單詞或單詞項,而每個單詞或單詞項都是獨立的,並且每個單詞或單詞項都被賦予了一個權重。多項式樸素貝葉斯分類器的公式為:
P(y|x)=P(x|y)*P(y)/P(x)
其中,y代表類別,x代表文本向量,P(x|y)服從多項分布。
四、貝葉斯網路
貝葉斯網路是一種圖模型,表達了隨機變數之間的依賴關係。貝葉斯網路由一個有向無環圖表示。貝葉斯網路既可以用於概率推理,也可以用於分類和回歸等機器學習任務。貝葉斯網路在數據不完整或是數據有雜訊的情況下特別有效,可以通過概率推理對缺失的數據進行估計。貝葉斯網路的公式為:
P(X1,X2,...,Xn)=∏P(Xi|Pa(Xi))
其中,Xi是第i個節點,Pa(Xi)是第i個節點的父節點集合,P(Xi|Pa(Xi))是第i個節點條件概率分布。
五、代碼示例
樸素貝葉斯分類器
import pandas as pd import numpy as np from sklearn.naive_bayes import GaussianNB data = pd.read_csv('data.csv') X = data.iloc[:, :-1].values y = data.iloc[:, -1].values classifier = GaussianNB() classifier.fit(X, y) # Predicting the Test set results y_pred = classifier.predict(X)
高斯樸素貝葉斯分類器
import pandas as pd import numpy as np from sklearn.naive_bayes import GaussianNB data = pd.read_csv('data.csv') X = data.iloc[:, :-1].values y = data.iloc[:, -1].values classifier = GaussianNB() classifier.fit(X, y) # Predicting the Test set results y_pred = classifier.predict(X)
多項式樸素貝葉斯分類器
import pandas as pd import numpy as np from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB data = pd.read_csv('data.csv') vectorizer = CountVectorizer() X = vectorizer.fit_transform(data.text).toarray() y = data['label'].values classifier = MultinomialNB() classifier.fit(X, y) # Predicting the Test set results y_pred = classifier.predict(vectorizer.transform(['This is a test']))
貝葉斯網路
from pgmpy.models import BayesianModel from pgmpy.factors.discrete import TabularCPD model = BayesianModel([('A', 'C'), ('B', 'C'), ('B', 'D'), ('C', 'E')]) cpd_a = TabularCPD(variable='A', variable_card=2, values=[[0.6], [0.4]]) cpd_b = TabularCPD(variable='B', variable_card=2, values=[[0.7], [0.3]]) cpd_c = TabularCPD(variable='C', variable_card=2, values=[[0.1, 0.9, 0.2, 0.8], [0.9, 0.1, 0.8, 0.2]], evidence=['A', 'B'], evidence_card=[2, 2]) cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.95, 0.05], [0.2, 0.8]], evidence=['B'], evidence_card=[2]) cpd_e = TabularCPD(variable='E', variable_card=2, values=[[0.99, 0.01], [0.1, 0.9]], evidence=['C'], evidence_card=[2]) model.add_cpds(cpd_a, cpd_b, cpd_c, cpd_d, cpd_e) model.check_model() infer = VariableElimination(model) print(infer.query(['E'], evidence={'A': 1}))
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/153778.html