AI-Agent 面试题汇总 - 机器学习篇

1. 机器学习中特征的理解

特征(Feature)是样本可量化的属性,是模型输入。特征质量通常决定模型效果上限。常见有数值、类别、文本、时间、统计聚合、交叉特征等。

2. 机器学习中有哪些特征工程方法?

常见方法:缺失值处理、异常值处理、编码、标准化/归一化、特征构造、特征选择、降维。

from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression

num_cols = ["age", "salary"]
cat_cols = ["city", "edu"]

preprocess = ColumnTransformer([
    ("num", Pipeline([
        ("imputer", SimpleImputer(strategy="median")),
        ("scaler", StandardScaler())
    ]), num_cols),
    ("cat", Pipeline([
        ("imputer", SimpleImputer(strategy="most_frequent")),
        ("onehot", OneHotEncoder(handle_unknown="ignore"))
    ]), cat_cols)
])

clf = Pipeline([
    ("prep", preprocess),
    ("model", LogisticRegression(max_iter=200))
])

3. 机器学习中的正负样本

二分类中目标类一般记为正样本(1),非目标类为负样本(0)。当类别不平衡时,常用重采样、类别权重、阈值调优、PR-AUC等方式处理。

4. 线性分类器与非线性分类器的区别及优劣

线性分类器决策边界是超平面,训练快、可解释性好;非线性分类器表达能力强,可拟合复杂边界,但更易过拟合、调参成本更高。

5. 如何解决过拟合问题

可通过增加数据、正则化、降低模型复杂度、交叉验证、早停、集成学习等方式缓解过拟合。

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(
    n_estimators=300,
    max_depth=8,
    min_samples_leaf=5,
    random_state=42
)
scores = cross_val_score(model, X, y, cv=5, scoring="f1")
print(scores.mean())

6. L1 和 L2 正则的区别,如何选择 L1 和 L2 正则

L1 倾向产生稀疏解(可做特征选择);L2 倾向让参数整体变小(更稳定)。高维稀疏场景可优先尝试 L1,通用场景常先试 L2。

from sklearn.linear_model import LogisticRegression

l1_model = LogisticRegression(penalty="l1", solver="liblinear", C=1.0)
l2_model = LogisticRegression(penalty="l2", solver="liblinear", C=1.0)

7. 有监督学习和无监督学习的区别

有监督学习有标签(分类/回归);无监督学习无标签(聚类/降维/异常检测)。

8. 有了解过哪些机器学习算法?

常见:LR、线性回归、SVM、KNN、朴素贝叶斯、决策树、随机森林、GBDT、XGBoost、LightGBM、KMeans、PCA 等。

9. 你对 LR 是怎么理解的?LR 的损失函数是怎样的?

LR 在 (w^Tx+b) 上接 sigmoid 输出概率,常用于二分类,损失函数是交叉熵(对数损失)。

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(max_iter=200)
lr.fit(X_train, y_train)
proba = lr.predict_proba(X_valid)[:, 1]

10. 二分类模型如何做多分类?

常见方案:OvR(One-vs-Rest)、OvO(One-vs-One)、Softmax 多分类。

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(multi_class="ovr", max_iter=300)
clf.fit(X_train, y_train)

11. KMeans 算法和 KNN 算法区别?

KMeans 是无监督聚类;KNN 是有监督分类/回归。KMeans 的 K 是簇数,KNN 的 K 是邻居数。

12. 请问 GBDT 和 XGBoost 的区别是什么?

XGBoost 在 GBDT 基础上加入二阶导优化、正则化、列采样、缺失值处理、并行与工程优化,通常更快更稳。

import xgboost as xgb
model = xgb.XGBClassifier(
    n_estimators=300,
    max_depth=6,
    learning_rate=0.05,
    subsample=0.8,
    colsample_bytree=0.8,
    reg_lambda=1.0,
    random_state=42
)
model.fit(X_train, y_train)

13. LR 和 SVM 的联系与区别?

两者都可做线性分类并可加正则;LR 优化 logloss 且可输出概率,SVM 优化 hinge loss 强调最大间隔,原生不直接输出概率。

14. LR 与线性回归的区别与联系?

二者都基于线性组合;线性回归用于连续值预测(MSE),LR 用于分类概率输出(交叉熵)。

15. 为什么 XGBoost 要用泰勒展开,优势在哪里?

通过二阶泰勒展开把目标函数近似为可高效优化形式,利用一阶和二阶信息更准确计算分裂增益与叶子权重,收敛更快。

16. 集成学习介绍下有哪些,讲讲 bagging 的随机是什么?

集成学习包括 Bagging、Boosting、Stacking。Bagging 的随机性主要来自:样本 bootstrap 抽样、特征随机子集(如随机森林)。

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(
    n_estimators=500,
    bootstrap=True,
    max_features="sqrt",
    random_state=42
)
rf.fit(X_train, y_train)

17. 讲讲分类评估方式都有什么?

常见指标:Accuracy、Precision、Recall、F1、ROC-AUC、PR-AUC、混淆矩阵、LogLoss。

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score

pred = model.predict(X_valid)
proba = model.predict_proba(X_valid)[:, 1]

print("acc:", accuracy_score(y_valid, pred))
print("precision:", precision_score(y_valid, pred))
print("recall:", recall_score(y_valid, pred))
print("f1:", f1_score(y_valid, pred))
print("auc:", roc_auc_score(y_valid, proba))

18. F1 公式讲一讲?

F1 是 Precision 与 Recall 的调和平均:[F1 = \frac{2PR}{P+R}]适合类别不平衡任务。

from sklearn.metrics import f1_score
f1 = f1_score(y_valid, pred)

19. 介绍梯度优化的各种算法,详细的发展历史,优化原因?

典型路线:SGD → Momentum → AdaGrad → RMSProp → Adam/AdamW。目标是提升收敛速度、减小震荡、实现自适应学习率并改善泛化。

20. 用过 XGBoost 吗,原理你了解吗?他是怎么做并行的?

XGBoost 属于梯度提升树框架,逐轮拟合残差方向;并行主要体现在单棵树建树时按特征并行搜索分裂点(而非 boosting 轮次间并行)。

import xgboost as xgb

model = xgb.XGBClassifier(
    n_estimators=400,
    max_depth=5,
    learning_rate=0.05,
    subsample=0.8,
    colsample_bytree=0.8,
    tree_method="hist",
    n_jobs=-1,
    random_state=42
)
model.fit(X_train, y_train)

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务