sklearn機器學習概述及API詳細使用指南

一、機器學習與sklearn簡介

機器學習是人工智能的一個分支,它通過算法讓計算機從數據中學習規律,并基于這些規律做出預測或決策。scikit-learn(簡稱sklearn)是Python中最流行的機器學習庫之一,它提供了各種監督學習和無監督學習的算法實現。

sklearn的主要特點:

  • 簡單高效的數據挖掘和數據分析工具

  • 基于NumPy、SciPy和matplotlib構建

  • 開源且商業可用 - BSD許可證

  • 豐富的算法支持:分類、回歸、聚類、降維等

  • 完善的文檔和豐富的社區資源

二、sklearn基礎API結構

sklearn的API設計非常一致,主要包含以下幾個核心接口:

  1. 估計器(Estimator): 用于擬合模型的任何對象,如分類器、回歸器等

  2. 轉換器(Transformer): 用于數據預處理和特征工程的估計器

  3. 預測器(Predictor): 能夠進行預測的估計器

  4. 模型評估: 用于評估模型性能的工具

三、數據預處理API詳解

1. 標準化 (StandardScaler)

from sklearn.preprocessing import StandardScaler"""
StandardScaler參數說明:
- copy : boolean, default=True是否創建數據的副本,如果為False,則在原始數據上執行標準化
- with_mean : boolean, default=True是否將數據居中(減去均值)
- with_std : boolean, default=True是否將數據縮放到單位方差
"""# 示例代碼
scaler = StandardScaler(copy=True, with_mean=True, with_std=True)
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
scaler.fit(data)  # 計算均值和標準差
print(scaler.mean_)  # 輸出均值 [0.5 0.5]
print(scaler.scale_)  # 輸出標準差 [0.5 0.5]
transformed_data = scaler.transform(data)
print(transformed_data)
"""
輸出標準化后的數據:
[[-1. -1.][-1. -1.][ 1.  1.][ 1.  1.]]
"""

2. 歸一化 (MinMaxScaler)?

from sklearn.preprocessing import MinMaxScaler"""
MinMaxScaler參數說明:
- feature_range : tuple (min, max), default=(0, 1)期望的轉換后數據范圍
- copy : boolean, default=True是否創建數據的副本
"""scaler = MinMaxScaler(feature_range=(0, 1))
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler.fit(data)
print(scaler.data_min_)  # 輸出最小值 [-1.  2.]
print(scaler.data_max_)  # 輸出最大值 [ 1. 18.]
transformed_data = scaler.transform(data)
print(transformed_data)
"""
輸出歸一化后的數據:
[[0.   0.  ][0.25 0.25][0.5  0.5 ][1.   1.  ]]
"""

四、監督學習API詳解

1. 線性回歸 (LinearRegression)

from sklearn.linear_model import LinearRegression"""
LinearRegression參數說明:
- fit_intercept : boolean, default=True是否計算此模型的截距
- normalize : boolean, default=False是否在回歸前對回歸變量X進行歸一化
- copy_X : boolean, default=True是否復制X,否則可能會被覆蓋
- n_jobs : int, default=None用于計算的作業數
"""# 示例代碼
X = [[1, 1], [1, 2], [2, 2], [2, 3]]  # 特征
y = [1, 2, 2, 3]  # 目標值model = LinearRegression(fit_intercept=True, normalize=False)
model.fit(X, y)  # 擬合模型print(f"系數: {model.coef_}")  # 輸出: [0.4 0.6]
print(f"截距: {model.intercept_}")  # 輸出: 0.2
print(f"R2分數: {model.score(X, y)}")  # 輸出: 0.8# 預測新數據
print(model.predict([[3, 5]]))  # 輸出: [4.4]

2. 支持向量機分類 (SVC)?

from sklearn.svm import SVC"""
SVC參數說明:
- C : float, default=1.0正則化參數,強度與C成反比
- kernel : {'linear', 'poly', 'rbf', 'sigmoid'}, default='rbf'指定算法中使用的內核類型
- degree : int, default=3多項式核函數的次數('poly'時使用)
- gamma : {'scale', 'auto'} or float, default='scale'核系數
- probability : bool, default=False是否啟用概率估計
"""# 示例代碼
X = [[0, 0], [1, 1], [1, 0], [0, 1]]  # 特征
y = [0, 1, 1, 0]  # 類別標簽model = SVC(C=1.0, kernel='rbf', gamma='scale', probability=False)
model.fit(X, y)  # 訓練模型print("支持向量索引:", model.support_)  # 輸出支持向量的索引
print("支持向量:", model.support_vectors_)  # 輸出支持向量
print("各類的支持向量數量:", model.n_support_)  # 輸出每類的支持向量數量# 預測新數據
print(model.predict([[0.5, 0.5]]))  # 輸出: [1]

