程序示例–局部加权线性回归

现在,我们在回归中又添加了 JLwr() 方法用于计算预测代价,以及 lwr() 方法用于完成局部加权线性回归:

# coding: utf-8
# linear_regression/regression.py# ...def JLwr(theta, X, y, x, c):"""局部加权线性回归的代价函数计算式Args:theta: 相关系数矩阵X: 样本集矩阵y: 标签集矩阵x: 待预测输入c: tauReturns:预测代价"""m,n = X.shapesummerize = 0for i in range(m):diff = (X[i]-x)*(X[i]-x).Tw = np.exp(-diff/(2*c*c))predictDiff = np.power(y[i] - X[i]*theta,2)summerize = summerize + w*predictDiffreturn summerize@exeTime
def lwr(rate, maxLoop, epsilon, X, y, x, c=1):"""局部加权线性回归Args:rate: 学习率maxLoop: 最大迭代次数epsilon: 预测精度X: 输入样本y: 标签向量x: 待预测向量c: tau"""m,n = X.shape# 初始化thetatheta = np.zeros((n,1))count = 0converged = Falseerror = float('inf')errors = []thetas = {}for j in range(n):thetas[j] = [theta[j,0]]# 执行批量梯度下降while count<=maxLoop:if(converged):breakcount = count + 1for j in range(n):deriv = (y-X*theta).T*X[:, j]/mtheta[j,0] = theta[j,0]+rate*derivthetas[j].append(theta[j,0])error = JLwr(theta, X, y, x, c)errors.append(error[0,0])# 如果已经收敛if(error < epsilon):converged = Truereturn theta,errors,thetas# ...

测试

# coding: utf-8
# linear_regression/test_lwr.py
import regression
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as npif __name__ == "__main__":srcX, y = regression.loadDataSet('data/lwr.txt');m,n = srcX.shapesrcX = np.concatenate((srcX[:, 0], np.power(srcX[:, 0],2)), axis=1)# 特征缩放X = regression.standardize(srcX.copy())X = np.concatenate((np.ones((m,1)), X), axis=1)rate = 0.1maxLoop = 1000epsilon = 0.01predicateX = regression.standardize(np.matrix([[8, 64]]))predicateX = np.concatenate((np.ones((1,1)), predicateX), axis=1)result, t = regression.lwr(rate, maxLoop, epsilon, X, y, predicateX, 1)theta, errors, thetas = resultresult2, t = regression.lwr(rate, maxLoop, epsilon, X, y, predicateX, 0.1)theta2, errors2, thetas2 = result2# 打印特征点fittingFig = plt.figure()title = 'polynomial with bgd: rate=%.2f, maxLoop=%d, epsilon=%.3f'%(rate,maxLoop,epsilon)ax = fittingFig.add_subplot(111, title=title)trainingSet = ax.scatter(srcX[:, 0].flatten().A[0], y[:,0].flatten().A[0])print thetaprint theta2# 打印拟合曲线xx = np.linspace(1, 7, 50)xx2 = np.power(xx,2)yHat1 = []yHat2 = []for i in range(50):normalizedSize = (xx[i]-xx.mean())/xx.std(0)normalizedSize2 = (xx2[i]-xx2.mean())/xx2.std(0)x = np.matrix([[1,normalizedSize, normalizedSize2]])yHat1.append(regression.h(theta, x.T))yHat2.append(regression.h(theta2, x.T))fittingLine1, = ax.plot(xx, yHat1, color='g')fittingLine2, = ax.plot(xx, yHat2, color='r')ax.set_xlabel('temperature')ax.set_ylabel('yield')plt.legend([trainingSet, fittingLine1, fittingLine2], ['Training Set', r'LWR with $\tau$=1', r'LWR with $\tau$=0.1'])plt.show()# 打印误差曲线errorsFig = plt.figure()ax = errorsFig.add_subplot(111)ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))ax.plot(range(len(errors)), errors)ax.set_xlabel('Number of iterations')ax.set_ylabel('Cost J')plt.show()

在测试程序中,我们分别对 τττ 取值 0.1 和 1 ,得到了不同的拟合曲线:

