日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集

發(fā)布時間:2023/11/27 生活经验 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ?各位同學好,今天我和大家分享一下樸素貝葉斯算法中的三大模型。在上一篇文章中,我介紹了樸素貝葉斯算法的原理,并利用多項式模型進行了文本分類預測

????????樸素貝葉斯算法 -- 原理,多項式模型文檔分類預測,附python完整代碼和數(shù)據(jù)集

? ? ? 下面,我將對樸素貝葉斯算法進行補充,并通過案例心臟病預測向各位進一步說明。案例簡介:有300多個心臟病樣本數(shù)據(jù),每個樣本有13個特征(如:膽固醇、心跳率等),1個目標(即是否得了心臟病)。使用樸素貝葉斯高斯方法,建立心臟病預測模型。


1. 樸素貝葉斯模型

對于不同的數(shù)據(jù),我們有不同的樸素貝葉斯模型進行分類。

1.1 多項式模型

(1)如果特征是離散型數(shù)據(jù),比如文本這些,推薦使用多項式模型來實現(xiàn)。該模型常用于文本分類,特別是單詞,統(tǒng)計單詞出現(xiàn)的次數(shù)。

調(diào)用方法:?from sklearn.naive_bayes import MultinomialNB

1.2 高斯模型

(2)如果特征是連續(xù)型數(shù)據(jù),比如具體的數(shù)字,推薦使用高斯模型來實現(xiàn),高斯模型即正態(tài)分布。當特征是連續(xù)變量的時候,運用多項式模型就會導致很多誤差,此時即使做平滑,所得到的條件概率也難以描述真實情況。所以處理連續(xù)的特征變量,應該采用高斯模型。

調(diào)用方法: from sklearn.naive_bayes import GaussianNB

1.3 伯努利模型

(3)如果特征是離散性數(shù)據(jù)并且值只有0和1兩種情況,推薦使用伯努利模型。在伯努利模型中,每個特征的取值是布爾型的,即TrueFalse,或者1和0。在文本分類中,表示一個特征有沒有在一個文檔中出現(xiàn)。

調(diào)用方法: from sklearn.naive_bayes import BernoulliNB


2. 心臟病預測

2.1 數(shù)據(jù)獲取

????????獲取心臟病的病例數(shù)據(jù),共13項特征值,300多條數(shù)據(jù)。文末提供數(shù)據(jù)鏈接

#(1)導入心臟病數(shù)據(jù)
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件處理\\心臟病\\heart.csv'
data = pd.read_csv(filepath)


?2.2 數(shù)據(jù)處理

? ? ? ? 首先將導入的數(shù)據(jù)重新洗牌,行數(shù)據(jù)之間隨機交換。然后將原始數(shù)據(jù)拆分成特征值和目標值,特征參數(shù)是:膽固醇、年齡等13項數(shù)據(jù),目標為target這一列,即是否得了心臟病。為了驗證最后預測結(jié)果的正確性,取最后10行數(shù)據(jù)用于模型驗證驗證集的特征值數(shù)據(jù)用于輸入最終的預測函數(shù).predict()中,驗證集的目標值來檢驗預測結(jié)果是否正確。提取出驗證集之后,將用于建模的特征值和目標值刪除最后10行即可。

#(2)數(shù)據(jù)處理
# 重新洗牌,行互換后,讓索引從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:]  #作為最后預測函數(shù)的輸入
data_predict_target = data_target[-10:]  #用來驗證預測輸出結(jié)果的正確性
# 建模用的特征值和目標值刪去最后10行
data_feature = data_feature[:-10]  #x數(shù)據(jù)
data_target = data_target[:-10]    #y數(shù)據(jù)


?2.3 劃分訓練集和測試集

一般采用75%的數(shù)據(jù)用于訓練,25%用于測試,因此把數(shù)據(jù)進行訓練之前,先要對數(shù)據(jù)劃分。

劃分方式:

x_train,x_test,y_train,y_test = train_test_split(x數(shù)據(jù),y數(shù)據(jù),test_size=數(shù)據(jù)占比)

有關(guān)劃分劃分訓練集和測試集的具體操作,包括參數(shù)、返回值等,點擊下文鏈接的看第3.1小節(jié):

K近鄰算法 -- 算法原理、紅酒分類預測實戰(zhàn)

#(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 使用樸素貝葉斯高斯模型

????????心臟病數(shù)據(jù)中大多是連續(xù)型數(shù)據(jù),少數(shù)是0、1離散型數(shù)據(jù),因此先采用高斯模型進行訓練,然后再采用多項式模型訓練,對比這兩種方法的準確率

#(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()函數(shù)進模型訓練;采用.score()函數(shù)用評分法查看模型準確率,根據(jù)x_test預測結(jié)果,把結(jié)果和真實的y_test比較,計算準確率;最終將驗證集的特征值傳入.predict()函數(shù)預測是否得了心臟病,將最終預測結(jié)果與真實值比較,發(fā)現(xiàn)有少許偏差,模型準確率在0.83左右。


2.5 使用樸素貝葉斯多項式模型?

????????心臟病數(shù)據(jù)中存在少量的離散數(shù)據(jù),實際操作中多項式模型不適用于該案例,我使用多項式模型和高斯模型進行比較,讓大家優(yōu)個直觀感受。操作方法和高斯模型類似,在此不做過多敘述,有不明白的可以參考上一篇文章:樸素貝葉斯算法 -- 原理、多項式模型實現(xiàn)文本分類預測

#(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)

????????最終的結(jié)果為,多項式模型的準確率在0.75左右,預測結(jié)果和實際結(jié)果相比偏差較大,因此在使用樸素貝葉斯方法,對有較多連續(xù)型數(shù)據(jù)進行分類預測時,高斯模型的準確度明顯高于多項式模型。


心臟病數(shù)據(jù)集自取:?

鏈接:百度網(wǎng)盤 請輸入提取碼?提取碼:a9wl

完整代碼展示:

# 樸素貝葉斯高斯模型心臟病預測#(1)導入心臟病數(shù)據(jù)
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件處理\\心臟病\\heart.csv'
data = pd.read_csv(filepath)#(2)數(shù)據(jù)處理
# 重新洗牌,行互換后,讓索引從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:]  #作為最后預測函數(shù)的輸入
data_predict_target = data_target[-10:]  #用來驗證預測輸出結(jié)果的正確性
# 建模用的特征值和目標值刪去最后10行
data_feature = data_feature[:-10]  #x數(shù)據(jù)
data_target = data_target[:-10]    #y數(shù)據(jù)#(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)

總結(jié)

以上是生活随笔為你收集整理的【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。