五種機器學習方法深度比較與案例實現(以手寫數字識別為例)

????????正如人們有各種各樣的學習方法一樣,機器學習也有多種學習方法。若按學習時所用的方法進行分類,則機器學習可分為機械式學習指導式學習示例學習類比學習解釋學習等。這是溫斯頓在1977年提出的一種分類方法。

有關機器學習的基本概念,可看我文章:機器學習的基本概念-CSDN博客?

有關機械式學習,可看我文章:機器學習之一:機械式學習-CSDN博客??

有關指導式學習,可看我文章:機器學習之二:指導式學習-CSDN博客?

有關歸納學習,可看我文章:機器學習之三:歸納學習-CSDN博客?

有關類比學習,可看我文章:機器學習之四:類比學習-CSDN博客??

有關解釋學習,可看我文章:機器學習之五:基于解釋的學習-CSDN博客?

不知不覺間,我們已經探討完了五種機器學習方法。

????????本文對五種機器學習方法進行深度比較,并在同一個案例下區分它們,這里選擇手寫數字識別作為案例,因為它直觀且適合多種方法演示,再用Python代碼實現。

一、五種方法核心對比表

先回顧一下每種方法的核心特點:

(1)機械式學習直接存儲輸入輸出對,查詢時匹配。適合小規模、固定輸入的場景,如簡單映射。

(2)指導式學習監督學習,使用帶標簽數據訓練模型,如邏輯回歸、神經網絡。

(3)歸納學習從實例中歸納規則,如決策樹,通過信息增益分裂節點。

(4)類比學習通過相似性遷移,如 k-NN,計算最近鄰預測。

(5)基于解釋的學習利用領域知識構造解釋,生成泛化規則,需要手動定義規則

????????以下從核心思想、學習方式、模型表示、泛化能力、領域知識依賴、典型算法、數據效率、可解釋性等維度進行深度比較:

維度

機械式學習

指導式學習

歸納學習

類比學習

基于解釋的學習

核心思想

記憶存儲與直接檢索

帶標簽數據驅動的函數擬合

從實例歸納普遍規則

相似案例遷移

領域知識引導的解釋泛化

學習方式

無學習過程,僅存儲實例

監督學習(數據 + 標簽)

無監督 / 弱監督的規則提取

基于相似度的案例推理

邏輯解釋驅動的知識提煉

模型表示

記憶表 / 哈希表

參數化模型(如神經網絡)

符號規則 / 決策樹

案例庫 + 相似度度量

邏輯規則 / 證明樹

泛化能力

僅能處理已知輸入

統計泛化(依賴數據分布)

規則泛化(依賴歸納偏置)

相似性泛化(依賴相似度函數)

邏輯泛化(依賴領域理論)

領域知識依賴

低(僅需標簽)

中(特征工程)

中(相似度定義)

高(需完整領域理論)

典型算法

查表法、最近鄰(精確匹配)

邏輯回歸、CNN

ID3、決策樹、關聯規則

k-NN、遷移學習

PROLOG-EBG、規則歸納

數據效率

低(需存儲所有實例)

中(依賴樣本量)

中(少量實例可歸納)

中(需案例庫)

高(單個實例可泛化)

可解釋性

高(直接查看記憶表)

低(黑箱模型)

高(規則透明)

中(相似度計算可解釋)

極高(邏輯證明可追溯)

二、統一案例:手寫數字識別(MNIST數據集)

(一)案例背景

????????為了更好的比較五種方法的區別,統一案例為手寫數字識別,預處理數據,分別實現五種方法。需要注意每種方法的適用場景和實現差異,比如機械式學習只能處理見過的樣本,而指導式學習可以泛化。

????????案例背景:識別 28x28 像素的手寫數字圖像(0-9),輸入為 784 維像素向量輸出為數字類別。以下通過五種方法實現并對比。

數據預處理(通用步驟)

首先加載MNIST數據集,預處理數據。然后分別實現五種方法:

(1)機械式學習:建立字典存儲訓練數據,預測時查找最近鄰(這里簡化為精確匹配,實際可能需要相似度計算)。

(2)指導式學習:使用邏輯回歸作為代表,訓練模型并預測。

(3)歸納學習:實現決策樹,基于信息增益構建模型。

(4)類比學習:k-NN 算法,計算歐氏距離找最近鄰。

