直接上代码

import numpy as np
import matplotlib.pyplot as plt

生成模拟数据

np.random.seed(666)
x = 2 * np.random.random(size = 100)
y = x * 3 + 4 + np.random.normal(size=100)

多维(多个点)多元(多个特征)

X = x.reshape(-1,1)
plt.scatter(x,y)


损失函数

#损失函数
def J(theta,X_b,y):try:return np.sum((y - X_b.dot(theta) ** 2)) / len(X_b)except:return float('inf')

导数

def dJ(theta,X_b,y):res = np.empty(len(theta))res[0] = np.sum(X_b.dot(theta) - y)for i in range(1,len(theta)):res[i] = (X_b.dot(theta) - y).dot(X_b[:,i])return res * 2 / len(X_b)
theta_history = []
def gradient_descent(X_b,y,initial_theta,eta,n_iters = 1e4,epsilon = 1e-8):theta = initial_thetai_iter = 0while i_iter < n_iters:gradient = dJ(theta,X_b,y)last_theta = thetatheta = theta - eta * gradientif (np.abs(J(theta,X_b,y) - J(last_theta,X_b,y)) < epsilon):breaki_iter += 1return theta
X_b = np.hstack([np.ones((len(x),1)),x.reshape(-1,1)])
initial_theta = np.zeros(X_b.shape[1])
eta = 0.1theta = gradient_descent(X_b,y,initial_theta,eta)
print(theta)
[4.02369667 3.00517447]

使用我们封装的

import numpy as np
from Simple_linear_Regression.metrics import r2_score
class LinearRegression:def __init__(self):"""初始化Linear Regression 模型"""self.coef_ = Noneself.interception_ = Noneself._theta = Nonedef fit_normal(self,X_train,y_train):"""根据训练数据集X_train,y_train训练Linear Regression"""assert X_train.shape[0] == y_train.shape[0],\"the size of X_train must be equal to the size of y_train"X_b = np.hstack([np.ones((X_train.shape[0],1)),X_train])#X_b = np.hstack([np.ones((len(X_train)),1),X_train])self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)self.interception_ = self._theta[0]self.coef_ = self._theta[1:]return selfdef fit_gd(self,X_train,y_train,eta=0.01,n_iters = 1e4):"""根据训练数据集X_train,y_train,使用梯度下降法训练Linera Regression模型"""assert X_train.shape[0] == y_train.shape[0],\"the size of X_train must be equal to the size of y_train"def J(theta, X_b, y):try:return np.sum((y - X_b.dot(theta) ** 2)) / len(X_b)except:return float('inf')def dJ(theta, X_b, y):res = np.empty(len(theta))res[0] = np.sum(X_b.dot(theta) - y)for i in range(1, len(theta)):res[i] = (X_b.dot(theta) - y).dot(X_b[:, i])return res * 2 / len(X_b)def gradient_descent(X_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8):theta = initial_thetai_iter = 0while i_iter < n_iters:gradient = dJ(theta, X_b, y)last_theta = thetatheta = theta - eta * gradientif (np.abs(J(theta, X_b, y) - J(last_theta, X_b, y)) < epsilon):breaki_iter += 1return thetaX_b = np.hstack([np.ones((len(X_train), 1)), X_train])initial_theta = np.zeros(X_b.shape[1])self._theta = gradient_descent(X_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8)self.interception_ = self._theta[0]self.coef_ = self._theta[1:]return selfdef predict(self,X_predict):"""给定待测数据集X_predict,返回表示X_predict 的结果向量"""assert self.interception_ is not None and self.coef_ is not None,\"must fit before predict"assert X_predict.shape[1] == len(self.coef_),\"the feature number of X_predict must be equal to X_train"X_b = np.hstack([np.ones((X_predict.shape[0], 1)), X_predict])return X_b.dot(self._theta)def score(self,X_test,y_test):"""根据测试数据集X_test和y_test确定当前模型的准确度"""y_predict = self.predict(X_test)return r2_score(y_test,y_predict)def __repr__(self):return "LinearRegression()"
if __name__ == '__main__':np.random.seed(666)x = 2 * np.random.random(size=100)y = x * 3 + 4 + np.random.normal(size=100)X = x.reshape(-1, 1)lin_reg = LinearRegression()lin_reg.fit_gd(X,y)print(lin_reg.coef_)print(lin_reg.interception_)
[3.00517934]
4.023690891597359