五、模型評估API詳解

1. 交叉驗證 (cross_val_score)

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier"""
cross_val_score參數說明:
- estimator : 估計器對象實現"fit"和"score"方法的對象
- X : 數組要擬合的數據
- y : 數組目標變量
- cv : int, 交叉驗證生成器或可迭代對象, default=None確定交叉驗證拆分策略
- scoring : str或可調用對象, default=None評分策略
- n_jobs : int, default=None并行運行的作業數
"""# 示例代碼
X = [[0, 0], [1, 1], [2, 2], [3, 3]]  # 特征
y = [0, 1, 0, 1]  # 類別標簽model = RandomForestClassifier(n_estimators=10)
scores = cross_val_score(model, X, y, cv=2, scoring='accuracy')print(f"交叉驗證分數: {scores}")  # 輸出類似: [1.  0.5]
print(f"平均分數: {scores.mean():.2f}")  # 輸出類似: 0.75

2. 分類報告 (classification_report)?

from sklearn.metrics import classification_report
from sklearn.svm import SVC# 示例代碼
X_train = [[0, 0], [1, 1], [2, 2], [3, 3]]
y_train = [0, 1, 0, 1]
X_test = [[0.5, 0.5], [2.5, 2.5]]
y_test = [0, 1]model = SVC().fit(X_train, y_train)
y_pred = model.predict(X_test)report = classification_report(y_test, y_pred)
print(report)
"""
輸出:precision    recall  f1-score   support0       1.00      1.00      1.00         11       1.00      1.00      1.00         1accuracy                           1.00         2macro avg       1.00      1.00      1.00         2weighted avg       1.00      1.00      1.00         2
"""

六、無監督學習API詳解

1. K-Means聚類

from sklearn.cluster import KMeans"""
KMeans參數說明:
- n_clusters : int, default=8要形成的簇數
- init : {'k-means++', 'random'}, default='k-means++'初始化方法
- n_init : int, default=10使用不同質心種子運行算法的次數
- max_iter : int, default=300單次運行的最大迭代次數
- tol : float, default=1e-4收斂閾值
"""# 示例代碼
X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]]model = KMeans(n_clusters=2, init='k-means++', n_init=10)
model.fit(X)print("簇中心:", model.cluster_centers_)
print("預測標簽:", model.labels_)
print("預測新數據:", model.predict([[0, 0], [4, 4]]))
"""
輸出示例:
簇中心: [[1. 2.] [4. 2.]]
預測標簽: [0 0 0 1 1 1]
預測新數據: [0 1]
"""

2. 主成分分析 (PCA)?

from sklearn.decomposition import PCA"""
PCA參數說明:
- n_components : int, float or 'mle', default=None保留的主成分數量
- copy : bool, default=True是否在運行算法時保留原始數據
- whiten : bool, default=False是否白化數據
- svd_solver : {'auto', 'full', 'arpack', 'randomized'}, default='auto'使用的SVD求解器
"""# 示例代碼
X = [[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]pca = PCA(n_components=1)
pca.fit(X)
print("解釋方差比例:", pca.explained_variance_ratio_)  # 輸出: [0.9924...]
print("主成分:", pca.components_)  # 輸出: [[-0.838 -0.545]]X_transformed = pca.transform(X)
print("降維后的數據:", X_transformed)
"""
輸出示例:
降維后的數據: [[ 1.383][ 2.222][ 3.605][-1.383][-2.222][-3.605]]
"""

七、模型選擇與參數調優

1. 網格搜索 (GridSearchCV)

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC"""
GridSearchCV參數說明:
- estimator : 估計器對象實現"fit"和"score"方法的對象
- param_grid : dict或列表參數名到參數值列表的映射
- cv : int, 交叉驗證生成器或可迭代對象, default=None確定交叉驗證拆分策略
- scoring : str或可調用對象, default=None評分策略
- n_jobs : int, default=None并行運行的作業數
"""# 示例代碼
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = SVC()
clf = GridSearchCV(svc, parameters, cv=5)
clf.fit([[0, 0], [1, 1], [2, 2], [3, 3]], [0, 1, 0, 1])print("最佳參數:", clf.best_params_)
print("最佳分數:", clf.best_score_)
print("最佳估計器:", clf.best_estimator_)
"""
輸出示例:
最佳參數: {'C': 1, 'kernel': 'linear'}
最佳分數: 0.75
最佳估計器: SVC(C=1, kernel='linear')
"""

八、sklearn使用最佳實踐

  1. 數據預處理:始終對數據進行適當的縮放和歸一化

  2. 訓練測試分割:在訓練前分割數據,避免數據泄露

  3. 交叉驗證:使用交叉驗證評估模型性能

  4. 參數調優:使用網格搜索或隨機搜索優化超參數

  5. 模型持久化:使用joblib保存訓練好的模型

  6. 特征工程:嘗試不同的特征提取和選擇方法

  7. 集成方法:考慮使用集成方法提高模型性能

# 示例:完整機器學習流程
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report
from joblib import dump# 加載數據
iris = load_iris()
X, y = iris.data, iris.target# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42
)# 數據預處理
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 訓練模型
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train_scaled, y_train)# 評估模型
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))# 保存模型
dump(model, 'iris_classifier.joblib')

