Python機器學習實戰:利用決策樹算法預測鳶尾花種類

引言

在人工智能領域,機器學習作為一種強大的工具正在改變我們對數據的認知和處理方式。Python因其豐富的機器學習庫和直觀易用的特性,成為了眾多開發者首選的語言。本篇文章將帶領大家深入了解如何運用Python中的`scikit-learn`庫來構建決策樹模型,以解決一個經典的分類問題——基于鳶尾花數據集預測鳶尾花的種類。我們將逐步拆解整個流程,從數據預處理開始,經過模型訓練與評估,最后到模型解釋與優化,展示Python在機器學習實戰中的強大威力。

第一部分:數據導入與初步探索

首先,讓我們從導入鳶尾花數據集開始,這是機器學習中常見的教學示例,包含了不同種類鳶尾花的一些測量特征。

import pandas as pd
from sklearn.datasets import load_iris

# 加載鳶尾花數據集
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['species'] = iris.target

# 查看數據前五行
print(df.head())

接下來,可以進行一些基本的數據探索,如查看特征分布、計算統計量以及可視化等,以便更好地理解數據集。

第二部分:數據預處理與特征工程

在建立模型之前,需要確保數據滿足訓練要求。這包括處理缺失值(如果存在的話)、標準化數值特征、編碼分類變量等。

from sklearn.preprocessing import StandardScaler

# 對于這個數據集,所有特征均為數值類型且無缺失值
# 我們僅做標準化處理
scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df.drop('species', axis=1)), columns=df.columns[:-1])

# 將數據分為特征矩陣X和目標變量y
X = df_scaled.iloc[:, :-1]
y = df['species']

第三部分:構建決策樹模型

利用`scikit-learn`庫中的`DecisionTreeClassifier`,我們將訓練一個決策樹模型來預測鳶尾花的種類。

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 創建并訓練決策樹模型
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)

# 預測測試集結果
y_pred = clf.predict(X_test)

第四部分:模型評估與可視化

訓練完模型后,我們需要評估其性能,常見的評估指標包括準確率、混淆矩陣、ROC曲線等。

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 計算模型準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型準確率為:{accuracy * 100:.2f}%")

# 輸出混淆矩陣
print(confusion_matrix(y_test, y_pred))

# 打印分類報告
print(classification_report(y_test, y_pred))

同時,通過`Graphviz`和`sklearn.tree.plot_tree`可視化決策樹,幫助我們理解模型內部邏輯。

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

plt.figure(figsize=(15, 10))
plot_tree(clf, filled=True, feature_names=X.columns, class_names=iris.target_names)
plt.show()

第五部分:模型優化與超參數調優

為了進一步提升模型性能,我們可以嘗試調整決策樹的超參數,例如設置最大深度、最小樣本數等。

from sklearn.model_selection import GridSearchCV

