Scikit-learn通關秘籍:從鳶尾花分類到房價預測

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力,按量計費,靈活彈性,頂級配置,學生專屬優惠。

決策樹/SVM/KNN算法對比 × 模型評估指標解析
讀者收獲:掌握經典機器學習全流程

當80%的機器學習問題可用Scikit-learn解決,掌握其核心流程將成為你的核心競爭力。本文通過對比實驗揭示算法本質,帶你一站式打通機器學習任督二脈。

一、Scikit-learn全景圖:3大核心模塊解析

在這里插入圖片描述

1.1 算法選擇矩陣

在這里插入圖片描述

1.2 環境極速配置

# 創建專用環境  
conda create -n sklearn_env python=3.10  
conda activate sklearn_env  # 安裝核心庫  
pip install numpy pandas matplotlib seaborn scikit-learn  # 驗證安裝  
import sklearn  
print(f"Scikit-learn version: {sklearn.__version__}")  

二、分類實戰:鳶尾花識別

2.1 數據探索與預處理

from sklearn.datasets import load_iris  
import pandas as pd  # 加載數據集  
iris = load_iris()  
df = pd.DataFrame(iris.data, columns=iris.feature_names)  
df['target'] = iris.target  # 數據概覽  
print(f"樣本數: {df.shape[0]}")  
print(f"特征數: {df.shape[1]-1}")  
print(f"類別分布:\n{df['target'].value_counts()}")  # 可視化分析  
import seaborn as sns  
sns.pairplot(df, hue='target', palette='viridis')  

2.2 三大分類器對比實驗

from sklearn.model_selection import train_test_split  
from sklearn.tree import DecisionTreeClassifier  
from sklearn.svm import SVC  
from sklearn.neighbors import KNeighborsClassifier  # 劃分數據集  
X = df.drop(columns='target')  
y = df['target']  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 初始化分類器  
models = {  "決策樹": DecisionTreeClassifier(max_depth=3),  "SVM": SVC(kernel='rbf', probability=True),  "KNN": KNeighborsClassifier(n_neighbors=5)  
}  # 訓練與評估  
results = {}  
for name, model in models.items():  model.fit(X_train, y_train)  y_pred = model.predict(X_test)  results[name] = y_pred  

2.3 分類結果可視化

import matplotlib.pyplot as plt  
from sklearn.metrics import confusion_matrix  # 繪制混淆矩陣  
fig, axes = plt.subplots(1, 3, figsize=(18, 5))  
for i, (name, y_pred) in enumerate(results.items()):  cm = confusion_matrix(y_test, y_pred)  sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', ax=axes[i])  axes[i].set_title(f"{name} 混淆矩陣")  
plt.show()  

三、回歸實戰:波士頓房價預測

3.1 數據解析與特征工程

from sklearn.datasets import fetch_openml  # 加載數據集  
boston = fetch_openml(name='boston', version=1)  
df = pd.DataFrame(boston.data, columns=boston.feature_names)  
df['PRICE'] = boston.target  # 關鍵特征分析  
corr = df.corr()['PRICE'].sort_values(ascending=False)  
print(f"與房價相關性最高的特征:\n{corr.head(5)}")  # 特征工程  
df['RM_LSTAT'] = df['RM'] / df['LSTAT']  # 創造新特征  

3.2 回歸模型對比

from sklearn.linear_model import LinearRegression  
from sklearn.tree import DecisionTreeRegressor  
from sklearn.svm import SVR  # 劃分數據集  
X = df.drop(columns='PRICE')  
y = df['PRICE']  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 初始化回歸器  
regressors = {  "線性回歸": LinearRegression(),  "決策樹回歸": DecisionTreeRegressor(max_depth=5),  "支持向量回歸": SVR(kernel='rbf')  
}  # 訓練與預測  
predictions = {}  
for name, reg in regressors.items():  reg.fit(X_train, y_train)  pred = reg.predict(X_test)  predictions[name] = pred  

3.3 回歸結果可視化

# 繪制預測值與真實值對比  
plt.figure(figsize=(15, 10))  
for i, (name, pred) in enumerate(predictions.items(), 1):  plt.subplot(3, 1, i)  plt.scatter(y_test, pred, alpha=0.7)  plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--')  plt.xlabel('真實價格')  plt.ylabel('預測價格')  plt.title(f'{name} 預測效果')  
plt.tight_layout()  

四、模型評估指標深度解析

4.1 分類指標四維分析

在這里插入圖片描述
鳶尾花分類評估實例:

