文章简介

使用python简单实现机器学习中单元线性回归算法。

算法目的

该算法核心目的是为了求出假设函数h中多个theta的值,使得代入数据集合中的每个x,求得的h(x)与每个数据集合中的y的差值的和最小。简单来说就是需要生成一个函数,它尽可能贴近实际数据中的每个值,方便我们预测。

核心算法

  1. 假设函数

    即需要求的函数,为了简单在此只设置一个x对应一个y,求theta0和theta1

  2. 代价函数

    目的是J最小,也就是每个y到达函数的距离之和最小。
  3. 批量梯度下降函数



    带假设函数和代价函数带入到下降函数中可得

算法实现

import numpy as np
import matplotlib.pyplot as plt def hypoFunction(x, theta):
h = np.dot(x, theta)
return h def costFunction(h, y):
"""
代价函数
h:hypothesis,
theta:特征向量系数
y:特征值对应的实际值
"""
m = len(y)
J = 1 / (2 * m) * np.sum(np.power(h - y, 2))
return J def gradientDecent(x, y, h, theta, alpha, number):
"""梯度下降函数
number:设置的梯度下降次数"""
# for i in range(number):
m = len(y)
n = len(theta)
J_history = np.zeros((number,1))
for i in range(number):
theta = theta - (alpha/m) * x.T.dot(h-y)
h = hypoFunction(x, theta)
J_history[i] = costFunction(h,y)
print(theta)
return h def paint(x,y,hypothesis):
plt.plot(x,y,"ro")
plt.plot(x,hypothesis)
plt.show() def main():
x = np.array([[1,1], [1,2], [1,3], [1,4], [1,5], [1,6]])
y = np.array([[1], [2], [3], [4], [5], [6]])
theta = np.array([[10],[0]])
alpha = 0.1
h = hypoFunction(x, theta)
J = costFunction(h, y)
h= gradientDecent(x, y, h, theta, alpha, 20000)
x = x[:,-1]
print(x)
paint(x,y,h)
pass if __name__ == "__main__":
main()

简单解释

  1. 因为设置了两个theta,为了方便运算以及满足矩阵乘法的要求,所以x多添加了一列1。
  2. theta初始值可以任意设置。
  3. alpha大小初始值不要过大,否则有可能导致梯度下降函数不收敛。如果初始值过小,则会导致需要计算很多次才能达到全局最优解。

机器学习:单元线性回归(python简单实现)的更多相关文章

  1. 【机器学习】线性回归python实现

    线性回归原理介绍 线性回归python实现 线性回归sklearn实现 这里使用python实现线性回归,没有使用sklearn等机器学习框架,目的是帮助理解算法的原理. 写了三个例子,分别是单变量的 ...

  2. 机器学习3- 一元线性回归+Python实现

    目录 1. 线性模型 2. 线性回归 2.1 一元线性回归 3. 一元线性回归的Python实现 3.1 使用 stikit-learn 3.1.1 导入必要模块 3.1.2 使用 Pandas 加载 ...

  3. 机器学习4- 多元线性回归+Python实现

    目录 1 多元线性回归 2 多元线性回归的Python实现 2.1 手动实现 2.1.1 导入必要模块 2.1.2 加载数据 2.1.3 计算系数 2.1.4 预测 2.2 使用 sklearn 1 ...

  4. 机器学习之线性回归(纯python实现)][转]

    本文转载自:https://juejin.im/post/5a924df16fb9a0634514d6e1 机器学习之线性回归(纯python实现) 线性回归是机器学习中最基本的一个算法,大部分算法都 ...

  5. 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

    http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) z ...

  6. 【机器学习】多项式回归python实现

    [机器学习]多项式回归原理介绍 [机器学习]多项式回归python实现 [机器学习]多项式回归sklearn实现 使用python实现多项式回归,没有使用sklearn等机器学习框架,目的是帮助理解算 ...

  7. 机器学习算法与Python实践之(四)支持向量机(SVM)实现

    机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 zouxy09@qq.com http://blog.csdn.net/ ...

  8. 机器学习算法与Python实践之(三)支持向量机(SVM)进阶

    机器学习算法与Python实践之(三)支持向量机(SVM)进阶 机器学习算法与Python实践之(三)支持向量机(SVM)进阶 zouxy09@qq.com http://blog.csdn.net/ ...

  9. 机器学习算法与Python实践之(二)支持向量机(SVM)初级

    机器学习算法与Python实践之(二)支持向量机(SVM)初级 机器学习算法与Python实践之(二)支持向量机(SVM)初级 zouxy09@qq.com http://blog.csdn.net/ ...

随机推荐

  1. SpringBoot:WebSocket使用Service层的方法

    方法一: 创建工具类 ApplicationContextRegister.java import org.springframework.beans.BeansException; import o ...

  2. Springboot:Springboot+Swagger2集成服务

    Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务 ...

  3. 前端笔记:Html页面常用元素

    Html页面由基本几个元素(标签)组成 html.head.body.foot(很少使用). html是整个页面的父级元素,内部包括head.body.foot子类标签. head是页头,及页面的头部 ...

  4. WPF教程二:理解WPF的布局系统和常用的Panel布局

    WPF的布局系统 了解元素的测量和排列方式是理解布局的第一步.在测量(measure)阶段容器遍历所有子元素,并询问子元素它们所期望的尺寸.在排列(arrange)阶段,容器在合适的位置放置子元素.理 ...

  5. FreeRTOS基本概念

    1.在FreeRTOS中,使用的数据类型虽然都是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重新定义. 2.链表由节点组成,节点与节点之间首尾相连,节点包含用于指向后一个节点 ...

  6. ZooKeeper 分布式锁 Curator 源码 01:可重入锁

    前言 一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁.也就是 Curator 这个 ...

  7. CTF-Streamgame1-writeup

    Streamgame1 题目信息: 附件: streamgame1.py from flag import flag assert flag.startswith("flag{") ...

  8. ubuntu18.04aliyun

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirr ...

  9. Echarts入门踩坑记录

    关于Echarts,官网上,是这样介绍的,"Echarts,一个使用JavaScript实现的开源可视化库",也就是说,在使用过程中,将其作为普通的JavaScript组件库使用即 ...

  10. mybatis-4-Mapper映射文件

    Mapper映射文件 映射文件的Mapper标签包含标签 1.CDUS增删改查 2.参数处理 (1)直接传入参数 单个参数 //传入当个参数 public Employee getEmployeeBy ...