# 設置超參數網格搜索范圍
param_grid = {'max_depth': [3, 5, 10], 'min_samples_split': [2, 5, 10]}
grid_search = GridSearchCV(DecisionTreeClassifier(random_state=42), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 獲取最優模型及參數
best_clf = grid_search.best_estimator_
print("最優參數組合:", grid_search.best_params_)

結論

通過以上步驟,我們成功地使用Python和`scikit-learn`庫實現了決策樹模型的訓練、評估與優化過程。這個簡明的教程展示了如何從原始數據出發,一步步構建并優化機器學習模型。值得注意的是,雖然決策樹易于理解和解釋,但在實際項目中,可能還需要嘗試其他的機器學習方法,并根據業務需求和數據特點進行綜合考慮。此外,持續的模型迭代和優化也是實現更高預測性能的重要途徑。

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

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

相關文章

關系型數據庫和矢量數據庫分別適用于哪些領域?

關系型數據庫和矢量數據庫分別適用于哪些領域? 李升偉 關系型數據庫適用于以下領域: 1. 金融行業:如銀行的交易處理、賬戶管理等,對數據的一致性和事務處理要求極高。 2. 企業資源規劃(ERP)&#xff1a…

Meta 發布 Meta 3D Gen 文本生成3D模型

Meta推出了 Meta 3D Gen (3DGen),這是一種用于文本到 3D 資產生成的最先進的快速管道。3DGen 可在一分鐘內提供具有高提示保真度和高質量 3D 形狀和紋理的 3D 資產創建。 它支持基于物理的渲染 (PBR),這是…

網口串口(Serialport)服務器

文章所用工具http://t.csdnimg.cn/2gIR8http://t.csdnimg.cn/2gIR8 搭建服務器界面 操作配置文件保存方式類 public string FileName { get; set; }public IniHelper(string name) {this.FileName name; //在構造函數中給路徑賦值} 1 先導入c語言進行讀取操作ini文件的方法 …

Python基于you-get下載網頁上的視頻

? 1.python 下載地址 下載 : https://www.python.org/downloads/ 2. 配置環境變量 配置 python_home 地址 配置 python_scripts 地址 在path 中加入對應配置 3. 驗證 ? C:\Users>python --version Python 3.12.4C:\Users>wheel version wheel 0.43.04. 下載 c…

Android SurfaceFlinger——本地窗口連接EGL API(二十四)

通過前面的文章我們屬性了 Surface 和 EGLSurface 的相關內容,這里我們繼續分析讓兩者相關聯的函數 native_window_api_connect()。 一、連接EGL API 1、window.h native_window_api_connect 源碼位置:/frameworks/native/libs/nativewindow/include/system/window.h st…

2024華為OD機試真題-分月餅-(C++/Python)-C卷D卷-200分

2024華為OD機試題庫-(C卷+D卷)-(JAVA、Python、C++) 題目描述 中秋節,公司分月餅,m 個員工,買了 n 個月餅,m ≤ n,每個員工至少分 1 個月餅,但可以分多個,單人分到最多月餅的個數是 Max1 ,單人分到第二多月餅個數是 Max2 ,Max1 - Max2 ≤ 3 ,單人分到第 n - 1…

Python從入門到放棄——浮點型變量

浮點型變量 前言 上一篇文章我們研究了整數類型變量,本次我們來開始研究一下浮點類型變量。 浮點類型 浮點數在計算機編程中扮演著重要的角色。它們是一種特殊的數據類型,用于存儲和處理小數或實數。在Python中,浮點數是由小數點分隔的…

如何在PhpStorm中運行SQL文件?

如何在PhpStorm中運行SQL文件? 提問:如何在PhpStorm中運行SQL文件? 解答:本文將詳細介紹如何在PhpStorm中運行SQL文件的步驟,包括如何配置數據庫連接和執行SQL腳本,并附帶示例SQL代碼。 1. 配置數據庫連…

迎接創新浪潮!RFID國軍標助力數字化裝備場轉型

隨著大數據、物聯網的飛速發展,數字化轉型已成為軍事發展的核心戰略之一。在這一重大歷史進程中,廣州一芯未來的RFID國軍標呈現出獨特而重要的作用。它不僅提升了裝備管理的效率和準確性,還增強了裝備的安全保障和資源配置的合理性。它以高效…

標題:哈爾濱等保測評:技術、管理和人員的協同作戰

在大數據時代,信息安全成為各行業不可忽視的關鍵議題。哈爾濱作為東北地區重要的經濟和科技中心,其等保測評工作更是成為了網絡安全領域的焦點。等保測評,即信息安全等級保護測評,不僅檢驗著技術的先進性,也考驗著管理…

Linux 下實現 MySQL 數據庫每天自動備份定時備份

創建一個備份腳本文件,例如 backup_mysql.sh,并將以下內容添加到該文件中: #!/bin/bash# 設置數據庫連接信息 DB_USER"your_database_user" DB_PASSWORD"your_database_password" DB_NAME"your_database_name"…

SpringMVC基礎詳解

文章目錄 一、SpringMVC簡介1、什么是MVC2、MVC架構模式與三層模型的區別3、什么是SpringMVC 二、HelloWorld程序1、pom文件2、springmvc.xml3、配置web.xml文件4、html文件5、執行Controller 三、RequestMapping注解1、value屬性1.1、基礎使用1.2、Ant風格(模糊匹配…

在CenteOs7上安裝mysql8.0(Super詳細版)

在CenteOs7上安裝mysql8.0 為什么用Mysql8.0?如何下載下載地址需要提前準備下載步驟 服務器上安裝如何上傳到服務器?通過wget下載到服務器并解壓 開始安裝非必須安裝如果全部安裝執行順序 安裝完后,啟動mysql使用“systemctl”檢測mysqld服務…

python中unittest框架和pytest框架區別

unittest框架和pytest框架對比 類型unittest框架pytest框架安裝標準庫,無需額外安裝第三方單元測試庫,需要安裝用例編寫測試類必須要繼承 unittest.TestCase測試類命名以"Test"開頭,無需繼承,用例可以是函數&#xff0…

充分利用智慧校園人事系統,提升黨政職務管理

智慧校園人事系統中的黨政職務管理功能,是專為高校及教育機構設計的,旨在高效、精確地處理與黨政職務相關的各類事務,包括職務任命、任期管理、職責分配、考核評估等,以信息化手段促進黨務及行政工作的透明化、規范化。 該模塊首先…

根據服務器流量使用情況推算出網站流量的方法

根據服務器流量使用情況推算網站流量是一個涉及數據監測、分析和計算的過程。以下是一些基本步驟和方法: 1. 收集數據 首先,你需要獲取服務器的流量數據,這些數據通常包括: - 總流量:一定時間周期內服務器發送和接收的…

Jest是什么軟件?

Jest是一個由Facebook開發的開源JavaScript測試框架,它專為JavaScript項目的測試而設計,特別適用于React和Node.js環境。Jest以其簡單的配置、高效的性能和易用性而聞名,成為現代JavaScript項目中不可或缺的測試工具。以下是關于Jest的詳細解…

《Windows API每日一練》8.1 button控件二

8.1.4 按鈕 在BTNLOOK中顯示的前兩個按鈕是“按鍵”按鈕(push button)。此類按鈕是一種帶有 文本的矩形,這些文本是在CreateWindow調用的窗口文本參數中提供的。而CreateWindow 或MoveWindow調用中指定的寬度和高度則確定了矩形的大小。文本…

Spring-09

在 Spring 中如何注入一個 java 集合 在Spring中注入一個Java集合可以使用Autowired注解來實現。你可以在一個類的字段、構造函數或者setter方法上使用Autowired注解來注入一個集合。 下面是一個示例代碼,展示了如何在Spring中注入一個Java集合。 創建一個接口和實…