Machine Learning 初探

前置知識

pandas

  • 讀取文件:read_csv
  • 查看信息
    • describe:查看整體信息,包括每列的平均值、最大最小值、標準差等
    • head:輸出頭部幾行數據
    • columns:輸出所有列名
    • loc:查詢數據,或是根據索引取對應的數據
    • dropna:去掉所有為空NA的數據

Machine Learning

大體上來說,機器學習就是給定一部分數據,讓機器去“學習”這部分有什么特征,每個特征上有什么規律,以此形成一個模型model,然后用這個model去預測新的數據的結果

scikit-learn

簡單高效的python包,可用于可預測的數據分析,官網在這里,可以自行查閱相關模型的原理或是API
下面以決策樹模型的使用過程來大致展示一下機器學習的整體過程

決策樹:DecisionTree

非常簡單易懂的監督模型,可理解為給定一系列相關特征(比如n個),每個特征的結果只有兩個(不確定是不是只能有兩個),整個決策樹就像是二叉樹,預測時根據每個特征的是或否的回答選擇路徑,一次決策就像是二叉樹從根節點到某個葉子節點的一條路徑
可用于classification(DecisionTreeClassifier)或是regression(DecisionTreeRegressor)

訓練模型的整體流程:以回歸模型為例

  1. 準備數據:用pandas讀取數據,并挑選出所需要的特征列和想預測的目標列
    • 數據分離train_test_split:注意不要把所有數據都拿來用于訓練,要從中選出一部分數據用于驗證訓練出來的模型是否可信
    import pandas as pd
    from sklearn.model_selection import train_test_split
    src_data = pd.read_csv('...')
    features = ['column_1', ...]
    X = src_data[features]		# 特征列
    y = src_data.target_column	# 目標列
    train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0)	# 分離成用于訓練的 train_... 和用于預測的 val_...
    
  2. 初始化模型:直接導入后創建即可
    • 可指定隨機數種子random_state,相同的值能保證每次運行腳本時得到相同的結果
    from sklearn.tree import DecisionTreeRegressor
    ...
    dt_model = DecisionTreeRegressor(random_state=N)
    
  3. 數據擬合fit:用訓練數據去訓練模型
    dt_model.fit(train_X, train_y)
    
  4. 預測結果predict:用檢驗數據進行預測
    predicted_data = dt_model.predict(val_X)		# val_X: 用于預測的數據的特征列
    
  5. 評估結果:檢驗預測的結果與實際結果之間的差距,可以有不同的方法,在此僅介紹一種MAE

評估結果:mean_absolute_error(MAE)

計算方式為:依次計算預測結果與實際結果的差值的絕對值,最后求和后除以結果數量
即與實際結果間的平均差值

On average, our predictions are off by about X.

代碼也很簡單,導入后調用即可

from sklearn.metrics import mean_absolute_error
...
mean_absolute_error(y, predicted_data)	# y: 實際結果

兩個問題

  • 過擬合 overfitting:與訓練數據貼合得過于完美,可能會學到一些實際數據中并不存在的特性,導致預測結果與實際數據相差較大(就像是下圖豎線的右邊部分,訓練數據上的評估結果很好但實際表現不好)
  • 欠擬合 underfitting:與訓練數據貼合得不夠,可能是特征學習得不足,導致不能很好地判定實際數據的特征,所以預測結果與實際數據相差也很大(就像下圖豎線的左邊部分,在兩個數據集上的表現都不好)
  • 尋找最佳點:可通過梯度測試等方式,不斷調試參數,找到能讓在實際數據上的表現最好的參數(就像下圖的黃色感嘆號處)

MAE中擬合預見的兩個情況

