網站首頁 編程語言 正文
之前在一次跟“某Fish”客戶進行交談時,我在的需求下學習了多項貝葉斯(Multinomial Naive Bayes)這個模型。
在了解多項貝葉斯模型之前,我們首先來了解一下樸素貝葉斯(Naive Bayes)模型。
貝葉斯定理所描述的,即為一個抽象事件A在抽象事件B發生的前提下,有多大概率會發生抽象事件A,其概率記為:
其中`P(B)`記為抽象事件B本身發生的概率,因此貝葉斯定理正好計算的是`抽象事件AB同時發生`概率與抽象事件B單獨發生的概率之比,這也能證明其抽象事件發生的先后順序。
文字太過生澀難懂?我這里有一張圖可以供大家參考:
可以通過上述流程我們看到:事件A為確定發生的事件,在A事件發生后,其有可能誘導了事件B的發生,也可能誘導失敗了。
拋開誘導失敗的情況,我們只談及誘導成功的情況。雖然我們這里說事件A成功誘導了事件B,但是作為一個獨立的實體,事件B本身發生的概率也是一個不確定值,因此這里需要貝葉斯模型進行自動推理,去計算前置的因素是否有可能誘導了后一事件的發生。
我們來看例子,這里我有一個數據框,我們來展示一下的現有列
ModelData.columns
Index(['全局水平', '大氣溫度 [℃]', '風冷溫度 [℃]', '露點溫度 [℃]', '相對濕度 [%]', '平均十米內風速 [m/s]',
'站點壓力 [mBar]', '降水量 [mm]', '定點角度 [°]', '方位角度 [°]', '氣團大小', '氣團變化'],
dtype='object')
在這份模型數據。我們需要對氣團變化進行研究,其中我使用cuDF內置的.to_pandas()函數將GPU數據框轉換為Pandas數據框,并使用.apply()+lambda隱函數對氣團大小的變化進行類分類,
這里因為使用了DecisionTree決策樹來訓練第二個模型,因此數據被命名為了df_train_Tree,最終模型仍然為多項貝葉斯模型。
# 使用.apply()函數來實現來為氣團變化進行標簽化處理
df_train_Tree['氣團變化'] = df_train_Tree['氣團大小'].to_pandas().apply(lambda x:0 if x == 0 else 1 if x < 0 else 2 if x > 0 else None)
對數據進行處理,并使用cuML繼承自sklearn的train_test_split()函數對數據進行分割
# 進行絕對值翻轉處理,以防止存在負值無法訓練模型
ModelData = df_train_Tree.iloc[:,2:].to_pandas().apply(lambda x: x.abs())
ModelData = cf.DataFrame(ModelData)
# 構建訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(ModelData,ModelData['氣團變化'], test_size=0.2, random_state=42)
通過sklearn.metrics下的plot_roc_curve()函數繪制的ROC曲線和roc_auc_score()函數我們發現,此時的決策樹模型處于了過擬合的情況,在樹中我沒有指定明確的二值化數據(即樹判斷需要的最基本的真和假),因此使得樹在判斷時全部當成了真的條件,所以樹已經嚴重過擬合了。
通過之前的一些列的線性校驗,我們也得知了:前置的一切屬性均為`可能`誘導氣團大小的`誘因`
因此在完全不確定的情況下,我們將使用全部屬性進行模型的初步測試。
因此我們最終需要使用多項貝葉斯模型來進行模型構建,以下是多項貝葉斯在GPU環境上的實現
# 因為屬性眾多,因此我們需要引入多項分布樸素貝葉斯(Multinomial NB)
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
# 將訓練集進行訓練
clf.fit(X_train.to_pandas(), y_train.to_numpy())
MultinomialNB()
# 繪制ROC曲線以驗證預測結果
plot_roc_curve(clf, X_test.to_pandas(), y_test.to_numpy())
plt.title('ROC Curve')
plt.plot([0, 1], [0, 1], '--',color='orange')
plt.text(0.5, 0.5, 'ROC = %.2f' % roc_auc_score(y_test.to_pandas(),cp.asnumpy(y_pred)), ha='center', va='center', fontsize=14)
可以看到,在多項貝葉斯模型下,我們的成績表現已經非常不錯了,roc_auc_score分數表現為:0.92,這也得以證明我們之前訓練過的模型它是一個顯著過擬合的模型。
總結:
在皮爾森系數過低,但又存在微弱線性相關的分類問題,我們可以嘗試使用推測的手段:即貝葉斯類模型,在我們能夠肯定前置因素可能會誘導后一事件的這一前提下,我們就可以進行貝葉斯魔性的嘗試了
原文鏈接:https://blog.csdn.net/Deaohst/article/details/125210295
相關推薦
- 2022-08-06 為Visual?Studio手工安裝微軟ReportViewer控件_自學過程
- 2022-03-26 postman模擬post請求的四種請求體_相關技巧
- 2022-07-04 PyG搭建GCN模型實現節點分類GCNConv參數詳解_python
- 2022-05-15 python自動化測試之Selenium詳解_python
- 2022-11-21 Kotlin?Fragment的具體使用詳解_Android
- 2022-08-20 C++?基礎函數的介紹及使用(Vector+deque+STL)_C 語言
- 2022-05-21 基于C++實現酒店管理系統_C 語言
- 2022-11-01 zxing二維碼位矩陣轉換成Bitmap位圖的實戰教程_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支