Python 數據分析與機器學習入門 (八):用 Scikit-Learn 跑通第一個機器學習模型

引言:初識 Scikit-Learn

Scikit-learn 是 Python 機器學習領域的黃金標準庫。它構建在 NumPy, SciPy 和 Matplotlib 之上,提供了大量用于分類、回歸、聚類和降維等任務的算法。Scikit-learn 廣受歡迎的原因在于其三大核心優勢:

  • 一致的 API 設計: 幾乎所有的算法都遵循相同的、簡潔的接口模式,使得學習和應用新模型變得非常容易。
  • 豐富的算法選擇: 涵蓋了從經典的線性模型到強大的集成方法等絕大多數機器學習算法。
  • 強大的生態集成: 與 NumPy 數組和 Pandas DataFrame 無縫集成,是整個 Python 數據科學生態的核心組件之一。

本篇的目標是帶領您走完使用 Scikit-learn 構建一個完整機器學習模型的全過程,讓您親身體驗其簡潔與強大,并為后續更復雜的項目建立信心。

Scikit-Learn 的核心 API 模式

Scikit-learn 的設計哲學是“一致性”。一旦你掌握了一個模型的使用方法,你就幾乎掌握了所有模型的使用方法。這個通用的模式可以概括為以下幾個步驟,我們稱之為“Estimator API”:

  1. 選擇模型類 (Choose a model)
    從 Scikit-learn 的模塊中導入你需要的模型類。例如,from sklearn.tree import DecisionTreeClassifier

  2. 實例化模型 (Instantiate the model)
    創建該模型類的一個實例,并可以設置其超參數(Hyperparameters)。超參數是模型在學習前設置的參數,例如決策樹的最大深度。

    # 超參數 max_depth=3 在實例化時設置
    model = DecisionTreeClassifier(max_depth=3)
    
  3. 擬合模型 (Fit the model)
    使用訓練數據來訓練模型。這一步通過調用模型的 .fit() 方法完成,傳入訓練集的特征 X_train 和標簽 y_train

    model.fit(X_train, y_train)
    
  4. 預測 (Predict)
    使用訓練好的模型對新數據(通常是測試集)進行預測。這一步通過調用 .predict() 方法完成,傳入測試集的特征 X_test

    predictions = model.predict(X_test)
    
  5. 評估 (Evaluate)
    比較模型的預測結果和真實的測試集標簽,以評估模型性能。這通常通過調用 .score() 方法或使用 sklearn.metrics 模塊中的函數來完成。

    accuracy = model.score(X_test, y_test)
    

這個“導入-實例化-擬合-預測-評估”的流程是 Scikit-learn 的核心。掌握了這個模式,你就掌握了使用 Scikit-learn 的鑰匙,可以輕松地在不同算法之間切換和實驗。

你的第一個模型:決策樹分類器實戰

為了專注于 Scikit-learn 的工作流程,我們將使用一個簡單且干凈的內置數據集——鳶尾花(Iris)數據集。這是一個典型的多分類問題,我們的任務是根據四個特征(花萼長度、花萼寬度、花瓣長度、花瓣寬度)來預測鳶尾花的種類。

步驟 1: 導入庫并加載數據

首先,我們導入所有需要的庫和函數,并加載 Iris 數據集。load_iris() 函數返回一個類似字典的對象,其中 .data 屬性是特征數據,.target 屬性是標簽數據。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score# 加載數據集
iris = load_iris()
X = iris.data   # 特征矩陣
y = iris.target # 標簽向量

步驟 2: 劃分訓練集和測試集

遵循我們在上一篇文章中學到的原則,我們使用 train_test_split 函數將數據劃分為訓練集和測試集,通常將 30% 的數據作為測試集。random_state 參數用于確保每次運行代碼時,隨機劃分的結果都是一樣的,這對于結果復現很重要。

# 劃分數據,70% 用于訓練,30% 用于測試
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)print(f"訓練集大小: {X_train.shape}, 測試集大小: {X_test.shape}")

步驟 3 & 4: 實例化并訓練模型

現在我們應用 Scikit-learn 的核心 API 模式。我們選擇 DecisionTreeClassifier 作為我們的模型,創建一個實例,然后用訓練數據 .fit() 它。

# 1. 實例化決策樹分類器
clf = DecisionTreeClassifier()# 2. 使用訓練數據訓練模型
clf.fit(X_train, y_train)

步驟 5: 進行預測

