附 预测数值型数据:回归.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
附 预测数值型数据:回归拟合直线局部加权线性回归理解数据权衡偏差和方差前言预测联系型数据“回归可以做任何事情”最近有新意的应用:预测名人的离婚率先介绍线性回归再引入局部平滑技术分析如何更好的拟合数据在欠拟合情况下的缩减技术探讨偏差和方差的概念用线性回归找到最佳拟合直线线性回归优点:结果易于理解,计算上不复杂缺点:对非线性的数据拟合不好回归的目的是预测数值型目标值:找到目标的计算公式预测某人的汽车功率:HorsePower = 0.0015*annualSalary-0.99*hoursListeningToRadio以上为回归方程0.0015和-0.99为回归系数求回归系数的过程即为回归——本次只讨论线性回归回归的一般方法收集数据按输入要求整理数据数据可视化以直观分析数据训练算法:找到回归系数测试算法:使用R2或者预测值和数据的拟合度来分析模型的效果使用算法:给定输入的时候预测输出基本算法?怎样从一大堆数据里求出回归方程呢?已知一些点(x, y),怎样找到w呢?找到使拟合误差最小的w拟合误差 = ( 预测y值 - 真实y值之间的差值 )**2即:最终结果:上式称为:普通最小二乘法(OLS,ordinary least squares)?例:对以下点集进行拟合import numpy as nplstDt = []lstLbl = [] # lbl: labelfr = open(.\\ex0.txt)for line in fr.readlines():arLn = line.strip().split()lstDt.append([float(arLn[0]), float(arLn[1])])lstLbl.append(float(arLn[2]))计算回归:xMat = np.mat(lstDt)yMat = np.mat(lstLbl).TxTx = xMat.T*xMatif np.linalg.det(xTx)==0.0:print This is matrix is singular, cannot do inverse!else:ws = xTx.I*(xMat.T*yMat)plt.figure()lstX = [dt[1] for dt in lstDt]plt.scatter(lstX, lstLbl)lstY = [ws[0, 0]+ws[1, 0]*x for x in lstX]plt.plot(lstX, lstY)绘图如何如何评判模型的好坏?不同数据集:分别做线性回归,得到完全一样的两个模型如何比较回归效果?计算yHat和y的相关系数:arrYHat = np.array(lstY)arrY = np.squeeze(np.array(yMat))print np.corrcoef(arrY, arrYHat)局部加权线性回归?欠拟合现象可以允许在估计中引入一些偏差,从而降低预测的均方误差LWLR: Locally Weighted Linear Regression给待预测点附近的每个点赋予一定的权重然后利用最小均方误差来进行普通的回归使用的高斯核函数来加权:平滑值 k = 1平滑值 k = 0.01平滑值 k = 0.003代码:算法实现xMat = np.mat(lstDt)yMat = np.mat(lstLbl).Tm = xMat.shape[0]k = 0.01lstY = []for i in range(m):wgt = np.mat(np.eye(m))dtTst = xMat[i, :]for j in range(m):difMat = dtTst - xMat[j, :]wgt[j, j] = np.exp(difMat*difMat.T/(-2*k**2))xTx = xMat.T*(wgt*xMat)if np.linalg.det(xTx)==0.0:print This is matrix is singular, cannot do inverse!else:ws = xTx.I*(xMat.T*(wgt*yMat))matV = dtTst*wslstY.append(matV[0, 0])代码:显示结果plt.figure()lstX = [dt[1] for dt in lstDt]plt.scatter(lstX, lstLbl)sIdx = np.argsort(lstX)lstXSort = [lstX[idx] for idx in sIdx]lstYSort = [lstY[idx] for idx in sIdx]plt.plot(lstXSort, lstYSort)arrYHat = np.array(lstY)arrY = np.squ

文档评论(0)

cc880559 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档