from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score  metrics = []  
for name, y_pred in results.items():  metrics.append({  "模型": name,  "準確率": accuracy_score(y_test, y_pred),  "精確率": precision_score(y_test, y_pred, average='macro'),  "召回率": recall_score(y_test, y_pred, average='macro'),  "F1": f1_score(y_test, y_pred, average='macro')  })  metrics_df = pd.DataFrame(metrics)  
print(metrics_df)  

在這里插入圖片描述

4.2 回歸指標三維對比

波士頓房價評估實例:

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score  reg_metrics = []  
for name, pred in predictions.items():  reg_metrics.append({  "模型": name,  "MSE": mean_squared_error(y_test, pred),  "MAE": mean_absolute_error(y_test, pred),  "R2": r2_score(y_test, pred)  })  reg_metrics_df = pd.DataFrame(reg_metrics)  
print(reg_metrics_df)  

在這里插入圖片描述

五、算法原理對比揭秘

5.1 決策樹:可解釋性之王

核心參數調優指南:

params = {  'max_depth': [3, 5, 7, None],  'min_samples_split': [2, 5, 10],  'criterion': ['gini', 'entropy']  
}  best_tree = GridSearchCV(  DecisionTreeClassifier(),  param_grid=params,  cv=5,  scoring='f1_macro'  
)  
best_tree.fit(X_train, y_train)  

5.2 SVM:高維空間的分割大師

核函數選擇策略:
在這里插入圖片描述

5.3 KNN:簡單高效的惰性學習

距離度量對比:

distance_metrics = [  ('euclidean', '歐氏距離'),  ('manhattan', '曼哈頓距離'),  ('cosine', '余弦相似度')  
]  for metric, name in distance_metrics:  knn = KNeighborsClassifier(n_neighbors=5, metric=metric)  knn.fit(X_train, y_train)  score = knn.score(X_test, y_test)  print(f"{name} 準確率: {score:.4f}")  

六、模型優化實戰技巧

6.1 特征工程:性能提升關鍵

波士頓房價特征優化:

from sklearn.preprocessing import PolynomialFeatures  # 創建多項式特征  
poly = PolynomialFeatures(degree=2, include_bias=False)  
X_poly = poly.fit_transform(X)  # 新特征訓練  
lr_poly = LinearRegression()  
lr_poly.fit(X_train_poly, y_train)  
r2 = lr_poly.score(X_test_poly, y_test)  
print(f"R2提升: {reg_metrics_df.loc[0,'R2']:.2f}{r2:.2f}")  

6.2 交叉驗證:防止過擬合

from sklearn.model_selection import cross_val_score  # 5折交叉驗證  
scores = cross_val_score(  SVC(),  X, y,  cv=5,  scoring='accuracy'  
)  
print(f"平均準確率: {scores.mean():.4f}{scores.std():.4f})")  

6.3 網格搜索:自動化調參

from sklearn.model_selection import GridSearchCV  # 定義參數網格  
param_grid = {  'C': [0.1, 1, 10, 100],  'gamma': [1, 0.1, 0.01, 0.001],  'kernel': ['rbf', 'linear']  
}  # 執行搜索  
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=3)  
grid.fit(X_train, y_train)  
print(f"最優參數: {grid.best_params_}")  

七、工業級部署方案

7.1 模型持久化

import joblib  # 保存模型  
joblib.dump(best_model, 'iris_classifier.pkl')  # 加載模型  
clf = joblib.load('iris_classifier.pkl')  # 在線預測  
new_data = [[5.1, 3.5, 1.4, 0.2]]  
prediction = clf.predict(new_data)  
print(f"預測類別: {iris.target_names[prediction[0]]}")  

7.2 構建預測API

from flask import Flask, request, jsonify  app = Flask(__name__)  
model = joblib.load('iris_classifier.pkl')  @app.route('/predict', methods=['POST'])  
def predict():  data = request.get_json()  features = [data['sepal_length'], data['sepal_width'],  data['petal_length'], data['petal_width']]  prediction = model.predict([features])  return jsonify({'class': iris.target_names[prediction[0]]})  if __name__ == '__main__':  app.run(host='0.0.0.0', port=5000)  

7.3 性能監控儀表盤

from sklearn.metrics import plot_roc_curve, plot_precision_recall_curve  # 分類性能可視化  
fig, ax = plt.subplots(1, 2, figsize=(15, 6))  
plot_roc_curve(model, X_test, y_test, ax=ax[0])  
plot_precision_recall_curve(model, X_test, y_test, ax=ax[1])  

八、避坑指南:常見錯誤解決方案

8.1 數據預處理陷阱

問題:測試集出現未知類別
解決方案

from sklearn.preprocessing import OneHotEncoder  # 訓練階段  
encoder = OneHotEncoder(handle_unknown='ignore')  
encoder.fit(X_train_categorical)  # 測試階段自動忽略未知類別  
X_test_encoded = encoder.transform(X_test_categorical)  

