MIT公开课解析:决策树与无监督学习核心技术

发布时间:2026/10/27 17:59:16

MIT公开课解析:决策树与无监督学习核心技术 1. 项目概述MIT公开课中的无监督学习与识别树这门来自MIT的人工智能公开课第11讲聚焦于机器学习中两个关键概念识别树Decision Trees和无监督学习Unsupervised Learning。作为AI领域的经典教学内容它系统性地拆解了如何让机器在没有明确标签指导的情况下自主发现数据中的潜在规律与结构。对于刚接触机器学习的开发者而言这部分内容往往是最具挑战性也最令人兴奋的。不同于有监督学习中输入-输出的明确对应关系无监督学习要求算法像人类观察世界一样主动识别数据中的聚类、异常或关联规则。而识别树作为可解释性极强的模型其构建过程直观展示了机器学习中的特征选择逻辑。2. 核心概念解析2.1 识别树的工作原理识别树决策树通过递归地将数据集分割成更小的子集来工作。每个内部节点代表一个特征测试每个分支代表测试结果而每个叶节点则存储最终的预测结果。以经典的鸢尾花分类为例如果 花瓣长度 2.45 cm: 如果 花瓣宽度 1.75 cm: 预测为versicolor(杂色鸢尾) 否则: 预测为virginica(维吉尼亚鸢尾) 否则: 预测为setosa(山鸢尾)这种if-then规则的树形结构使其成为最易解释的机器学习模型之一。关键优势在于可处理数值和类别特征不需要特征缩放能自动进行特征选择可视化直观易懂2.2 无监督学习的本质特征无监督学习的核心是发现数据中的隐藏模式主要分为三大类聚类分析如K-means将相似数据点分组降维技术如PCA减少特征维度关联规则如Apriori算法发现频繁项集与有监督学习相比其独特价值在于不需要昂贵的数据标注能发现人类未预设的模式适用于探索性数据分析可作为有监督学习的预处理步骤3. 关键技术实现细节3.1 识别树的构建算法3.1.1 ID3算法实现步骤计算初始数据集的熵(Entropy)def entropy(y): hist np.bincount(y) ps hist / len(y) return -np.sum([p * np.log2(p) for p in ps if p 0])对每个特征计算信息增益def information_gain(X, y, feature): parent_entropy entropy(y) values, counts np.unique(X[:, feature], return_countsTrue) child_entropy 0 for value, count in zip(values, counts): mask X[:, feature] value child_entropy (count/len(y)) * entropy(y[mask]) return parent_entropy - child_entropy选择信息增益最大的特征作为分割节点对每个子集递归执行上述过程注意ID3倾向于选择取值多的特征可能导致过拟合。C4.5算法通过增益率解决了这一问题。3.1.2 剪枝优化策略后剪枝(Post-Pruning)的典型流程先构建完整的决策树自底向上考察非叶节点计算验证集在该节点替换为叶节点前后的准确率若准确率提升或不变则进行剪枝def prune(tree, X_val, y_val): if is_leaf(tree): return tree for branch in tree.branches: prune(branch, X_val, y_val) if accuracy(tree, X_val, y_val) accuracy(make_leaf(tree), X_val, y_val): return make_leaf(tree) else: return tree3.2 无监督学习的典型算法3.2.1 K-means聚类实现class KMeans: def __init__(self, k3, max_iter100): self.k k self.max_iter max_iter def fit(self, X): # 1. 随机初始化质心 self.centroids X[np.random.choice(len(X), self.k, replaceFalse)] for _ in range(self.max_iter): # 2. 分配样本到最近质心 distances np.sqrt(((X - self.centroids[:, np.newaxis])**2).sum(axis2)) labels np.argmin(distances, axis0) # 3. 更新质心位置 new_centroids np.array([X[labels i].mean(axis0) for i in range(self.k)]) # 4. 检查收敛 if np.allclose(self.centroids, new_centroids): break self.centroids new_centroids return self3.2.2 PCA降维步骤详解标准化数据均值0方差1计算协方差矩阵cov_matrix np.cov(X_standardized.T)计算特征值和特征向量eigenvalues, eigenvectors np.linalg.eig(cov_matrix)按特征值降序排序特征向量选择前k个特征向量组成投影矩阵将数据投影到新空间X_pca X_standardized.dot(projection_matrix)4. 实战应用与调优技巧4.1 识别树在真实场景中的优化4.1.1 处理连续特征对于如年龄这样的连续特征最佳分割点选择对特征值排序[22, 25, 28, 32, 40]计算候选分割点(2225)/223.5, (2528)/226.5,...评估每个分割点的信息增益选择增益最大的分割点def find_best_split(X_feature, y): unique_values np.unique(X_feature) thresholds (unique_values[:-1] unique_values[1:]) / 2 best_gain -1 best_threshold None for threshold in thresholds: mask X_feature threshold gain information_gain(y[mask], y[~mask]) if gain best_gain: best_gain gain best_threshold threshold return best_threshold, best_gain4.1.2 处理缺失值常用策略包括替代值法用出现最频繁的值/均值填充概率权重法将样本按比例分配到各分支代理分割法选择相似特征作为替代分割4.2 无监督学习的评估方法4.2.1 聚类效果评估指标轮廓系数(Silhouette Score)from sklearn.metrics import silhouette_score score silhouette_score(X, labels)计算每个样本与同簇其他样本的平均距离a与最近其他簇样本的平均距离b得分为(b-a)/max(a,b)戴维森堡丁指数(DBI)from sklearn.metrics import davies_bouldin_score dbi davies_bouldin_score(X, labels)值越小表示簇内距离越小簇间距离越大4.2.2 降维效果评估累计解释方差比explained_variance_ratio np.cumsum(pca.explained_variance_ratio_) plt.plot(range(1,len(explained_variance_ratio)1), explained_variance_ratio) plt.xlabel(Number of Components) plt.ylabel(Cumulative Explained Variance)通常选择使累计解释方差≥85%的最小组件数5. 常见问题与解决方案5.1 识别树过拟合问题现象训练集准确率高测试集表现差解决方案预剪枝限制树的最大深度、叶节点最小样本数等DecisionTreeClassifier(max_depth5, min_samples_leaf10)后剪枝如CCP(Cost Complexity Pruning)改用随机森林等集成方法5.2 K-means聚类不稳定现象每次运行结果不一致优化策略多次运行取最优from sklearn.cluster import KMeans kmeans KMeans(n_init10)使用K-means初始化kmeans KMeans(initk-means)确定最佳K值肘部法则(Elbow Method)轮廓系数法Gap统计量5.3 PCA特征解释困难挑战难以理解降维后的特征含义应对方法分析主成分载荷矩阵loadings pca.components_.T * np.sqrt(pca.explained_variance_)可视化特征贡献plt.matshow(pca.components_, cmapviridis) plt.yticks(range(n_components), [PCstr(x) for x in range(1,n_components1)]) plt.colorbar() plt.xticks(range(len(features)), features, rotation90)6. 前沿发展与实际应用6.1 识别树的现代变种随机森林通过bootstrap采样和特征子集选择构建多棵树from sklearn.ensemble import RandomForestClassifier rf RandomForestClassifier(n_estimators100, max_featuressqrt)梯度提升树(GBDT)迭代地构建树来纠正前序树的错误from sklearn.ensemble import GradientBoostingClassifier gbdt GradientBoostingClassifier(n_estimators100, learning_rate0.1)XGBoost/LightGBM加入正则项和更高效的实现6.2 无监督学习的新兴应用异常检测通过聚类发现异常点from sklearn.neighbors import LocalOutlierFactor lof LocalOutlierFactor(n_neighbors20) outliers lof.fit_predict(X)推荐系统通过矩阵分解发现用户-物品潜在特征from sklearn.decomposition import NMF model NMF(n_components10) user_features model.fit_transform(ratings_matrix) item_features model.components_特征学习通过自动编码器学习紧凑表示from tensorflow.keras.layers import Input, Dense from tensorflow.keras.models import Model encoding_dim 32 input_layer Input(shape(input_dim,)) encoded Dense(encoding_dim, activationrelu)(input_layer) decoded Dense(input_dim, activationsigmoid)(encoded) autoencoder Model(input_layer, decoded)在实际项目中我常将无监督学习作为探索性数据分析的第一步。例如在客户分群项目中先通过K-means发现自然分组再结合业务知识解释各簇特征最后可能有针对性地设计有监督模型。这种先无监督观察再有监督优化的流程往往能发现纯监督学习会忽略的重要模式。
延伸阅读

