大家好,我是锋哥。最近连载更新《Scikit-learn Python机器学习》技术专题。
本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。 同时也配套视频教程《Scikit-learn Python机器学习 视频教程》
人工智能(AI)概述
一、什么是人工智能?
人工智能(Artificial Intelligence, AI)是一个广阔的计算机科学领域,其核心目标是创造能够模拟人类智能行为的机器和系统。这些行为包括:
- 学习:从数据和经验中获取信息和规则。
- 推理:使用规则来得出结论或进行近似判断。
- 感知:理解和解释图像、声音、文本等外部信息。
- 交互:使用自然语言进行交流。
- 解决问题:找到达成特定目标的方法。
简单来说,AI就是让机器像人一样思考、学习和行动的科学与工程。
二、AI的简要发展历程
| 时间 | 阶段 | 特点与代表性事件 |
|---|---|---|
| 1950s-1960s | 诞生与黄金期 | 1956年“达特茅斯会议”正式提出“人工智能”概念。早期程序可以证明数学定理、下棋,乐观情绪弥漫。 |
| 1970s-1980s | 第一次寒冬 | 计算能力不足、复杂问题无法解决,预期落空,资金大幅减少。 |
| 1980s | 专家系统崛起 | 模仿专家知识的“专家系统”在商业领域获得成功,AI研究回暖。 |
| 1990s | 第二次寒冬 | 专家系统维护成本高、难以扩展,再次遇冷。 |
| 1990s末-至今 | 数据驱动复兴 | 互联网产生海量数据、算力大幅提升(特别是GPU)、算法突破(深度学习),AI进入爆发期。 |
| 2010s-至今 | 爆发与普及 | 深度学习成为主流,AI在图像识别、语音识别、自然语言处理等领域全面超越人类水平,并广泛应用于各行各业。 |
三、AI的关键技术与分支
AI是一个庞大的领域,包含许多子领域和技术:
- 机器学习:AI的核心驱动力。让计算机无需显式编程就能从数据中学习。它通过分析大量数据,自动找到规律和模式,并用于预测或决策。
- 深度学习:机器学习的一个子集,使用类似于人脑的“神经网络”结构(尤其是多层神经网络)来处理复杂数据。它是当前大多数AI突破背后的技术,如图像识别、AlphaGo、ChatGPT等。
- 计算机视觉:让计算机能够“看”和理解图像和视频。应用包括人脸识别、医疗影像分析、自动驾驶中的障碍物检测等。
- 自然语言处理:让计算机能够理解、解释和生成人类语言。应用包括机器翻译(如Google Translate)、智能客服、情感分析、文本生成(如ChatGPT)。
- 机器人技术:结合AI、机械工程和电子学,设计能够自动执行任务的机器人。应用包括工业机器人、仓储物流机器人、手术机器人。
- 专家系统:早期AI技术,模仿人类专家的知识和推理过程来解决特定领域的问题。
四、AI的主要应用场景
AI已渗透到我们生活的方方面面:
- 日常生活:手机语音助手(Siri、小爱同学)、地图导航、个性化推荐(抖音、淘宝、Netflix)、智能家居。
- 医疗健康:辅助疾病诊断(分析CT/MRI影像)、新药研发、健康监测。
- 交通运输:自动驾驶汽车、交通流量预测、智能航线规划。
- 金融:欺诈检测、算法交易、信用评分、风险管理。
- 工业制造: predictive maintenance(预测性维护,提前预测设备故障)、质量控制优化。
- 娱乐与内容创作:AI生成艺术、音乐、视频和文章(AIGC)。
什么是机器学习
机器学习是从数据中自动分析获取模型(规则),并利用模型对未知数据进行预测。
一、核心定义:与传统编程的区别
要理解机器学习,最简单的方法是与传统编程进行对比。
- 传统编程:我们编写明确的规则和指令,输入数据,计算机执行后输出结果。
- 模式:规则 + 数据 → 答案
- 例子:编写一个程序来排序名单。我们告诉计算机明确的排序规则(按字母顺序A-Z),输入名字列表,程序输出排序后的列表。
- 机器学习:我们输入数据和这些数据对应的结果(答案),计算机自己从中学习出隐含的规则或模式。然后,我们可以用这个学到的“模型”来对新的数据做出预测或判断。
- 模式:数据 + 答案 → 规则(模型)
- 例子:训练一个机器来识别猫的图片。我们不给它编写“猫有尖耳朵、胡须”等规则,而是给它成千上万张图片(数据),并告诉它哪些是猫,哪些不是(答案)。机器学习算法会自己分析这些图片,找出区分猫和非猫的复杂模式(例如,某种特定的纹理、形状组合),最终形成一个“猫识别模型”。之后,当你给它一张新的图片时,它就能用这个学到的模型来判断里面是否有猫。
一句话总结:机器学习是一种让计算机通过数据来自动学习和改进,而无需显式编程的方法。
二、一个简单的比喻:教孩子认动物
想象一下你教一个孩子认识“狗”。
- 传统编程方法:你会给他一本厚厚的规则书,上面写着:“狗有四条腿、有毛、会摇尾巴、发出汪汪声……” 孩子需要记住所有这些规则,然后去匹配。
- 机器学习方法:你会指着路上各种各样的狗(大的、小的、不同颜色的、不同品种的)说:“看,这些都是狗。” 也会指着猫、汽车、树说:“这些不是狗。” 经过多次例子,孩子的大脑(天然的神经网络)会自己归纳出“狗”这个概念的核心特征。以后他看到一只从未见过的品种的狗,大概率也能认出来。
机器学习就是在用计算机模拟这个“通过例子学习”的过程。
三、机器学习的主要类型
根据学习方式的不同,机器学习通常分为三大类:
- 监督学习
- 核心:训练数据是有标签的,即每个样本都带有“正确答案”。
- 目标:学习输入数据(特征)和输出标签(答案)之间的映射关系,以便对新的、未见过的数据做出预测。
- 好比:学生做带答案的练习题。通过练习,学习解题方法,最终为了应对没有答案的考试。
- 常见任务:
- 分类:预测离散的类别。例如:垃圾邮件识别(是/否)、图像识别(猫/狗/汽车)。
- 回归:预测连续的数值。例如:预测房价、预测气温。
- 无监督学习
- 核心:训练数据是没有标签的,只有数据本身,没有“正确答案”。
- 目标:发现数据中内在的、隐藏的模式或结构。
- 好比:给学生一堆不同的积木,但不告诉他们要拼什么,让他们自己发现积木之间如何分类和组合。
- 常见任务:
- 聚类:将数据分成不同的组(簇),组内的数据点彼此相似。例如:客户分群、新闻主题分组。
- 降维:在保留重要信息的同时,减少数据的变量数量,使其更容易可视化和处理。例如:将3D数据压缩到2D平面显示。
- 强化学习
- 核心:一个智能体通过与环境不断交互,根据其行动获得的奖励或惩罚来学习最佳策略。
- 目标:学习一系列行动,以最大化长期累积奖励。
- 好比:训练狗做动作。它做了正确的动作,你就给零食(奖励);做错了,就没有零食(惩罚)。狗通过不断尝试,学会为了获得最多零食而应该采取的行动序列。
- 常见应用:AlphaGo(学习下围棋)、自动驾驶、机器人控制。
四、为什么机器学习如此重要?
- 处理复杂问题:对于很多问题(如图像识别、自然语言理解),人类很难编写出完整且准确的规则,而机器学习可以从数据中直接学习这些复杂模式。
- 适应性和自动化:模型可以随着新数据的到来而不断更新和改进,适应变化的环境,实现自动化决策。
- 从大数据中提取价值:在当今的大数据时代,机器学习是唯一能高效地从海量数据中发现洞见和价值的工具。
五、机器学习的常见应用
你每天都在不知不觉中使用机器学习:
- 推荐系统: Netflix、淘宝、抖音根据你的喜好推荐内容。
- 语音助手: Siri、小爱同学能听懂你的话。
- 人脸识别:手机解锁、支付验证。
- 欺诈检测:银行信用卡系统识别异常交易。
- 机器翻译: Google翻译、百度翻译。
机器学习开发流程
阶段一:问题定义与规划
目标: 明确要解决什么业务问题,以及如何用机器学习来解决。 这是最重要的一步,方向错了后面全错。
- 关键问题:
- 我们的业务目标是什么?(例如:提高销售额、降低客户流失率、优化运营效率)
- 机器学习能解决的具体问题是什么?(例如:这是一个分类问题[流失 vs. 不流失]、回归问题[预测销量]还是聚类问题[客户分群]?)
- 如何定义“成功”?(确立明确的、可衡量的评估指标,例如:准确率、精确率、召回率、AUC、RMSE等)
- 需要什么样的数据?
- 项目的预算是多少?时间线是怎样的?
- 产出: 项目规划书、成功标准、技术可行性评估。
阶段二:数据收集与准备
目标: 获取并清洗数据,将其转换为适合模型训练的格式。 这是整个流程中最耗时、最繁琐但至关重要的一步,常被称为“数据工程”。
- 关键任务:
- 数据收集:从数据库、数据仓库、API、日志文件、公开数据集等来源收集所有相关数据。
- 数据探索与清洗:
- 处理缺失值:删除或填充(用均值、中位数等)。
- 处理异常值:分析并决定是删除、修正还是保留。
- 处理错误数据:修正不一致的格式或输入错误(例如,“USA” vs. “United States”)。
- 特征工程:这是模型性能的关键。创建新的、对模型预测更有帮助的特征。
- 例子:从“出生日期”生成“年龄”特征;从“地址”生成“城市/乡村”特征;对类别型特征进行独热编码(One-Hot Encoding)。
- 数据分割:将数据集分为训练集(用于训练模型)、验证集(用于调参和模型选择)和测试集(用于最终评估模型性能)。常用比例如 60%/20%/20% 或 70%/15%/15%。
- 产出: 干净、可用于建模的数据集(训练集、验证集、测试集)。
阶段三:模型选择与训练
目标: 选择合适的算法,使用训练数据来构建(训练)模型。
- 关键任务:
- 模型选择:根据问题类型(分类、回归等)和数据特征,选择一个或多个候选算法。
- 例子:线性回归、逻辑回归、决策树、随机森林、梯度提升机(如XGBoost、LightGBM)、支持向量机(SVM)、神经网络。
- 模型训练:将训练集输入到算法中,让算法学习数据中的模式。
- 对于简单模型,训练很快;对于深度学习模型,可能需要大量时间和计算资源(GPU)。
- 超参数调优:大多数算法都有需要人为设定的超参数(如学习率、树的最大深度等)。使用验证集来评估不同参数组合的性能,找到最佳配置。常用方法有网格搜索、随机搜索、贝叶斯优化。
- 模型选择:根据问题类型(分类、回归等)和数据特征,选择一个或多个候选算法。
- 产出: 一个或多个训练好的模型。
阶段四:模型评估
目标: 客观地评估训练好的模型在未知数据上的表现,判断它是否达到第一阶段设定的成功标准。
- 关键任务:
- 使用测试集:使用模型从未见过的测试集进行最终评估。这是为了模拟模型在真实世界中的表现,避免因为过拟合验证集而产生乐观偏差。
- 分析评估指标:根据第一阶段定义的指标(如准确率、F1分数、均方误差等)进行评估。
- 深入分析:查看混淆矩阵、学习曲线、ROC曲线等,了解模型在哪些地方表现好,哪些地方表现差(例如,是否在某个特定类别上表现不佳)。
- 产出: 模型性能报告,明确其是否达到上线标准。
阶段五:模型部署与上线
目标: 将评估合格的模型部署到生产环境中,使其能够为真实用户或系统提供服务。
- 关键任务:
- 模型打包:将模型、预处理代码和依赖环境打包成一个可服务的格式(例如,一个Docker容器、一个RESTful API端点)。
- 部署到生产环境:将打包好的模型部署到服务器、云平台或边缘设备上。
- 集成与测试:将模型API与现有的业务系统(如网站、APP、后台系统)集成,并进行全面的集成测试和验收测试。
- 产出: 一个在生产环境中运行并可提供预测服务的模型。
阶段六:监控与维护
目标: 持续监控线上模型的性能,确保其持续有效,并计划迭代更新。 模型上线不是终点,而是一个新的起点。
- 关键任务:
- 性能监控:监控模型的预测延迟、吞吐量、资源使用情况等。
- 数据漂移监控:监控线上数据分布是否逐渐偏离训练数据时的分布(数据漂移),以及模型性能是否随时间下降(概念漂移)。
- 建立反馈循环:收集模型在生产环境中的预测结果和真实结果(如果可能),这些新数据将成为下一轮训练的重要资源。
- 模型重训练与迭代:定期(或当性能下降到阈值时)使用新的数据重新训练模型,并重复上述流程,迭代更新线上模型。
- 产出: 模型性能监控报告、模型更新版本。
核心特点:
- 迭代性:整个过程不是线性的,而是循环往复的。你可能在数据准备阶段发现需要重新定义问题,在评估阶段发现需要回去做更多的特征工程。
- 数据为核心:大部分时间和精力都花在数据准备和特征工程上。“垃圾进,垃圾出”是机器学习领域的经典名言。
- MLOps 集成:现代ML开发流程强调自动化和持续集成/持续部署(CI/CD),这就是MLOps的理念,旨在更快、更可靠地将模型投入生产并对其进行维护。
Scikit-learn介绍
好的,我们来全面介绍一下 Scikit-learn(有时也写作 sklearn)。
一、Scikit-learn 是什么?
Scikit-learn 是一个基于 Python 编程语言的、开源免费 的机器学习库。它建立在 NumPy、SciPy 和 Matplotlib 库之上,提供了大量用于传统机器学习(请注意:它不是深度学习框架)的算法和工具。
官方网站:scikit-learn.org/
由于其清晰一致的API设计、丰富的功能和完善的文档,它成为了机器学习入门和实践中最受欢迎、使用最广泛的工具库之一,被誉为“机器学习界的瑞士军刀”。
二、核心特点与优势
- 简单高效
- 一致的API:所有模型的接口都非常统一。你通常只需要经历
初始化模型 -> .fit()(拟合/训练)->.predict()(预测) 这三个核心步骤,大大降低了学习和使用成本。
- 一致的API:所有模型的接口都非常统一。你通常只需要经历
- 功能全面
- 覆盖了机器学习的所有主要领域:分类、回归、聚类、降维、模型选择 和 数据预处理。
- 强大的社区和文档
- 拥有极其活跃的用户社区,遇到问题很容易找到解决方案。
- 官方文档非常出色,每个算法都有详细的说明、示例和参数解释。
- 建立在坚实的科学计算基础之上
- 基于 NumPy(数组计算)和 SciPy(科学计算),底层由高效的 C 和 Cython 实现,保证了计算性能。
三、主要功能模块
Scikit-learn 的功能模块化分非常清晰,你可以像搭积木一样使用它们。以下是其核心模块:
| 模块类别 | 主要功能 | 代表性算法 |
|---|---|---|
| 数据预处理 | 特征缩放、编码、处理缺失值等 | StandardScaler, MinMaxScaler, OneHotEncoder, SimpleImputer |
| 监督学习 | 分类 | LinearSVC, LogisticRegression, RandomForestClassifier, GradientBoostingClassifier |
| 回归 | LinearRegression, Ridge, Lasso, SVR, RandomForestRegressor | |
| 无监督学习 | 聚类 | KMeans, DBSCAN, AgglomerativeClustering |
| 降维 | PCA(主成分分析), TSNE(流形学习) | |
| 模型选择 | 评估模型、调参、验证 | train_test_split, cross_val_score, GridSearchCV, RandomizedSearchCV |
| 数据集 | 提供经典数据集和生成数据工具 | load_iris, load_digits, make_classification |
四、适用场景
- 适用场景:
- 机器学习入门和教育:几乎是学习标准机器学习算法的首选工具。
- 中小型数据集的传统机器学习任务:对于表格数据、结构化数据的预测分析任务非常有效。
- 快速构建原型:由于其简单的API,可以非常快速地验证一个想法或模型的效果。
五、如何安装与学习资源
-
安装(通常使用
pip):pip install scikit-learn -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -
最佳学习资源:
- 官方文档:scikit-learn.org/stable/ - 这是最权威、最全面的学习资料,包含教程、API文档和大量示例。
- 用户指南:官方文档中的 User Guide 部分系统地讲解了所有概念和算法。scikit-learn.org/stable/user…
- 示例库:官方文档提供了数百个示例代码,覆盖了各种应用场景,是解决问题时最好的参考。scikit-learn.org/stable/auto…