(5)基于解釋的學習:手動定義規則,比如基于像素值的簡單規則,這里簡化示例。

預處理數據的python代碼如下:

import numpy as npfrom sklearn.datasets import fetch_openmlfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.metrics import accuracy_score# 加載MNIST數據集mnist = fetch_openml('mnist_784', version=1, as_frame=False)X, y = mnist.data, mnist.target.astype(int)X = X / 255.0 ?# 歸一化像素值到[0,1]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

五種方法代碼實現與案例區分

1. 機械式學習(Rote Learning)

核心邏輯存儲訓練實例,預測時通過精確匹配或最近鄰檢索(簡化為精確匹配,實際需相似度計算)。
局限性僅能識別訓練中完全相同的圖像,無法處理新變體

python代碼如下:

class RoteLearner:def __init__(self):self.memory = {} ?# 存儲實例:鍵為圖像向量,值為標簽def fit(self, X, y):# 為簡化,僅存儲前1000個訓練實例(實際需存儲所有,此處防內存溢出)for x, label in zip(X[:1000], y[:1000]):self.memory[tuple(x.flatten())] = labeldef predict(self, X):y_pred = []for x in X:key = tuple(x.flatten())# 查找最接近的實例(簡化為精確匹配,實際需計算距離)# 此處僅演示,實際應使用k-NN等相似度檢索label = self.memory.get(key, -1) ?# 未匹配返回-1y_pred.append(label)return np.array(y_pred)# 實例化與測試rote_learner = RoteLearner()rote_learner.fit(X_train, y_train)y_rote_pred = rote_learner.predict(X_test)rote_accuracy = accuracy_score(y_test, y_rote_pred)print(f"機械式學習準確率: {rote_accuracy:.2%}") ?# 通常極低,因難有完全相同圖像

案例表現僅能識別訓練中完全重復的圖像,準確率接近 0%(因MNIST無重復圖像),實際需結合相似度(如k-NN),但本質仍是記憶檢索。

2. 指導式學習(Supervised Learning,以邏輯回歸為例)

核心邏輯使用帶標簽數據訓練模型,最小化交叉熵損失,學習像素到類別的映射

python代碼如下:

from sklearn.linear_model import LogisticRegression# 標準化數據(邏輯回歸對尺度敏感)scaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test)# 訓練邏輯回歸模型lr = LogisticRegression(max_iter=1000, multi_class='ovr')lr.fit(X_train_scaled, y_train)y_lr_pred = lr.predict(X_test_scaled)lr_accuracy = accuracy_score(y_test, y_lr_pred)print(f"指導式學習(邏輯回歸)準確率: {lr_accuracy:.2%}") ?# 約92%

案例表現:通過統計學習像素模式,能泛化未見過的圖像,準確率隨數據量和模型復雜度提升(如 CNN 可到 99%)。

3. 歸納學習(Inductive Learning,以決策樹為例)

核心邏輯通過信息增益歸納決策規則,構建樹狀結構,如“若像素 (10,10)>0.5 則為數字 9”。

python代碼如下:

from sklearn.tree import DecisionTreeClassifierfrom sklearn.tree import export_graphvizimport graphviz# 訓練決策樹dt = DecisionTreeClassifier(max_depth=5, random_state=42)dt.fit(X_train, y_train)y_dt_pred = dt.predict(X_test)dt_accuracy = accuracy_score(y_test, y_dt_pred)print(f"歸納學習(決策樹)準確率: {dt_accuracy:.2%}") ?# 約65%# 將feature_names轉換為字符串列表feature_names = [str(i) for i in range(784)]# 將class_names轉換為字符串列表class_names = [str(i) for i in range(10)]# 導出決策樹為.dot文件dot_data = export_graphviz(dt, out_file=None, feature_names=feature_names, class_names=class_names, filled=True)# 使用graphviz庫將.dot數據轉換為圖形graph = graphviz.Source(dot_data)# 保存為PNG圖片graph.render('digit_tree', format='png', cleanup=True, view=True)

案例表現生成可解釋的規則(如“像素 (5,5)>0.3 且像素 (15,15)<0.2 則為 0”),但易過擬合,需剪枝

graphviz官網:https://graphviz.org/download/

安裝graphviz之后并同步安裝graphviz包(pip install graphviz),就可以得到如下可視化決策樹。

