本文,我們將創建一個簡單的python機器學習算法,以便能夠通過聲音來診斷該人是否爲患者。
我們將使用一組(健康者和帕金森病患者)音頻文件庫,通過對音頻進行一些測量來構建我們的機器學習數據集。建立機器學習數據集後,我們將使用SciKit Learn庫訓練線性迴歸模型。最後,我們將構建一個python庫,這個庫可以輕鬆集成到其他應用程序中。
首先,我們需要將音頻文件轉換成包含音頻測量值以及患者是否健康標識的表格。
我們將要使用的音頻文件(https://zenodo.org/record/2867216#.Xp4kVsgzaUl )。
讓我們從導入必要的Python庫開始。
接下來,我們將創建一個函數,該函數允許您對輸入音頻文件進行各種複雜的測量。這些測量是通過parselmouth庫實現的,它允許在python代碼中使用praat。(https://parselmouth.readthedocs.io/en/stable/)
然後,我們爲每種類型的測量創建一個列表,再創建一個列表用來表示病人是否健康。在列表被填入後用來構建機器學習數據集。
現在,我們可以使用前面創建的函數通過對音頻文件進行測量來填充列表。我們需要使用4個for循環來填充列表。
最後,藉助於panda和numpy庫,我們必須將這些列表分組到一個表中,從而將它們轉換爲機器學習數據集。
我們將使用前面提到的SciKit learn庫的線性迴歸算法,該算法允許我們根據幾個參數(measures)對標籤(0或1)進行分類。
首先,我們將通過指定參數(measurements)和標籤(0或1)來訓練我們的機器學習模型。
我們獲得0.63的精度,考慮數據集的數據如此有限,這個結果還是令人滿意的。
導出機器學習模型的Python代碼如下:
import joblibclf.fit(X_train, y_train)joblib.dump(clf, "trainedModel.sav")
製作庫
請記住,我們的目標是獲得一個可以被另一個程序使用的庫。Python實現代碼如下:
調用上述庫的Python代碼如下:
from RecognitionLib import *path = "../trainedModel.sav" #Model pathclf = loadModel(path) #Model loadingprint(predict(clf, "../../audio/ok.wav"))#Predicition
可以通過擁有更大的數據集來改進機器學習模型,從而獲得更高的精度(即通過從帕金森氏病患者那裏獲得更多的音頻樣本)。
沒得源碼,不過可以加羣:850591259