SciKit-Learn 全面分析分類任務 wine 葡萄酒數據集

背景

wine 葡萄酒數據集,提供了對三種不同品種的意大利葡萄酒的化學分析結果
主要特點:

  • 數據集規模:總共有 178 個樣本
  • 特征數量:每個樣本有 13 個化學特征,包括酒精、蘋果酸、灰分、鎂等
  • 類別數量:總共有 3 個類別,分別代表三種不同的葡萄酒品種

wine.frame.head
wine.frame.info

步驟

  1. 加載數據集
  2. 拆分訓練集、測試集
  3. 數據預處理(標準化)
  4. 選擇模型
  5. 模型訓練(擬合)
  6. 測試模型效果
  7. 評估模型

分析方法

對數據集使用 7 種分類方法進行分析

  1. K 近鄰(K-NN)
  2. 決策樹
  3. 支持向量機(SVM)
  4. 邏輯回歸
  5. 隨機森林
  6. 樸素貝葉斯
  7. 多層感知機(MLP)

分析結果

不同模型的 ROC 及 AUC

ROC & AUC

不同模型效果

--- 模型訓練與評估 ------ 正在訓練 K近鄰 (K-NN) 模型 ---
K近鄰 (K-NN) 模型的準確率: 0.9630
K近鄰 (K-NN) 模型的分類報告:precision    recall  f1-score   supportclass_0       0.95      1.00      0.97        19class_1       1.00      0.90      0.95        21class_2       0.93      1.00      0.97        14accuracy                           0.96        54macro avg       0.96      0.97      0.96        54
weighted avg       0.97      0.96      0.96        54--- 正在訓練 決策樹 模型 ---
決策樹 模型的準確率: 0.9630
決策樹 模型的分類報告:precision    recall  f1-score   supportclass_0       0.95      0.95      0.95        19class_1       0.95      1.00      0.98        21class_2       1.00      0.93      0.96        14accuracy                           0.96        54macro avg       0.97      0.96      0.96        54
weighted avg       0.96      0.96      0.96        54--- 正在訓練 支持向量機 (SVM) 模型 ---
支持向量機 (SVM) 模型的準確率: 0.9815
支持向量機 (SVM) 模型的分類報告:precision    recall  f1-score   supportclass_0       1.00      1.00      1.00        19class_1       0.95      1.00      0.98        21class_2       1.00      0.93      0.96        14accuracy                           0.98        54macro avg       0.98      0.98      0.98        54
weighted avg       0.98      0.98      0.98        54--- 正在訓練 邏輯回歸 模型 ---
邏輯回歸 模型的準確率: 0.9815
邏輯回歸 模型的分類報告:precision    recall  f1-score   supportclass_0       1.00      1.00      1.00        19class_1       1.00      0.95      0.98        21class_2       0.93      1.00      0.97        14accuracy                           0.98        54macro avg       0.98      0.98      0.98        54
weighted avg       0.98      0.98      0.98        54--- 正在訓練 隨機森林 模型 ---
隨機森林 模型的準確率: 1.0000
隨機森林 模型的分類報告:precision    recall  f1-score   supportclass_0       1.00      1.00      1.00        19class_1       1.00      1.00      1.00        21class_2       1.00      1.00      1.00        14accuracy                           1.00        54macro avg       1.00      1.00      1.00        54
weighted avg       1.00      1.00      1.00        54--- 正在訓練 樸素貝葉斯 模型 ---
樸素貝葉斯 模型的準確率: 1.0000
樸素貝葉斯 模型的分類報告:precision    recall  f1-score   supportclass_0       1.00      1.00      1.00        19class_1       1.00      1.00      1.00        21class_2       1.00      1.00      1.00        14accuracy                           1.00        54macro avg       1.00      1.00      1.00        54
weighted avg       1.00      1.00      1.00        54--- 正在訓練 多層感知器 (MLP) 模型 ---
多層感知器 (MLP) 模型的準確率: 0.9815
多層感知器 (MLP) 模型的分類報告:precision    recall  f1-score   supportclass_0       1.00      1.00      1.00        19class_1       1.00      0.95      0.98        21class_2       0.93      1.00      0.97        14accuracy                           0.98        54macro avg       0.98      0.98      0.98        54
weighted avg       0.98      0.98      0.98        54