4. 類比學習(Analogical Learning,以 k-NN 為例)

核心邏輯計算測試圖像與訓練圖像的歐氏距離,取最近 k 個鄰居的多數標簽作為預測

python代碼如下:

from sklearn.neighbors import KNeighborsClassifier# 訓練k-NN模型(k=5)knn = KNeighborsClassifier(n_neighbors=5, metric='euclidean')knn.fit(X_train, y_train)y_knn_pred = knn.predict(X_test)knn_accuracy = accuracy_score(y_test, y_knn_pred)print(f"類比學習(k-NN)準確率: {knn_accuracy:.2%}") ?# 約97%

案例表現通過相似度遷移,對變形數字(如傾斜的 3)依賴鄰居案例,計算復雜度高(需存儲全部訓練數據)。

5. 基于解釋的學習(Explanation-Based Learning,簡化規則示例)

核心邏輯手動定義領域知識(如“數字 0 的中間像素值低,邊緣像素值高”),構造解釋并泛化規則。

python代碼如下:

class ExplanationBasedLearner:def __init__(self):# 手動定義規則:以數字0為例,假設中心5x5區域像素均值<0.2則為0self.rules = {0: lambda x: np.mean(x[12:16, 12:16]) < 0.2, ?# 中心5x5區域# 其他數字規則需手動添加,此處僅演示0}def predict(self, X):y_pred = []for x in X:x_reshaped = x.reshape(28, 28)label = -1for digit, rule in self.rules.items():if rule(x_reshaped):label = digitbreak ?# 假設規則無沖突y_pred.append(label)return np.array(y_pred)# 實例化與測試(僅能識別0,其他返回-1)eb_learner = ExplanationBasedLearner()y_eb_pred = eb_learner.predict(X_test)# 修正預測(未匹配的樣本用多數類填充,此處簡化)y_eb_pred[y_eb_pred == -1] = 5 ?# 假設默認預測為5eb_accuracy = accuracy_score(y_test, y_eb_pred)print(f"基于解釋的學習準確率: {eb_accuracy:.2%}") ?# 僅正確識別部分0,約16%

案例表現依賴人工定義規則,僅能識別符合規則的特例(如清晰的 0),泛化能力差,需完善領域理論(如添加更多數字的幾何規則)。

(四)案例結果對比與分析

方法

準確率

關鍵因素

失敗原因

機械式學習

~0%

依賴精確匹配,MNIST 無重復圖像

無法處理新實例,僅適用于固定輸入場景

指導式學習(LR)

~92%

統計泛化,學習像素相關性

線性模型無法捕捉復雜非線性模式

歸納學習(DT)

~65%

規則泛化,樹結構解釋性強

過擬合,特征選擇依賴信息增益統計

類比學習(k-NN)

~97%

相似度遷移,存儲所有訓練案例

計算成本高,依賴案例庫規模

基于解釋的學習

~16%

手動規則,領域知識極不完備

規則稀疏,無法覆蓋多樣實例

、深度總結與適用場景

1. 機械式學習

適用輸入空間有限且固定(如簡單映射表、硬件指令集)。

案例局限:手寫數字變形多樣,無法通過精確匹配識別。

2. 指導式學習

優勢數據驅動,適合大規模標注數據場景(如圖像、語音識別)。

案例關鍵依賴高質量標簽,模型復雜度影響準確率(CNN遠優于LR)。

3. 歸納學習

優勢生成可解釋規則,適合知識提取(如醫療診斷、金融風控)。

案例局限決策樹易過擬合,需剪枝或集成學習(如隨機森林)。

4. 類比學習

優勢無需顯式模型,適合小樣本學習(如遷移學習、元學習)。

案例關鍵相似度度量(如歐氏距離)決定性能,需高效索引(如KD樹)。

5. 基于解釋的學習

適用領域知識明確且完整(如專家系統、邏輯推理)。

案例挑戰:手寫數字的幾何規則復雜,人工定義困難,需結合符號邏輯與深度學習(如神經符號系統)。

、擴展思考:方法融合趨勢

1指導式 + 歸納學習:決策樹集成算法(如XGBoost)結合統計學習與規則歸納。

2類比 + 指導式學習:小樣本學習(Few-Shot Learning)通過遷移學習(類比)+ 微調(指導)提升泛化。