更多相关文章

2026/10/27 17:59:16

用Rust构建AI Agent专用终端:PTY会话复用与多Agent并发控制

说句实话,最近这几个月我写的代码里,最值回票价的就是这个给 AI Agent 私有定制的终端。它解决的事情一句话能讲明白:让 Claude Code 能直接操控我机器上的真实终端,并且我还能同时拉多个 Agent 一起干活,互不抢键盘、…

2026/10/27 17:59:16

纯静态HTML实现Lojban无空格切词与词典检索

简介:面向 Lojban 语言学习者、构造语言研究者以及词典与解析工具开发者的组合资源,汇集解析器、词典软件、搜索界面和配套数据,并以 Docker 或 podman 容器化方式组织,方便在统一环境中体验与二次开发。压缩包共 2000 个文件&…

2026/10/27 17:59:16

腾讯开源Octop与WorkBuddy:AI Agent开发框架与办公助手的协同布局

最近在好几个技术社群里反复看到一个挺有意思的话题:腾讯都已经有 WorkBuddy 了,怎么转头又把 Octop 开源了?乍一看确实有点像“自己人打自己人”,一个做 AI 工作台,一个做 AI 开发框架,名字听起来都跟“智…

2026/10/27 18:54:28

ROM搜索算法对多个DS18B20进行地址读取