代碼

from sklearn.datasets import load_winefrom sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.neural_network import MLPClassifierfrom sklearn.metrics import accuracy_score, classification_report, roc_curve, auc
from sklearn.preprocessing import label_binarizeimport matplotlib.pyplot as plt
import numpy as np# 設置 Matplotlib 字體以正確顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Zen Hei', 'STHeiti', 'Arial Unicode MS']
# 解決保存圖像時負號'-'顯示為方塊的問題
plt.rcParams['axes.unicode_minus'] = False  def perform_wine_analysis():"""使用 scikit-learn 對葡萄酒數據集進行全面的分析。該函數包含數據加載、預處理、模型訓練、評估和 ROC/AUC 可視化。"""print("--- 正在加載葡萄酒數據集 ---")# 加載葡萄酒數據集wine = load_wine()# 獲取數據特征和目標標簽X = wine.datay = wine.targettarget_names = wine.target_namesprint("\n--- 數據集概覽 ---")print(f"數據形狀: {X.shape}")print(f"目標名稱: {target_names}")# 將數據集劃分為訓練集和測試集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)print("\n--- 數據劃分結果 ---")print(f"訓練集形狀: {X_train.shape}")print(f"測試集形狀: {X_test.shape}")# 數據標準化print("\n--- 正在對數據進行標準化處理 ---")scaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test)# 定義并訓練多個分類器模型models = {"K近鄰 (K-NN)": KNeighborsClassifier(n_neighbors=5),"決策樹": DecisionTreeClassifier(random_state=42),"支持向量機 (SVM)": SVC(kernel='rbf', C=1.0, random_state=42, probability=True),"邏輯回歸": LogisticRegression(random_state=42, max_iter=10000),"隨機森林": RandomForestClassifier(random_state=42),"樸素貝葉斯": GaussianNB(),"多層感知器 (MLP)": MLPClassifier(random_state=42, max_iter=10000)}print("\n--- 模型訓練與評估 ---")for name, model in models.items():print(f"\n--- 正在訓練 {name} 模型 ---")model.fit(X_train_scaled, y_train)y_pred = model.predict(X_test_scaled)accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred, target_names=target_names)print(f"{name} 模型的準確率: {accuracy:.4f}")print(f"{name} 模型的分類報告:\n{report}")print("\n--- ROC 曲線和 AUC 對比 ---")num_models = len(models)cols = 3rows = (num_models + cols - 1) // colsfig, axes = plt.subplots(rows, cols, figsize=(18, 6 * rows))axes = axes.flatten()# 將多分類標簽二值化,用于 ROC 曲線計算y_test_bin = label_binarize(y_test, classes=np.arange(len(target_names)))for i, (name, model) in enumerate(models.items()):ax = axes[i]# 獲取預測概率if hasattr(model, "predict_proba"):y_score = model.predict_proba(X_test_scaled)else:y_score = model.decision_function(X_test_scaled)# 計算每個類別的 ROC 曲線和 AUCfpr = dict()tpr = dict()roc_auc = dict()for j in range(len(target_names)):fpr[j], tpr[j], _ = roc_curve(y_test_bin[:, j], y_score[:, j])roc_auc[j] = auc(fpr[j], tpr[j])# 計算微平均 ROC 曲線和 AUCfpr["micro"], tpr["micro"], _ = roc_curve(y_test_bin.ravel(), y_score.ravel())roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])# 繪制所有類別的 ROC 曲線并填充for j in range(len(target_names)):ax.plot(fpr[j], tpr[j], label=f'類別 {target_names[j]} (AUC = {roc_auc[j]:.2f})', alpha=0.7)ax.fill_between(fpr[j], tpr[j], alpha=0.1)# 繪制微平均 ROC 曲線ax.plot(fpr["micro"], tpr["micro"], label=f'微平均 (AUC = {roc_auc["micro"]:.2f})',color='deeppink', linestyle=':', linewidth=4)# 繪制對角線 (隨機猜測)ax.plot([0, 1], [0, 1], 'k--', lw=2)# 設置圖表屬性ax.set_xlim([0.0, 1.0])ax.set_ylim([0.0, 1.05])ax.set_xlabel('假正率 (FPR)')ax.set_ylabel('真正率 (TPR)')ax.set_title(f'{name} - ROC 曲線')ax.legend(loc="lower right", fontsize='small')ax.grid(True)# 隱藏未使用的子圖邊框for j in range(num_models, len(axes)):axes[j].axis('off')plt.tight_layout()plt.show()if __name__ == "__main__":perform_wine_analysis()

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

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