3基于解釋的學習 + 深度學習:可解釋 AI(XAI)從神經網絡提取邏輯規則,彌補黑箱缺陷。

通過同一案例的實現與對比,五種方法的核心差異與適用場景得以清晰展現。實際應用中,需根據數據規模、領域知識、可解釋性需求選擇合適方法,或采用融合策略突破單一范式的局限。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78739.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Blender插件 三維人物角色動作自動綁定 Auto-Rig Pro V3.68.44 + Quick Rig V1.26.16

Auto-Rig Pro是一個集角色綁定、動畫重定向和Unity、Unreal Engine的Fbx導出于一體的全能解決方案。最初作為我個人的內部角色綁定工具開發&#xff0c;我幾年前將其發布&#xff0c;并自那時起增加了許多新功能。 Blender插件介紹 Auto-Rig Pro插件簡介 Auto-Rig Pro是一個強…

網絡基礎概念:從菜鳥到入門

前言&#xff1a;快遞小哥的故事 想象一下你要給朋友寄個禮物&#xff0c;這個過程其實和網絡通信非常相似&#xff1a; 1. 你需要知道朋友的”地址“&#xff08;IP地址&#xff09; 2. 要注明是送到他家大門還是物業代收&#xff08;端口號&#xff09; 3. 要選擇快遞公司并…

23種設計模式-行為型模式之中介者模式(Java版本)

Java 中介者模式&#xff08;Mediator Pattern&#xff09;詳解 &#x1f9e0; 什么是中介者模式&#xff1f; 中介者模式是一種行為型設計模式&#xff0c;它通過定義一個中介者對象來封裝一組對象之間的交互。中介者使得各個對象不需要顯式地知道彼此之間的關系&#xff0c…

【Redis】基礎4:作為分布式鎖

文章目錄 1. 一些概念2. MySQL方案2.1 方案一&#xff1a;事務特性2.1.1 存在的問題2.1.2 解決方案 2.2 方案二&#xff1a;樂觀鎖2.3 方案三&#xff1a;悲觀鎖 3. Redis3.1 實現原理3.2 實現細節3.2.1 問題1&#xff1a;持有期間鎖過期問題3.2.2 問題2&#xff1a;判斷和釋放…

深度學習---框架流程

核心六步 一、數據準備 二、模型構建 三、模型訓練 四、模型驗證 五、模型優化 六、模型推理 一、數據準備&#xff1a;深度學習的基石 數據是模型的“燃料”&#xff0c;其質量直接決定模型上限。核心步驟包括&#xff1a; 1. 數據收集與標注 來源&#xff1a;公開數據集…

阿里云 OpenManus 實戰:高效AI協作體系

阿里云 OpenManus 實戰&#xff1a;高效AI協作體系 寫在最前面初體驗&#xff1a;快速部署&#xff0c;開箱即用 真實案例分享&#xff1a;從單體開發到智能良好提示詞過程展示第一步&#xff1a;為亞馬遜美國站生成商品描述第二步&#xff1a;為eBay全球站生成商品描述結果分析…

Kubernetes》》k8s》》explain查 yaml 參數

在創建json 和yaml 時&#xff0c;我們可能不知道具體的參數該怎么寫。同樣 我們可以通過explain這個 命令來查看 每個參數具體的作用與寫法 # 查看 pod類性有哪些參數 kubectl explain pod# 查看pod中 spec下面有哪些參數 kubectl explain pod.spec

從零構建Dagster分區管道:時間+類別分區實戰案例

分區是Dagster中的核心抽象概念&#xff0c;它允許我們管理大型數據集、處理增量更新并提高管道性能。本文將詳細介紹如何創建和實現基于時間和類別的分區資產。 什么是分區&#xff1f; 分區是將數據集劃分為更小、更易管理的部分的技術。在Dagster中&#xff0c;分區可以基于…

Cursor:AI時代的智能編輯器

在開發者社區掀起熱潮的Cursor&#xff0c;正以破竹之勢重塑編程工具格局。這款基于VS Code的AI優先編輯器&#xff0c;不僅延續了經典IDE的穩定基因&#xff0c;更通過深度集成的智能能力&#xff0c;將開發效率推向全新維度。2023年Anysphere公司獲得的6000萬美元A輪融資&…

SpringMVC再復習1

