機器學習2 (筆記)(樸素貝葉斯,集成學習,KNN和matlab運用)

樸素貝葉斯模型

貝葉斯定理:

常見類型

算法流程

優缺點

集成學習算法

基本原理

常見方法

?KNN(聚類模型)

算法性質:

核心原理:

算法流程

優缺點

matlab中的運用


樸素貝葉斯模型

樸素貝葉斯模型是基于貝葉斯定理與特征條件獨立假設的分類方法,在眾多領域有廣泛應用。

貝葉斯定理

貝葉斯定理解決的核心問題是,當出現新的信息或證據時,如何修正對某個事件發生概率的原有認知。它提供了一種基于先驗知識和新證據來更新概率的方法,體現了概率推理的動態過程。

特征條件獨立假設:假設給定類別下各個特征之間相互獨立。

常見類型

高斯樸素貝葉斯:適用于特征變量為連續型數據,且這些數據服從高斯分布(正態分布)的情況。例如,在根據身高、體重等連續特征判斷人的性別時,可假設這些特征在男性和女性群體中分別服從不同參數的高斯分布。

多項式樸素貝葉斯:常用于文本分類等場景,特征變量通常是離散的計數數據。比如在判斷一篇文檔是否屬于某一主題時,以單詞在文檔中出現的次數作為特征,這些特征符合多項式分布。

伯努利樸素貝葉斯:適用于特征為二值變量的情況,即特征只有兩種取值,如真 / 假、是 / 否等。例如在判斷郵件是否為垃圾郵件時,可將郵件中某特定關鍵詞的出現(是 / 否)作為二值特征。

算法流程

數據準備:收集數據并進行預處理,包括數據清洗、特征提取等。例如在文本分類中,需要對文本進行分詞、去除停用詞等操作。

計算先驗概率:統計每個類別在訓練數據集中出現的頻率P(C),作為先驗概率。比如在垃圾郵件分類中,統計垃圾郵件和正常郵件在訓練集中所占的比例。

計算似然概率:根據特征條件獨立假設,計算每個特征在不同類別下的條件概率

。例如在判斷一封郵件是否為垃圾郵件時,計算某個關鍵詞在垃圾郵件和正常郵件中出現的概率。

預測:對于新的樣本,根據貝葉斯定理計算每個類別下的后驗概率

,選擇后驗概率最大的類別作為預測結果。

,由于

對所有類別相同,所以只需比較分子部分。

優缺點

優點

算法簡單高效:基于簡單的概率計算,訓練和預測速度快,對大規模數據集有較好的適應性。

所需數據量少:在數據較少的情況下仍能表現出較好的性能,且對數據的缺失值不太敏感。

可解釋性強:通過計算概率來進行分類決策,結果相對容易理解,可解釋每個類別預測的依據。

缺點

特征獨立性假設強:實際應用中,特征之間往往存在一定相關性,這可能導致模型性能下降。例如在文本中,某些詞匯可能存在語義關聯,并不完全獨立。

對輸入數據的表達形式敏感:不同的特征表示方式可能會對模型效果產生較大影響,如文本分類中不同的分詞方法。

集成學習算法

一種機器學習范式,它通過組合多個基學習器(Base Learner)來創建一個更強大、更穩健的模型,以提高模型的泛化能力和預測性能。以下從其原理、常見方法、應用場景、優缺點展開介紹:

基本原理

集成學習的核心思想基于 “三個臭皮匠,賽過諸葛亮” 的理念。不同的基學習器可能在處理數據的不同方面或特征上具有優勢,通過將它們結合起來,可以互相補充,減少單一模型的偏差和方差,從而提升整體性能。例如,在預測房價的任務中,一個基學習器可能擅長捕捉房屋面積與價格的關系,另一個可能對房屋所在區域的影響把握更準,集成學習能綜合二者優勢,做出更準確的預測。

常見方法

Bagging(自舉匯聚法)