1.9 程序示例--局部加权线性回归-机器学习笔记-斯坦福吴恩达教授相关推荐

  1. 5.11 程序示例--垃圾邮件检测-机器学习笔记-斯坦福吴恩达教授

    程序示例–垃圾邮件检测 邮件内容的预处理 下面展示了一封常见的 email,邮件内容包含了一个 URL (http://www.rackspace.com/),一个邮箱地址(groupname-uns ...

  2. 2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授

    程序示例–多分类问题 我们采用 One-vs-All 方法来进行多分类,在原有的逻辑回归模块中添加 One-vs-All 的训练以及预测方法: # coding: utf-8 # logical_re ...

  3. 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授

    程序示例–非线性决策边界 我们首先对数据进行了多项式拟合,再分别使用 λ=0,λ=1,λ=100λ=0,λ=1,λ=100λ=0,λ=1,λ=100 的批量梯度下降法(sgd)完成了训练,获得了非线性 ...

  4. 2.4 程序示例--线性决策边界-机器学习笔记-斯坦福吴恩达教授

    程序示例–线性决策边界 回归模块 在逻辑回归模块 logical_regression.py 中,实现了批量梯度下降法(bgd)以及随机梯度下降法(sgd),同时,支持正规化方程 # coding: ...

  5. 3.12 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授

    多分类问题 我们手上包含有手写字符的数据集,该数据集来自斯坦福机器学习的课后作业,每个字符图片大小为 20×20 ,总的样本规模为 5000×400 , 我们的神经网络设计如下,包含 1 个隐含层,隐 ...

  6. 6.8 程序示例--二分 K-Means-机器学习笔记-斯坦福吴恩达教授

    程序示例–二分 K-Means 仍然是在 kmeans.py 中,我们又添加了二分 K-Means 算法: # coding: utf-8 # kmeans/kmeans.py# ... def bi ...

  7. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授

    机器学习系统设计–垃圾邮件分类 假定我们现有一封邮件,其内容如下: From: cheapsales@buystufffromme.com To: ang@cs.stanford.edu Subjec ...

  8. 1.8 欠拟合和过拟合-机器学习笔记-斯坦福吴恩达教授

    欠拟合和过拟合 问题 在上一节中,我们利用多项式回归获得更加准确的拟合曲线,实现了对训练数据更好的拟合.然而,我们也发现,过渡地对训练数据拟合也会丢失信息规律.首先,引出两个概念: 欠拟合(under ...

  9. 5.7 程序示例--基于 SMO 的 SVM 模型-机器学习笔记-斯坦福吴恩达教授

    程序示例–基于 SMO 的 SVM 模型 在这里,我们会实现一个基于 SMO 的 SVM 模型,在其中,提供了简化版 SMO 和 完整版 SMO 的实现. 简化版 SMO:不使用启发式方法选择 (α( ...

最新文章

  1. 二进制补码求值用c语言,C语言程序设计第2章数据类型.运算符与表达式.ppt
  2. JAVA面向对象为啥return实参,Java面向对象编程(OOP)
  3. 采用CreateThread()创建多线程程序
  4. Red Hat Enterprise MRG 2.0 Installation And Configuration Guide
  5. mysql 短时大连接的问题_mysql长连接和短连接的问题
  6. Python之collections模块详细实例
  7. 搜索 —— 启发式搜索 —— A* 算法
  8. 比特币javascript私钥_javascript – 使用bitcoinjs发送比特币交易
  9. 传智播客-刘意-java深入浅出精华版学习笔记Day03
  10. MAC 下shell工具推荐 zentermlite
  11. 移动端IOS自动化测试框架搭建-无坑
  12. linux 查看 文件夹代销,速达常见问题集
  13. 清华天才王垠和阿里 P10 面试官赵海平神仙打架后,我们来说说技术面试中的该与不该!...
  14. Java——通过Java代码从ftp服务器下载文件
  15. 计算机毕业设计Java智能超市导购系统(源码+系统+mysql数据库+lw文档)
  16. python学习笔记2-基本数据类型
  17. JavaFX 边框背景
  18. HTML——制作新闻网页
  19. 物联网入门教程【中】
  20. 虚拟机中的centos在nat模式下连不上外网

热门文章

  1. javascript中Math.random()产生随机数总结
  2. docker-部署elk-6.1.3
  3. 2016级算法期末上机-F.中等·AlvinZH's Fight with DDLs II
  4. Python 操作 MySQL 的正确姿势
  5. 'Push segues can only be used when the source controller is managed by an instance of UINavigationC
  6. android-数据库SQLite相关
  7. JavaScript eval()
  8. windows2003+PHP-5.3.8+IIS6.0的安装配置
  9. 解决 IPS forbidden 的问题
  10. VC++更改主窗口标题栏文字