Python机器学习:梯度下降法004实现线性回归中的梯度下降法相关推荐

  1. python机器学习手写算法系列——线性回归

    本系列另一篇文章<决策树> https://blog.csdn.net/juwikuang/article/details/89333344 本文源代码: https://github.c ...

  2. 单变量线性回归中的梯度下降法求解代价函数的最小值

    1. 什么是代价函数 在线性回归中我们有一个像这样的训练集,m代表了训练样本的数量,比如 m = 47.而我们的假设函数, 也就是用来进行预测的函数,是这样的线性函数形式, 则代价函数可以表示为: 我 ...

  3. Python机器学习:梯度下降法003线性回归中的梯度下降法

    接下来使用下列公式编程

  4. [云炬python3玩转机器学习]6-3线性回归中的梯度下降法

  5. Python机器学习笔记:深入理解Keras中序贯模型和函数模型

     先从sklearn说起吧,如果学习了sklearn的话,那么学习Keras相对来说比较容易.为什么这样说呢? 我们首先比较一下sklearn的机器学习大致使用流程和Keras的大致使用流程: skl ...

  6. python机器学习案例系列教程——CTR/CVR中的FM、FFM算法

    全栈工程师开发手册 (作者:栾鹏) python教程全解 FM问题来源 CTR/CVR预测时,用户的性别.职业.教育水平.品类偏好,商品的品类等,经过One-Hot编码转换后都会导致样本数据的稀疏性. ...

  7. 【python机器学习】普通最小二乘法多元线性回归

    普通最小二乘法线性回归 若数据集DDD由nnn个属性描述,则线性回归的假设函数为: hw,b(x)=∑i=1nwixi+b=wTx+bh_{\boldsymbol{w}, b}(\boldsymbol ...

  8. 梯度下降法求解多元线性回归 — NumPy

    梯度下降法求解多元线性回归问题 使用梯度下降法求解一元线性回归的方法也可以被推广到求解多元线性回归问题. 这是多元线性回归的模型: 其中的 X 和 W 都是 m+1 维的向量. 下图为它的损失函数: ...

  9. python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性函数.线性回归 参考:http://blog.csdn.net/luanpeng825485697/article/details ...

最新文章

  1. 使用netty模仿dubbo服务
  2. Redis低成本高可用方案设计
  3. 结构体数组与指针习题
  4. 号称能自动编程60年,“进化计算”究竟进化到哪一步了?
  5. 发布webservice之后调用不通
  6. Apache Tomcat 5.5 Servlet/JSP 容器
  7. linux 简单Shell程序设计,利用linux下的c语言编程来简单的实现一个shell功能实现!...
  8. Ubuntu 开机自动挂载硬盘
  9. 使用vue实现自定义搜索功能
  10. 2016全国地区最全的数据库mysql_2016全图省市区、县最新数据库(最全最新)oracle/sql server版...
  11. 微信公众号开发之微信买单
  12. threejs 热力图做成材质_冷轧钢与热轧钢有什么区别?
  13. 此工作簿已丢失了其VBA项目 Activex控件以及其他任何与可编程序性相关的功能...
  14. 云账房签约葡萄城,开启 “在线Excel+智能财税” 时代
  15. win7 计算机 局域网共享,win7局域网一键共享工具(教程)
  16. ICEM: 合并混合网格
  17. oracle 字段名中有空格 的查询
  18. CKEditor配置使用
  19. html水平分割线虚线代码,CSS分割线虚线代码
  20. 【CSAPP】计算机系统漫游

热门文章

  1. 【BZOJ3681】Arietta,主席树优化网络流
  2. php加密 java rsa_PHP的DES加密和RSA签名(兼容java)
  3. 曲线聚类_R语言确定聚类的最佳簇数:3种聚类优化方法
  4. 知道经纬度坐标怎么计算两点间距离_【我的时间拣屎】亚里士多德:地球是圆的,我计算了地球的圆周...
  5. python函数的参数可以接收哪些类型的数据_python强势来袭-0015-函数中的参数-送礼开始...
  6. 2017.9.1 最小生成树 失败总结
  7. 【英语学习】【Python】Programming in Python 3 的目录
  8. 【英语学习】【Daily English】U05 Places L03 I'd like to open an account
  9. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (11) - 乱序引擎/重命名器调度器
  10. 移动开发-语音识别-调用讯飞平台提供的API