原理:從原始訓練數據集中有放回地隨機采樣,生成多個與原始數據集大小相同的子數據集,每個子數據集用于訓練一個基學習器。由于采樣的隨機性,不同基學習器基于不同的數據子集進行訓練,從而引入了多樣性。例如,對于一個包含 1000 個樣本的原始數據集,每次有放回地抽取 1000 個樣本組成子數據集,多次抽取得到多個不同的子數據集。

代表算法:隨機森林(Random Forest)是基于 Bagging 的典型算法,它以決策樹為基學習器。在構建每棵決策樹時,不僅對樣本進行有放回采樣,還在節點分裂時隨機選擇特征子集,進一步增加了決策樹之間的差異。最終通過投票(分類任務)或平均(回歸任務)的方式綜合各決策樹的結果。

Boosting(提升法)

原理:基學習器按順序依次訓練,每個新的基學習器會重點關注前一個基學習器預測錯誤的樣本,通過不斷調整樣本權重,使得后續學習器能夠更聚焦于難以分類或預測的樣本。例如,在初始階段,所有樣本權重相同,當第一個基學習器訓練完成后,將預測錯誤的樣本權重增大,這樣下一個基學習器在訓練時就會更關注這些樣本。

代表算法:Adaboost(自適應提升算法)是最早的 Boosting 算法之一,它通過迭代訓練多個弱分類器,并為每個弱分類器賦予不同的權重,最終將這些弱分類器線性組合成一個強分類器。另一個重要的算法是梯度提升樹(Gradient Boosting Tree,GBT),它以決策樹為基學習器,通過不斷擬合殘差(即真實值與當前模型預測值的差值)來提升模型性能。

?KNN(聚類模型)

算法性質:

K - Means 屬于無監督學習算法,旨在將數據集中的樣本劃分為 K 個不同的簇,使同一簇內樣本相似度高,不同簇間樣本相似度低。

核心原理:

隨機選擇 K 個點作為初始聚類中心,然后將每個樣本分配到與其距離最近的聚類中心所在的簇。分配完成后,重新計算每個簇的中心(通常是簇內所有樣本的均值)。不斷重復樣本分配和中心更新步驟,直到聚類中心不再變化或達到預設的迭代次數,此時認為聚類收斂。

算法流程

初始化:隨機選擇 K 個樣本點作為初始聚類中心。

分配樣本:計算每個樣本到 K 個聚類中心的距離,將樣本分配到距離最近的聚類中心所在的簇。

更新聚類中心:計算每個簇內樣本的均值,以此更新聚類中心位置。

判斷收斂:檢查聚類中心是否變化,若變化則返回步驟 2 繼續迭代;若不變或達到最大迭代次數,則結束算法。

優缺點

優點:原理簡單,計算效率高,能快速處理大規模數據集;對處理數值型數據效果較好。

缺點:需事先指定聚類數 K,K 值選擇往往依賴經驗且可能影響結果;對初始聚類中心敏感,不同初始值可能導致不同聚類結果;對非凸形狀的數據分布或存在噪聲的數據聚類效果不佳。

matlab中的運用

1,導入數據*注意這里的變量名訓練的和預測的名字要一致

2,matlab工具箱->分類學習器(或者classificationLearner)

(如果是回歸學習器,就是reegressionLearner)

3,導入數據

有如下的訓練方法

4,并行訓練即可

5,導出模型就可以進行預測了

6,預測

第五步也可以采用導出代碼來預測

在模型導出的時候選擇

然后注釋函數行,然后賦值trainingData就可以了

trainingData=x? ? ? ? ? ? %%%%%%%x為對應的數據

inputTable = trainingData;

predictorNames = {'VarName1', 'VarName2', 'VarName3', 'VarName4'};

predictors = inputTable(:, predictorNames);

response = inputTable.VarName5;

isCategoricalPredictor = [false, false, false, false];

classNames = categorical({'變色鳶尾'; '山鳶尾'; '維吉尼亞鳶尾'});

% 訓練分類器

% 以下代碼指定所有分類器選項并訓練分類器。

template = templateLinear(...

'Learner', 'Logistic', ...

'Lambda', 'auto', ...

'BetaTolerance', 0.0001);