相關文章

【論文閱讀】Far3D: Expanding the Horizon for Surround-view 3D Object Detection

標題: Far3D: Expanding the Horizon for Surround-view 3D Object Detection motivation 作者覺得市面上的方法對遠處的long-range 的3d-od檢測沒有深入研究,于是作者提出FAR3D. 基于環視圖像的3D物體檢測取得了顯著進展,且其部署成本較低。…

Redis分布式鎖的try-with-resources實現

Redis分布式鎖的try-with-resources實現 在Java中,try-with-resources是一種自動資源管理機制,適用于實現了AutoCloseable接口的類。通過結合Redis分布式鎖和try-with-resources,可以確保鎖的自動釋放,避免因異常或忘記釋放鎖導致…

上傳文件接口設計,SpringBoot + MinIO/S3 文件服務實現:FileService 接口與 FileServiceImpl 詳解

在企業項目中,文件上傳和管理是非常常見的需求。本文基于 芋道源碼 的實現,介紹如何封裝一個通用的 文件服務 FileService,支持:文件上傳(保存數據庫記錄 存儲文件到 S3/MinIO 等對象存儲)文件下載與刪除文…

MVC 依賴注入(DI)與服務全解析(附避坑實戰)

依賴注入的核心概念 依賴注入(DI)是一種設計模式,通過將對象的依賴關系從內部創建轉移到外部傳遞,實現解耦。在 MVC 框架中,DI 容器負責管理對象的生命周期和依賴關系,開發者只需聲明依賴,容器…

【實證分析】上市公司經營風險數據集-含代碼(2000-2022年)

數據簡介:上市公司經營風險涉及多維度、多層次的復雜因素,本文章參考王竹泉-經營風險與營運資金融資決策對上市公司經驗風險進行測算,經營風險是該公司息稅折舊攤銷前利潤率的標準差,經營風險是該公司息稅折舊攤銷前利潤率的標準差…

領碼方案|Windows 下 PLT → PDF 轉換服務超級完整版:異步、權限、進度

摘要 面向 Windows 平臺,使用 ASP.NET Core Web API 結合 Ghostscript.NET 庫,實現 PLT(HPGL)→PDF 的純庫調用轉換,無需外部進程。支持同步與異步模式,采用 JWTRBAC 進行權限治理,任務狀態存儲…

瀏覽器兼容性問題全解:CSS 前綴、Grid/Flex 布局兼容方案與跨瀏覽器調試技巧

1. 瀏覽器兼容性與前綴問題 不同瀏覽器(尤其是老版本 IE、Edge、Safari)對新特性(比如 CSS 變量、Grid、Flex 等)的支持程度不一,需要使用廠商前綴(-webkit-、-moz- 等)或降級方案。新手往往忽…

【Android View】事件分發機制

參考文獻 https://juejin.cn/post/6844904041487532045https://juejin.cn/post/6844903894103883789#heading-12https://www.jianshu.com/p/dea72779a6b7 文章目錄

【大數據相關】ClickHouse命令行與SQL語法詳解