決策樹的改進

  1. 控制樹高:樹高相關的參數可以說直接影響決策樹的效率和預測結果 —— 樹越高,對應的就是特征越多,則源數據被分化得越細致,對于每個部分的訓練數據都能進行貼合,但相應的每個葉子部分的數據就越少,也就是說對于該條路徑的訓練可能不夠,導致學習到的特征不夠貼合實際數據(過擬合);反之,則是源數據被分割的不夠,每個葉子節點都存在大量數據,對于特征的學習可能不夠細致(欠擬合)
    • 創建模型的時候可以通過max_leaf_node指定葉子個數限制,或是max_depth指定最大深度。那么經過測試不同葉子限制或是樹高的情況下MAE的值,選取使其到達最低點的參數進行創建模型,就能達到最佳效果
  2. 使用更復雜的模型(比如隨機森林RandomForestRegressor
    from sklearn.ensemble import RandomForestRegressor
    

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

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

相關文章

2025年2月個人工作生活總結

本文為 2025年2月工作生活總結。 工作記錄 AI浪潮 AI非常火,春節至今,到處充斥著大量和AI、DeepSeek有關的新聞。領導也一再強調要用AI,甚至納入到新一年的考核里。再往上,大領導開會的新聞稿里也作出要求,不能停下腳…

SpringBoot @ConfigurationProperties 注解使用

ConfigurationProperties 用于將配置文件(如 application.properties 或 application.yml)中的屬性批量綁定到一個 Java Bean 中。 1. 定義配置文件 在 application.properties 或 application.yml 中定義一組具有相同前綴的屬性。 application.yml &a…

剛安裝docker并啟動docker服務: systemctl restart docker報錯解決

root:/home/lzw# sudo systemctl restart docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xeu docker.service" for details. 1、問題描述 啟動doc…

JavaScript的this指向,一次徹底講清楚

JavaScript 中的 this 指向是一個非常重要且容易混淆的概念。它的值取決于函數被調用的上下文,而不是函數定義的位置。以下是 this 指向的詳細解析: 1. 默認綁定(Default Binding) 在非嚴格模式下,如果函數是直接調用(而不是作為對象的方法或構造函數等),this 默認指向…

MFC: 控件根據文本內容大小自動調整

背景: 針對不同語言下,控件顯示不全的現象; 例如: 現象1:中文下顯示全部信息,英語下只能顯示部分文字 現象2:中文下顯示不全## 實現思路: 控件綁定按鈕計算控件文本長度根據文本長…

SpringBoot 整合mongoDB并自定義連接池,實現多數據源配置

要想在同一個springboot項目中使用多個數據源,最主要是每個數據源都有自己的mongoTemplate和MongoDbFactory。mongoTemplate和MongoDbFactory是負責對數據源進行交互的并管理鏈接的。 spring提供了一個注解EnableMongoRepositories 用來注釋在某些路徑下的MongoRepo…

軟件測試中的BUG

文章目錄 軟件測試的生命周期BugBug 的概念描述 Bug 的要素案例Bug 級別Bug 的生命周期與開發產生爭執怎么辦?【高頻面試題】先檢查自身,Bug 是否描述的不清楚站在用戶角度考慮并拋出問題Bug 的定級要有理有據提?自身技術和業務水平,做到不僅…

泵吸式激光可燃氣體監測儀:快速精準守護燃氣管網安全

在城市化進程加速的今天,燃氣泄漏、地下管網老化等問題時刻威脅著城市安全。如何實現精準、高效的可燃氣體監測,守護“城市生命線”,成為新型基礎設施建設的核心課題。泵吸式激光可燃氣體監測儀,以創新科技賦能安全監測&#xff0…

第J3-1周:DenseNet算法 實現乳腺癌識別

文章目錄 一、前言二、前期準備1.設置GPU2.劃分數據集 三、搭建網絡模型1.DenseLayer模塊2.DenseBlock模塊3.Transition模塊4.構建DenseNet5.構建densenet121 四、訓練模型1.編寫訓練函數2.編寫測試函數3.正式訓練 五、結果可視化1.Loss與Accuracy圖2.模型評估 總結&#xff1a…

【JAVA面試題】== 和 equals() 的區別與使用場景

在 Java 面試中, 和 equals() 的區別是一個高頻考點。理解它們的底層原理和使用場景,對于掌握 Java 基礎知識至關重要。本文將從 基本概念、底層實現 和 實際應用 三個方面,深入解析 和 equals() 的區別。 1. 基本概念 1.1 運算符 作用&a…

-bash: lsof: command not found

一、問題說明 執行如下命令時報錯: # lsof |grep deleted > deleted_file -bash: lsof: command not found二、處理方法 # yum -y install lsof安裝完成后可成功執行上面的命令。

攝像頭應用編程(三):多平面視頻采集

文章目錄 1、前言2、環境介紹3、步驟4、應用程序編寫5、測試5.1、編譯應用程序5.2、運行應用程序 6、總結 1、前言 在查看攝像頭類型時,大致可以分為兩類:Video Capture 和 Video Capture Multiplanar。 本次應用程序主要針對類型為Video Capture Multi…

本地部署 Traefik 的完整教程

Traefik 是一款現代化的反向代理和負載均衡工具,專為云原生環境設計。它支持自動服務發現、動態配置更新以及多種后端(如 Docker、Kubernetes、Consul 等)。本教程將指導你如何在本地部署 Traefik,并配置其作為反向代理和負載均衡器。 1. 準備工作 在開始之前,請確保你的…

三維數據可視化與表面重建:Marching Cubes算法的原理與應用

1. 引言 隨著現代醫學影像技術的飛速發展,三維數據的可視化與重建已成為醫學研究、臨床診斷和手術規劃的重要工具。在眾多三維重建算法中,Marching Cubes算法因其高效、穩定的特性成為從離散數據場中提取等值面的經典方法。本報告將深入探討Marching Cu…

MySql面試總結(二)

WHERE 子句優化 截至2024年7月,MySQL最新穩定版本是8.2,并不存在MySQL 8.4 。下面從常見的幾個方面為你介紹 MySQL 8.x 中 WHERE 子句的優化方法: 1. 確保使用索引 原理:索引可以加快數據的查找速度,當 WHERE 子句中的條件列有索引時,MySQL 可以直接定位到符合條件的數…

【圖論】判斷圖中有環的兩種方法及實現

判斷圖中有環的兩種方法及實現 在圖論中,檢測有向圖是否存在環是常見問題。本文將介紹兩種主流方法:DFS三色標記法和拓撲排序(Kahn算法),并提供對應的C代碼實現。 方法一:DFS三色標記法 核心思想 通過深…

11.【線性代數】——矩陣空間,秩1矩陣,小世界圖

十一 矩陣空間,秩1矩陣,小世界圖 1. 矩陣空間交集 和 和集 2. 所有解空間3. r 1 r1 r1的矩陣4. 題目5. 小世界圖 空間:組成空間的元素的線性組合都在這個空間中。 1. 矩陣空間 舉例:矩陣空間( M M M 所有3x3的矩陣&…

【網絡安全 | 滲透測試】GraphQL精講一:基礎知識

未經許可,不得轉載, 文章目錄 GraphQL 定義GraphQL 工作原理GraphQL 模式GraphQL 查詢GraphQL 變更(Mutations)查詢(Queries)和變更(Mutations)的組成部分字段(Fields)參數(Arguments)變量別名(Aliases)片段(Fragments)訂閱(Subscriptions)自省(Introspecti…

關于虛擬環境中遇到的bug

conda和cmd介紹 介紹 Conda 概述: Conda是一個開源包管理系統和環境管理系統,尤其適用于Python和R語言的開發環境。它允許用戶創建獨立的虛擬環境,方便地管理依賴包和軟件版本。 特點: 環境管理:可以創建、導入、導…

基于nginx的灰度發布解決方案

Nginx 在灰度發布中可以看作是一個精確的流量調度員,它充當著客戶端與后端服務器之間的中介。通過配置好的規則,Nginx 會將用戶請求智能地引導到不同版本的服務上。這樣,Nginx 可以根據具體需求靈活地分配流量,確保新版本逐步推向…