classificationLinear = fitcecoc(...

predictors, ...

response, ...

'Learners', template, ...

'ClassNames', classNames);

% 使用預測函數創建結果結構體

predictorExtractionFcn = @(t) t(:, predictorNames);

classificationLinearPredictFcn = @(x) predict(classificationLinear, x);

trainedClassifier.predictFcn = @(x) classificationLinearPredictFcn(predictorExtractionFcn(x));

% 向結果結構體中添加字段

trainedClassifier.RequiredVariables = {'VarName1', 'VarName2', 'VarName3', 'VarName4'};

trainedClassifier.ClassificationLinear = classificationLinear;

trainedClassifier.About = '此結構體是從分類學習器 R2023a 導出的訓練模型。';

trainedClassifier.HowToPredict = sprintf('要對新表 T 進行預測,請使用: \n [yfit,scores] = c.predictFcn(T) \n將 ''c'' 替換為作為此結構體的變量的名稱,例如 ''trainedModel''。\n \n表 T 必須包含由以下內容返回的變量: \n c.RequiredVariables \n變量格式(例如矩陣/向量、數據類型)必須與原始訓練數據匹配。\n忽略其他變量。\n \n有關詳細信息,請參閱 <a href="matlab:helpview(fullfile(docroot, ''stats'', ''stats.map''), ''appclassification_exportmodeltoworkspace'')">How to predict using an exported model</a>。');

% 提取預測變量和響應

% 以下代碼將數據處理為合適的形狀以訓練模型。

%

inputTable = trainingData;

predictorNames = {'VarName1', 'VarName2', 'VarName3', 'VarName4'};

predictors = inputTable(:, predictorNames);

response = inputTable.VarName5;

isCategoricalPredictor = [false, false, false, false];

classNames = categorical({'變色鳶尾'; '山鳶尾'; '維吉尼亞鳶尾'});

% 執行交叉驗證

KFolds = 5;

cvp = cvpartition(response, 'KFold', KFolds);

% 將預測初始化為適當的大小

validationPredictions = response;

numObservations = size(predictors, 1);

numClasses = 3;

validationScores = NaN(numObservations, numClasses);

for fold = 1:KFolds

trainingPredictors = predictors(cvp.training(fold), :);

trainingResponse = response(cvp.training(fold), :);

foldIsCategoricalPredictor = isCategoricalPredictor;

% 訓練分類器

% 以下代碼指定所有分類器選項并訓練分類器。

template = templateLinear(...

'Learner', 'Logistic', ...

'Lambda', 'auto', ...

'BetaTolerance', 0.0001);

classificationLinear = fitcecoc(...

trainingPredictors, ...

trainingResponse, ...

'Learners', template, ...

'ClassNames', classNames);

% 使用預測函數創建結果結構體

classificationLinearPredictFcn = @(x) predict(classificationLinear, x);

validationPredictFcn = @(x) classificationLinearPredictFcn(x);

% 向結果結構體中添加字段

% 計算驗證預測

validationPredictors = predictors(cvp.test(fold), :);

[foldPredictions, foldScores] = validationPredictFcn(validationPredictors);

% 按原始順序存儲預測

validationPredictions(cvp.test(fold), :) = foldPredictions;

validationScores(cvp.test(fold), :) = foldScores;

end

% 計算驗證準確度

correctPredictions = (validationPredictions == response);

isMissing = ismissing(response);

correctPredictions = correctPredictions(~isMissing);

validationAccuracy = sum(correctPredictions)/length(correctPredictions);

決策樹的可視化:

figure(1)

view ( trainingModel.ClassificationTree,’Mode’,’graph’)

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

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

相關文章

HTB:Active[RE-WriteUP]

目錄 連接至HTB服務器并啟動靶機 信息收集 使用rustscan對靶機TCP端口進行開放掃描 將靶機TCP開放端口號提取并保存 使用nmap對靶機TCP開放端口進行腳本、服務掃描 使用nmap對靶機TCP開放端口進行漏洞、系統掃描 使用nmap對靶機常用UDP端口進行開放掃描 使用nmap對靶機…