九、總結

scikit-learn提供了強大而一致的API接口,使得機器學習模型的實現變得簡單高效。通過本文的詳細講解和代碼示例,你應該已經掌握了:

  1. sklearn的基本結構和設計理念

  2. 數據預處理的關鍵API及其參數

  3. 監督學習和無監督學習的主要算法實現

  4. 模型評估和參數調優的方法

  5. 完整的機器學習流程實現

在實際應用中,建議多參考sklearn的官方文檔,并根據具體問題選擇合適的算法和參數。機器學習是一個實踐性很強的領域,多動手嘗試不同的方法和參數組合,才能更好地掌握這些工具。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

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

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

相關文章

「日拱一碼」015 機器學習常用庫——scikit-learn

目錄 數據預處理 數據標準化(StandardScaler) 數據歸一化(MinMaxScaler) 數據離散化(KBinsDiscretizer) 缺失值處理(SimpleImputer) 特征選擇 基于單變量特征選擇&#xff08…

網絡編程學習路線

C網絡編程從零基礎到精通的學習路線,每一步都和你的項目實際需求緊密結合,幫助你真正做到“學以致用”。 C網絡編程學習路線(結合FileHub項目) 第一階段:網絡編程基礎入門 1. 計算機網絡基礎 理解OSI七層模型、TCP/I…

NLP:文本張量表示方法

本文目錄: 一、one-hot編碼二、word2vec模型(一)概念1.CBOW(Continuous bag of words)模式2.skipgram模式:3.詞向量的檢索獲取 (二)word2vec的訓練和使用1. 獲取訓練數據2.查看原始數據3.原始數據處理,并查…

高階數據結構------并查集

并查集 在一些應用問題中,需要將n個不同的元素劃分成一些不相交的集合。開始時,每個元素自成一個集合,然后按照一定的規律將歸于同一組的元素集合合并。在此過程中要反復用到查詢某一個元素歸屬于哪一個集合的運算。適合于描述這類問題的抽象…

OWASP Top 10 是什么?

OWASP(Open Web Application Security Project,開放Web應用安全項目)是一個致力于提高軟件安全性的國際非營利組織。其發布的 ?OWASP Top 10? 是最具影響力的Web應用安全風險清單,每3-4年更新一次,幫助開發人員、安全…

如何在IIS上部署net系統(安裝iis參考上一篇)

1.對后端項目打包,我使用的時rider 2.打包前端 npm run build 3.在iis上部署 網站-添加網站 4.選擇之前打包的后端文件,設置端口 5.安裝對應net環境插件:主要是runtime和sdk插件以及dotnet-hosting-2.2.0-win,具體版本看自己項…

Docker可視化管理工具Portainer安裝部署

1、安裝Portainer 編寫docker compose文件,使用docker compose文件完成Portainer的安裝,首先需要在服務器上編寫的名為portainer.yaml的文件,內容如下: [rootserver ~]# cat portainer.yaml services: portainer: image:…

ai之RAG本地知識庫--基于OCR和文本解析器的新一代RAG引擎:RAGFlow 認識和源碼剖析

目錄標題 RAG本地知識庫問答——基于OCR和文本解析器的新一代RAG引擎:RAGFlow 認識和源碼剖析RAGflow 主要功能: 一、RAGflow 簡介1.1 允許用戶上傳并管理自己的文檔(文檔類型可以是任意類型)1.2 RAGFlow的4個特色1.2.1 AI 模型的智能文檔處理系統1.2.2 …

[面試] 手寫題-new

