最小二乘法 python实现
#-*-coding:UTF-8-*-
# Created on 2015年10月20日
# @author: hanahimi
import numpy as np
import random
import matplotlib.pyplot as plt def randData():
# 生成曲线上各个点
x = np.arange(-1,1,0.02)
y = [2*a+3 for a in x] # 直线
# y = [((a*a-1)*(a*a-1)*(a*a-1)+0.5)*np.sin(a*2) for a in x] # 曲线
xa = []; ya = []
# 对曲线上每个点进行随机偏移
for i in range(len(x)):
d = np.float(random.randint(90,120))/100
ya.append(y[i]*d)
xa.append(x[i]*d)
return xa,ya def hypfunc(x,A):
# 输入:x 横坐标数值, A 多项式系数 [a0,a1,...,an-1]
# 返回 y = hypfunc(x)
return np.sum(A[i]*(x**i) for i in range(len(A))) # 使用 θ = (X.T*X + λI)^-1 * X.T * y求解直线参数
# 该函数会在X的前面添加偏移位X0 = 1
def LS_line(X,Y, lam = 0.01):
X = np.array(X)
X = np.vstack((np.ones((len(X),)),X)) # 往上面添加X0
X = np.mat(X).T # (m,n)
Y = np.mat(Y).T # (m,1)
M, N = X.shape
I = np.eye(N, N) # 单位矩阵 theta = ((X.T * X + lam*I)**-1)*X.T*Y # 核心公式
theta = np.array(np.reshape(theta,len(theta)))[0]
return theta # 返回一个一维数组 # 使用随机梯度下降法求解最小二参数:
# alpha 迭代步长(固定步长),epslion 收敛标准
def LS_sgd(X,Y,alpha=0.1, epslion = 0.003):
X = [[1,xi] for xi in X] # 补上偏移量x0
N = len(X[0]) # X的维度
M = len(X) # 样本个数
theta = np.zeros((N,)) # 参数初始值
last_theta = np.zeros(theta.shape) times = 10000
while times > 0:
times -= 1
for i in range(M):
last_theta[:] = theta[:]
for j in range(N):
theta[j] -= alpha * (np.dot(theta,X[i])-Y[i])*X[i][j]
if np.sum((theta - last_theta)**2) <= epslion: # 当前后参数的变化小于一定程度时可以终止迭代
break
return theta # 根据输入值:X向量,即拟合阶数,计算对应的范德蒙矩阵
def vandermonde_matrix(X, Y, order=1):
# 根据数据点构造X,Y的 范德蒙德矩阵
m = len(Y)
matX = np.array([[np.sum([X[i]**(k2+k1) for i in range(m)])
for k2 in range(order+1)] for k1 in range(order+1)])
matY = np.array([np.sum([(X[i]**k)*Y[i] for i in range(m)])
for k in range(order+1)])
theta = np.linalg.solve(matX, matY)
return theta if __name__=="__main__":
pass
X, Y = randData()
theta = vandermonde_matrix(X, Y, order=1)
theta = LS_sgd(X,Y) # 画出数据点与拟合曲线
plt.figure()
plt.plot(X,Y,linestyle='',marker='.')
yhyp = [hypfunc(X[i],theta) for i in range(len(X))]
plt.plot(X, yhyp,linestyle='-')
plt.show()
最小二乘法 python实现的更多相关文章
- 批处理最小二乘法 python
参考:系统辨识与自适应控制MATLAB仿真(修订版) 庞中华 崔红 仿真实例2.5 import numpy as np import matplotlib.pyplot as plt from mx ...
- python 最小二乘 leastsq 函数实现 法线式 解决与x轴垂直问题
当使用y=kx+b时,与x轴垂直的直线无法计算.因此使用法线式ysin(theta)+xcos(theta) = dist.貌似这么用有点复杂了,直接使用ax+by=1不知道能不能计算,未测试. # ...
- python 最小二乘 leastsq 函数实现
代码修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html 网上百度了一下,主要是两个例子,一个利用了多项式函数,一个就是这个.有些细节没看懂,主要 ...
- 线性回归linear regression(python脚本实现)
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- Andrew 机器学习课程笔记
Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...
- 【读书笔记与思考】Andrew 机器学习课程笔记
Andrew 机器学习课程笔记 完成 Andrew 的课程结束至今已有一段时间,课程介绍深入浅出,很好的解释了模型的基本原理以及应用.在我看来这是个很好的入门视频,他老人家现在又出了一门 deep l ...
- python数据分析入门——matplotlib的中文显示问题&最小二乘法
正在学习<用python做科学计算>,在练习最小二乘法时遇到matplotlib无法显示中文的问题.查资料,感觉动态的加上几条语句是最好,这里贴上全部的代码. # -*- coding: ...
- 机器学习:Python中如何使用最小二乘法
之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经 ...
- Python实现实现基于最小二乘法的线性回归
下面展示利用Python实现基于最小二乘法的线性回归模型,同时不需要引入其他科学计算以及机器学习的库. 利用Python代码表示如下: #首先引入数据集x,和y的值的大小利用Python的数据结构:列 ...
随机推荐
- 通过电脑(计算机)下载google play的应用的方法
手机上安装GOOGLE PLAY很麻烦,经常不成功.于是采用电脑下载APK的方法. 网上传说的下载chrome的插件,然后获取DEVICE ID的方法,经过试用,一直无法获得DEVICE ID. 经过 ...
- 如何整治那些敢偷用你Wi-Fi的人
我的邻居正在盗用我的WiFi,唔,对此我可以直接选择加密口令,或者…作为一名极客我也可以耍耍他.那么,我就从划分网络开始吧.我把网络划分成两部分,受信任部分和非受信任部分.受信任部分组成一个子网,而非 ...
- [开发笔记]-多线程异步操作如何访问HttpContext?
如何获取文件绝对路径? 在定时器回调或者Cache的移除通知中,有时确实需要访问文件,然而对于开发人员来说, 他们并不知道网站会被部署在哪个目录下,因此不可能写出绝对路径, 他们只知道相对于网站根目录 ...
- Great writers inspire
William Shakespeare Beowulf (Anglo-Saxon) Jonathan Swift Stephen Duck William Blake George Elliot Ka ...
- 升级或安装 GNOME Shell
1.安装经典Gnome桌面系统 install gnome-session-fallbackinstall gnome-appletsinstall indicator-applet indicato ...
- CSS引入方式的区别详解
在web前端开发中,CSS是一种用来表现HTML或XML等文件样式的语言.很多处于web前端初学阶段的朋友,很多人都不知道CSS引入方式存在三种方法,css引入方式分别为标签内联书写.页面头部书写.外 ...
- 解决使用IIS5.0配置的FTP服务器,客户端浏览器访问时无法获取目录列表的问题。
我在windows xp sp3下利用iis构架了FTP服务器,允许且只允许匿名用户登陆.但刚开始配置好后,不管是使用命令行模式还是使用浏览器都发现无法访问. 于是怀疑防火墙屏蔽端口所致,果不其然,在 ...
- PAT 08-2 求矩阵的局部最大值
这题挺简单的,但,每日一篇.说两点:第一,我的粗心导致我这题花了大把的时间去找错误,看到4个测试用例对了三个,我以为是那块的边界条件没考虑到,又或者是存在隐蔽的逻辑或语法错误,通过与别人程序的反复对比 ...
- (转)HTML5开发学习(3):本地存储之Web Sql Database
原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...
- (转)js的左右滑动触屏事件
原文:http://blog.sina.com.cn/s/blog_6a0a183f0100zsfk.html (2012-01-20 08:55:53) 转载▼ 标签: 移动设备 触屏事件 杂谈 分 ...