03阶段:机器学习
一、人工智能AI、ML、DL之间的关系・人工智能三大概念人工智能AI、机器学习ML、深度学习DL。・人工智能是一个研究领域像人一样、机器智能的综合与分析。・机器学习从数据中获取规律来了一个新数据产生一个新的预测。・深度学习也叫深度神经网络大脑仿生设计一层一层的神经元模拟万事万物。・三者关系1.人工智能(AI, Artificial Intelligence)这是最广泛的概念指的是使机器能够模拟人类智能行为的技术和研究领域。AI包括理解语言、识别图像、解决问题等各种能力。2. 机器学习(ML, Machine Learning)机器学习是实现人工智能的一种方法。它涉及到算法和统计模型的使用使得计算机系统能够从数据中“学习”和改进任务的执行而不是通过明确的编程来实现。机器学习包括多种技术如KN、线性回归、逻辑回归、决策树、集成学习、聚类算法等。3.深度学习(DL, Deep Learning)深度学习是机器学习中的一种特殊方法它使用称为神经网络的复杂结构特别是“深层”的神经网络来学习和做出预测。深度学习特别适合处理大规模和高维度的数据如图像、声音和文本。机器学习是实现人工智能的一种途径。深度学习是机器学习的一种方法。・基于规则的学习程序员根据经验利用手工的if-else方式进行预测1.数据多个样本2.发现规律人工3.人工编程规则4.新的样本5.根据之前写好的程序预测6.拿到结果・基于模型的学习从数据中自动学出规律1.海量的数据多个样本2.发现规律算法模型3.通过重复学习汇总规律4.新的样本5.根据模型学习的规律预测6.结果 图中是大象1.名词解释① AI人工智能・基于模型的学习房价预测应用入门找出一条尽可能经过多个点或者距离每个点比较近的一条线这条线就是规律算法1 利用线性关系来模拟面积和房价之间的关系eg让直线尽可能多的经过这些点不能经过的点分布直线两侧2 机器学习模型eg直线记成 y ax b 就是模型其中a、b就是我们要训练的模型参数房价 a * 面积 b② ML机器学习1机器学习的应用领域・计算机视觉CV:对人看到的东西进行理解・自然语言处理:对人交流的东西进行理解・数据挖掘和数据分析:也属于人工智能的范畴2机器学习发展史・1956年:人工智能元年・...・2024年AI应用大规模落地,硬件与场景深度融合・2025年开启智能体时代,AI自主性提升③ DL深度学习二、AI人工智能发展三要素数据数据决定了上限算法算力・数据、算法、算力三要素相互作用是AI发展的基石。・数据决定了模型训练的上限・数据算法算力・CPU主要适合I\0密集型的任务・GPU主要适合计算密集型任务・TPU专门针对大型网络训练而设计的一款处理器三、算法的学习方式1.基于规则的学习2.基于模型的学习四、数据集划分⭐样本、特征、标签样本(sample)一行数据就是一个样本多个样本组成数据集有时一条样本被叫成一条记录特征(feature)一列数据一个特征有时也被称为属性标签/目标(label/target)模型要预测的那一列数据。本场景是就业薪资就业薪资与培训学科、作业考试、学历、工作经验、工作地点5个特征有关系特征如何理解重点特征是从数据中抽取出来的对结果顶测有用的信息eg房价预测、车图片识别数据集划分x_train训练集中的xx_test 测试集中的xy_train 训练集中的yy_test 测试集中的y总结1 样本和数据集・样本(sample)一行数据就是一个样本・数据集dataset多个样本组成数据集2 特征・特征(feature)一列数据一个特征有时也被称为属性3 标签・标签/目标(label / target)模型要预测的那一列数据。4 数据集划分・训练集用来训练模型、测试集用来测试评估模型・一般划分比例7:3 ~ 8:22.关系1ML是实现AI的一种途径2DL是ML的子集五、机器学习的算法分类⭐1.有监督学习(有参考答案)① 数据中有标签的1标签是离散的就是分类任务示例1预测电影类别示例2预测就业薪资等级对应算法分类算法逻辑回归(Logistic Regression)○ 核心思想使用Sigmoid函数将线性回归结果映射到[O,1)概率空间○ 应用场景二分类问题如垃圾邮件识别、疾病诊断支持向量机(Support Vector Machine, SVM)○ 核心思想寻找最大间隔超平面分离不同类别○ 核技巧通过核函数处理非线性可分数据(如RBF核、多项式核)决策树(Decision Tree)○ 核心思想基于特征进行树状决策划分○ 关键概念信息增益/基尼不纯度用于特征选择○ 代表算法ID3、C4.5.CART随机森林(Random Forest)○ 核心思想多个决策树的集成学习通过投票机制提高性能○ 优势抗过拟合能处理高维数据2标签是连续的就是回归任务示例1预测房价示例2预测就业薪资示例3预测健康情况对应算法线性回归(Linear Regression)○ 核心思想建立特征与连续目标值之间的线性关系○ 优化方法最小二乘法、梯度下降法○ 正则化变体Lasso(L1)、Ridge(L2)、Elastic Net回归树(Regression Tree)○ 核心思想决策树应用于回归问题叶节点为连续值○ 集成方法梯度提升树(GBDT)、XGBoost、LightGBM2. 无监督学习无参考答案① 数据中没有标签的1没有标签的主要是聚类任务举例1举例2对应算法聚类算法K均值聚类(K-Means Clustering)○ 核心思想迭代将数据分配到最近的K个簇中心○ 关键步骤初始化、分配、更新、收敛层次聚类(Hierarchical Clustering)○ 核心思想自底向上或自顶向下构建树状聚类结构○ 方法凝聚式(AGNES)、分裂式(DIANA)DBSCAN (Density-Based Spatial Clustering)○ 核心思想基于密度发现任意形状的簇○ 优势不需要预设簇数能识别噪声点高斯混合模型(Gaussian Mixture Model,GMM)○ 核心思想假设数据由多个高斯分布混合生成○ 训练方法期望最大化(EM)算法3.半监督学习① 数据部分有标签部分没有有标签示例4.强化学习① 核心思想为了让智能体达到最大化累计奖励通过不断地在环境中试错学会做出最优的决策。② 马尔科夫决策四要素1智能体agent2环境状态3行动4奖励reward就是打分示例机器学习算法分类 - 总结InOut目的案例监督学习(supervised learning)有标签有反馈预测结果猫狗分类 房价预测无监督学习(unsupervised learning)无标签无反馈发现潜在结构“物以类聚人以群分”半监督学习(Semi-SupervisedLearning)部分有标签部分无标签有反馈降低数据标记的难度强化学习(reinforcement learning)决策流程及激励系统一系列行动长期利益最大化学下棋记忆六、机器学习的流程机器学习建模流程图解1.获取数据获取经验数据图像数据文本数据...2.数据基本处理数据缺失值处理异常值处理...3.特征工程特征提取特征预处理特征降维...4.机器学习(模型训练)线性回归逻辑回归决策树GBDT5.模型评估回归评测指标分类评测指标聚类评测指标注在整个建模流程中数据基本处理、特征工程一般是耗时、耗精力最多的。总结1.机器学习建模的一般步骤・获取数据搜集与完成机器学习任务相关的数据集・数据基本处理数据集中异常值缺失值的处理等・特征工程对数据特征进行提取、转成向量让模型达到最好的效果・机器学习(模型训练)选择合适的算法对模型进行训练・根据不同的任务来选中不同的算法;有监督学习无监督学习半监督学习强化学习・模型评估评估效果好上线服务评估效果不好则重复上述步骤注意数据决定了模型训练效果的上限所以未来工作后最耗时的就是特征数据处理。特征工程概念入门特征工程概念 - 涉及内容1.特征提取从原始数据中提取与任务相关的特征2.特征预处理特征对模型产生影响因量纲问题有些特征对模型影响大、有些影响小。3.特征降维将原始数据的维度降低叫做特征降维一般会对原始数据产生影响。4.特征选择原始数据特征很多与任务相关是其中一个特征集合子集不会改变原数据。5.特征组合把多个的特征合并成一个特征。利用乘法或加法来完成。[A × B]将两个特征的值相乘形成的特征组合。[A × B × C × D × E]将五个特征的值相乘形成的特征组合。[A × A]对单个特征的值求平方形成的特征组合。七、拟合和泛化等相关概念拟合拟合 fitting用在机器学习领域用来表示模型对样本点的拟合情况欠拟合 under-fitting模型在训练集上表现很差、在测试集表现也很差过拟合 over-fitting模型在训练集上表现很好、在测试集表现很差・机器学习到的天鹅特征太少了导致区分标准太粗糙不能准确识别出天鹅・机器已基本能区别天鹅和其他动物了很不巧已有的天鹅图片全是白天鹅的。黑色的天鹅不能识别模型表现效果 - 欠拟合欠拟合 - 从样本分布角度看欠拟合产生的原因模型过于简单过拟合产的原因模型太过于复杂、数据不纯、训练数据太少泛化Generalization模型在新数据集(非调练数据)上的表现好坏的能力。奥卡姆剃刀原则给定两个具有相同泛化误差的模型较简单的模型比较复杂的模型更可取八、归一化和标准化数据归一化○ 如果出现异常点影响了最大值和最小值那么结果显然会发生改变○ 应用场景最大值与最小值非常容易受异常点影响鲁棒性较差只适合传统精确小数据场景○ sklearn. preprocessing. MinMaxScaler(feature_range(0, 1)... )底层公式数据标准化○ 如果出现异常点由于具有一定数据量少量的异常点对于平均值的影响并不大○ 应用场景适合现代嘈杂大数据场景。(以后就是用你了)○ sklearn. preprocessing.StandardScaler()底层公式数据归一化# 1.导包 此处导入归一化模型 from sklearn.preprocessing import MinMaxScaler # 2.准备数据模拟数据 x_train [[90,2,10,40], [60,4,15,45], [75,3,13,46]] # TODO 3.需求在模型训练特征前进行规范化数据 # todo 3.1 创建归一化模型 model MinMaxScaler() # todo 3.2 规范化数据 new_x_train model.fit_transform(x_train) # todo 3.3 打印结果 print(f归一化后的数据为{new_x_train})数据标准化(推荐)# 1.导包 此处导入标准化模型 from sklearn.preprocessing import StandardScaler # 2.准备数据模拟数据 x_train [[90,2,10,40], [60,4,15,45], [75,3,13,46]] # TODO 3.需求在模型训练特征前进行规范化数据 # todo 3.1 创建归一化模型 model StandardScaler() # todo 3.2 规范化数据 new_x_train model.fit_transform(x_train) # todo 3.3 打印结果 print(f归一化后的数据为{new_x_train})九、机器学习中核心算法⭐① 机器学习框架sklearn安装pip install scikit-learn导包import sklearn② 模型使用流程1.准备数据2.准备模型3.模型训练4.模型评估/预测...③ 核心算法1经典算法核心代表K近邻算法○KNNK-Nearest Neighborsk近邻算法分类和回归任务都支持○ 核心思想如果一个样本的最近的k个邻居都属于某一类别X那么这个样本也属于这个类别X○ 核心流程○API应用1knn实现分类任务图解代码# 1.导包 此处导入knn分类模拟 from sklearn.neighbors import KNeighborsClassifier # 2.准备数据(此处我们模拟数据) # 先模拟特征数据x x_train [[0], [1], [2], [3]] x_test [[4]] # 再模拟标签数据y(假设1垃圾邮件0正常邮件) y_train [0, 0, 0, 1] # TODO 3.需求预测x_train中的4属于垃圾邮件还是正常邮件 # todo 3.1 创建分类模型 knn_model KNeighborsClassifier(n_neighbors3) # todo 3.2 模型训练 knn_model.fit(x_train, y_train) # todo 3.3 模型预测 y_pred knn_model.predict(x_test) # todo 3.4 打印预测结果 print(f分类预测结果为{y_pred}) # [0]○ 如何找到最近的k个邻居距离度量(api底层自动计算)○ 默认欧氏距离○ 距离度量多种方式对比2knn实现回归任务图解代码# 1.导包 此处导入knn回归模拟 from sklearn.neighbors import KNeighborsRegressor # 2.准备数据(此处我们模拟数据) # 先模拟特征数据x x_train [[0], [1], [2], [3]] x_test [[4]] # 再模拟标签数据y(房价0-70w,1-80w,2-100w,3-110w) y_train [70, 80, 100, 110] # TODO 3.需求预测x_train中的4对应房价 # todo 3.1 创建分类模型 knn_model KNeighborsRegressor(n_neighbors3) # todo 3.2 模型训练 knn_model.fit(x_train, y_train) # todo 3.3 模型预测 y_pred knn_model.predict(x_test) # todo 3.4 打印预测结果 print(f分类预测结果为{y_pred}) # [96.66666667]KNNK-近邻算法(KNearest Neighbor简称KNN)。比如根据你的“邻居”来推断出你的类别○KNN算法思想如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别则该样本也属于这个类别思考如何确定样本的相似性?KNN算法○ 解决问题分类问题、回归问题○ 算法思想若一个样本在特征空间中的k个最相似的样本大多数属于某一个类别则该样本也属于这个类别○ 相似性欧氏距离分类流程1.计算未知样本到每一个训练样本的距离2.将训练样本根据距离大小升序排列3.取出距离最近的K个训练样本4.进行多数表决统计K个样本中哪个类别的样本个数最多5.将未知的样本归属到出现次数最多的类别回归流程1.计算未知样本到每一个训练样本的距离2.将训练样本根据距离大小升序排列3.取出距离最近的K个训练样本4.把这个K个样本的目标值计算其平均值5.作为将未知的样本预测的值距离度量 distance measure - 常见距离公式距离类型核心思想关键参数对异常值敏感性适用场景欧氏距离直线最短距离p2高连续数值、低维空间(如KNN)曼哈顿距离各维度差异绝对值之和p1中高维稀疏数据、离散特征切比雪夫距离仅关注最大维度差异p→∞极高极值主导场景(如路径规划)闵可夫斯基距离通过p灵活调整距离性质任意p依赖p需平衡不同维度差异的通用场其中p是一个变参数:当p1时就是曼哈顿距离;当p2时就是欧氏距离;当p→∞时就是切比雪夫距离根据p的不同闵氏距离可表示某一类种的距离2回归算法⭐核心代表线性回归线性回归简介○ 定义、线性回归的分类、应用场景线性回归问题的求解○ 线性回归API、损失函数、导数和矩阵、正规方程法、梯度下降算法回归模型评估方法○ MAE、MSE、RMSE线性回归API和梯度下降API○ 波斯顿案例线性回归api的应用# 导包 此处导入线性回归api from sklearn.linear_model import LinearRegression # 1.准备数据 x:特征(身高) y:标签(体重) x_train [[160], [166], [172], [174], [180]] y_train [56.3, 60.6, 65.1, 68.5, 75] x_test [[176]] # 2.准备模型 model LinearRegression() # 3.模型训练 # TODO 训练线性回归目的是什么找线性规律(最优的k和b) model.fit(x_train, y_train) # 训练后打印k和b print(f训练后最优的斜率k为{model.coef_}) print(f训练后最优的偏置b为{model.intercept_}) # 4.模型预测 # TODO 方式1手动套入公式 y_pred1 model.coef_[0] * x_test[0][0] model.intercept_ print(f手动计算结果为{y_pred1}) # TODO 方式2使用模型自带的预测方法 y_pred2 model.predict(x_test) print(f模型预测结果为{y_pred2})概念线性回归就是来表示特征和标签之间的线性关系核心思想找到相对最小化预测值和真实值直接的误差的一条线或者超平面线性回归的分类和对应公式损失函数需要设置一个评判标准损失函数概念线性回归问题求解需要什么线性规律(最优的k和b)思考如何找到的?1.用到了损失函数2.如何找到最小损失位置2.1直接求方程法(一步到位)2.2梯度下降法(循序渐进)线性回归API应用_身高预测体重APIsklearn.linear_model.LinearRegression导数和偏导数导数(1元) - 基本概念- 导数是描述函数在某一点处的瞬时变化率- 导数为0的位置是极值点导数的入门案例常见的函数导数导数的四则运算总结1 导数 Derivative○ 导数是微积分中的一个核心概念它用于描述函数在某一点上的瞬时变化率2 导数的求解方法○ 常数、指数函数、幂指数、正弦余弦都有自己的导函数会查表应用○ 特别注意复合函数求导先对外函数求导在对内函数求导3 利用导数求极值○ 导数为0的位置即为极值点偏导数(多元)基础数学 - 机器学习中常见的数据表述基础数学向量和矩阵 - 范数NormL1范数 曼哈顿距离L2范数 欧式距离Lp范数 闵式距离基础数学向量和矩阵 - 向量运算矩阵乘法m * n n * d m * d2 * 5 5 * 3 2 * 35 * 4 4 * 5 5 * 5矩阵乘法不满足交换律2 * 5 5 * 3 不等于 5 * 3 2 * 5总结正规方程法和梯度下降正是方程法计算量大且可能无解所以以后我们都用梯度下降法可以认为盲人下山1.盲人需要依赖拐杖(学习率)下山2.每一步都要找最陡(导数)的下山方向3.确定初始位置θ14.下一个位置θ1-学习率*导数5.重复上述步骤直到山下人眼睛直接看到哪里陡哪里下山最快。计算机没有眼睛类似盲人每次走一步拿着拐杖试探周边有没有最低点。如何保证稳步快速走到最低点新参数旧参数-学习率*梯度学习率(步长)梯度(导数)参数是谁w和b最低点就是最优参数梯度下降的新参数旧参数-学习率*梯度梯度就是导数学习率决定步长大小梯度下降的分类○ 全梯度下降每次参考所有样本缺点是慢优点是细○ 随机梯度每次随机参考1个样本缺点是不稳定优点是快○ 小批量随机梯度下降(推荐)每次参考一批样本结合了全梯度下降和随机梯度下降的优点梯度下降法与正规方程对比推荐梯度下降了解正规方程线性归回-评估方式回归模型评估方法MAE、MSE、RMSEMAE对异常值不敏感MSE和RMSE对异常值敏感因为他们会放到误差线性回归-随时函数LSMAEMSE如何找到最优参数(w和b)○ 步骤1.用到了损失函数(MAE、MSE)2.如何找到最小损失位置2.1直接求方程法(一步到位)2.2梯度下降法(循序渐进)○ 正规方程和梯度下降总结1 一般使用MAE和 RMSE这两个指标○ MAE反应的是“真实”的平均误差RMSE会将误差大的数据点放大○ MAE 不能体现出误差大的数据点RMSE放大大误差的数据点对指标的影响但是对异常数据比较敏感2 综合结论○ 都能反映出预测值和真实值之间的误差○ MAE对误差大小不敏感○ MSE会放大预测误差较大的样本的影响○ RMSE对异常数据敏感梯度下降APIsklearn.lin梯度下降API应用_波斯顿房价预测_正规方程和梯度下降两种方式import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import SGDRegressor, LinearRegression from sklearn.metrics import mean_absolute_error, mean_squared_error, root_mean_squared_error # TODO 1.准备数据 # todo 1.1 获取原始数据 data_url http://lib.stat.cmu.edu/datasets/boston raw_df pd.read_csv(data_url, sep\s, skiprows22, headerNone) data np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]]) target raw_df.values[1::2, 2] # 自己打印 # print(f特征:{data}) # print(f标签:{target}) # todo 1.2 数据切割 X_train, X_test, y_train, y_test train_test_split(data, target, test_size0.2, random_state42) # todo 1.3 特征的标准化处理 ss StandardScaler() new_x_train ss.fit_transform(X_train) # 训练集用fit_transform()训练并转换 new_x_test ss.transform(X_test) # 测试集只能用transform()转换因为前面训练集已经训练了模型计算了相关内容 # TODO 2.准备模型(正规方程或者梯度下降) # invscaling动态调整学习率 constant固定学习率 # model SGDRegressor(losssquared_error, learning_rateconstant,eta00.01) # 梯度下降模型 model LinearRegression() # TODO 3.模型训练 model.fit(new_x_train, y_train) print(f训练后k权重参数{model.coef_}) print(f训练后b偏置参数{model.intercept_}) # TODO 4.模型预测 y_pred model.predict(new_x_test) # TODO 5.模型评估 print(f平均绝对误差{mean_absolute_error(y_test, y_pred)}) # 平均绝对误差3.189091965887848 print(f均方误差{mean_squared_error(y_test, y_pred)}) # 均方误差24.29111947497351 print(f均方根误差{root_mean_squared_error(y_test, y_pred)}) # 均方根误差4.9286021826653363分类算法⭐核心代表逻辑回归○ 概念逻辑回归是一种用于分类任务的学习算法○ 注意名字中有回归二字但是实际上是分类算法○ 作用擅长二分类任务○ 核心思想/流程逻辑归回将线性回归的结果作为参数传递到sigmoid()函数中函数底层把连续的线性值转换为概率值然后咱们设置一个阈值做二分类任务(大于等于阈值属于一类小于阈值的属于一类)○ 逻辑回归APIsklearn.linear_model.LogisticRegression()○ 图解是什么能干什么怎么用总结○逻辑回归的作用解决二分类问题○激活函数sigmoid作用把数值映射到(01)区间进行分类预测○概率事件发生的可能性边际概率(事件独立)/条件概率(事件依赖性)/联合概率总结1 逻辑回归核心思想○思想解决分类问题把线性回归的输出作为逻辑回归的输入2 逻辑回归的优化操作○极大化似然函数○最小化交叉熵损失底层极大似然估计-最小交叉熵损失综合案例# 导包 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 1.读取文件获取数据 data pd.read_csv(data/breast-cancer-wisconsin.csv, sep,) # print(data.shape, data.ndim) # 形状(699, 11) 维度2 # 2.数据预处理 # 注意数据中有?无效字符需要先转换为numpy中的nan然后使用dropna()删除或者fill()填充 new_data data.replace(?, np.nan).dropna() # print(new_data.shape, new_data.ndim) # 3.特征处理 # 3.1分别获取特征和标签 x new_data.iloc[:, 1:-1] y new_data.iloc[:, -1] # print(x.shape, x.ndim) # 形状:(683,9) 维度:2 # print(y.shape, y.ndim) # 形状:(683,) 维度:1 # 3.2 使用train_test_split()按比例切割成4部分 X_train, X_test, y_train, y_test train_test_split(x, y, test_size0.2, random_state42) # 同一个种子同一份随机数据 # 3.特征处理(标准化) ss StandardScaler() # 标准化模型对特征数据处理 new_x_train ss.fit_transform(X_train) new_x_test ss.transform(X_test) # 4.创建模型 lr_model LogisticRegression() # 逻辑回归模型真正预测结果 # 5.模型训练 lr_model.fit(new_x_train, y_train) # 6.预测模型和评估准确率 y_predict lr_model.predict(new_x_test) # 先预测 # 7.模型评估准确率 print(f准确率:{accuracy_score(y_test, y_predict)}) print(f准确率:{lr_model.score(new_x_test, y_test)})4混淆矩阵底层原理准确率精确率召回率F1分数2聚类算法核心代表K-Means...# 导包 from sklearn.datasets import make_blobs from sklearn.cluster import KMeans import matplotlib.pyplot as plt import matplotlib matplotlib.use(TkAgg) # TODO 准备数据 # 1.准备数据(特征2列和标签1列) x, y make_blobs( n_samples1000, n_features2, centers[[-1, -1], [0, 0], [1, 1], [2, 2]], cluster_std[0.4, 0.2, 0.2, 0.3] ) print(x.shape) print(y.shape) # 2.提前绘制散点图看看数据分布 plt.scatter(x[:, 0], x[:, 1]) # plt.show() # TODO 使用KMeans模型 # 3.创建kmeans模型 model KMeans(n_clusters4) y_pred model.fit_predict(x) # 4.按照预测值通过颜色划分类别绘制散点图看看数据分布 plt.scatter(x[:, 0], x[:, 1], cy_pred) plt.show()