模型訓練好之后,我們用它來對測試集 X_test 進行預測。

# 對測試集進行預測
y_pred = clf.predict(X_test)

步驟 6: 評估模型

最后一步是評估模型的性能。我們將模型預測的 y_pred 與真實的測試集標簽 y_test 進行比較。對于分類問題,最直觀的評估指標是準確率 (Accuracy),即正確預測的樣本占總樣本的比例。

# 計算并打印模型的準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型準確率: {accuracy:.2f}")

運行代碼后,你可能會看到一個接近 1.00 的準確率,這表明我們的簡單決策樹模型在這個問題上表現得非常好。

結果解讀

準確率為 1.00 意味著我們的模型在測試集上正確預測了所有樣本的類別。雖然這是一個非常理想的結果,但在更復雜、更“臟”的真實世界數據集中,達到這樣的性能是罕見的。

注意:準確率雖然直觀,但并非總是最佳的評估指標,尤其是在處理類別不平衡的數據集時。在后續的項目中,我們將接觸到更多評估指標,如精確率 (Precision)召回率 (Recall)F1 分數 (F1-score)

總結與展望

恭喜!您已經成功地使用 Scikit-learn 構建、訓練并評估了您的第一個機器學習模型。您不僅完成了一個完整的流程,更重要的是,您掌握了 Scikit-learn 通用的 Estimator API,這為您探索更多高級算法鋪平了道路。

現在,您已經具備了數據處理、可視化和基礎建模的能力。是時候將這些技能整合起來,挑戰一個更真實、更復雜的項目了。在下一篇文章中,我們將踏上泰坦尼克號的航程,運用目前所學的一切,預測這艘傳奇巨輪上的生還者。

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

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

相關文章

FPGA芯片的配置方法

FPGA芯片的配置方法 文章目錄 FPGA芯片的配置方法1. FPGA配置概述2. 主動配置模式3. 被動配置模式4. JTAG配置模式5. 總結 1. FPGA配置概述 當我們在PC機上的FPGA軟件集成開發環境中完成我們的設計后,必須通過某種形式將其映射到FPGA芯片硬件中,這樣FPG…

通過python+openCV實現對圖片中箭頭方向的判斷

在項目中遇到一個需求,需要對圖片中的箭頭方向進行判斷,本來是使用YOLOv8算法來實現的,但是發現YOLO的效果對箭頭的識別效果很差,不管是分類算法還是檢測算法,效果都不理想,因此試一試通過openCV對箭頭方向進行判斷,發現效果還可以。 下面附上完整的代碼和原理。 文章目…

React 第六十六節Router中 StaticRouter使用詳解及注意事項

前言 StaticRouter 是 React Router 為服務器端渲染(SSR)提供的專用路由組件。它允許在服務器環境中處理路由邏輯,確保服務器和客戶端渲染結果一致。下面我將詳細解釋其用途、原理并提供完整的代碼示例。 一、StaticRouter 的核心用途 服務…

嵌入模型與大語言模型的區別:從結構到應用的深度解析

嵌入模型與大語言模型的區別:從結構到應用的深度解析 在當今自然語言處理(NLP)技術蓬勃發展的背景下,嵌入模型(Embedding Model) 和 大語言模型(Large Language Model, LLM) 成為了…

el-date-picker賦值不成功

vue使用element 的時間組件el-date-picker賦值不成功,點擊后才回顯數據 解決: 組件未渲染完成之前賦值了,在onMounted函數內賦值,或者在確保組件已經渲染后賦值

深入淺出JavaScript中的私有變量與特權方法

深入淺出JavaScript中的私有變量與特權方法:封裝的藝術 在JavaScript的開發實踐中,私有變量和特權方法是實現數據封裝和代碼安全性的核心工具。它們不僅幫助我們隱藏敏感數據,還能通過閉包和作用域機制構建更健壯的代碼結構。本文將從基礎概…

ReactNative【實戰系列教程】我的小紅書 2 -- 快捷登錄、手機號密碼登錄

最終效果 技術要點 用戶協議 – 打開本地瀏覽器 點擊后,直接打開本地瀏覽器瀏覽網頁 // 最終需修改為 《用戶協議》 的網址Linking.openURL("https://www.baidu.com");手機號輸入框的 344 展示 onChangeText{(text: string) > {setPhone(formatPhone(…

【趙渝強老師】OceanBase數據庫從零開始:Oracle模式

