【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集
? ? ? ?各位同學好,今天我和大家分享一下樸素貝葉斯算法中的三大模型。在上一篇文章中,我介紹了樸素貝葉斯算法的原理,并利用多項式模型進行了文本分類預測。
????????樸素貝葉斯算法 -- 原理,多項式模型文檔分類預測,附python完整代碼和數據集
? ? ? 下面,我將對樸素貝葉斯算法進行補充,并通過案例心臟病預測向各位進一步說明。案例簡介:有300多個心臟病樣本數據,每個樣本有13個特征(如:膽固醇、心跳率等),1個目標(即是否得了心臟病)。使用樸素貝葉斯高斯方法,建立心臟病預測模型。
1. 樸素貝葉斯模型
對于不同的數據,我們有不同的樸素貝葉斯模型進行分類。
1.1 多項式模型
(1)如果特征是離散型數據,比如文本這些,推薦使用多項式模型來實現。該模型常用于文本分類,特別是單詞,統計單詞出現的次數。
調用方法:?from sklearn.naive_bayes import MultinomialNB
1.2 高斯模型
(2)如果特征是連續型數據,比如具體的數字,推薦使用高斯模型來實現,高斯模型即正態分布。當特征是連續變量的時候,運用多項式模型就會導致很多誤差,此時即使做平滑,所得到的條件概率也難以描述真實情況。所以處理連續的特征變量,應該采用高斯模型。
調用方法: from sklearn.naive_bayes import GaussianNB
1.3 伯努利模型
(3)如果特征是離散性數據并且值只有0和1兩種情況,推薦使用伯努利模型。在伯努利模型中,每個特征的取值是布爾型的,即True和False,或者1和0。在文本分類中,表示一個特征有沒有在一個文檔中出現。
調用方法: from sklearn.naive_bayes import BernoulliNB
2. 心臟病預測
2.1 數據獲取
????????獲取心臟病的病例數據,共13項特征值,300多條數據。文末提供數據鏈接。
#(1)導入心臟病數據
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件處理\\心臟病\\heart.csv'
data = pd.read_csv(filepath)
?2.2 數據處理
? ? ? ? 首先將導入的數據重新洗牌,行數據之間隨機交換。然后將原始數據拆分成特征值和目標值,特征參數是:膽固醇、年齡等13項數據,目標為target這一列,即是否得了心臟病。為了驗證最后預測結果的正確性,取最后10行數據用于模型驗證,驗證集的特征值數據用于輸入最終的預測函數.predict()中,驗證集的目標值來檢驗預測結果是否正確。提取出驗證集之后,將用于建模的特征值和目標值刪除最后10行即可。
#(2)數據處理
# 重新洗牌,行互換后,讓索引從0開始
data = data.sample(frac=1).reset_index(drop=True)
# 提取目標值target一列
data_target = data['target']
# 提取目標值
data_feature = data.drop('target',axis=1)
# 取出最后10行作為驗證集
data_predict_feature = data_feature[-10:] #作為最后預測函數的輸入
data_predict_target = data_target[-10:] #用來驗證預測輸出結果的正確性
# 建模用的特征值和目標值刪去最后10行
data_feature = data_feature[:-10] #x數據
data_target = data_target[:-10] #y數據
?2.3 劃分訓練集和測試集
一般采用75%的數據用于訓練,25%用于測試,因此把數據進行訓練之前,先要對數據劃分。
劃分方式:
x_train,x_test,y_train,y_test = train_test_split(x數據,y數據,test_size=數據占比)
有關劃分劃分訓練集和測試集的具體操作,包括參數、返回值等,點擊下文鏈接的看第3.1小節:
K近鄰算法 -- 算法原理、紅酒分類預測實戰
#(3)劃分訓練集和測試集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data_feature,data_target,test_size=0.25)
2.4 使用樸素貝葉斯高斯模型
????????心臟病數據中大多是連續型數據,少數是0、1離散型數據,因此先采用高斯模型進行訓練,然后再采用多項式模型訓練,對比這兩種方法的準確率。
#(4)高斯模型訓練
# 導入樸素貝葉斯--高斯模型方法
from sklearn.naive_bayes import GaussianNB
# gauss_nb接收高斯方法
gauss_nb = GaussianNB()
# 模型訓練,輸入訓練集
gauss_nb.fit(x_train,y_train)
# 計算準確率--評分法
gauss_accuracy = gauss_nb.score(x_test,y_test)
# 預測
gauss_result = gauss_nb.predict(data_predict_feature)
????????導入高斯模型方法,gauss_nb接收該方法;使用.fit()函數進模型訓練;采用.score()函數用評分法查看模型準確率,根據x_test預測結果,把結果和真實的y_test比較,計算準確率;最終將驗證集的特征值傳入.predict()函數預測是否得了心臟病,將最終預測結果與真實值比較,發現有少許偏差,模型準確率在0.83左右。
2.5 使用樸素貝葉斯多項式模型?
????????心臟病數據中存在少量的離散數據,實際操作中多項式模型不適用于該案例,我使用多項式模型和高斯模型進行比較,讓大家優個直觀感受。操作方法和高斯模型類似,在此不做過多敘述,有不明白的可以參考上一篇文章:樸素貝葉斯算法 -- 原理、多項式模型實現文本分類預測
#(5)多項式模型訓練
# 導入樸素貝葉斯--多項式方法
from sklearn.naive_bayes import MultinomialNB
# multi_nb接收多項式方法
multi_nb = MultinomialNB()
# 多項式方法進行訓練,輸入訓練集
multi_nb.fit(x_train,y_train)
# 評分法計算準確率
multi_accuracy = multi_nb.score(x_test,y_test)
# 預測
multi_result = multi_nb.predict(data_predict_feature)
????????最終的結果為,多項式模型的準確率在0.75左右,預測結果和實際結果相比偏差較大,因此在使用樸素貝葉斯方法,對有較多連續型數據進行分類預測時,高斯模型的準確度明顯高于多項式模型。
心臟病數據集自取:?
鏈接:百度網盤 請輸入提取碼?提取碼:a9wl
完整代碼展示:
# 樸素貝葉斯高斯模型心臟病預測#(1)導入心臟病數據
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件處理\\心臟病\\heart.csv'
data = pd.read_csv(filepath)#(2)數據處理
# 重新洗牌,行互換后,讓索引從0開始
data = data.sample(frac=1).reset_index(drop=True)
# 提取目標值target一列
data_target = data['target']
# 提取目標值
data_feature = data.drop('target',axis=1)
# 取出最后10行作為驗證集
data_predict_feature = data_feature[-10:] #作為最后預測函數的輸入
data_predict_target = data_target[-10:] #用來驗證預測輸出結果的正確性
# 建模用的特征值和目標值刪去最后10行
data_feature = data_feature[:-10] #x數據
data_target = data_target[:-10] #y數據#(3)劃分訓練集和測試集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data_feature,data_target,test_size=0.25)#(4)高斯模型訓練
# 導入樸素貝葉斯--高斯模型方法
from sklearn.naive_bayes import GaussianNB
# gauss_nb接收高斯方法
gauss_nb = GaussianNB()
# 模型訓練,輸入訓練集
gauss_nb.fit(x_train,y_train)
# 計算準確率--評分法
gauss_accuracy = gauss_nb.score(x_test,y_test)
# 預測
gauss_result = gauss_nb.predict(data_predict_feature)#(5)多項式模型訓練
# 導入樸素貝葉斯--多項式方法
from sklearn.naive_bayes import MultinomialNB
# multi_nb接收多項式方法
multi_nb = MultinomialNB()
# 多項式方法進行訓練,輸入訓練集
multi_nb.fit(x_train,y_train)
# 評分法計算準確率
multi_accuracy = multi_nb.score(x_test,y_test)
# 預測
multi_result = multi_nb.predict(data_predict_feature)
總結
以上是生活随笔為你收集整理的【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习入门】(2) 朴素贝叶斯算法:
- 下一篇: 【机器学习入门】(4) 决策树算法理论: