ToB企服应用市场:ToB评测及商务社交产业平台

标题: 算法金 | 不愧是腾讯,问基础巨细节 。。。 [打印本页]

作者: 何小豆儿在此    时间: 2024-6-21 13:01
标题: 算法金 | 不愧是腾讯,问基础巨细节 。。。

   大侠幸会,在下全网同名「算法金」
    0 基础转 AI 登陆,多个算法赛 Top
    「日更万日,让更多人享受智能兴趣」
  最近,有读者参加了腾讯算法岗位的面试,面试着重观察了基础知识,并且提问非常详细。
特殊是关于AdaBoost算法的题目,面试官问了很多。
今天,我们就来和各人探究一下 AdaBoost 算法的相干知识。

1. 概要

1.1 Adaboost 的起源和发展

Adaboost,全称为 Adaptive Boosting,由 Freund 和 Schapire 于 1996 年提出,是一种迭代的机器学习算法。Adaboost 的焦点思想是通过组合多个弱分类器(weak classifiers),构建一个强分类器(strong classifier)。这种方法在各种应用场景中取得了显著的乐成,尤其在分类题目上表现突出。
1.2 Adaboost 的基本思想

Adaboost 的基本思想是根据上一次分类器的错误率,调解训练样本的权重,使得那些被错误分类的样本在后续的分类器中得到更多的关注。通过不断迭代和调解权重,最终得到一个综合了多个弱分类器的强分类器。

2. Adaboost 的焦点知识点

2.1 基础概念

Adaboost 是一种集成学习方法,集成了多个弱分类器来提高整体的分类性能。每个弱分类器的权重根据其分类准确度举行调解。
2.2 工作原理

Adaboost 的工作原理可以分为以下几个步骤:
2.3 算法步骤



2.4 权重更新机制


2.5 弱分类器的选择

Adaboost 对弱分类器的选择没有严格的限定,可以使用决策树、线性分类器等。在实践中,决策树桩(决策树深度为1)常被用作弱分类器。

3. Adaboost 的数学基础

3.1 Adaboost 算法公式

Adaboost 的焦点在于通过多次迭代训练弱分类器并组合这些弱分类器来构建一个强分类器。在每次迭代中,算法会调解样本的权重,使得那些被误分类的样本在后续的迭代中得到更多的关注。

3.2 损失函数

Adaboost 使用指数损失函数来衡量分类错误的水平。损失函数的形式为:

3.3 权重更新公式


代码树模

为了更好地理解 Adaboost 的数学基础,我们将在代码中实现这些公式。
  1. import numpy as np
  2. # 初始化样本权重
  3. n_samples = 100
  4. weights = np.ones(n_samples) / n_samples
  5. # 假设我们有两个简单的弱分类器
  6. def weak_classifier_1(x):
  7.     return np.where(x[:, 0] > 0, 1, -1)
  8. def weak_classifier_2(x):
  9.     return np.where(x[:, 1] > 0, 1, -1)
  10. # 模拟训练数据
  11. X = np.random.randn(n_samples, 2)
  12. y = np.where(X[:, 0] + X[:, 1] > 0, 1, -1)
  13. # 第一次迭代
  14. pred_1 = weak_classifier_1(X)
  15. error_1 = np.sum(weights * (pred_1 != y)) / np.sum(weights)
  16. alpha_1 = 0.5 * np.log((1 - error_1) / error_1)
  17. weights = weights * np.exp(-alpha_1 * y * pred_1)
  18. weights /= np.sum(weights)
  19. # 第二次迭代
  20. pred_2 = weak_classifier_2(X)
  21. error_2 = np.sum(weights * (pred_2 != y)) / np.sum(weights)
  22. alpha_2 = 0.5 * np.log((1 - error_2) / error_2)
  23. weights = weights * np.exp(-alpha_2 * y * pred_2)
  24. weights /= np.sum(weights)
  25. # 最终分类器
  26. H = alpha_1 * weak_classifier_1(X) + alpha_2 * weak_classifier_2(X)
  27. final_pred = np.sign(H)
复制代码

4. 代码树模

