本番環境向けのMachine Learningモデル開発
Sinan Ozdemir
Data Scientist and Author

利点:

class DataAggregator:
def __init__(self):
pass
def fit(self, X, y=None):
return self # 学習することはない
def transform(self, X, y=None):
# 複数ソースからデータを読み込む
data1 = pd.read_csv('data1.csv')
data2 = pd.read_csv('data2.csv')
data3 = pd.read_csv('data3.csv')
# すべてのソース(X含む)を結合して1つのデータフレームに
aggregated_data = pd.concat([X, data1, data2, data3], axis=0)
return aggregated_data # 集約データを返す
class FeatureConstructor:
def __init__(self):
pass
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
# 各列の平均を計算
mean_values = X.mean()
# 平均に基づく新しい特徴量を作成
X['mean_col1'] = X['col1'] - mean_values['col1']
X['mean_col2'] = X['col2'] - mean_values['col2']
return X # 拡張したデータを返す
既存の特徴量をその場で変換
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
data = load_breast_cancer() # データセットを読み込み
X, y = data.data, data.target
model = LogisticRegression(random_state=42) # モデルを作成
# 学習・テストに分割
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42)
model.fit(X_train, y_train) # スケーリングなしで学習
y_pred_no_scaling = model.predict(X_test)
acc_no_scaling = accuracy_score(y_test, y_pred_no_scaling)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model.fit(X_train_scaled, y_train) # スケーリングありで学習
y_pred_with_scaling = model.predict(X_test_scaled)
acc_with_scaling = accuracy_score(y_test, y_pred_with_scaling)
# スケーリング有無で精度を比較
print(f"Accuracy without scaling: {acc_no_scaling}") # 0.971
print(f"Accuracy with scaling: {acc_with_scaling}") # 0.982
冗長・無関係な特徴量を除き、より大きな集合からサブセットを選択

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.pipeline import Pipeline
pipeline = Pipeline([ # 特徴量エンジニアリングのパイプライン定義
('aggregate', DataAggregator()), # 複数ソースのデータを集約
('construction', FeatureConstructor()), # 特徴量構築
('scaler', StandardScaler()), # 特徴量変換
('select', SelectKBest(chi2, k=10)), # 特徴量選択
])
X_transformed = pipeline.fit_transform(X) # パイプラインで学習・変換

本番環境向けのMachine Learningモデル開発