【Python機器學習】算法鏈與管道——通用的管道接口

Pipeline類補單可以用于預處理和分類,實際上還可以將任意數量的估計器連接在一起。例如,我們可以構建一個包含特征提取、特征選擇、縮放和分類的管道,總共有4個步驟。同樣的,最后一步可以用聚類或回歸代替。

對于管道中估計器的唯一壓球就是,除了最后一步之外的所有步驟都需要具有transform方法,這樣它們可以生成新的數據表示,以供下一個步驟使用。

在調用Pipeline.fit的過程中,管道內部依次對每個步驟調用fit和transform,其輸入的前一個步驟中transform方法的輸出。對于管道的最后一步,則僅調用fit。

實現方法如下。要記住,pipeline.steps是由元祖組成的列表,所以pipeline.steps[0][1]是第一個估計器,pipeline.steps[1][1]是第二個估計器,以此類推:

def fit(self,X,y):X_transformed=Xfor name,estimators in self.steps[:-1]:#遍歷除最后一步之外的所有步驟#對數據進行擬合和變換X_transformed=estimators.fit_transform(X_transformed,y)self.steps[-1][1].fit(X_transformed,y)return self

使用Pipeline進行預測時,我們同樣利用除最后一步之外的所有步驟對數據進行變換(transform),然后對最后一步調用predict:

def predict(self,X):X_transformed = Xfor step in self.steps[:-1]:# 遍歷除最后一步之外的所有步驟# 對數據進行變換X_transformed=step[1].transform(X_transformed)return self.steps[-1][1].predict(X_transformed)

整個過程包含兩個變換器(transformer),還有一個分類器。

管道的最后一步不需要具有predict函數,比如說,我們可以創建一個只包含一個縮放器和一個PCA的管道。由于最后一步(PCA)具有transform方法,所以我們可以對管道調用transform,已得到將PCA.transform應用于前一個步驟處理過的數據后得到的輸出。

管道的最后一步只需要具有fit方法。

1、用make_pipeline方便的創建管道

我們通常不需要為每個步驟提供用戶指定的名稱,有一個很方便的函數make_pipeline,可以為我們創建管道并根據每個步驟所屬的類為其自動命名。

make_pipeline的語法如下:

from sklearn.pipeline import make_pipeline#標準寫法
pipe_long=Pipeline([('scaler',MinMaxScaler()),('svm',SVC(C=100))])
#縮寫語法
pipe_short=make_pipeline(MinMaxScaler(),SVC(C=100))

管道對象pipe_long和pipe_short的作用完全相同,但pipe_short的步驟是自動命名的。

我們可以通過查看steps屬性來查看步驟的名稱:

print('步驟名稱:{}'.format(pipe_short.steps))

這兩個步驟被命名為minmaxscaler和svc,通常來說,步驟名稱只是類名稱的小寫版本。如果是多個步驟屬于同一個類,則會附加一個數字:

pipe=make_pipeline(StandardScaler(),PCA(n_components=2),StandardScaler())
print('步驟名稱:{}'.format(pipe.steps))

但是這種情況下,使用更有明確名稱的Pipeline構建可能更好,以便于為每個步驟提供更有語義的名稱。

2、訪問步驟屬性

通常來說,如果我們想要檢查管道中某一步驟的屬性(比如線性模型的系數或PCA提供的成分),最簡單的方法是通過named_steps屬性,它是一個字典,將步驟名稱映射為估計器:

cancer=load_breast_cancer()
pipe.fit(cancer.data)
#從pca步驟提取前兩個主成分
components=pipe.named_steps['pca'].components_
print('主成分shape:{}'.format(components.shape))

3、訪問網格搜索管道中的屬性

使用管道的主要原因之一就是進行網格搜索。一個常見的任務就是在網格搜索內訪問管道的某些步驟。

我們對cancer數據上的LogisticRegression分類器進行網格搜索,在將數據傳入LogisticRegression分類器之前,先用Pipeline和StandardScaler對數據進行縮放。

首先,我們用make_pipeline函數創建一個管道:

cancer=load_breast_cancer()
pipe=make_pipeline(StandardScaler(),LogisticRegression())

