經過這些年的發展,我們都確信ML即使不能表現得更好,至少也可以在幾乎所有地方與前ML時代的解決方案相匹配。比如說一些規則約束,我們都會想到能否把它們替換為基於樹的ml模型。但是世界並不總是黑白分明的,雖然機器學習在解決問題上肯定有自己的位置,但它並不總是最好的解決方案。基於規則的系統甚至可以勝過機器學習,特別是在可解釋性、健壯性和透明度至關重要的領域。
在本文中,我將介紹一些實際的案例,以及如何將手動規則和ML結合使得我們的方案變得更好。
基於規則的系統是透過預定義規則來為決策提供支持,系統根據儲存的規則評估數據,並根據映射執行特定操作。
以下是幾個例子:
詐欺偵測:在詐欺偵測中,基於規則的系統可用於根據預定義規則快速標記和調查可疑交易。
比如說國際象棋的作弊者,他們的基本作法是在另一個視窗中安裝電腦象棋應用程序,使用程式進行對弈,對於程式來說無論多複雜,每一步都需要4- 5 秒才能完成。所以加上「閾值」來計算玩家每一步的時間,如果在浮動不大就有可能被判斷為是作弊者,如下圖所示:
醫療保健產業:基於規則的系統可用於管理處方和防止用藥錯誤。它們還可以非常有用地幫助醫生根據先前的結果為患者開出額外的分析處方。
供應鏈管理:在供應鏈管理中,基於規則的系統可用於產生低庫存警報、協助管理到期日或新產品推出。
機器學習 (ML) 系統使用演算法從資料中學習並做出預測或採取行動,且無需明確編程。機器學習系統使用透過大量資料訓練所獲得的知識來對新資料進行預測和決策。隨著更多資料用於訓練,ML 演算法可以提高其效能。機器學習系統包括自然語言處理、影像和語音辨識、預測分析等。
詐欺偵測:銀行可能會使用機器學習系統從過去的詐騙交易中學習並即時識別潛在的詐騙活動。或者,它可能會對系統進行逆向工程並尋找看起來非常“異常”的交易。
醫療保健:醫院可能會使用 ML 系統來分析病患數據,並根據某些 X 光預測病患罹患某種疾病的可能性。
基於規則的系統和ML系統都有各自的優點和缺點
基於規則的系統的優點很明顯:
缺點:
硬編碼規則可以用作特徵工程過程的一部分,以識別和提取輸入資料中的重要特徵。例如,如果問題領域清晰明確,規則可以輕鬆且準確地定義,硬編碼規則可以用來創建新特徵或修改現有特徵,以提高機器學習模型的效能。雖然硬編碼規則和特徵工程是兩種不同的技術,但它們可以結合使用以提高機器學習模型的性能。硬編碼規則可以用於創建新特徵或修改現有特徵,而特徵工程可以用於提取不易透過硬編碼規則捕獲的特徵。
後處理:四捨五入或歸一化最終結果。
硬編碼規則可以作為後處理階段的一部分來修改機器學習模型的輸出。例如,如果機器學習模型輸出一組預測結果與某些已知規則或限制條件不一致,硬編碼規則可以用來修改預測結果,使其符合規則或限制條件。例如過濾或平滑等後處理技術可以透過消除雜訊或錯誤,或提高預測的整體準確性來精細機器學習模型的輸出。當機器學習模型輸出機率預測或輸入資料存在不確定性時,這些技術尤其有效。在某些情況下,後處理技術也可以用於使用額外資訊增強輸入資料。例如,如果機器學習模型是在有限資料集上訓練的,後處理技術可以用來從外部來源(如社交媒體或新聞提要)中提取額外的特徵,以提高預測的準確性。
讓我們來看看心臟病的數據:
##如果我們用隨機森林來預測目標類別:clf = RandomForestClassifier(n_estimators=100, random_state=random_seed X_train, X_test, y_train, y_test = train_test_split( df.iloc[:, :-1], df.iloc[:, -1], test_size=0.30, random_state=random_seed ) clf.fit(X_train, y_train))這裡選擇隨機森林的原因之一是它的建構特徵重要性能力。下面可以看到用於訓練的特徵的重要性: #看看結果:
y_pred = pd.Series(clf.predict(X_test), index=y_test.index cm = confusion_matrix(y_test, y_pred, labels=clf.classes_) conf_matrix = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=clf.classes_) conf_matrix.plot())
f1_score(y_test, y_pred): 0.74 recall_score(y_test, y_pred): 0.747這時一位心臟科醫生看到了你的模型。基於他的經驗和領域知識,他認為地中海貧血特徵(thal)比上面所示的要重要得多。所以我們決定建立一個直方圖並查看結果。 然後指定一個強制性規則
y_pred[X_test[X_test["thal"] == 2].index] = 1
#
f1_score(y_test, y_pred): 0.818 recall_score(y_test, y_pred): 0.9結果有了很大的提升。這就是領域知識在評估患者得分方面發揮了重要作用。 詐騙交易下面的資料集是銀行詐騙交易。 資料集高度不平衡:
df["Class"].value_counts() 0 28431 1 4925為了建立規則,我們查看特徵的分佈箱線圖:
我們們要寫一個自己的HybridEstimator類,他將作為我們手動規則的預估器:
from hulearn.classification import FunctionClassifier rules = { "V3": ("<=", -2), "V12": ("<=", -3), "V17": ("<=", -2), } def create_rules(data: pd.DataFrame, rules): filtered_data = data.copy() for col in rules: filtered_data[col] = eval(f"filtered_data[col] {rules[col][0]} {rules[col][1]}") result = np.array(filtered_data[list(rules.keys())].min(axis=1)).astype(int) return result hybrid_classifier = FunctionClassifier(create_rules, rules=rules)
混合模型可以幫助我們將領域知識和機器學習模型結合起來。混合模型通常由多個子模型組成,其中每個子模型都針對特定的領域知識進行了最佳化。這些子模型可以是基於硬編碼規則的模型,也可以是基於統計方法的模型,甚至可以是基於深度學習的模型。
混合模型可以利用領域知識來指導機器學習模型的學習過程,從而提高模型的準確性和可靠性。例如,在醫學領域中,混合模型可以結合醫生的專業知識和機器學習模型的能力,以診斷患者的疾病。在自然語言處理領域,混合模型可以結合語言學知識和機器學習模型的能力,以便更好地理解和產生自然語言。
總之,混合模型可以幫助我們將領域知識和機器學習模型結合起來,從而提高模型的準確性和可靠性,並且在各種任務中都有廣泛的應用。
以上是結合基於規則和機器學習的方法來建立強大的混合系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!