机器学习面试实战:用 Python 代码解析 5 个经典算法问题

发布时间:2026/7/8 23:02:25
机器学习面试实战:用 Python 代码解析 5 个经典算法问题 机器学习面试实战用 Python 代码解析 5 个经典算法问题1. 缺失值处理的实战策略与代码实现在真实数据集中缺失值如同隐藏在数据矩阵中的黑洞直接影响模型的训练效果。以下是三种主流处理方法的 Python 实现import pandas as pd import numpy as np from sklearn.impute import SimpleImputer, KNNImputer # 创建含缺失值的示例数据 data {Age: [25, np.nan, 35, 40, np.nan], Income: [50000, 60000, np.nan, 80000, 90000]} df pd.DataFrame(data) # 方法1均值填充 mean_imputer SimpleImputer(strategymean) df_mean pd.DataFrame(mean_imputer.fit_transform(df), columnsdf.columns) # 方法2KNN填充 knn_imputer KNNImputer(n_neighbors2) df_knn pd.DataFrame(knn_imputer.fit_transform(df), columnsdf.columns) # 方法3构建缺失指示特征 df_indicator df.copy() for col in df.columns: df_indicator[f{col}_missing] df[col].isnull().astype(int)关键决策因素对比表处理方法适用场景优点缺点均值填充数值型特征缺失随机计算简单保持均值稳定扭曲数据分布忽略特征相关性KNN填充特征间存在相关性利用特征间关系更精确计算成本高需调参缺失指示非随机缺失(MAR)保留缺失模式信息增加特征维度提示在金融风控场景中缺失本身可能是重要特征如收入信息缺失可能反映特定人群此时缺失指示器方法尤为有效。2. 特征工程的自动化实现技巧特征工程是模型效果的催化剂以下代码展示如何通过Pipeline实现自动化特征处理from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.feature_selection import SelectKBest, f_classif # 数值型特征处理流程 numeric_features [Age, Income] numeric_transformer Pipeline(steps[ (imputer, SimpleImputer(strategymedian)), (scaler, StandardScaler())]) # 类别型特征处理流程 categorical_features [Gender, Education] categorical_transformer Pipeline(steps[ (imputer, SimpleImputer(strategyconstant, fill_valuemissing)), (onehot, OneHotEncoder(handle_unknownignore))]) # 组合特征处理器 preprocessor ColumnTransformer( transformers[ (num, numeric_transformer, numeric_features), (cat, categorical_transformer, categorical_features)]) # 完整Pipeline包含特征选择 full_pipeline Pipeline(steps[ (preprocessor, preprocessor), (feature_selection, SelectKBest(score_funcf_classif, k10)), (classifier, RandomForestClassifier())])特征生成技巧清单交互特征df[Age_Income] df[Age] * df[Income]分箱特征pd.cut(df[Age], bins5, labelsFalse)统计特征df.groupby(Group)[Value].transform(mean)时间特征df[DayOfWeek] df[Date].dt.dayofweek3. 模型评估的全面诊断方案超越简单的准确率指标我们需要建立多维度的评估体系from sklearn.metrics import classification_report, roc_auc_score from sklearn.model_selection import learning_curve import matplotlib.pyplot as plt def comprehensive_evaluation(model, X, y): # 基础分类报告 y_pred model.predict(X) print(classification_report(y, y_pred)) # ROC曲线绘制 y_proba model.predict_proba(X)[:,1] fpr, tpr, _ roc_curve(y, y_proba) plt.plot(fpr, tpr) plt.title(fROC Curve (AUC{roc_auc_score(y, y_proba):.3f})) # 学习曲线分析 train_sizes, train_scores, test_scores learning_curve( model, X, y, cv5, scoringaccuracy) plt.figure() plt.plot(train_sizes, np.mean(train_scores, axis1), labelTraining score) plt.plot(train_sizes, np.mean(test_scores, axis1), labelCross-validation score) plt.legend()模型诊断决策矩阵现象可能原因解决方案训练集表现远优于测试集过拟合增加正则化、简化模型、获取更多数据训练/测试集表现均差欠拟合增加特征、增强模型复杂度、减少正则化验证曲线波动大数据量不足增加训练数据、使用交叉验证AUC值低于0.7特征区分度不足特征工程、尝试不同算法4. 超参数优化的智能搜索方法告别网格搜索的低效现代优化技术可以节省90%的计算时间from sklearn.model_selection import RandomizedSearchCV from scipy.stats import loguniform # 定义参数分布 param_dist { n_estimators: [50, 100, 200], max_depth: [None, 10, 20, 30], min_samples_split: loguniform(0.01, 0.2), max_features: [sqrt, log2] } # 随机搜索 search RandomizedSearchCV( RandomForestClassifier(), param_distributionsparam_dist, n_iter50, cv5, scoringroc_auc, n_jobs-1 ) search.fit(X_train, y_train) # 最优参数输出 print(fBest params: {search.best_params_}) print(fBest score: {search.best_score_:.3f})优化策略对比分析方法原理优点适用场景网格搜索参数空间穷举找到全局最优小参数空间随机搜索参数随机采样高效适合高维空间中等参数空间贝叶斯优化建立概率模型智能导向最优区域计算成本高的模型进化算法模拟自然选择处理非线性关系复杂参数空间5. 模型解释的实战技巧黑箱模型需要解释性工具来建立业务信任import shap import lime from eli5 import show_weights # SHAP全局解释 explainer shap.TreeExplainer(model) shap_values explainer.shap_values(X) shap.summary_plot(shap_values, X) # LIME局部解释 explainer lime.lime_tabular.LimeTabularExplainer( training_dataX.values, feature_namesX.columns, class_names[No, Yes], modeclassification) exp explainer.explain_instance(X.iloc[0], model.predict_proba) exp.show_in_notebook() # ELI5特征重要性 show_weights(model, feature_namesX.columns.tolist())解释方法选择指南全局解释理解整体特征影响SHAP精确但计算成本高特征重要性快速但忽略交互作用局部解释分析单个预测LIME适合任意模型近似解释SHAP force plot展示特征贡献方向业务报告特征影响排序表决策路径可视化反事实分析示例在金融风控的实际项目中我们发现收入与年龄的交互特征对信用评分影响显著通过SHAP分析发现其非线性关系进而优化了评分卡模型的分箱策略。这种基于解释的迭代改进使模型KS值提升了15%。