接下來,創建一個參數網格。LogisticRegression需要調節的正則化參數是參數C,我們對這個參數使用對數網格,在0.01和100之間進行搜索。由于我們使用了make_pipeline哈數,所以管道中LogisticRegression步驟的名稱是小寫的logisticregression。因此,為了調節參數C,我們必須指定logisticregression__C的參數網格:

param_grid={'logisticregression__C':[0.01,0.1,1,10,100]}

我們將cancer數據集劃分為訓練集和測試集,并對網格搜索進行擬合:

X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=4)
grid=GridSearchCV(pipe,param_grid=param_grid,cv=5)
grid.fit(X_train,y_train)

GridSearchCV找到的最佳模型保存在best_estimator_中:

print('最佳模型:{}'.format(grid.best_estimator_))

在這個例子中,best_estimator_是一個管道,它包含兩個步驟:standardscaler和logisticregression。我們可以使用管道的named_steps屬性來訪問logisticregression步驟:

print('logisticregression步驟:{}'.format(grid.best_estimator_.named_steps['logisticregression']))

現在我們得到了訓練過的LogisticRegression實例。下面可以訪問與每個輸入特征相關的系數(權重):

print('logisticregression權重:{}'.format(grid.best_estimator_.named_steps['logisticregression'].coef_))

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

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

相關文章

@Validated 根據字段的值不同,動態分組校驗