function mynew(Func, ...args) {// 1.創建一個空對象const obj {}// 2.新對象隱式原型指向構造函數的顯式原型obj.__proto__ Func.prototype// 3.將構建函數的this指向新對象let result Func.apply(obj, args)// 4.返回objreturn result instanceof Object ? result : obj…

設計模式精講 Day 20:狀態模式(State Pattern)

【設計模式精講 Day 20】狀態模式(State Pattern) 文章標簽 設計模式, 狀態模式, Java開發, 面向對象設計, 軟件架構, 設計模式實戰, Java應用開發 文章簡述 狀態模式是行為型設計模式中的重要一員,用于管理對象在不同狀態下的行為變化。在…

橋島隧大型工程 3D 可視化監測平臺

深中通道作為“橋、島、隧、水下互通”一體化跨海集群工程,其復雜結構帶來高強度監測難題。借助圖撲軟件 HT 實現深中通道的建設與運營的數字化升級,為交通基建行業邁向高效、智能的未來提供了有力支撐。 圖撲自主研發的 HT for Web 產品搭建深中通道-橋…

基于SpringBoot和Leaflet的區域沖突可視化系統(2025企業級實戰方案)

摘要 在全球地緣沖突與應急事件頻發的2025年,區域態勢可視化系統成為政府及企業的決策剛需。本文提出基于??SpringBoot 3.2??后端與??Leaflet 1.9.5??前端的沖突可視化解決方案,融合多源異構數據(衛星影像、輿情熱力、設施狀態&…

[密碼學實戰]國密TLCP協議報文解析代碼實現(三十)

[密碼學實戰]國密TLCP協議報文解析代碼實現(三十) 本文將深入解析國密TLCP協議報文結構,提供完整的Java實現代碼,幫助開發者理解TLCP協議在國密環境下的通信機制和安全性設計。 一、國密TLCP協議概述 TLCP(Transport Layer Cryptographic Protocol)是基于國密算法(SM2/…

[Python] -基礎篇5-玩轉Python內置數據結構:列表、元組、字典與集合

Python 是一門以簡潔優雅著稱的編程語言,其中內置的數據結構為日常編程提供了強大支持。本文將系統介紹 Python 中四大核心數據結構:列表(list)、元組(tuple)、字典(dict)與集合(set),并配以實用示例,幫助讀者全面掌握其用法及適用場景。 一、列表(List):可變序…

技術突破與落地應用:端到端 2.0 時代輔助駕駛TOP10 論文深度拆解系列【第八篇(排名不分先后)】

HiP-AD: Hierarchical and Multi-Granularity Planning with Deformable Attention for Autonomous Driving in a Single Decoder GitHub地址:?https://github.com/nullmax-vision/HiP-AD? 在自動駕駛技術飛速發展的今天,端到端自動駕駛(E…

transformer位置編碼研究相關的綜述、論文

一、權威綜述 《利用位置編碼實現長度外推》 (騰訊云開發者社區, 2024) 系統分析絕對/相對位置編碼(APE/RPE)在長序列外推中的技術演進,涵蓋RoPE、Alibi、Xpos等優化方案,討論位置插值、NTK-aware縮放等擴展…

垂直領域AI智能體開發指南:用Bright Data MCP接入智能體攻克數據難關

垂直領域AI智能體開發指南:用Bright Data MCP接入智能體攻克數據難關 一、智能體時代的數據困局1.1 AI智能體的爆發式增長1.2 開發者遭遇的"數據瓶頸" 二、Bright Data MCP:智能體的數據引擎2.1 重新定義數據獲取方式2.2 支持的核心場景2.3 四…

Stable Diffusion 項目實戰落地:從0到1 掌握ControlNet 第三篇: 打造光影字形的創意秘技-文字與自然共舞

上一篇,我們一起玩轉了 野外光影字,是不是被那種自然和光影交織的效果驚艷到啦? 如果你錯過了那篇文章,別擔心,趕緊點這里補課:Stable Diffusion 項目實戰落地:從0到1 掌握ControlNet:打造光影文字 第二篇 - 野外光影字。 今天,我們將一起做一個 生成的嵌入式文字【…

CppCon 2018 學習:Feather: A Modern C++ Web Development Framework

你這段內容羅列的是 Web 開發中的幾個基礎概念和組成模塊,下面我逐一用中文進行解釋,并理清它們之間的關系: 基礎概念說明 1. HTTP Server(HTTP服務器) 是一個監聽 HTTP 請求并返回響應的程序。主要功能&#xff1a…

武漢大學機器人學院啟航:一場顛覆性的產教融合實驗,如何重塑中國智造未來?

當百年學府按下“產業加速鍵”,教育革命的號角已經吹響 2025年7月,武漢大學一紙公告震動教育界與科技圈——成立機器人學院,攜手小米、宇樹等硬科技領軍企業,聘請10位產業教授入駐。這絕非一次常規的校企合作,而是一場…