ROM搜索算法对多个DS18B20进行地址读取 ROM搜索算法是一个用于解决1-wire总线上多个器件地址寻址的算法;实际应用,假设在一条总线上挂载了多个 1-Wire器件、但主机不知道它们地址无法进行通信;此时可以通过ROM搜索算法枚举出每一个器件的64位…

2026/10/27 18:54:28

三强版 Codex 整合包,操作全程可追溯,开发办公都能用

💡前言 不少朋友在 Windows 上使用桌面 AI 智能体时,常会遇到几类困扰:任务执行过程不透明、修改记录难以追溯、缺少定时调度能力,插件扩展也相对有限。如果你已经试过同类工具,正在寻找一套更稳定、全程可审查、功能…

2026/10/27 18:54:28

这款 Codex 本地 AI,支持飞书联动,重复性工作自动搞定

💡前言 不少朋友在 Windows 上使用桌面 AI 智能体时,常会遇到几类困扰:任务执行过程不透明、修改记录难以追溯、缺少定时调度能力,插件扩展也相对有限。如果你已经试过同类工具,正在寻找一套更稳定、全程可审查、功能…

2026/10/27 18:54:28

cuDNN 9.1 Windows 安装指南:cudnn64_9.dll 报错排查与配置

简介:这是一份面向Windows x86-64平台、适配CUDA Toolkit 12的NVIDIA cuDNN 9.1.0.70官方库压缩包,适合需要利用GPU加速深度神经网络训练与推理的开发者、算法工程师及研究人员。包体共32个文件,包含16个.lib库文件、8个.dll动态链接库、7个.…

2026/10/27 18:54:28

第十六节 IP协议格式

一、IP协议1.1、协议格式:4位版本:描述当前协议版本ipv4,ipv6……4位头长:描述IP报的头部长度,最小20字节,最大60字节8位服务类型;1位保留0;3位优先权;4位服务类型:最小成本&#xf…

2026/10/27 18:49:27

刷机维修进阶教程-----读懂 PDA 设备:序列号、IMEI 这些参数到底存在哪里?不同芯片之间的寻址方式【一】

在接待设备定制化过程中,常会遇到客户要求修改设备串码、序列号等参数的需求,其中以PDA设备最为常见。与手机类设备不同,PDA设备的参数修改方式具有特殊性,因此需要我们掌握其基础常识及具体的修改机制。本期系列博文将分三篇深入解析此类参数的查找与修改流程,帮助您高效…

2026/10/27 14:24:03

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