8.2 特征尺度問題

癥狀:SVM/KNN性能異常
處方

from sklearn.preprocessing import StandardScaler  scaler = StandardScaler()  
X_train_scaled = scaler.fit_transform(X_train)  
X_test_scaled = scaler.transform(X_test)  # 注意:只變換不擬合  

8.3 樣本不均衡處理

解決方案對比
在這里插入圖片描述

結語:機器學習工程師的成長之路

當你在Scikit-learn中完整實現從數據加載到模型部署的全流程,已超越70%的入門者。但真正的進階之路剛剛開始。

下一步行動指南:

# 1. 復現經典論文算法  
from sklearn.linear_model import LogisticRegression  
model = LogisticRegression(penalty='l1', solver='liblinear')  # 2. 參加Kaggle競賽  
from kaggle import api  
api.competitions_list(search='getting started')  # 3. 構建個人項目組合  
projects = [  {"name": "鳶尾花分類器", "type": "分類", "accuracy": 0.97},  {"name": "房價預測", "type": "回歸", "R2": 0.85}  
]  

記住:在機器學習領域,理論認知的深度=代碼實踐的厚度。現在運行你的第一個完整流程,讓Scikit-learn成為你AI旅程中最可靠的伙伴。

附錄:Scikit-learn速查表

任務類型導入路徑核心參數
分類from sklearn.ensemble import RandomForestClassifiern_estimators, max_depth
回歸from sklearn.linear_model import LinearRegressionfit_intercept, normalize
聚類from sklearn.cluster import KMeansn_clusters, init
降維from sklearn.decomposition import PCAn_components
模型選擇from sklearn.model_selection import GridSearchCVparam_grid, cv
數據預處理from sklearn.preprocessing import StandardScalerwith_mean, with_std

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

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

相關文章

rsync + inotify 數據實時同步

rsync inotify 數據實時同步 一、rsync簡介 rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步, 支持本地復制,或者與其他SSH、rsync主機同步 二、rsync三種命令 Rsync的命令格式常用的有以下三種:&#…

Linux基礎介紹-3——第一階段

文章目錄一、進程管理1.1 進程的基本概念1.2 常見管理命令1.3 進程優先級調整:nice 與 renice二、軟件包管理三、防火墻管理四、shell腳本五、xshell鏈接kali一、進程管理 1.1 進程的基本概念 進程是程序的動態執行實例,每個進程都有唯一的 PID&#x…

python 可迭代對象相關知識點

1. 什么是可迭代對象 (Iterable) 在 Python 里,可迭代對象指的是: 👉 能夠一次返回一個元素的對象,可以被 for 循環遍歷。 常見的可迭代對象有: 序列類型:list、tuple、str集合類型:set、dict&a…

ijkplayer Android 編譯

一、下載編譯庫文件1.1 編譯庫文件環境:ubuntu 20.04 版本liangtao:ffmpeg$lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal1.2 項目源碼下載使用 git 下載 ijkplayer&#…

snn前向推理時間計算(處理器實現)