這里我們來介紹一下新上線的課程《OceanBase數據庫從零開始:Oracle模式》,本門課程共11章。 視頻講解如下 【趙渝強老師】OceanBase從零開始(Oracle模式) 下面詳細介紹一下每一章的主要內容: 第01章-OceanBase的體系…

Flink核心功能與運行流程詳解

目錄 一、背景 二、圖構建 三、任務執行流程(yarn per-job模式) 3.1 Flink組件 3.2 執行流程 四、分布式調度 4.1 TM的slot 4.2 TM的slot的CPU與內存 4.3 節點的部署 4.4 節點的狀態 4.5 節點部署流程 五、數據傳輸 5.1 內存分配 5.2 傳輸…

linux 操作docker的基本命令docker倉庫

基本操作命令 docker run --nametest-host -itd centos7.6 /bin/bash 通過鏡像創建容器 登錄容器 [rootdocker101 ~]# docker exec -it test-host /bin/bash (exec是執行,i是交互式。t叫tty) 或者container id [rootdocker101 ~]# doc…

Netty學習路線圖 - 第四階段:Netty基礎應用

Netty學習路線圖 - 第四階段:Netty基礎應用 📚 Netty學習系列之四 本文是Netty學習路線的第四篇,我們將用大白話講解Netty的基礎應用,帶你從理論走向實踐。 寫在前面 大家好!在前面三篇文章中,我們學習了J…

開源項目推薦:MCP Registry——管理MCP服務器的利器

探索MCP Registry:未來模型上下文協議的核心注冊服務 隨著人工智能技術的迅速發展,機器學習模型的管理和配置變得愈發重要。今天,我們將探索一個頗具潛力的開源項目——MCP Registry。這是一個由社區驅動的注冊服務,專為模型上下文協議(Model Context Protocol,簡稱MCP)…

Spring Boot 統一功能處理:攔截器詳解

一、攔截器核心概念 作用:攔截器是 Spring 框架提供的核心功能,用于在請求處理前后執行預定義邏輯,實現統一處理(如登錄校驗、日志記錄等)。 核心方法: public class LoginInterceptor implements Handl…

在docker容器中安裝docker服務,基于fuse-overlayfs進行overlay掛載,而不是vfs

1、docker 安裝 正常安裝docker軟件,運行docker時,會提示:No docker socket 服務 2、啟動docker服務(包含守護進程) systemctl start docker #dockerd &if ! ps aux | grep -v grep | grep -q "dockerd&qu…

虛擬機配置注意事項

一.VM大部分產品免費,遇到付費的要斟酌一下 在小編之前的文章中有簡單下載VM的教程VMwareWorkstPro安裝-CSDN博客 二.配置過程中的設置大部分都可以在配置完成后更改 例如下圖設備所涉及到的,都是可以更改設置的 三.電腦關機時,要注意先把…

openGL+QT快速學習和入門案列

openGLQT快速學習和入門案列

深度學習03 人工神經網絡ANN

什么是神經網絡 人工神經網絡( Artificial Neural Network, 簡寫為ANN)也簡稱為神經網絡(NN),是一種模仿生物神經網絡結構和功能的計算模型,人腦可以看做是一個生物神經網絡,由眾多的神經元連接而成.各個神經元傳遞復…

Linux中部署Jenkins保姆間教程

本文將以docker的方式,講述如何部署Jenkins 一、拉取Jenkins鏡像 1.1 最新版Jenkins介紹 最新版Jenkins地址:Download and deploy 當前最新版的如下圖所示: 1.2 各版本支持的JDK版本 地址如下:Java Support Policy 如果你安裝…

【軟考中級·軟件評測師】下午題·面向對象測試之架構考點全析:分層、分布式、微內核與事件驅動

一、分層架構:分層獨立與質量特性的雙向約束 分層架構通過“垂直分層(表示層→服務層→業務邏輯層→數據層)”實現職責隔離,是Web應用、企業級系統的主流架構模式。 1. 父類成員函數重測場景 子類繼承父類時,若父類…

C++ 快速回顧(五)

C 快速回顧(五) 前言一、Dll和Lib的區別區別在開發中使用 二、封裝并使用C庫1.封裝庫2.使用庫 三、封裝并使用C庫1.封裝庫2.使用庫 前言 用于快速回顧之前遺漏或者補充C知識 一、Dll和Lib的區別 靜態庫(LIB)在編譯時鏈接&#…