资源简介
用Python自己写的线性回归。其方法包括用最小二乘法直接求解和梯度下降法求解。理解代码能让你更好东其原理
代码片段和文件信息
“““直接法和梯度法求解线性回归“““
import numpy as np
import matplotlib.pyplot as plt
import time
from numpy.linalg import linalg as la
data = np.array([[ 0.35291809 0.16468428 0.35774628]
[-0.55106013 -0.10981663 0.25468008]
[-0.65439632 -0.71406955 0.1061582 ]
[-0.19790689 0.61536205 0.43122894]
[-0.00171825 0.66827656 0.44198075]
[-0.2739687 -1.16342739 0.01195186]
[ 0.11592071 -0.18320789 0.29397728]
[-0.02707248 -0.53269863 0.21784183]
[ 0.7321352 0.27868019 0.42643361]
[-0.76680149 -0.89838545 0.06411818]])
X = data[::2]
y = data[:-1]
“““直接求解“““
b = np.array([1])#偏移量 b shape=(101)
b=b.repeat(10)
“““将偏移量与2个特征值组合 shape = (103)“““
X = np.column_stack((bX))
xtx = X.transpose().dot(X)
xtx = la.inv(xtx)
theta = xtx.dot(X.transpose()).dot(y)
“““梯度求解“““
#model
def model(thetaX):
theta = np.array(theta)
return X.dot(theta)
#cost
def cost(mthetaXy):
#print(theta)
ele = y - model(thetaX)
item = ele**2
item_sum = np.sum(item)
return item_sum/2/m
#gradient
def gradient(mthetaXycols):
grad_theta = []
for j in range(cols):
grad = (y-model(thetaX)).dot(X[:j])
grad_sum = np.sum(grad)
grad_theta.append(-grad_sum/m)
return np.array(grad_theta)
#theta update
def theta_update(grad_thetathetasigma):
return theta - sigma * grad_theta
‘stop stratege‘
def stop_stratege(costcost_updatethreshold):
return cost-cost_update < threshold
# OLS algorithm
def OLS(Xythreshold):
start = time.clock()
# 样本个数
m=10
# 设置权重参数的初始值
theta = [000]
# 迭代步数
iters = 0
# 记录代价函数的值
cost_record=[]
# 学习率
sigma = 0.0001
cost_val = cost(mthetaXy)#代价函数
cost_record.append(cost_val)
while True:
grad = gradient(mthetaXy3)#求梯度
# 参数更新
theta = theta_update(gradthetasigma)
cost_update = cost(mthetaXy)
if stop_stratege(cost_valcost_updatethreshold):
break
iters=iters+1
cost_val = cost_update
cost_record.append(cost_val)
end = time.clock()
print(“OLS convergence duration: %f s“ % (end - start))
return cost_record iterstheta
if __name__==“__main__“:
cost_record iterstheta=OLS(Xy1e-10)
## x = range(iters)
x = np.arange(0iters+11)
plt.figure()
plt.plot(xcost_record)
plt.show()
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2710 2020-03-14 22:09 线性回归的最小二乘法与梯度下降法代码.py
相关资源
- python实现SGBM图像匹配算法
- python实现灰度直方图均衡化
- scrapy_qunar_one
- Python学习全系列教程永久可用
- python简明教程.chm
- 抽奖大转盘python的图形化界面
- 双边滤波器实验报告及代码python
- python +MYSQL+HTML实现21蛋糕网上商城
- Python-直播答题助手自动检测出题搜索
- OpenCV入门教程+OpenCV官方教程中文版
- Python 串口工具源码+.exe文件
- Python开发的全栈股票系统.zip
- Python操作Excel表格并将其中部分数据写
- python书籍 PDF
- 利用python绘制散点图
- python+labview+No1.vi
- 老男孩python项目实战
- python源码制作whl文件.rar
- python3.5可用的scipy
- PYTHON3 经典50案例.pptx
- 计算机科学导论-python.pdf
- python模拟鼠标点击屏幕
- windows鼠标自动点击py脚本
- 鱼c小甲鱼零基础学python全套课后题和
- Python 练习题100道
- Practical Programming 2nd Edition
- wxPython Application Development Cookbook
- python 3.6
- Python 3.5.2 中文文档 互联网唯一CHM版本
- python3.5.2.chm官方文档
评论
共有 条评论