Sklearn を用いたシナリオベースの問題解決
スパム分類器を構築しています。初期トレーニング後、高い精度が得られましたが、多くの正規のメールがスパムとしてマークされています(偽陽性が高い)。Sklearn を使用して、これをどのように解決しますか?
回答:
これは、再現率よりも適合率を最適化する必要があることを示しています。sklearn.metrics.classification_report を使用して適合率と再現率を分析し、その後、分類しきい値(例:model.predict_proba を使用)を調整するか、コストに敏感な学習やクラスの重み付けを可能にし、偽陽性をより重く罰するモデルを選択します。
100 万行、1000 特徴量のデータセットがあります。標準的な LogisticRegression モデルのトレーニングに時間がかかりすぎます。トレーニングを高速化するために、どのような Sklearn 戦略を採用できますか?
回答:
大規模データセットの場合、確率的勾配降下法のために loss='log_loss' を使用した SGDClassifier を検討します。これはよりスケーラブルです。あるいは、大規模データセットのために solver='saga' または solver='liblinear' を使用した LogisticRegression を使用し、sklearn.decomposition.PCA や特徴量選択技術を使用して特徴量の数を減らすこともできます。
モデルはトレーニングセットでは良好に機能しますが、未知のデータではパフォーマンスが悪いです。Sklearn ツールを使用して、この過学習をどのように診断し、軽減しますか?
回答:
これは過学習の典型的な兆候です。クロスバリデーションを使用して sklearn.model_selection.GridSearchCV または RandomizedSearchCV を使用して最適なハイパーパラメータを見つけます。正則化(線形モデルの L1/L2 ペナルティ、Ridge/Lasso の alpha、SVM の C)とモデルの複雑さの低減は、主要な軽減戦略です。
500 の一意の値を持つ「都市」という特徴量を持つデータセットを扱っています。Sklearn モデルのためにこれをどのように前処理しますか?
回答:
sklearn.preprocessing.OneHotEncoder を使用して、カテゴリカルな「都市」特徴量を Sklearn モデルに適した数値形式に変換します。一意の値が非常に多い場合は、ターゲットエンコーディングや、ディープラーニングを使用する場合は埋め込み層、またはワンホットエンコーディング後の次元削減を検討するかもしれません。
データセットで RandomForestClassifier と GradientBoostingClassifier のパフォーマンスを比較する必要があります。Sklearn を使用して、公正な比較をどのように保証しますか?
回答:
クロスバリデーションに sklearn.model_selection.StratifiedKFold を使用して、モデル間で一貫した分割を保証し、クラスの割合を維持します。次に、テストフォールドで同じメトリクス(例:F1 スコア、ROC AUC)を使用して両方のモデルを評価し、必要に応じて GridSearchCV を使用して各モデルのハイパーパラメータを最適化します。
データセットのいくつかの列に欠損値があります。Sklearn を使用して、それらをどのように処理するか説明してください。
回答:
sklearn.impute.SimpleImputer を使用して欠損値を埋めます。通常は、特徴量の分布に応じて、平均値、中央値、または最頻値を使用します。より複雑な補完のために、特に Pipeline 内で IterativeImputer (MICE) または KNNImputer を検討できます。
レコメンデーションシステムを構築しており、特徴量に基づいて類似したアイテムを見つける必要があります。どの Sklearn モジュールを使用し、なぜですか?
回答:
sklearn.metrics.pairwise を使用して、アイテム特徴量ベクトル間の cosine_similarity や euclidean_distances のような類似度スコアを計算します。これにより、コンテンツベースのレコメンデーションシステムに不可欠な類似度行列の効率的な計算が可能になります。
少数のクラスが主な関心事である不均衡なデータセットがあります。モデルをどのようにトレーニングし、Sklearn を使用してそのパフォーマンスを評価しますか?
回答:
sklearn.utils.resample を使用して少数クラスをオーバーサンプリングするか多数クラスをアンダーサンプリングするか、または imblearn.over_sampling.SMOTE を使用します。評価のために、精度だけでなく、sklearn.metrics の recall、precision、f1_score、または roc_auc_score のようなメトリクスに焦点を当てます。これらは不均衡なデータセットに対してより有益です。
SVC モデルをトレーニングしましたが、リアルタイム予測には遅すぎます。どのような Sklearn の代替手段または戦略を検討できますか?
回答:
より高速な予測のために、データが線形分離可能であれば LinearSVC を使用するか、大規模データセットに対してより効率的なヒンジ損失を持つ SGDClassifier を使用することを検討します。あるいは、C を調整するか別のカーネルを使用することでサポートベクトルの数を減らすか、LightGBM や XGBoost のようなツリーベースのモデルを探索することもできます。
前処理、特徴量選択、モデルトレーニングを含む堅牢な機械学習パイプラインを作成する必要があります。Sklearn を使用して、これをどのように構造化しますか?
回答:
sklearn.pipeline.Pipeline を使用してこれらのステップをチェーンします。これにより、前処理と特徴量選択がトレーニングデータとテストデータの両方に一貫して適用され、クロスバリデーション中のデータ漏洩が防止されます。例:Pipeline([('scaler', StandardScaler()), ('selector', SelectKBest()), ('model', LogisticRegression())])。