4.1 数据准备

在这一部分,我们将使用一个内置的经典数据集——鸢尾花数据集(Iris Dataset)。这个数据集包含了三类鸢尾花的特性,常用于分类算法的演示。
  1. from sklearn.datasets import load_iris
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns
  4. # 加载鸢尾花数据集
  5. iris = load_iris()
  6. X = iris.data
  7. y = iris.target
  8. # 数据集可视化
  9. sns.pairplot(sns.load_dataset("iris"), hue="species")
  10. plt.show()
复制代码
说明:


4.2 Adaboost 算法实现

我们将使用 Scikit-learn 的 AdaBoostClassifier 来实现 Adaboost 算法,并举行训练和预测。
  1. from sklearn.ensemble import AdaBoostClassifier
  2. from sklearn.tree import DecisionTreeClassifier
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
  5. import pandas as pd
  6. import seaborn as sns
  7. # 划分训练集和测试集
  8. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  9. # 初始化 Adaboost 分类器
  10. adaboost = AdaBoostClassifier(
  11.     base_estimator=DecisionTreeClassifier(max_depth=1),
  12.     n_estimators=50,
  13.     learning_rate=1.0,
  14.     random_state=42
  15. )
  16. # 训练模型
  17. adaboost.fit(X_train, y_train)
  18. # 预测
  19. y_pred = adaboost.predict(X_test)
  20. # 计算准确率
  21. accuracy = accuracy_score(y_test, y_pred)
  22. print(f'分类准确率: {accuracy:.2f}')
复制代码
说明:

运行后输出:
分类准确率: 1.00
4.3 结果分析

我们将进一步分析模子的性能,包括分类陈诉和混淆矩阵,并对结果举行可视化。
  1. # 打印分类报告
  2. print(classification_report(y_test, y_pred, target_names=iris.target_names))
  3. # 混淆矩阵
  4. conf_matrix = confusion_matrix(y_test, y_pred)
  5. conf_matrix_df = pd.DataFrame(conf_matrix, index=iris.target_names, columns=iris.target_names)
  6. # 混淆矩阵可视化
  7. plt.figure(figsize=(10, 7))
  8. sns.heatmap(conf_matrix_df, annot=True, cmap='Blues')
  9. plt.title('Adaboost 分类结果 - 混淆矩阵')
  10. plt.xlabel('预测标签')
  11. plt.ylabel('真实标签')
  12. plt.show()
复制代码
说明:


通过代码树模和结果分析,我们可以直观地了解 Adaboost 算法的实现过程及其在分类题目上的表现。
5. Adaboost 的优缺点

5.1 优点

5.2 缺点

5.3 适用场景


[ 抱个拳,总个结 ]

在本文中,我们详细介绍了 Adaboost 算法的焦点概念和应用。起首,我们了解了 Adaboost 的起源和基本思想。接着,我们深入探究了 Adaboost 的工作原理、算法步骤、权重更新机制和弱分类器的选择,并通过代码树模展示了其详细实现过程。
我们还介绍了 Adaboost 的数学基础,包括算法公式、损失函数和权重更新公式,使大侠们对其理论有了更深入的理解。在代码树模部分,我们结合武侠元素的数据集,详细展示了 Adaboost 算法在实际应用中的操作步骤,并对结果举行了可视化和分析。
随后,我们讨论了 Adaboost 的优缺点及其适用场景,帮助大侠们在实际应用中更好地评估和选择该算法。末了,通过详细的经典应用案例,如图像识别和文本分类,我们展示了 Adaboost 在不同领域的强盛本事和广泛应用。
希望通过本文的介绍,大侠们可以或许更全面地了解和掌握 Adaboost 算法,在今后的学习和实践中,机动运用这一强盛的机器学习工具。

[ 算法金,碎碎念 ]

全网同名,日更万日,让更多人享受智能兴趣

假如觉得内容有价值,烦请大侠多多 分享、在看、点赞,助力算法金又猛又持久、很黄很 BL 的日更下去;
同时邀请大侠 关注、星标 算法金,围观日更万日,助你功力大增、笑傲江湖

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4