GroupSequenceProvider 配置 作用域只在單個對象的字段里 Data GroupSequenceProvider(value TestProvider.class) public class TestRO {NotNull(message "不能為空",groups ValidatedRemark.A.class)Pattern(regexp "2|3|",message "只能為2,…

vue2使用use注冊自定義指令實現權限控制

版本環境 vue的版本是^2.6.12,將會使用到Vue.use()、Vue.directive() 適用環境 頁面某些按鈕,需要受到當前登錄用戶的“角色”“權限”的影響,通過store獲取角色role和權限permission,通過自定義指令的方式,控制某一…

antd DatePicker日期選擇框限制最多選擇一年

實現效果 實現邏輯 import React, { useState } from react;const ParentComponent () > {const [dates, setDates] useState(null);const disabledDate (current) > {if (!dates) {return false;}const tooLate dates[0] && current.diff(dates[0], days) &…

Appium自動化測試框架1

電腦的瀏覽器 手機的瀏覽器 手機上的app 原生的應用 純java 手機上的app apk 移動網頁應用 純HTML CSS 手機的瀏覽器上 電腦的瀏覽器上 混合應用 java html css python代碼 Appium python庫 Appium 手機 都是代表本機 0.0.0.0 127.0.0.1 localhost 如何啟動app 啟動參…

土壤養分化驗儀:農業生態與可持續發展

隨著現代農業技術的不斷進步,土壤養分化驗儀在農業生產中扮演著越來越重要的角色。這款高科技設備以其高精度、高效率的特點,為農業生態與可持續發展提供了強有力的支撐。 一、農田土壤監測與管理 農田是土壤養分化驗儀最主要的應用場所。通過對農田土壤…

【AI】DeepStream(14):圖像分割deepstream-segmentation-test示例演示

【AI】AI學習目錄匯總 1、簡介 deepstream-segmentation-test示例演示了圖像的語義分割。兩個配置文件,分別加載U-Net和Res-UNet兩種分割模型 unet_output_graph.uffunetres18_v4_pruned0.65_800_data.uffU-Net是一個在生物醫學圖像分割領域廣泛應用的卷積神經網絡(CNN),…

集團型企業組織架構復雜,業務線多,如何進行高效費用管控?

企業管理中流行這樣一句話:“企業轉型,財務先行”。對集團型企業而言,當今的發展形勢下,通過財務戰略全面轉型、最終撬動企業價值提升,是一件難而正確的事情。 集團企業具有經營規模大、產業鏈多、分支機構多、地域跨度…

地下電子標識器探測儀ED8000選型注意事項

ED8000探測儀是一臺集成了多頻率、多種ID標識器調制模式、高低靈敏度調節、可讀寫標識器等全功能、高性能電子標識器探測儀。它有著極高的靈敏度,同時具備良好的噪聲抑制能力,不僅適合專業測繪人員,普通操作人員也可以輕松掌握。 ED8000可支持模擬電子標…

洛谷 P1042 [NOIP2003 普及組] 乒乓球

洛谷 P1042 [NOIP2003 普及組] 乒乓球 題目背景 國際乒聯現在主席沙拉拉自從上任以來就立志于推行一系列改革,以推動乒乓球運動在全球的普及。其中 11 11 11 分制改革引起了很大的爭議,有一部分球員因為無法適應新規則只能選擇退役。華華就是其中一位…

2024亞洲國際餐飲展覽會(北京餐飲展|火鍋展|預制菜展會)

2024北京餐飲展會,2024北京食材展會,2024北京火鍋展會,2024北京火鍋食材展會,2024北京預制菜展會,2024北京預制食材展會, 2024亞洲國際餐飲展覽會(北京餐飲展|火鍋展|預制菜展會) …

【C語言】刷題筆記 Day2

【筆記】 【1】局部變量不初始化,默認放的隨機值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】這里雖然輸入的是一個浮點數,但是只取整數部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多組輸入,保存和不保存…

基于 Windows Server 2019 部署域控服務器

文章目錄 前言1. 域控服務器設計規劃2. 安裝部署域控服務器2.1. 添加 Active Directory 域服務2.2. 將服務器提升為域控制器2.3. 檢查域控服務器配置信息 3. 管理域賬號3.1. 新建域管理員賬號3.2. 新建普通域賬號 4. 服務器加域和退域4.1. 服務器加域操作4.2. 服務器退域操作 總…

Iperf基本用法

Iperf是一款開源的網絡性能測試工具,它可以用來測量網絡帶寬、延遲、抖動和數據包丟失等網絡性能指標。Iperf支持TCP和UDP協議,可以用于點對點或客戶端-服務器等模式的網絡測試。 安裝Iperf 在Linux系統中,您可以使用包管理器安裝Iperf。例如…

記錄一下簡單導入導出excel二級表頭

數據庫導入導出表頭 之前的工具類GenerateExcelToFile新增兩個導出這種二級表頭方法 package com.njry.utils;import cn.hutool.core.util.IdUtil; import com.njry.config.FileProperties; import com.njry.exception.BadRequestException; import org.apache.poi.hssf.user…

OpenGL的學習之路

Qt如何創建OpenGL的渲染窗口? 類比GLFW庫,Qt提供了OpenGL的渲染窗口類QOpenGLWidget: 1、重寫initializeGL()和resizeGL()函數來設置OpenGL狀態并提供透視圖轉換。 2、重寫paintGL()來繪制3D場景,只調用OpenGL函數。 3、還可以…

python 基礎綜合應用——小開發

#python 基礎綜合應用——小開發 綜合復習 變量- 循環- 函數- 模塊 開發 名片管理系統 名片管理系統介紹 名片管理系統可以理解成花名冊軟件,通過個人新建人的信息后可以進行查詢等簡單操作的程序 名片管理系統有三個作用, 1.新建名片 2.顯示全部名…

【設計模式】裝飾者模式里Java實現

插: AI時代,程序員或多或少要了解些人工智能,前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家(前言 – 人工智能教程 ) 堅持不懈,越努力越幸運,大家…

【VIM的使用】

Vim 是一個非常強大的文本編輯器,尤其在 Linux 環境下被廣泛使用。它基于 vi 編輯器開發而來,增加了許多功能和改進。下面是一個簡化的 Vim 教程,幫助你快速上手: 啟動 Vim 要啟動 Vim,只需在終端中輸入 vim [filen…

Leetcode刷題2---兩數相加 Python

目錄 題目及分析解法一: 迭代法解法二: 遞歸法解法三:反轉鏈表法 題目及分析 (力扣序號2:兩數相加) 給你兩個非空的鏈表,表示兩個非負的整數。它們每位數字都是按照逆序的方式存儲的,并且每個節點只能存儲…

python之音頻處理(2)兩個音頻文件的合并

from pydub import AudioSegment# 加載兩個音頻文件 audio1 AudioSegment.from_file(r"D:\websiteDownload\huanxing.wav") audio2 AudioSegment.from_file(r"D:\websiteDownload\我今天被一件事情搞得很煩.wav")# 設置間隔(單位:…