機器學習 - 自動工作流



介紹

為了成功地執行併產生結果,機器學習模型必須自動化一些標準工作流程。自動化這些標準工作流程的過程可以在Scikit-learn管道(Pipelines)的幫助下完成。從資料科學家的角度來看,管道是一個廣義但非常重要的概念。它基本上允許資料從其原始格式流向一些有用的資訊。可以透過以下圖表瞭解管道的運作方式:

Data

ML管道的模組如下:

資料攝取 - 顧名思義,它是匯入資料以用於ML專案的過程。可以從單個或多個系統即時或批次提取資料。這是最具挑戰性的步驟之一,因為資料的質量會影響整個ML模型。

資料準備 - 匯入資料後,我們需要準備資料以用於我們的ML模型。資料預處理是資料準備中最重要的技術之一。

ML模型訓練 - 下一步是訓練我們的ML模型。我們有各種ML演算法,如監督學習、無監督學習、強化學習,可以從資料中提取特徵並進行預測。

模型評估 - 接下來,我們需要評估ML模型。在AutoML管道的情況下,可以使用各種統計方法和業務規則來評估ML模型。

ML模型再訓練 - 在AutoML管道的情況下,第一個模型不一定是最佳模型。第一個模型被認為是基線模型,我們可以重複訓練它以提高模型的準確性。

部署 - 最後,我們需要部署模型。此步驟涉及將模型應用和遷移到業務運營中供其使用。

ML管道伴隨的挑戰

為了建立ML管道,資料科學家面臨著許多挑戰。這些挑戰分為以下三類:

資料質量

任何ML模型的成功都嚴重依賴於資料的質量。如果我們提供給ML模型的資料不準確、可靠且健壯,那麼我們將得到錯誤或誤導性的輸出。

資料可靠性

與ML管道相關的另一個挑戰是我們提供給ML模型的資料的可靠性。眾所周知,資料科學家可以從各種來源獲取資料,但為了獲得最佳結果,必須確保資料來源是可靠且可信的。

資料可訪問性

為了從ML管道中獲得最佳結果,資料本身必須是可訪問的,這需要整合、清理和整理資料。由於資料可訪問性特性,元資料將使用新標籤更新。

ML管道和資料準備建模

資料洩露,從訓練資料集到測試資料集,是資料科學家在為ML模型準備資料時需要處理的一個重要問題。通常,在資料準備時,資料科學家會在學習之前對整個資料集使用標準化或歸一化等技術。但是,這些技術無法幫助我們防止資料洩露,因為訓練資料集會受到測試資料集中資料規模的影響。

透過使用ML管道,我們可以防止這種資料洩露,因為管道確保資料準備(如標準化)僅限於交叉驗證過程的每個摺疊。

示例

以下是用Python編寫的示例,演示了資料準備和模型評估工作流。為此,我們使用Sklearn中的Pima印第安人糖尿病資料集。首先,我們將建立一個標準化資料的管道。然後建立一個線性判別分析模型,最後使用10倍交叉驗證評估管道。

首先,匯入所需的包,如下所示:

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

現在,我們需要載入Pima糖尿病資料集,就像在之前的示例中所做的那樣:

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values

接下來,我們將使用以下程式碼建立一個管道:

estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('lda', LinearDiscriminantAnalysis()))
model = Pipeline(estimators)

最後,我們將評估此管道並輸出其準確性,如下所示:

kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

輸出

0.7790148448043184

以上輸出是資料集上設定的準確性摘要。

ML管道和特徵提取建模

資料洩露也可能發生在ML模型的特徵提取步驟中。因此,特徵提取過程也應受到限制,以停止訓練資料集中的資料洩露。與資料準備一樣,透過使用ML管道,我們也可以防止這種資料洩露。為此,可以使用ML管道提供的工具FeatureUnion。

示例

以下是用Python編寫的示例,演示了特徵提取和模型評估工作流。為此,我們使用Sklearn中的Pima印第安人糖尿病資料集。

首先,使用PCA(主成分分析)提取3個特徵。然後,使用統計分析提取6個特徵。特徵提取後,將使用

FeatureUnion工具組合多個特徵選擇和提取過程的結果。最後,將建立一個邏輯迴歸模型,並使用10倍交叉驗證評估管道。

首先,匯入所需的包,如下所示:

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest

現在,我們需要載入Pima糖尿病資料集,就像在之前的示例中所做的那樣:

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values

接下來,將建立特徵聯合,如下所示:

features = []
features.append(('pca', PCA(n_components=3)))
features.append(('select_best', SelectKBest(k=6)))
feature_union = FeatureUnion(features)

接下來,將使用以下指令碼行建立管道:

estimators = []
estimators.append(('feature_union', feature_union))
estimators.append(('logistic', LogisticRegression()))
model = Pipeline(estimators)

最後,我們將評估此管道並輸出其準確性,如下所示:

kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

輸出

0.7789811066126855

以上輸出是資料集上設定的準確性摘要。

廣告