一、三層架構 表現層&#xff08;WEB 層&#xff09; 定義 &#xff1a;是應用程序與客戶端進行交互的最外層&#xff0c;主要負責接收用戶的請求&#xff0c;并將處理結果顯示給用戶。 作用 &#xff1a;在 Spring MVC 中&#xff0c;表現層通常采用 MVC 設計模式來構建。 技…

Centos 7系統 寶塔部署Tomcat項目(保姆級教程)

再看文章之前默認已經安裝好系統&#xff0c;可能是云系統&#xff0c;或者是虛擬機。 寶塔安裝 這個比較簡單&#xff0c;參考這個老哥的即可&#xff1a; https://blog.csdn.net/weixin_42753193/article/details/125959289 環境配置 進入寶塔面板之后會出現環境安裝&…

Nginx核心功能

目錄 一&#xff1a;基于授權的訪問控制 1&#xff1a;基于授權的訪問控制簡介 2&#xff1a;基于授權的訪問控制步驟 &#xff08;1&#xff09;使用htpasswd 生成用戶認證文件 &#xff08;2&#xff09;修改密碼文件權限為400&#xff0c;將所有者改為nginx&#xff0c;…

AnimateCC基礎教學:漫天繁星-由DeepSeek輔助完成

1.界面及元件抓圖: 2.核心代碼: // 初始化設置 var stars []; var stars2 []; var numStars 100; var stageWidth stage.canvas.width; var stageHeight stage.canvas.height; console.log(stageWidth, stageHeight);// 創建星星函數 function createStar() {var star n…

通過DeepSeek大語言模型控制panda機械臂,聽懂人話,擬人性回答。智能機械臂助手又進一步啦

文章目錄 前言環境配置運行測試報錯 前言 通過使用智能化的工作流控制系統來精確操控機械臂&#xff0c;不僅能夠基于預設算法可靠地規劃每個動作步驟的執行順序和力度&#xff0c;確保作業流程的標準化和可重復性&#xff0c;還能通過模塊化的程序設計思路靈活地在原有工作流中…

分享一款免費的 AI 工作流平臺

分享一款 AI 工作流/任務流平臺&#xff0c;通過直觀的流程圖設計&#xff0c;輕松實現復雜業務流程的自動化與可視化&#xff0c;無縫集成 AI 大模型、AI 生圖、數據庫、條件分支、并行節點、自定義任務節點等等。 效果圖&#xff1a; 官網體驗地址&#xff1a;https://www.…

前端開發本地配置 HTTPS 全面詳細教程

分為兩步&#xff1a;生成證書、本地服務配置使用證書一、HTTPS 的基本概念 HTTPS 是一種安全的 HTTP 協議&#xff0c;它通過 SSL/TLS 對數據進行加密&#xff0c;確保數據在傳輸過程中不被竊取或篡改。在前端開發中&#xff0c;某些功能&#xff08;如 Geolocation API、Web…

day10 python機器學習全流程實踐

在機器學習的實踐中&#xff0c;數據預處理與模型構建是極為關鍵的環節。本文將回顧數據預處理的全流程&#xff0c;并基于處理后的數據完成簡單的機器學習建模與評估&#xff0c;暫不涉及復雜的調參過程。 一、預處理流程回顧 機器學習的成功&#xff0c;很大程度上依賴于高…

4月28號

初認web前端: web標準: HTML:

【Linux系統】systemV共享內存

system V共享內存 在Linux系統中&#xff0c;共享內存是一種高效的進程間通信&#xff08;IPC&#xff09;機制&#xff0c;它允許兩個或者多個進程共享同一塊物理內存區域&#xff0c;這些進程可以將這塊區域映射到自己的虛擬地址空間中。 共享內存區是最快的IPC形式。一旦這…

(七)RestAPI 毛子(Http 緩存/樂觀鎖/Polly/Rate limiting/異步大文件上傳)

文章目錄 項目地址一、Http Cache1.1 服務注冊1.2 Validation with ETag1. 添加ETagMiddleware中間件2. 創建內存ETag存儲器3. 服務注冊4. 測試二、使用ETag實現樂觀鎖2.1 添加樂觀鎖方法2.2 修改Controller2.3 測試樂觀鎖三、Rate Limiting3.1 添加速率控制服務1. 在Program里…