
明确问题与目标先搞清楚要解决什么问题比如预测房价判断垃圾邮件输出是单个值还是多个值数据收集从各种渠道获取数据数据库、日志、传感器、公开数据集等数据的质量通常比模型的复杂度更重要。数据清洗与预处理处理缺失值、处理异常值、编码类别特征one-hot、label encoding 等、特征缩放标准化/归一化文本、图像等需要额外的特征提取或表示如词向量、图像resize等划分数据集训练集train用来“学习”参数验证集validation用来调参、选模型测试集test只在最终评估时使用常见比例6/2/2、7/1.5/1.5 等具体视数据量而定。选择模型根据问题选择合适的模型比如线性回归模型分类1、多元线性回归2、多项式回归先把特征做多项式扩展再用普通线性回归评价指标是评价模型预测与泛化性能的核心指标MAE均方误差对异常值不敏感——误差10和误差100贡献是10倍而不是100倍MSE均方误差因为开平方了对异常值更敏感RMSE均方根误差MSE的平方项对异常值的惩罚比RMSE和MAE更狠所以如果你想让模型极度厌恶大误差用MSE做损失函数更直接R2衡量回归模型对数据变异的解释程度数值在0到1之间,越接近1说明模型拟合得越好因为MSE会受数值单位影响而R2则是纯粹只关注比例比如真实值 预测值 平均值100万 110万 200万200万 190万 200万300万 280万 200万TSS总平方和 20000RSS残差平方和 600R² 1 - 600/20000 0.97模型解释了97%的房价波动拟合效果非常好。正则化Lassos(L1)所有非零权重都有惩罚弱特征的权重更容易被压成 0,相当于在损失函数后面加一个λ∣w∣Ridge(L2)所有非零权重都有惩罚权重越大惩罚越重,权重越小惩罚越小,所以弱特征的权重会被压带接近于 0,相当于在损失函数后面加一个λw2损失函数损失函数的来源主要就是从评价指标中选出一个合适的指标通常选用MSE,因为通过梯度公式可知RMSE的梯度多了一个 1/RMSE 的分母项当模型快收敛了RMSE接近0梯度会变得非常大导致参数更新步长突然变大所以MSE综合来说更适合做损伤函数线性模型 - 解析法线性回归模型最优解的求解过程是带正则化的最小二乘法以一元多项式为例给定数据点(Xi,Yi),希望用一个 k 阶多项式拟合目标是找到参数向量w [w0,w1,w2,w3,w4…wk]使得预测值尽可能接近真实值评估标准就是通过损失函数来确定损失函数越小代表模型性能越好损失函数是所以求解最优解过程就是围绕这个顺手函数求解的过程求解过程如下首先带入写成矩阵形式y^ Xw,其中X是全部多项式部分取值的矩阵多项式函数值y取值是向量带入矩阵的最小二乘法公式推导过程如下公式推导过程涉及到矩阵的求导公式即可通过训练集数据计算出线性回归最优解参数向量如果是考虑正则化的话那么评价标准公式就变成了对引入正则化的损伤函数求最优解求出来的结果就是引入正则化机制正则化是相当于在损伤函数的基础上加了一个惩罚项在默认写法里每一个参数 的惩罚权重是一样的并没有“高阶参数惩罚得更重的内在机制)比如我们模拟一个案例ysinx randomNum, randomNum取值[-0.5,0.5] 我们随机生成300个xx取值范围在[-2,2],我们选择一个20阶多项式模型按模拟结果反推我们训练处的最优解模型应该是yasinx(x b)这种模式可近似套用泰勒展开式结果为虽然我们指定的是20阶但实际上前4个参数基本就能确定一个yasinx(x b)函数了后面更高维的参数则是为了去更好的覆盖那些噪音点表现出来的形式就是让函数不再是一个光滑的曲面而是剧烈抖动的曲线这样确实能更好的拟合噪音但同时也牺牲了通用性所以在训练分数很高但测试得分通常就不太好看了所以正则化则是更倾向于惩罚那些高阶项因为低阶项虽然系数大但低阶项是函数的基本骨架如果调整低阶项系数会使得损失函数误差整体大幅提升这样会得不偿失而高阶项虽然系数不大但同时对损失函数的贡献也不大引入正则化惩罚机制后就不会再毫无顾忌使用高阶项系数去弥补那点微不足道的误差所以会更倾向于惩罚高阶项解析法的缺点我选定一个 20 阶多项式的模型用 3 万个训练数据训练如果用解析法的话运算成本过于庞大所以更适合使用梯度下降法求解那该模型的损失函数是一个21维的向量此处的过程完全同上区别在于解析法是直接套式解出最优解而梯度下降法则是像下山一样通过各处几乎最抖的破下到入口处即损失函数最小的极值点就是参数的最优解线性模型 - 梯度下降法假设我们有一个二次型损失函数包含三个权重参数w1,w2,w3纯数学思路我们选用一个更直观函数模型f(x) (x2− 2)2, 来给大家演示这个过程 这个函数非常简单我们一眼就能看出它的最小值是负根号2和正根号2但我们先假装看不出来通过梯度下降法逐步推导步骤如下首先计算该函数梯度一元函数的梯度即为它的导数 f(x) 3x3- 4x套用学习率公式Xnew Xold −αf ′(Xold)并指定学习率为0.1随机选个起点开始走比如从 x 0 出发当前的梯度为-6用梯度下降更新下一步的x为0.6从 x 1 开始走当前的梯度为-2.7用梯度下降更新下一步的x 1 -2.7*0.05 1.33从 x 1.33 再走当前的梯度为-1.8用梯度下降更新下一步的x为1.40依次类推这些 x 一步步地向 1.44靠近但同时但每一步走得越来越小因为函数这个函数的结构特点就是越接近最小值梯度导数越是趋近于0我们让它走100步就基本能逼近最优解了标准批量梯度下降案例首先要确定模型比如我们这里先提前确定下来需要用的是简单线性回归模型该模型的损失函数模式就长这个样子假如我们选的线性模型有2个权重参数w1和w2因为xi 和 yi都是已知的了而w1、w2、b是未知的也是需要我们求最优解所以这里本质就是求一个最优[w1,w2]使得L(w,b)最小最好是接近于0假设我们只有三个样本(1,2,7) (1,4,9), (2,5,12)带入这个式子就更直观了同样分别对w1和w2求偏导式子如下学习率使用默认值0.001此处的梯度下降公式是随机给w1和w2一个初始值(0,0)第一轮带入(0,0)因为我们这里偏执b默认是0预测值y也是(0,0,0),所以带入损失函数是91.3带入w1和w2的梯度公式求得他们在(0,0)这个点的梯度值分别是−26.7−70.7,带入梯度下降公式首轮更新后w1和w2的值更新为(0.0260.0707)第二轮权重参数w从点位(0.0260.0707)开始出发带入w1和w2的梯度公式求得他们在(0.0260.0707)这个点的梯度值分别是-25.8−67.9,带入梯度下降公式首轮更新后w1和w2的值更新为(0.0520.139)损失函数下降到了85.2第三轮权重参数w从点位(0.0520.139)开始出发带入w1和w2的梯度公式求得他们在(0.0520.139)这个点的梯度值分别是-24.9−65.5,带入梯度下降公式首轮更新后w1和w2的值更新为(0.0770…204)损失函数下降到了47.2整个训练流程w1和w2参数逐步往最优解靠近损伤函数不断降低大于在1000轮下降后逼近最优解批量梯度下降的问题运算成本依然过高上面的演示太粗略了我们把第0轮的运算完整呈现出来就是1.先算预测值 y1^ 0, y2^ 0, y3^ 0,和实际值7,9,12的误差就是-7,-9,-122.带入梯度公式计算虽然本案例只有2个参数但虽然本案例只有2个参数但可以想象当模型有成百上千个参数时我们需要计算当前参数点下所有样本的预测值和真实值的差值然后分别带入各个参数在当前点位的梯度公式所以运算量依然是相当庞大的学习率取值注意点学习率参数是一个非常核心的参数取值的大小直接影响我们训练过程比如我们上面选用0.001的学习率经过1000次求出最优解是比较合理的选择 求解过程细节图如下学习率过小那么运算步骤会显著增大如果学习率过大可能永远找不到的风险例如如果学习率使用0.01就会出现如下情况所以学习率的选择上通常准寻一些标准化的大小对普通回归 / 小模型 / 标准化后的特征SGD/动量η 在 1e-3 ~ 1e-1 之间试Adam1e-3 是非常常见的起点对深度网络尤其是图像任务SGD with momentum0.1、0.01 是常见起点Adam1e-3、3e-4梯度下降注意点损失函数越大的时候比如各个权重参数还是初始化状态和最优解距离比较远的时候因为此时初始化的权重参数点位可能本身就在一个函数上比较陡峭的点位同样的步长因为初始化所在的点位比较陡峭也就是当前点位梯度通常会比较大所以刚开始的时候梯度下降幅度是非常明显的但后面逐步靠近最优解的过程函数会趋于平稳也就是梯度会越来越小下降的也会越来越缓慢逻辑回归最大似然概念比如四个病人病人1和病人2患病模型给出患病的概率是0.9和0.8病人3和病人4未患病模型给出患病的概率是0.1和0.2那么最大似然计算得出是0.9*0.8 * ( 1 - 0.1) * (1- 0.2) 0.5184同一批样本的情况下模型输出概率值的最大似然可以有效衡量模型对训练数据集拟合程度的核心概念逻辑回归是一种用于二分类问题的监督学习模型用于判断样本属于哪一类比如是否生病是否垃圾邮件输出不是直接给“类别”而是给出一个属于正类的概率。工作机制是先把输入特征做线性组合然后通过sigma函数然后把这个线性结果映射到 [0,1] 区间表示概率对应的公式主要就是z wTbσ(z) 1 / (1 e-Z)模型形式zi w1x1 w2x2 w3*x3y^ σ(zᵢ) 1 / (1 e-zi)数据区分度预测某个行为是否发生x1是点击次数x2是停留时长这两个指标只是表面更可能购买但并不是非常强的信号那么模型的也会输出类似 0.6、0.7 这种概率同时表现在数据图上也是这几个点位为交织在一起的而不是离散区分的比如(1,1,0), (2,1,0), (3,2,1) (4,3,1)强烈的信号表现在数据图上通常就是点位呈现离散趋势比如做贷款逾期预测特征可能包括逾期次数、收入水平、负债率、信用分模型的就可以输出0.9以上的概率损失函数逻辑回归的损伤函数和线性函数不同不是模型输出概率值的最大似然可以有效衡量模型对训练数据集拟合程度的核心但无法达到真实值偏差越大惩罚会越重真实值偏差越小惩罚会越小的效果所以我们对最大似然再取 log把乘法变成加法便于优化再取负号把“最大化概率”变成“最小化损失”损失函数内容如下对于单个样本则是直接除以N公式如下实战案例比如真实标签是 1但你预测的概率很小比如p 0.01那么损失函数的值就是L−log(0.01) ,是一个很大的值意味着惩罚很重如果真实标签是 0但你预测成 0.99那么损伤函数值就是log(1−0.99) -log(0.01)也是一个很大的值意味着惩罚很重如果真实标签是 1但你预测成 0.99那么损伤函数值就是log(1−0.99) -log(0.99)是一个接近0的值意味着惩罚很轻注意点损失函数值较小可以证明模型在训练集上拟合得好证明它已经掌握了这批训练样本的规律但如果训练样本过于单一、覆盖面太窄那么模型即使训练得很好到了新数据上也可能表现一般所以想要保证模型实战性能就必要要保证训练数集质量的基础上让模型预测结果损失函数值尽可能小梯度下降法对逻辑回归损失函数求导对 y^ 求导对线性函数z求导所以损失函数对z的梯度通过链式求导法则得出dL / dz y^ - y线性模型z的损失函数对w1、w2、w3的梯度分别是x1,x2,x3,所以由链式法则推出dLi/ dwi (y^ - y)xi梯度下降实战比如我们预测客户是否下单的逻辑回归函数x1是点击次数x2是停留时长有如下几个样本(1,1,0), (2,1,0), (3,2,1) (4,3,1),罗列出运算所需数据假设有2个参数x1x2截距b首轮初始值w1w2b为(0,0,0)线性模型z 0带入sigma函数得σ 0.5也就是预测值为0.5带入损失函数−log(0.5)0.6931第一轮计算出w1和w2点位损失函数的梯度分别为-0.25和-0.5更新后的参数w10.05, w20.025,b0带入这四个样本分别求出线性模型的值z1 0.1, z2 0.125 z3 0.2 ,z4 0.275再把z分别带入sigma函数 σ1 0.5250, σ20.5312, σ3 0.5498, σ40.5684把这四个值带入交叉熵损失公式然后除以4.得到的结果就是0.676循环往复大约在第500次的时候求得最优解损失函数最小是0.5350此时对四个样本的预测值大约是(0.6498, 0.6762, 0.7080, 0.7540)分类模型常用指标全部数据样本ALL预测结果划分四类TP真阳性、FP假阳性、FN假阴性、TN真阴性准确率 Accuracy比如你有 100 个病人模型猜对了 80 个那准确率就是 80%精确率 Precision所有被模型预测成有病的人里面真正有病的有多少比如50个预测有病的人45个人真的有病精确率就是90%召回率 Recall召回率 Recall比如有病的人是60人找出来了45个有病的召回是75%F1衡量Precision 和 Recall 平衡得怎样损失函数是在模型训练过程中使用的优化目标用来引导参数更新把模型往“更好的方向”拉Accuracy、Precision、Recall、F1 则是训练完成后用来评价模型真实预测能力的指标相当于给模型“打分”。KNN概念KNN不同于逻辑回归、线性回归这类并不是是参数化模型同样的也不会对已有的数据集进行学习只是把训练数据存起来它的工作机制是当接收到你抛给它的新样本后通过当前样本在数据集中的位置和临近元素来对这个新样本定性和预测比如用KNN 做房价预测常见特征x[面积,房龄,楼层,距地铁,…]y这套房子的总价或单价有历史成交数据的N套房每套有特征 Xi和价格 Yi新上架了一套房源只有特征我们可以通过KNN模型给这套新房源辅助定价基于KNN这种特点我们通过用用一个二维数组矩阵来存所有样本的特征向量比如# 假设有4个样本每个样本3维特征Xnp.array([[1.0,2.1,3.3],# 样本1的3维向量[0.9,1.8,3.0],# 样本2[3.2,0.1,0.4],# 样本3[2.9,0.2,0.5],# 样本4])#X.shape(4,3)样本间距离的计算公式欧氏距离默认特征空间里“直线距离”多维勾股定理。曼哈顿距离像在棋盘上走只能横竖走余弦距离常用于文本向量、推荐系统等“方向比长度重要”的场景。KNN的归一化和标准化比如使用KNN默认距离计算公式欧氏距离有两套别墅房源面积相同都是5000平米但房龄一个1年一个30年然而在房屋面积这个大额数值影响下房屋年龄的数组权重明显和房屋年龄对实际价格的影响不匹配所以使用归一化也就是对于特征有明确取值范围的可以使用归一化比如这个区域最大户型面积是1万最老房型是50年所以使用归一化把特征压缩到一个[0,1]区间里把这两套房源特征分别被压缩到同一起跑线两套房型被压缩后是[0.5, 0.02], [0.5, 0.6]参数加权归一化后面积和房龄的影响被拉齐到同一起跑线了这种情况下再去加权计算比如高档别墅的无论使用寿命还是黄金居住期都远高于普通商品房国外更是很多百年以上老别墅目前还在居住所以相比于寿命房屋面积对居住体验的影响更大所以面积和房龄的权重分别是1和-0.2,所以所以这里如果是普通商品房人们更关注房屋年限通常老破大不如小而美所以房屋年限权重会更高面积和时间的权重分别是1和和-0.34带入上面2套计算最终值为0.492和0.38位置权重当训练样本数据经过归一化/标准化和加权处理后就可以被KNN存储了KNN会存储这些训练好的样本特征值和真实结果当用于预判新数据时KNN会比较这些新数据和样本数据的距离找出附近最相似的 K 个已知样本根据这些邻居的标签来判断新数据是否患有心脏病其中这个K是可以由开发者来制定的核心参数比如指定K5那就是参考离它最近的五个样本数比如最近5个邻居都有心脏病或都没心脏病那么预测结果就显而易见但如果最近的5个邻居三个有病两个没病呢那么模型机会采用少数服从多少原则认为这个有病总结所以样本数据转换为向量后然后进行归一化或标准化和参数加权处理后就能直接能存入knn用于后面待预测数据的参照系感知机概念我们拿一批已经标注好的邮件训练感知机模型通过不断调整特征权重学习出一条能够区分垃圾邮件和正常邮件的分类边界。训练后那些在垃圾邮件中更常见、且对区分两类邮件更有帮助的特征词比如“免费”“中奖”“链接”“感叹号”等通常会得到较高的正向权重。之后新邮件如果包含这些特征模型计算出的分数就会更高从而更可能被判定为垃圾邮件。注意点感知机学习的哪些特征组合起来更容易把垃圾邮件和正常邮件分开在训练样本中如果一个特征总是帮助把垃圾邮件和正常邮件区分开它的权重会变大所以它本质上是监督学习下的线性分类边界学习比如“免费”常见于垃圾邮件但“免费试用”、“免费课程”也可能出现在正常业务邮件里所以感知机学到的是“免费”这个词在当前数据分布下对判定垃圾邮件有较强贡献而对于这种特征词是否出现出现多少次这些特征的权重多大偏置项是多少都会一起决定最终分数。总分 各特征值 × 对应权重 偏置总结感知机通过监督学习从已标注邮件中学习一组特征权重找到能区分垃圾邮件和正常邮件的线性边界那些在垃圾邮件中更具有区分性的特征如“免费”“中奖”“链接”等通常会被赋予较高的正向权重从而使包含这些特征的新邮件更容易被判为垃圾邮件决策树6. 定义损失函数和优化方法损失函数衡量模型预测与真实标签之间差距的函数回归常用 MSE均方误差二分类常用交叉熵Binary Cross Entropy优化方法如何调整参数使损失变小常用梯度下降及其变种SGD、Adam、RMSProp 等7. 模型训练参数学习核心过程是“反复试错、逐步改进”从训练集中取一批样本一个 batch用当前模型做预测计算损失预测和真实之间的误差通过反向传播等方法计算梯度根据梯度更新模型参数权重、偏置等。重复以上步骤多个 epoch完整遍历训练集的次数目标是让训练集上的损失越来越小同时尽量避免过拟合。无监督模型上面的线性回归、逻辑回归、KNN、决策树都是无监督模型监督模型的特点是有“输入 正确答案”比如通过邮件内容判断是否垃圾邮件通过房屋信息判断房价通过图片判断猫狗比如KNN和K-Means比较像都通过距离来分类而K-Means是像是老师把全班同学按身高、体重自动分成几组KNN像是来了一个新同学问他你最像哪几个老同学比如可以做如下几个分类近30天购买次数、近30天消费金额、平均客单价、浏览次数、加购次数实战案例