ClickHouse命令行與SQL語法詳解一、ClickHouse命令行與SQL語法詳解第一部分:ClickHouse SQL 命令行客戶端 (clickhouse-client)1. 基礎連接2. 核心命令行參數3. 數據導入與導出實戰第二部分:ClickHouse SQL 語法詳解1. DDL (數據定義語言)2. DML (數據操…

學習日記-CSS-day53-9.11

1.CSS介紹知識點核心內容重點CSS定義層疊樣式表,用于內容修飾和樣式展現英文全稱cascading style sheetsCSS作用實現HTML內容與樣式分離,提高開發效率對比傳統HTML元素單獨設置樣式的低效方式學習建議掌握常用功能即可,重點在打通前后端數據通…

Maven中optional的作用

目的: 控制依賴傳遞 :將依賴標記為可選,這樣當其他模塊依賴common-component時,不會自動繼承Elasticsearch依賴。這遵循了"依賴最小化"原則,避免不必要的庫被引入到不需要它們的模塊中。模塊化設計 &#xf…

藍橋杯算法之基礎知識(7)---排序題的快排和歸并排序

一、快排》快排方法,就三步1.隨便選一個值作為基準值x2.拿選中的這個x值劃分隊列為左右兩個區間(左邊的都小于x,右邊的都大于x)3.然后遞歸左區間和右區間就行》代碼舉例:#qs排序#1 6 7 8 6 5 4 #先找比較點&#xff0c…

緩存未命中

緩存未命中(Cache Miss) 發生在 CPU 訪問某塊內存時,該地址不在當前緩存(L1/L2/L3)中,導致程序被迫從更慢的內存(RAM)讀取數據,嚴重拖慢程序執行速度。 📍 一…

AR眼鏡:化工安全生產的技術革命

在石化企業的壓縮機組巡檢中,佩戴AR眼鏡的巡檢員眼前實時顯示著設備溫度場分布和振動頻譜曲線,單臺設備巡檢時間從45分鐘縮短至18分鐘。這不僅是效率的提升,更是化工安全生產的一場智能革命。一、行業痛點:傳統化工巡檢的困境與挑…

消息中間件RabbitMQ(從入門到精通)

RabbitMQ概念_MQ 消息隊列 MQ全稱Message Queue(消息隊列),是在消息的傳輸過程中保存消息的容器。多用于系統之間的異步通信。 同步通信相當于兩個人當面對話,你一言我一語。必須及時回復 異步通信相當于通過第三方轉述對話,可能有消息的延遲,但不需要二人時刻保持聯系。…

前端學習之后端java小白(五)之多表查詢/事務

一、多表查詢概念二、概述 1. 內連接隱式內連接 SELECT 字段列表 FROM 表1,表2... WHERE 條件顯示內連接SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 條件2. 外連接 左外連接SELECT 列名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 連接條件;右外連接SELECT 列名…

Java全棧學習筆記34

# JDBCjava database connection Java 數據庫連接技術## JDBC 驅動程序如果需要通過jdbc技術連接關系型數據庫,就需要為jdbc提供一個該數據庫的驅動。驅動程序由對應的數據庫廠商提供。mysql提供了針對于各種語言的驅動程序。去官網下載和java相關的驅動即可## JDB…

如何為MySQL中的JSON字段設置索引

背景 MySQL在2015年中發布的5.7.8版本中首次引入了JSON數據類型。自此,它成了一種逃離嚴格列定義的方式,可以存儲各種形狀和大小的JSON文檔,例如審計日志、配置信息、第三方數據包、用戶自定義字段等。 雖然MySQL提供了讀寫JSON數據的函數&am…

【學習日記】

1.上午看了會面經,八股,很多看不懂1.5排查本地mysql服務啟動問題2.刷了兩道題翻轉二叉樹的Dfs和bfs遞歸方法,看了幾分鐘看懂了,一開始刷題,沒有這種感覺,可能思維上升了3.下午做了會ppt4.看了ssm的一個gith…

本地大模型部署指南-Ollama與HuggingFace對比

在本地部署大模型時,用 Ollama 和 Hugging Face (HF) 確實有很大區別,涉及系統、硬件、訓練、推理方式,以及能否查看模型源代碼。下面我分幾個維度說明: 系統和安裝 Ollama 定位是「開箱即用」的本地大模型運行環境。 自帶運行時&…