Git圖形化工具【lazygit】

簡要介紹一下偶然發現的Git圖形化工具——「lazygit」 概述 Lazygit 是一個用 Go 語言編寫的 Git 命令行界面&#xff08;TUI&#xff09;工具&#xff0c;它讓 Git 操作變得更加直觀和高效。 Github地址&#xff1a;https://github.com/jesseduffield/lazygit 主要特點 主要…

58.界面參數傳遞給Command C#例子 WPF例子

界面參數的傳遞&#xff0c;界面參數是如何從前臺傳送到后臺的。 param 參數是從界面傳遞到命令的。這個過程通常涉及以下幾個步驟&#xff1a; 數據綁定&#xff1a;界面元素&#xff08;如按鈕&#xff09;的 Command 屬性綁定到視圖模型中的 RelayCommand 實例。同時&#x…

selenium定位網頁元素

1、概述 在使用 Selenium 進行自動化測試時&#xff0c;定位網頁元素是核心功能之一。Selenium 提供了多種定位方法&#xff0c;每種方法都有其適用場景和特點。以下是通過 id、linkText、partialLinkText、name、tagName、xpath、className 和 cssSelector 定位元素的…

51單片機(STC89C52)開發:點亮一個小燈

軟件安裝&#xff1a; 安裝開發板CH340驅動。 安裝KEILC51開發軟件&#xff1a;C51V901.exe。 下載軟件&#xff1a;PZ-ISP.exe 創建項目&#xff1a; 新建main.c 將main.c加入至項目中&#xff1a; main.c:點亮一個小燈 #include "reg52.h"sbit LED1P2^0; //P2的…

29. C語言 可變參數詳解

本章目錄: 前言可變參數的基本概念可變參數的工作原理如何使用可變參數 示例&#xff1a;計算多個整數的平均值解析&#xff1a; 更復雜的可變參數示例&#xff1a;打印可變數量的字符串解析&#xff1a; 總結 前言 在C語言中&#xff0c;函數參數的數量通常是固定的&#xff…

RoboMaster- RDK X5能量機關實現案例(一)識別

作者&#xff1a;SkyXZ CSDN&#xff1a;https://blog.csdn.net/xiongqi123123 博客園&#xff1a;https://www.cnblogs.com/SkyXZ 在RoboMaster的25賽季&#xff0c;我主要負責了能量機關的視覺方案開發&#xff0c;目前整體算法已經搭建完成&#xff0c;實際方案上我使用的上…

shell腳本批量修改文件名之方法(The Method of Batch Modifying File Names in Shell Scripts)

shell腳本批量修改文件名方法 我們可以使用Shell腳本來實現這個功能。Shell腳本是一種用于自動化任務的編程語言&#xff0c;它可以在Unix/Linux操作系統上運行。在這個腳本中&#xff0c;我們將使用一個for循環來遍歷目標目錄下的所有文件&#xff0c;并使用mv命令將每個文件…

MySQL誤刪數據怎么辦?

文章目錄 1. 從備份恢復數據2. 通過二進制日志恢復數據3. 使用數據恢復工具4. 利用事務回滾恢復數據5. 預防誤刪數據的策略總結 在使用MySQL進行數據管理時&#xff0c;誤刪數據是一個常見且具有高風險的操作。無論是因為操作失誤、系統故障&#xff0c;還是不小心執行了刪除命…

RDK X5運行DeepSeek-R1-Distill-Qwen-1.5B,體驗長思維鏈的語言大模型!

簡介 本文介紹了在RDK X5上&#xff0c;如何從HuggingFace的原始模型權重&#xff08;safetensors&#xff09;經過量化和編譯&#xff0c;的到llama.cpp推理框架所需要的GGUF格式的模型&#xff0c;然后演示了如何使用llama.cpp運行量化后的DeepSeek-R1-Distill-Qwen-1.5B模型…

SQL UCASE() 函數詳解

