姚帥君,閆敬來,杜彩鳳,溫巖,劉銘,楊繼紅
山西中醫藥大學,山西 晉中 030619
圍絕經期綜合征(perimenopausal syndrome,PPS)指婦女在絕經前后時期卵巢的功能逐步衰退,從而引起體內雌性激素水平降低,以及自主神經功能紊亂和代謝障礙為主的一組癥候群。本病多發生于45~55歲,是婦女絕經相關最常見的疾病,涉及人體多個器官、系統。目前多數學者認為本病與卵巢功能減退引起的內分泌紊亂密切相關,同時也與社會、心理因素有關[1]。激素治療是現代醫學治療PPS最主要的方法,但不良反應較大,存在潛在風險。歷代中醫醫籍對本病并無專題論述,按照辨證論治及癥狀表現將其歸屬于“年老血崩”“臟燥”等范疇。中醫療法可有效緩解患者的臨床癥狀,且不良反應較少,但目前尚存在缺乏統一的療效評價體系和缺乏大樣本臨床研究等局限[2]。
辨證論治是中醫的特色和精髓,但中醫辨證受個人主觀因素的影響,不確定性強,存在客觀化、標準化等方面的不足。目前,中醫數字化辨證是人工智能在中醫領域研究的熱點課題[3-6]。統一規范的中醫辨證模式是中醫辨證智能化的基礎,同時也是中醫藥現代化的重要內容之一[7]。本研究基于邏輯回歸、支持向量機、K近鄰、隨機森林、XGBoost、BP神經網絡6種機器學習算法,及公開發表的文獻醫案數據建立PPS中醫辨證模型,旨在為PPS的輔助診斷提供參考,并為中醫辨證智能化和客觀化提供借鑒。
本研究醫案數據來源于兩部分:一部分為數據庫,包括中國知識資源總庫(CNKI)、中文科技期刊數據庫(VIP)、萬方數據知識服務平臺(Wanfang Data)、中國生物醫學文獻數據庫(CBM)建庫至2022年5月發表的中醫治療PPS的臨床文獻;另一部分為古今醫案云平臺2.3.5收錄的PPS相關中醫病案。
數據庫采用高級檢索,先以“圍絕經期綜合征”與“醫案”“經驗”“驗案”“病案”為檢索詞兩兩組合進行檢索,然后以“更年期綜合征”與“醫案”“經驗”“驗案”“病案”為檢索詞兩兩組合進行檢索,再以“經斷前后諸證”與“醫案”“經驗”“驗案”“病案”為檢索詞兩兩組合進行檢索。在古今醫案云平臺分別以“圍絕經期綜合征”“更年期綜合征”“經斷前后諸證”為主題詞進行一框式檢索。
參考《中西醫結合內分泌代謝疾病診治學》[8]、《婦產科中西醫結合診療技巧》[9]、《中醫婦科學》[10]、《中醫病證診斷療效標準》[11]中有關PPS或經斷前后諸證辨證分型的論述,將本病證候確定為腎陰虛、腎陽虛、腎陰陽兩虛、腎虛肝旺、肝郁化火、肝氣郁結、氣滯血瘀、心脾兩虛共8個證型。
納入標準:①符合上述證型標準的中醫治療PPS的醫案文獻;②文獻中四診信息記錄完整的中醫醫案及臨床觀察類文獻。
排除標準:①學位論文、綜述、Meta分析、理論論述類文獻;②中西醫結合治療的臨床病例;③四診信息記錄不完整(缺少舌象和脈象)的醫案;④其他疾病(如乳腺癌、糖尿病等)合并PPS的臨床病例。
首先將符合納入標準的文獻題目錄入WPS2019,去除重復文獻后,以剩余文獻題目為檢索詞在上述數據庫中進行一框式檢索,提取其中可供錄入的醫案內容,然后將醫案錄入(錄入內容為患者癥狀、體征及所對應的證型)。最終獲得上述醫案樣本的數據信息(其中腎陰虛證215例,腎陽虛證61例,腎陰陽兩虛證141例,腎虛肝旺證255例,肝郁化火證148例,肝氣郁結證79例,氣滯血瘀證63例,心脾兩虛證59例),以此作為原始數據庫(錄入格式:醫案編號;癥狀和體征;證型)。
以患者的臨床指標為特征值(包括胸悶、口苦、口干、善太息、盜汗、潮熱汗出、失眠多夢、健忘、面紅目赤、面色?白、面色萎黃、兩顴潮紅、頭暈目眩、兩目干澀、耳鳴、心煩、心悸、手足心熱、四肢不溫、下肢冰冷、畏寒、悲傷欲哭、急躁易怒、情緒低落、胸脅脹痛、乳房脹痛、外陰干澀、外陰瘙癢、腰膝酸軟、氣短、精神倦怠、乏力、胃脘脹滿、納呆、小便短赤、小便清長、大便溏薄、大便秘結、大便時溏時秘、月經有血塊、月經量多、月經量少、月經量時多時少、月經先期、月經后期、月經先后不定期、月經紊亂、閉經、舌紅、舌淡紅、舌淡白、舌黯紅、舌紫黯、胖大舌、齒痕舌、瘀斑瘀點舌、苔白、苔黃、苔薄、苔厚、少苔、無苔、脈弦、脈細、脈滑、脈虛、脈澀、脈沉、脈遲、脈數、脈緩、脈弱共72項),并使用“0-1”編碼對各列特征進行賦值,即出現該特征記為“1”,不出現該特征記為“0”。然后以原始數據庫中每個樣本所對應的證型作為目標值(包括心脾兩虛、氣滯血瘀、肝氣郁結、肝郁化火、腎虛肝旺、腎陽虛、腎陰虛、腎陰陽兩虛共8類),建立PPS數據集(數據集格式:患者編號;特征值;目標值)。
通過Scikit-learn中的標簽編碼(Label Encoding)類對目標值下的中醫證型進行處理,將文本信息映射為數值,即轉換為0,1,2,3,4,5,6,7 的標簽。利用train_test_split 模塊將PPS 數據集的70%作為訓練集(n=714),30%作為測試集(n=307),通過設置參數stratify=y使訓練集和測試集中各證型數據與原PPS數據集保持相同的比例,然后通過設置參數random_state=0保證每次實驗都使用相同的訓練集和測試集,并增加實驗的重現性。
本研究開發環境為PyCharm2021.1,邏輯回歸、支持向量機、隨機森林、K近鄰及XGBoost算法采用的框架為Scikit-learn0.24.2。Scikit-learn是Python第三方提供的機器學習框架,支持分類、聚類、降維、回歸四大算法及特征提取、數據處理、模型評估三大模塊[12]。BP 神經網絡采用的框架為PyTorch1.0.0。PyTorch是以Python優先的深度學習框架,不僅支持自動求導功能,且設計簡潔,較其他深度學習框架具有靈活性強、運行速度快等優點[13]。模型解釋采用的框架為SHAP0.40.0,它使用SHAP值解釋機器學習模型和特征重要性[14]。
PPS 最常見的證型是腎虛肝旺證,而腎陽虛證、氣滯血瘀證臨床較為少見。因此,本研究使用的數據集為典型的多分類類別不平衡數據集,為使模型的泛化能力不受影響,在實驗過程中對邏輯回歸、支持向量機、隨機森林模型直接在建模時設置參數class_weight=“balanced”平衡樣本的權重,對XGBoost模型在擬合模型時手動計算各類別的權重后賦值給sample_weight參數,對BP神經網絡同樣手動計算各類別的權重后賦值給nn.CrossEntropyLoss 類中的weight參數。
邏輯回歸(logistic regression)主要應用于二分類問題,也可應用于多分類問題[15]。邏輯回歸假定觀察值樣本因變量的概率分布呈S形,且通過極大似然估計使因變量觀察次數的概率極大化,從而得到自變量參數的最佳估計值[16]。本研究通過調用sklearn 中的LogisticRegression算法實現邏輯回歸建模,參數solver(求解器)選擇“saga”,其余超參數選擇最優組合,然后調用fit函數用訓練集擬合模型,通過predict函數輸出預測值。
支持向量機(support vector machine)通過在特征空間構造一個距離樣本點間隔最大的分離超平面ωTx+b=0將實例分到不同的類[17]。支持向量機是機器學習領域若干技術集大成者,能夠較好地解決小樣本、非線性、高維數和局部最小等一系列問題[18]。在本研究中通過調用sklearn中的svm.SVM算法實現支持向量機建模,參數kernel(核函數)選擇“rbf”,其余超參數選擇最優組合,然后調用fit函數用訓練集擬合模型,通過predict函數輸出預測值。
隨機森林(random forest)算法首先在變量和數據的使用上進行隨機化,削弱數據間的相關性,構造大量的規則樹,通過簡單投票判斷類別并匯總結果[19]。它能夠很好地預測多達幾千個解釋變量的作用,被譽為當前最好的機器學習算法之一。本研究通過調用sklearn中的RandomForestClassifier算法實現隨機森林建模,參數criterion(衡量指標)選擇“gini”,其余超參數選擇最優組合,然后調用fit函數用訓練集擬合模型,通過predict函數輸出預測值。
K近鄰(K-nearest neighbor)的思想是,如果待測樣本與訓練集中的k個樣本最相似(即在特征空間中最鄰近),并且k個樣本中的大多數屬于某類,則待測樣本也屬于該類[20]。k值的選擇、距離度量、分類決策規則是K 近鄰法的3 個基本要素[21]。本研究通過調用sklearn 中的KNeighborsClassifier 算法實現K 近鄰建模,參數weights(近鄰權)選擇“distance”,其余超參數選擇最優組合,然后調用fit函數用訓練集擬合模型,通過predict函數輸出預測值。
XGBoost算法通過對損失函數進行二階泰勒展開,然后在損失函數之外對正則項求得最優解,它可以充分利用多核CPU并行計算的優勢,從而能夠更快地進行模型探索[22]。本研究通過調用xgboost庫中的sklearn接口XGBClassifier實現XGBoost建模,參數objective(目標函數)選擇“multi:softmax”,其余超參數選擇最優組合,然后調用fit 函數用訓練集擬合模型,通過predict函數輸出預測值。
BP 神經網絡(backpropagation neural network)的結構包括輸入層、隱含層、輸出層。該算法的工作流程:先將輸入示例提供給輸入層神經元,然后逐層將信號前傳,直到產生輸出層的結果;然后計算輸出層的誤差,再將誤差逆向傳播至隱層神經元,最后根據隱層神經元的誤差對連接權和閾值進行調整,該迭代過程循環進行,直到達到停止條件為止[23]。本研究通過torch.nn模塊層層堆疊的方式搭建神經網絡分類器,神經網絡中包含1個輸入層、2個隱含層和1個輸出層。其中輸入層與隱含層之間、隱含層與隱含層之間選擇Relu 激活函數,輸出層選擇Softmax函數進行多分類輸出,訓練迭代周期設定為50,其余超參數選擇最優組合。在每一個訓練周期(epoch)通過DataLoader 方法循環獲得訓練batch(批次),對每一批數據使用crossentropy loss(交叉熵損失函數)作為模型的學習策略,優化器選擇Adam(自適應矩估計算法),然后通過torch.optim模塊完成優化器清零、損失反向傳播、優化器更新等訓練步驟。
邏輯回歸、支持向量機、K 近鄰、隨機森林、XGBoost 采用GridSearchCV 模塊通過參數列表param_grid尋找最優模型的超參數組合,使用分層K(K=5)折交叉驗證。BP神經網絡在Optuna框架下創建objective(目標函數),objective的評估指標設置為accuracy(準確率),通過study(研究對象)最大化目標函數值進行30次trials(試驗),并在試驗完成后從study中選擇最優的超參數組合。
以上模型均使用準確率(accuracy)、精確率(precision)、召回率(recall)、f1分數(f1 score)、混淆矩陣、受試者工作特征(ROC)曲線及曲線下面積(AUC)評估模型的性能。
高級檢索得到文獻3 519篇,一框式檢索得到醫案文獻559篇。去除重復文獻后得到文獻963篇,含可供錄入的醫案1 021則。
2.1.1 邏輯回歸
通過邏輯回歸建模后輸出的各證型ROC 曲線見圖1,混淆矩陣見圖2。
圖1 邏輯回歸模型ROC曲線
圖2 邏輯回歸模型混淆矩陣
2.1.2 支持向量機
通過支持向量機建模后輸出的各證型ROC曲線見圖3,混淆矩陣見圖4。
圖3 支持向量機模型ROC曲線
圖4 支持向量機模型混淆矩陣
2.1.3 K近鄰
通過K 近鄰法建模后輸出的各證型ROC 曲線見圖5,混淆矩陣見圖6。
圖5 K近鄰模型ROC曲線
圖6 K近鄰模型混淆矩陣
2.1.4 隨機森林
通過隨機森林建模后輸出的各證型ROC 曲線見圖7,混淆矩陣見圖8。
圖7 隨機森林模型ROC曲線
圖8 隨機森林模型混淆矩陣
2.1.5 XGBoost
通過XGBoost 建模后輸出的各證型ROC 曲線見圖9,混淆矩陣見圖10。
圖10 XGBoost模型混淆矩陣
2.1.6 BP神經網絡
通過BP神經網絡建模的accuracy-loss曲線見圖11。x軸代表epoch(訓練周期),y軸代表準確率和損失。隨著迭代次數增加,accuracy逐漸上升,loss逐漸下降,當epoch在50左右時曲線趨于平緩,達到收斂。神經網絡建模輸出的各證型ROC曲線見圖12,混淆矩陣見圖13。
圖11 神經網絡訓練過程accuracy-loss曲線
圖12 BP神經網絡模型ROC曲線
圖13 BP神經網絡模型混淆矩陣
通過網格搜索和貝葉斯優化后的各辨證模型的最優超參數見表1,其中Optuna超參數自動尋優過程的優化歷史曲線見圖14。
表1 模型最優超參數
圖14 Optuna優化歷史曲線
在相同測試集下各分類模型的accuracy、precision、recall、f1 score及AUC值見表2。從表2可知,高斯徑向基核函數支持向量機模型的accuracy、precsion、recall、f1 score達0.86,AUC值達0.98,各項評估指標均優于其他分類器模型。
表2 6種算法模型性能評估指標
模型可解釋性在醫學領域十分重要,醫療輔助決策系統必須是可理解的、可解釋的。在理想狀態下,模型應向所有相關方解釋提供對應決策的完整邏輯,才能得到醫生信任[24]。SHAP(SHapley Additive exPlanations)值是由Lundberg 和Lee[25]于2017 年提出的用于解釋任何機器學習模型輸出的方法。SHAP值源自博弈論中的shaplely value,該方法量化了模型中每個特征對觀察結果最終預測的貢獻,使用基于所有可能的特征子集組合(包括給定特征)預測模型[26]。本研究按照證型分類求得每個樣本特征對應的SHAP值,并使用SHAP值的平均值作為該特征的重要性值,從而得到全局解釋,以此闡明模型中貢獻度較大的特征。
通過模型性能比較可以看出支持向量機的預測性能優于其他機器學習模型,因此本研究在支持向量機的基礎上,調用SHAP 庫的Explainer API 降序輸出PPS各證型的特征重要性(排名前10位),見圖15。由圖可知,對心脾兩虛證,齒痕舌、大便溏薄、心悸、脈弱、納差等特征有較高貢獻度;對氣滯血瘀證,舌黯紅、脈澀、瘀斑瘀點舌、心煩、胸悶等特征有較高貢獻度;對肝氣郁結證,脈弦、心煩、善太息、情緒低落、胸脅脹痛等特征有較高貢獻度,對肝郁化火證,急躁易怒、心煩、脈弦、口苦、小便黃赤等特征有較高貢獻度;對腎虛肝旺證,脈弦、急躁易怒、口苦、手足心熱、乏力等特征有較高貢獻度;對腎陽虛證,脈沉、畏寒、四肢不溫、面色?白、舌淡白等特征有較高貢獻度;對腎陰虛證,心煩、盜汗、脈細、手足心熱、口干等特征有較高貢獻度;對腎陰陽兩虛證,脈沉、脈細、腰膝酸軟、健忘、畏寒等特征有較高貢獻度。
圖15 PPS各證型排名前10位的特征貢獻度
隨著中醫藥現代化研究不斷深入,中醫藥臨床數據量與日俱增,其數據形式和來源更加多樣、廣泛和復雜。傳統的數理統計分析方法和工具已無法滿足中醫藥臨床科研的需求,面對更加復雜、海量的醫學數據和信息,機器學習算法不僅能為中醫辨證提供有力支持[27-28],也能與現代醫學實驗室指標相結合,提高診斷的準確性。
本研究基于邏輯回歸、支持向量機、K近鄰、隨機森林、XGBoost、BP 神經網絡6 種機器學習算法,通過文獻中的醫案數據對PPS的智能辨證進行分析和探索。研究結果表明,K近鄰在6個分類器模型中表現較差,尤其不能較好地區分腎虛肝旺證和肝郁化火證,在75例腎虛肝旺證中,有22例被誤分類為肝郁化火證。XGBoost在心脾兩虛證的分類上預測能力較弱,18例心脾兩虛證僅14例分類正確。隨機森林在腎陽虛證的預測方面表現一般,17例腎陽虛證中有5例被預測為腎陰陽兩虛證。邏輯回歸在各證型的分類任務上表現一般。BP神經網絡在腎虛肝旺證的分類上表現最佳,但在其余證型的預測上表現一般。支持向量機在6個分類器中預測性能最佳,各證型的分類正確率都很高,是較為理想的、泛化能力最好的分類器。BP神經網絡具有良好的容錯性、自組織適應性和學習能力,在疾病的診斷和預后等方面應用廣泛。但由于本研究樣本量偏小,BP神經網絡的分類效果并不十分理想。另外,神經網絡算法對于四診信息的分類方法是隨機產生一個分離超平面并移動該超平面,直至屬于不同證型的癥狀和體征剛好位于該超平面的各不同側面,而支持向量機算法不但能夠找到一個滿足分類需求的超平面,并使各癥狀在訓練集中的點距離超平面盡可能遠,且這樣的超平面具有唯一性。因此,神經網絡算法僅能使分離超平面將訓練集中的數據分開,但各證型的離散度并非最佳;支持向量機算法不僅能使超平面將訓練集中的數據分開,還能保證各證型的離散度最大化[29]。可知,支持向量機能很好地解決高維和局部極值的問題,克服神經網絡算法中合理結構難以確定和存在局部最優等缺陷[30]。
近年來,支持向量機在中醫藥領域已經逐漸受到學者的關注。顧天宇等[31]基于支持向量機對中風病中醫證候進行分類,模型分類準確率達86%。許明東等[18]基于支持向量機算法建立高血壓中醫證候診斷模型,總體準確率達90%。陳菊萍[32]運用支持向量機實現了中醫證候信息的分類研究,平均訓練模型的分類精度達98.8%。但該算法的缺點是面對大樣本時矩陣存儲和計算將耗費大量內存和時間,其訓練速度會變慢,適用性也受到影響[33]。
綜上,在中醫診斷方面的中小型多分類類別不平衡數據集上,支持向量機模型較其他機器學習算法有更好的表現,對中醫臨床更有指導意義和參考價值。