版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章
线性回归与逻辑回归本章主要内容8.1线性回归8.2逻辑回归8.3课后习题8.1线性回归数据数据挖掘有价值的知识和信息(如预测发展趋势)数据数据统计统计信息(如环比、同比等)8.1.1线性回归原理——数据挖掘8.1.1线性回归原理——预测数值高尔顿研究父母和孩子身高关系父母和孩子的身高呈现“回归现象”回归算法主要用于“预测数值”假设挖掘模型为y=f(x)表达式为
y=ax+b8.1.1线性回归原理——简单举例历史数据x=10时y=100x=20时y=150训练出a=5\b=50即该模型在该场景应表示为y=5x+50待挖掘数据x=8时预测y=?x=8时预测y=90将历史数据代入模型:10a+b=10020a+b=1508.1.1线性回归原理假设有数据挖掘模型y=f(x)数学表达式为y=ax+b历史数据:当x=1.8时y=4.8
当x=4时y=8.2
当x=8时y=15.2
当x=8.3时y=14.8
当x=9.8时y=17.5......预测:当x=11.4时y=?数据点虽然无法真正用一条线来表示,但是y和x依然趋近于“一次关系”,这时就可以考虑使用“线性回归”8.1.1线性回归原理——多元线性回归序号属性1(x1)属性2(x2)属性3(x3)……属性500(x500)目标属性(y)181001050……705100502102002000……800210003153002800……1200280004780800……7009500581001050……800100506450500……3535000..........................................70017100350……700?假设模型表达式是:y=a1x1+a2x2+a3x3+……+a500x500+b历史数据如下求:第7001个数据中目标属性的取值?8.1.1线性回归原理——多元线性回归假设模型表达式是:y=f(x1,x2,x3...xn)
即:y=a1x1+a2x2+a3x3+……+anxn+b
将a1、a2、a3......an转换成w1、w2、w3......wn
将b转换为w0
原公式变为:y=f(x1,x2,x3...xn)
即:y=w1x1+w2x2+w3x3+……+wnxn+w0引入向量表示法设向量:x=(x0=1,x1,x2,x3...xn)w=(w0,w1,w2,w3...wn)将x和w代入y=f(x1,x2,x3...xn)则有多元线性回归表达:y=f(x)=wx其中w又被称为参数向量,多元线性回归模型训练的目标就是求w8.1.2损失函数与损失函数的解法训练模型的中心思想是让模型预测值与真实值之间的差距尽量小。
可以将这个差距表达为:,其中y是真实值,
是预测值
模型的最终任务是让y和更加接近。
假设一共有m个样本,下标i是样本编号,这m个样本的预测误差值之和是
考虑到误差正负号可能存在抵消,衡量标准改为m个样本的误差平方和
将
代入上面公式,则多元线性回归的损失函数为
8.1.2损失函数与损失函数的解法求损失函数最小值在训练模型时yi和xi都是历史数据的一部分,所以此时的目标就是求解J最小时w的取值,进而确定整个模型的参数。方法一:
求导法方法二:
梯度下降法8.1.2损失函数与损失函数的解法——求导法求导法涉及大量的矩阵运算,为了简便,损失函数书写方式调整为其中y是所有样本真实值组成的向量,w是特征参数组成的向量,X是所有样本数据组成的矩阵。推导f最小时w取值的步骤如下:求极值时导数为0注意:矩阵可逆的一个前提条件是矩阵要满秩(感兴趣的同事可以研究“矩阵的秩”和“多重共线性”问题)8.1.2损失函数与损失函数的解法——梯度下降法有没有求损失函数最小值时不受“前提条件”限制的方法呢?——有,梯度下降法。梯度下降法就是在求函数极值(如最小值)时,通过试探的方法,一步一步找到最小值。以一元函数y=f(x)为例,它的函数图像如右图所示。首先给函数一个x1,得到函数值f(x1),然后在x1处对f(x)求导,沿f(x)值向下方向选取x2,得到f(x2),比较f(x2)和f(x1),可以看到确实达到了函数值“下降”效果。然后再延f(x)在x2处导数向下方向继续寻找x3,以此类推,最终找到最小值。当f(xn)最小时,xn就是函数的极值点。8.1.2损失函数与损失函数的解法——梯度下降法如果是多元函数会是什么样呢?例如J是以w1和w2为变量的多元函数,它的梯度下降求解极值过程如右图所示。对于二元函数f来说,它寻找下降方向(也就是求导)时是针对w1和w2分别求偏导,然后沿着两个变量的方向寻找下一个取值点。当找到最小值时,对应的w1和w2就是函数的极值点。
对于更多元函数来说,已经无法用图像表示梯度下降过程了,但是思路都是一样的,沿着每个变量的下降方向探索。所以对于多元线性回归的损失函数,就是针对w1、w2......wn等变量求偏导,然后沿着它们分别的下降方向探索极值点。8.1.3正则化与过拟合——过拟合问题无论是导数法还是梯度下降法,在求出参数向量w后,模型参数确定,模型训练完毕!!!然而,万事大吉了吗?——需要注意过拟合问题。什么是过拟合?一个学生在备考的时候会做大量的练习题,但是如果考生只会做练习过的题,考试时出现新题就不会了,这就属于过拟合。在机器学习中,如果模型参数求解过程过分依赖训练数据集,就会出现“模型在训练集上表现很好,但在测试集上表现糟糕”的问题,这就是过拟合。避免过拟合穿上马甲我照样认识你8.1.3正则化与过拟合——多元线性回归与过拟合数据挖掘中,过拟合问题并不一定会出现,但“不得不防”。多元线性回归的数学表达式为:y=f(x)=wx+b。这个表达式中参数向量w主要与训练数据集x相关,所以不得不考虑出现过拟合的问题。如果多元线性回归出现了过拟合问题。可以使用以下两种思路解决
方法一:扩大训练集
方法二:使用正则化8.1.3正则化与过拟合——正则化线性回归中的正则化思想:在原始损失函数中,增加由参数向量组成,但与参数向量无关的“惩罚项”。常用两种正则化方式:
L1正则化(lasso回归)L2正则化(岭回归)由于惩罚项的存在,损失函数在求解极值时,w向量需要被考虑两次,惩罚项部分与训练集数据完全没有关系,所以缓解了函数过分依赖于训练集数据。8.1.3正则化与过拟合——正则化(L1和L2的区别)(1)L1正则化(lasso回归)的w参数向量中可能会有0,但L2正则化(岭回归)的参数向量不会出现0;(2)L2正则化(岭回归)可以避免多重共线性,但L1正则化(Lasso回归)没有此功能;L2正则化后,此时对w进行求导取0后变成了如下形式:
其中
肯定可逆,所以w肯定有解(3)Lasso回归是一次运算,因此模型计算速度比岭回归快。一些说明数据表中的列经常被称为:属性、特征、维、列等历史数据一般分为训练集和测试集,训练集就是用于训练模型的数据,测试集是为了检测模型的效果建模的步骤
第零步:与业务部门沟通
第一步:导入数据、探索数据
第二步:进行必要的数据预处理
第三步:建模
第四步:用测试集检验模型预测效果8.1.4线性回归的实现与模型评价——代码实现(以预测波士顿房价案例为例)#第一步:导入数据#导入numpy和pandas数据包importnumpyasnpimportpandasaspd#从boston_lishi.csv文件中导入原始数据df=pd.read_csv(r'E:\boston_lishi.csv',index_col='id')#X为原始数据中不包括target列部分,是由历史数据中“非结果列”组成的数据X=df.loc[:,(df.columns!='target')]#Y为原始数据中target列部分,是由历史数据中“结果列”组成的数据Y=df.loc[:,df.columns=='target']8.1.4线性回归的实现与模型评价——代码实现(以预测波士顿房价案例为例)#第二步:数据预处理#缺失值处理df.dropna()#数据标准化fromsklearn.preprocessingimportMinMaxScalerscaler=MinMaxScaler()X=scaler.fit_transform(X)#其他数据预处理将在第6次课介绍8.1.4线性回归的实现与模型评价——代码实现(以预测波士顿房价案例为例)#第三步建模#将历史数据按照8:2的比例分随机分为训练集和测试集fromsklearn.model_selectionimporttrain_test_splitXtrain,Xtest,Ytrain,Ytest=train_test_split(X,Y,test_size=0.2,random_state=420)#从sklearn的linear字库中导入岭回归工具包#如果引入岭回归的包importRidge;引入lasso回归的包importlassofromsklearn.linear_modelimportLinearRegressionasLR#创建模型reg=LR()#训练模型reg.fit(Xtrain,Ytrain)8.1.4线性回归的实现与模型评价——模型评价(以预测波士顿房价案例为例)#第四步,用测试集检验模型预测效果#使用predict方法,根据Xtest预测测试集的结果result=reg.predict(Xtest)#将测试集真实结果和预测结果进行对比df=pd.DataFrame({'真实结果':Ytest.loc[:,'target'],'预测结果':pd.Series(result.reshape(-1),index=Ytest.index)})print(df)这样能看出模型表现优良吗?8.1.4线性回归的实现与模型评价——模型评价(以预测波士顿房价案例为例)#第四步,用测试集检验模型预测效果#可以使用一些指标来评价模型表现,例如使用R2值评价多元线性回归score=reg.score(Xtest,Ytest)print(score)其中
是所有真实结果的平均值,
是第i个样本的预测值,
是第i个样本的预测值在统计学中,方差除了体现了数据之间的波动性之外,还可以体现数据集所携带的信息量
如果除以m就是数据集真实的方差,也就是数据集真实的信息量。除以m就是一个类方差数据,是真实值与预测值之间的信息差,也就是模型没有拟合出来的信息表达的是模型没有拟合出来的信息量和数据集真实信息量的占比,用1减去它,表达的意思是模型拟合出来的信息量占数据集真实信息量的占比。所以R2越接近1越好。8.1.5重要参数和属性但是LR()括号内是可以传递参数的。线性回归有哪些重要参数可以设置呢?(1)fit_intercept:内容为布尔型,意思是是否考虑使用截距,如果是False就不考虑截距。(2)normalize:内容为布尔型,意思是是否对数据进行标准化,如果是False就不进行标准化,将在第12章详细介绍标准化。(3)n_jobs:内容为整数,意思是计算时设置的任务个数,数值越高,任务越多,计算资源占用的越多。8.1.5重要参数和属性#可以使用coef_属性,查看线性回归各个参数的值print(reg.coef_)8.2逻辑回归逻辑回归逻辑回归“真名”叫logisticRegression,虽然也叫“回归”,但是它确实用于解决预测分类问题。分类问题的预测结果是类别型的(具体的类别叫“标签”)。例如猜一场足球比赛结果,就是通过各种信息,预测“主队赢”、“主队平”、“主队输”三个结果,这三个结果就是标签,预测比赛胜负结果就是典型的分类问题。8.2.1逻辑回归原理序号属性1(x1)属性2(x2)属性3(x3)……属性500(x500)目标属性(y)181001050……70502102002000……80013153002800……120014780800……7001581001050……80006450500……3530..........................................70017100350……700?通过属性1、属性2、属性3......确定目标属性(0或者1)8.2.1逻辑回归原理既然逻辑回归是用于分类问题,那为什么叫回归呢?——因为它的原理与线性回归非常像。
逻辑回归的数据表达式8.2.1逻辑回归原理那如何确定Θ中的各个特征参数呢?同样使用损失函数求极值的方法,但这个损失函数更加复杂,且是通过极大似然估计推导出来的。同样可以使用L1或者L2正则化对损失函数进行改造,改造后的L1或L2正则化如下:这个损失函数的求解过程非常复杂,主要包括随机梯度下降法、牛顿法等逻辑回归简单实现(以乳腺癌预测案例为例)#第一步:导入数据#导入numpy和pandas数据包importnumpyasnpimportpandasaspd#从boston_lishi.csv文件中导入原始数据df=pd.read_csv(r'E:\ruxian_lishi.csv',index_col='Patien')#X为原始数据中不包括target列部分,是由历史数据中“非结果列”组成的数据X=df.loc[:,(df.columns!='target')]#Y为原始数据中target列部分,是由历史数据中“结果列”组成的数据Y=df.loc[:,df.columns=='target']逻辑回归简单实现(以乳腺癌预测案例为例)
#第二步:数据预处理#缺失值处理df.dropna()#数据标准化fromsklearn.preprocessingimportMinMaxScalerscaler=MinMaxScaler()X=scaler.fit_transform(X)#其他数据预处理将在第6次课介绍逻辑回归简单实现(以乳腺癌预测案例为例)
第三步建模#将历史数据按照8:2的比例分随机分为训练集和测试集fromsklearn.model_selectionimporttrain_test_splitXtrain,Xtest,Ytrain,Ytest=train_test_split(X,Y,test_size=0.2,random_state=420)#导入逻辑回归工具包fromsklearn.linear_modelimportLogisticRegressionasLR#创建模型reg=LR()#训练模型reg.fit(Xtrain,Ytrain)逻辑回归简单实现(以乳腺癌预测案例为例)
#第四步,用测试集检验模型预测效果#使用predict方法,根据Xtest预测测试集的结果result=reg.predict(Xtest)#将测试集真实结果和预测结果进行对比df=pd.DataFrame({'真实结果':Ytest.loc[:,'target'],'预测结果':pd.Series(result,index=Ytest.index)})print(df)这样能看出模型表现优良吗?逻辑回归简单实现(以乳腺癌预测案例为例)
#第四步,用测试集检验模型预测效果#可以使用一些指标来评价模型表现,例如使用准确率评价逻辑回归score=reg.score(Xtest,Ytest)print(score)准确率:预测对的样本数/总样本数表达的是模型没有拟合出来的信息量和数据集真实信息量的占比,用1减去它,表达的意思是模型拟合出来的信息量占数据集真实信息量的占比。所以R2越接近1越好。准确率固然是分类模型最重要的衡量指标,但准确率高一定表示模型表现好吗?假设生活中如下案例:肺癌的发病率约千分之三,假设1000人中有3人是肺癌,模型预测结果为1000人均健康,此时模型的准确率是99.7%,但实际情况是“一个病人没检查出来”,这样的模型是我们想要的吗?8.2.2逻辑回归的实现方法与模型评价(混淆矩阵)8.2.2逻辑回归的实现方法与模型评价——混淆矩阵实现#生成混淆矩阵fromsklearn.metricsimportconfusion_matrixasCMcm=CM(Ytest,result,labels=[0,1])print(cm)#计算recallfromsklearn.metricsimportroc_curveFPR,recall,threshold=roc_curve(Ytest,result,pos_label=1)print(recall)8.2.2逻辑回归的实现方法与模型评价——AUC值AUC值其实是在画ROC曲线时的曲线面积(ROC曲线在二分类问题时,可以通过可视化方式直观看到模型在遇到类不均衡问题时的表现,感兴趣的同学可以自行研究),AUC值越大,分类在类不均衡问题中表现越好。AUC值实现#计算AUC值fromsklearn.metricsimportroc_auc_scorearea=roc_auc_score(Ytest,result)print(area)8.2.2逻辑回归的实现方法与模型评价——AUC值#计算AUC值fromsklearn.metricsimportroc_auc_scorearea=roc_auc_score(Ytest,result)print(area)AUC值,值越大,效果越好8.2.3重要参数和调参方法如果模型的表现不好怎么办?可以通过调整超参数取值,优化模型表现。所谓超参数就是模型中需要人为设定的参数,例如逻辑回归L1正则化和L2正则化中的C就是超参数,可以通过改变C值的大小,调整惩罚项在损失函数中的比例,改变模型训练后Θ的取值,从而改变模型的表现。8.2.3重要参数和调参方法——超参数penalty:内容是字符串,可以是“l1”或者“l2”,意思是使用L1或者L2正则化。solver:内容是字符串,包括“liblinear”、“lbfgs”、“newton-cg”、“sag”,意思是使用哪种方法对损失函数进行极值求解。这几个选项中“liblinear”是坐标轴下降法、“lbfgs”是牛顿法、“newton-cg”是另一种牛顿法、“sag”是随机梯度下降。其中坐标轴下降法适用于小数据集,也是默认值,而牛顿法和随机梯度下降适用于大数据集因为速度更快。max_iter:内容是整数型,意思是当solver选择牛顿法或者随机梯度下降法,就会涉及到算法的迭代(思路类似于梯度下降法找到极值点的过程),max_iter就是指定迭代次数,可以避免因迭代次数过多引起模型性能太低。但如果太小可能会无法收敛(找不到损失函数极值),所以一般根据自己设备的性能而定。C:内容是正浮点型数,L1正则化和L2正则化损失函数中的C,C越大,惩罚项重要程度越低。8.2.3重要参数和调参方法——参数选择学习曲线:例如针对逻辑回归的参数C,我们可以指定一个取值范围,然后计算每一个取值时模型的准确率,以C的取值为横坐标,以每个取值对应的模型准确率为纵坐标,绘制一条曲线,可以看出模型准确率随C取值的变化及峰值,从而选择参数取值。8.2.3重要参数和调参方法——交叉验证例如有1000条历史数据训练模型,需要将这1000条数据分成训练集和测试集。可以采用train_test_split方法按照一定比例随机选择训练接和测试集,虽然具有一定代表性,但不能完全看出模型训练的水平。这时就可以使用交叉验证,它相当于将1000条历史数据分成了10份(又称10折),第一次用其中1份作测试集,另外9份作训练集,第二次换1份作测试集,另外9份作训练集,以此类推,迭代10次,得到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年北海市铁山港区中小学教师招聘考试试题及答案详解
- 2026年温州市鹿城区中小学教师招聘笔试参考题库及答案详解
- 2026年重症三基基础试题及答案
- 2026年职业病档案管理试题及答案
- 2026年超声医学专业三基三严考试试题附答案
- 2026年通告全国统计法知识竞赛试题附答案
- 2026年社区工作者青少年服务题库附答案
- 2026年保密教育线上培训知识试题库含答案
- 2026年公需科目考试试题(含答案)
- 2026中国智能家居用语音助手行业市场现状供需分析及投资评估规划分析研究报告
- 2026年度济南临港经济开发区管委会公开招聘工作人员(5人)笔试参考题库及答案详解
- 2026年低压电工证考试题库及解析答案
- 中国电池即服务(BaaS)行业决策建议及发展前景展望研究报告
- 雨课堂在线学堂《创业管理四季歌:艺术思维与技术行动》单元考核测试答案
- 2024年江苏省张家港市文化中心管委办招聘3人历年(高频重点复习提升训练)共500题附带答案详解
- YST 63.7-2024《铝用炭素材料检测方法 第7部分:表观密度的测定 尺寸法》
- CJJT146-2011 城镇燃气报警控制系统技术规程
- HG/T 3706-2024 工业用金属孔网管骨架聚乙烯复合管(正式版)
- 江苏南通艺术剧院招考聘用工作人员2人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 人力资源外包投标方案
- 《园林植物病虫害防治》课程标准
评论
0/150
提交评论