SQL UCASE() 函數詳解 在SQL中&#xff0c;UCASE() 函數是一個非常有用的字符串處理函數&#xff0c;它可以將字符串中的所有小寫字母轉換為大寫字母。本文將詳細介紹UCASE() 函數的用法、語法、示例以及其在實際應用中的優勢。 一、UCASE() 函數簡介 UCASE() 函數是SQL標準…

【Proteus仿真】【51單片機】簡易計算器系統設計

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 聯系作者 一、主要功能 1、LCD1602液晶顯示 2、矩陣按鍵? 3、可以進行簡單的加減乘除運算 4、最大 9999*9999 二、使用步驟 系統運行后&#xff0c;LCD1602顯示數據&#xff0c;通過矩陣按鍵…

留學畢業論文如何利用不同問題設計問卷

在留學畢業論文的寫作中&#xff0c;我們經常會遇到各種問題&#xff0c;例如選擇合適的問題&#xff0c;選擇合適的研究方法&#xff0c;以及設計合理的研究過程。然而在完成留學畢業論文的過程中&#xff0c;我們往往會在研究設計這里卡住。即使我們選準了研究問題和研究方法…

深度學習在金融風控中的應用:突破傳統模型的瓶頸

深度學習在金融風控中的應用:突破傳統模型的瓶頸 金融風險控制(簡稱“風控”)是現代金融體系中至關重要的一環,關系到金融機構的穩定性、客戶的安全以及整體經濟的健康運行。近年來,隨著深度學習的迅猛發展,傳統的風控模型正面臨被顛覆的挑戰,新的技術手段和思維方式正…

Python中的函數(上)

Python中的函數是非常重要的編程概念&#xff0c;以下是詳細的介紹&#xff1a; 函數定義基礎 在Python中&#xff0c;函數是組織好的、可重復使用的代碼塊&#xff0c;用于執行特定任務。通過函數&#xff0c;我們可以將復雜的程序分解為較小的、更易管理的部分&#xff0c…

圖漾相機搭配VisionPro使用簡易教程

文章目錄 1.下載并安裝VisionPro軟件2.下載PercipioCameraForVisionPro軟件包3.軟件部署4.測試流程4.1 遍歷VisionPro SDK支持的參數4.2 設置示例4.2.1_cameraSingle.SetTriggerMode4.2.2 _cameraSingle.SetRegistration4.2.3_cameraSingle.SetInt4.2.4 _cameraSingle.GetInt4.…

新版IDEA創建數據庫表

這是老版本的IDEA創建數據庫表&#xff0c;下面可以自己勾選Not null&#xff08;非空),Auto inc&#xff08;自增長),Unique(唯一標識)和Primary key&#xff08;主鍵) 這是新版的IDEA創建數據庫表&#xff0c;Not null和Auto inc可以看得到&#xff0c;但Unique和Primary key…

(非技術)從一公里到半程馬拉松:我的一年跑步經歷

在24年初&#xff0c;從來不運動的我&#xff0c;連跑步一公里都不能完成。而在一年之后的2025年的1月1日&#xff0c;我參加了上海的蒸蒸日上迎新跑&#xff0c;完成了半程馬拉松。雖然速度不快&#xff0c;也并不是什么特別難完成的事情&#xff0c;但對我來說還是挺有意義的…

論“0是不存在的”

你看這又是一個悖論的例子。 你會說&#xff0c;既然你都寫出來了“0”&#xff0c;咋還能說它不存在&#xff1f; 總是刷到謝爾頓說零不存在那個視頻。可能有些小伙伴不解其意&#xff0c;為啥那小謝爾頓堅持說0不存在。我這說一個最簡單的視角&#xff0c;怎么理解這句話。…

電商系統-用戶認證(三)基于公鑰解析JWT令牌

一、 基于私鑰生成jwt令牌 步驟&#xff1a; 導入認證服務 將shangcheng_user_auth工程導入到項目中去&#xff0c;如下圖 啟動eureka&#xff0c;再啟動認證服務 3&#xff09; 認證服務中創建測試類 public class CreateJwtTest { ? /**** 創建令牌測試*/Testpublic voi…