はじめに
機械学習のコードは実験的な性質上、型ヒントなしで書かれていることが多いです。でも実務でチーム開発をする場合や、後から自分のコードを読み返すとき、型ヒントがあるとぐっと読みやすくなります。Pythonの型ヒントを機械学習コードに導入する方法を紹介します。
型ヒントの基本
from typing import Optional, Union, List, Dict, Tuple
import numpy as np
import pandas as pd
# 基本的な型ヒント
def add_numbers(a: int, b: int) -> int:
return a + b
# NumPy配列の型ヒント
def scale_features(X: np.ndarray, mean: float, std: float) -> np.ndarray:
return (X - mean) / std
# pandas DataFrameの型ヒント
def load_and_clean(filepath: str) -> pd.DataFrame:
df = pd.read_csv(filepath)
df = df.dropna()
return df
# Optional(Noneも許容)
def get_feature_importance(
model,
feature_names: Optional[List[str]] = None
) -> Dict[str, float]:
importances = model.feature_importances_
if feature_names is None:
feature_names = [f'feature_{i}' for i in range(len(importances))]
return dict(zip(feature_names, importances))
機械学習パイプラインへの型ヒント適用
from dataclasses import dataclass
from typing import Tuple, Optional
import numpy as np
import pandas as pd
from sklearn.base import BaseEstimator
@dataclass
class ModelConfig:
n_estimators: int = 100
learning_rate: float = 0.1
max_depth: int = 5
random_state: int = 42
class MLPipeline:
def __init__(self, config: ModelConfig) -> None:
self.config = config
self.model: Optional[BaseEstimator] = None
self.feature_names: Optional[List[str]] = None
def preprocess(
self,
df: pd.DataFrame,
target_col: str
) -> Tuple[np.ndarray, np.ndarray]:
"""データを特徴量とターゲットに分割して返す"""
X = df.drop(columns=[target_col]).values
y = df[target_col].values
self.feature_names = list(df.drop(columns=[target_col]).columns)
return X, y
def train(self, X: np.ndarray, y: np.ndarray) -> 'MLPipeline':
"""モデルを学習する。メソッドチェーンのためselfを返す"""
import lightgbm as lgb
self.model = lgb.LGBMClassifier(
n_estimators=self.config.n_estimators,
learning_rate=self.config.learning_rate,
max_depth=self.config.max_depth,
random_state=self.config.random_state
)
self.model.fit(X, y)
return self
def predict(self, X: np.ndarray) -> np.ndarray:
"""予測値を返す"""
if self.model is None:
raise ValueError('モデルが学習されていません。train()を先に実行してください。')
return self.model.predict(X)
# 使用例
config = ModelConfig(n_estimators=200, learning_rate=0.05)
pipeline = MLPipeline(config)
X, y = pipeline.preprocess(df, target_col='target')
pipeline.train(X, y)
mypyで静的型チェック
pip install mypy
# 型チェックの実行
mypy ml_pipeline.py --ignore-missing-imports
まとめ
型ヒントを機械学習コードに導入することで、コードの可読性・保守性が大幅に向上します。dataclassを使った設定クラス、Optional型の使い方、NumPy・pandasの型ヒントから始めてみましょう。チーム開発やポートフォリオコードの品質を上げたい方にとって、型ヒントは費用対効果の高いスキルです。
📌 プログラミング・AI学習のおすすめスクール
- 資格と仕事に強い個人レッスン → 【Winスクール】プログラミング・AI講座

※本記事にはアフィリエイトリンクが含まれます。


コメント