公式 Tinf(1?sparsity)number of synapsesnumber of sub-processorsSIMD ways T_{\text{inf}} \frac{(1-\text{sparsity})\times \text{number of synapses}} {\text{number of sub-processors}\times \text{SIMD ways}} Tinf?number of sub-processorsSIMD ways(1?sparsity…

Linux------《操作系統全景速覽:Windows·macOS·Linux·Unix 對比及 Linux 發行版實戰指南》

(一)常見操作系統(system)電腦:Windows,Macos,Linux,UnixWindows:微軟公司開發的一款桌面操作系統(閉源系統)。版本有dos,win98,win NT,win XP , …

Three.js 初級教程大全

本文檔旨在為初學者提供一個全面的 Three.js 入門指南。我們將從 Three.js 的基本概念開始,逐步介紹如何創建場景、添加物體、設置材質、使用光照和相機,以及如何實現簡單的動畫和交互。通過本教程,你將能夠掌握 Three.js 的核心知識&#xf…

遙感領域解決方案丨高光譜、無人機多光譜、空天地數據識別與計算

一:AI智慧高光譜遙感實戰:手撕99個案例項目、全覆蓋技術鏈與應用場景一站式提升方案在遙感技術飛速發展的今天,高光譜數據以其獨特的光譜分辨率成為環境監測、精準農業、地質勘探等領域的核心數據源。然而,海量的波段數據、復雜的…

(LeetCode 面試經典 150 題) 114. 二叉樹展開為鏈表 (深度優先搜索dfs+鏈表)

題目:114. 二叉樹展開為鏈表 思路:深度優先搜索dfs鏈表,時間復雜度0(n)。 C版本: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : …

《線程狀態轉換深度解析:從阻塞到就緒的底層原理》

目錄 一、線程的五種基本狀態 二、線程從 RUNNABLE 進入阻塞 / 等待狀態的三種典型場景 1. 調用sleep(long millis):進入 TIMED_WAITING 狀態 2. 調用wait():進入 WAITING/TIMED_WAITING 狀態 3. 等待 I/O 資源或獲取鎖失敗:進入 BLOCKE…

面經整理-猿輔導-內容服務后端-java實習

部門管理系統設計 題目要求 設計部門 MySQL 數據表實現接口:根據中間部門 ID 獲取其下屬葉子部門 ID設計包含子節點列表的 Java 數據對象,并實現批量獲取功能 一、MySQL 部門表設計 表結構 CREATE TABLE department (id BIGINT PRIMARY KEY AUTO_INCREME…

Openharmony之window_manager子系統源碼、需求定制詳解

1. 模塊概述 Window Manager 模塊是 OpenHarmony 操作系統的核心窗口管理系統,負責窗口的創建、銷毀、布局、焦點管理、動畫效果以及與硬件顯示的交互。該模塊采用客戶端-服務端架構,提供完整的窗口生命周期管理和用戶界面交互支持。 1.1架構總覽 Window Manager Client 應…

《CDN加速的安全隱患與解決辦法:如何構建更安全的網絡加速體系》

CDN(內容分發網絡)作為提升網站訪問速度的關鍵技術,被廣泛應用于各類互聯網服務中。然而,在享受加速優勢的同時,CDN也面臨諸多安全隱患。本文將解析常見的CDN安全問題,并提供實用的解決辦法,幫助…

【Linux指南】GCC/G++編譯器:庖丁解牛——從源碼到可執行文件的奇幻之旅

不只是簡單的 gcc hello.c 每一位Linux C/C++開發者敲下的第一行編譯命令,幾乎都是 gcc hello.c -o hello 或 g++ hello.cpp -o hello。這像一句神奇的咒語,將人類可讀的源代碼變成了機器可執行的二進制文件。但在這條簡單的命令背后,隱藏著一個如同精密鐘表般復雜的多步流…

地區電影市場分析:用Python爬蟲抓取貓眼_燈塔專業版各地區票房

在當今高度數據驅動的影視行業,精準把握地區票房表現是制片方、宣發團隊和影院經理做出關鍵決策的基礎。一部電影在北上廣深的表現與二三線城市有何差異?哪種類型的電影在特定區域更受歡迎?回答這些問題,不能再依賴“拍腦袋”和經…

Spark03-RDD02-常用的Action算子

一、常用的Action算子 1-1、countByKey算子 作用:統計key出現的次數,一般適用于K-V型的RDD。 【注意】: 1、collect()是RDD的算子,此時的Action算子,沒有生成新的RDD,所以,沒有collect()&…

[Android] 顯示的內容被導航欄這擋住

上圖中彈出的對話框的按鈕“Cancel/Save”被導航欄遮擋了部分顯示&#xff0c;影響了使用。Root cause: Android 應用的主題是 Theme.AppCompat.Light1. 修改 AndroidManifest.xml 將 application 標簽的 android:theme 屬性指向新的自定義主題&#xff1a;<applicationandr…

分貝單位全指南:從 dB 到 dBm、dBc

引言在射頻、音頻和通信工程中&#xff0c;我們經常會在示波器、頻譜儀或測試報告里看到各種各樣的dB單位&#xff0c;比如 dBm、dBc、dBV、dBFS 等。它們看起來都帶個 dB&#xff0c;實則各有不同的定義和參考基準&#xff1a;有的表示相對功率&#xff0c;有的表示電壓電平&a…

怎么確定mysql 鏈接成功了呢?

asyncio.run(test_connection()) ? Connection failed: cryptography package is required for sha256_password or caching_sha2_password auth methods 根據你提供的錯誤信息,問題出現在 MySQL 的認證插件和加密連接配置上。以下是幾種解決方法: 1. 安裝 cryptography 包…

(5)軟件包管理器 yum | Vim 編輯器 | Vim 文本批量化操作 | 配置 Vim

Ⅰ . Linux 軟件包管理器 yum01 安裝軟件在 Linux 下安裝軟件并不像 Windows 下那么方便&#xff0c;最通常的方式是去下載程序的源代碼并進行編譯&#xff0c;從而得到可執行程序。正是因為太麻煩&#xff0c;所以有些人就把一些常用的軟件提前編譯好并做成軟件包&#xff0c;…