Python机器学习/LinearRegression(线性回归模型)(附源码)
LinearRegression(线性回归)
1.线性回归简介
线性回归定义:
我个人的理解就是:线性回归算法就是一个使用线性函数作为模型框架($y = w*x + b$)、并通过优化算法对训练数据进行训练、最终得出最优(全局最优解或局部最优)参数的过程。
y:我们需要预测的数值;
w:模型的参数(即我们需要通过训练调整的的值)
x:已知的特征值
b:模型的偏移量
我们的目的是通过已知的x和y,通过训练找出合适的参数w和b来模拟x与y之间的关系,并最终通过x来预测y。
分类:
线性回归属于监督学习中的回归算法;
线性回归作为机器学习的入门级算法,很适合刚接触机器学习的新手。虽然线性回归本身比较简单,但是麻雀虽小,五脏俱全,其中涉及到的“线性模型”、“目标函数”、“梯度下降”、“迭代”、“评价准则”等思想与其他复杂的机器学习算法是相通的,深入理解线性回归后可以帮助你更加轻松的学习其他机器学习算法。
2.线性回归模型解析
2.1 线性回归模型示意图

2.2模型的组成部件
2.2.1 假设函数(Hypothesis function)
$h_w(x) = b + w_0x_0 + w_1x_1 + ··· +w_nx_n$
使用向量方式表示:
$X=\begin{bmatrix}
\ x_0
\\ x_1
\\\vdots
\\ x_n
\end{bmatrix},W=\begin{bmatrix}
\ w_0
\\ w_1
\\\vdots
\\ w_n
\end{bmatrix}$
则有:$h_w(x) = W^TX+ b$
2.2.2 损失函数:(Cost function)
这里使用平方差作为模型的代价函数
$J(w) = \frac{1}{2m}\sum_{i=1}^{m}(h_w(x^{(i)}) - y^{(i)})^2$
2.2.3 目标函数:(Goal function)
$minimize(J(w))$
2.2.4 优化算法:(optimization algorithm)
梯度下降法(Gradient descent)
关于梯度下降法这里不详细介绍;
3.使用python实现线性回归算法
#-*- coding: utf-8 -*-
import numpy as np
from matplotlib import pyplot as plt #生成训练使用数据;这里线性函数为 y = 1.5*x + 1.3
def data_generate():
#随机生成100个数据
x = np.random.randn(100)
theta = 0.5 #误差系数
#为数据添加干扰
y = 1.5*x + 1.3 + theta*np.random.randn(100)
return x,y class LinearRegression():
'''
线性回归类
参数:
alpha:迭代步长
n_iter:迭代次数
使用示例:
lr = LinearRegression() #实例化类
lr.fit(X_train,y_train) #训练模型
y_predict = lr.predict(X_test) #预测训练数据
lr.plotFigure()用于画出样本散点图与预测模型
'''
def __init__(self,alpha=0.02,n_iter=1000):
self._alpha = alpha #步长
self._n_iter = n_iter #最大迭代次数 #初始化模型参数
def initialPara(self):
#初始化w,b均为0
return 0,0 #训练模型
def fit(self,X_train,y_train):
#保存原始数据
self.X_source = X_train.copy()
self.y_source = y_train.copy() #获取训练样本个数
sample_num = X_train.shape[0]
# 初始化w,w0
self._w, self._b = self.initialPara() #创建列表存放每次每次迭代后的损失值
self.cost = [] #开始训练迭代
for _ in range(self._n_iter):
y_predict = self.predict(X_train)
y_bias = y_train - y_predict
self.cost.append(np.dot(y_bias,y_bias)/(2 * sample_num))
self._w += self._alpha * np.dot(X_train.T,y_bias)/sample_num
self._b += self._alpha * np.sum(y_bias)/sample_num def predict(self,X_test):
return self._w * X_test + self._b #画出样本散点图以及使用模型预测的线条
def plotFigure(self):
#样本散点图
plt.scatter(self.X_source,self.y_source,c='r',label="samples",linewidths=0.4) #模型预测图
x1_min = self.X_source.min()
x1_max = self.X_source.max()
X_predict = np.arange(x1_min,x1_max,step=0.01)
plt.legend(loc='upper left') plt.plot(X_predict,self._w*X_predict+self._b)
plt.show() if __name__ == '__main__':
#创建训练数据
x_data,y_data = data_generate() #使用线性回归类生成模型
lr = LinearRegression()
lr.fit(x_data,y_data) #打印出参数
print(lr._w,lr._b)
#画出损失值随迭代次数的变化图
plt.plot(lr.cost)
plt.show()
#画出样本散点图以及模型的预测图
lr.plotFigure() #预测x
x = np.array([3])
print("The input x is{0},then the predict of y is:{1}".format(x,lr.predict(x)))
线性回归代码
更多线性回归的代码参考github:线性回归
Python机器学习/LinearRegression(线性回归模型)(附源码)的更多相关文章
- 用Python生成组织机构代码,附源码
#!/usr/bin/python import random def haoma(): ww = [3,7,9,10,5,8,4,2]#suan fa yin zi cc = [] dd=0 for ...
- 13行代码实现:Python实时视频采集(附源码)
一.前言 本文是<人脸识别完整项目实战>系列博文第3部分:程序设计篇(Python版),第1节<Python实时视频采集程序设计>,本章内容系统介绍:基于Python+open ...
- (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)
干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码) 该博客来源自:https://mp.weixin.qq.com/s?__biz=MzA4NzE1NzYyMw==& ...
- Python的开源人脸识别库:离线识别率高达99.38%(附源码)
Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073 11.11 智慧上云 ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- 使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)
在学习python开发框架pylons/pyramid的过程中,里面有个非常棒的页面性能监控功能,这样在开发过程中,你能清楚的知道当前页面的性能以及其它参数. 这里介绍一下如何给Asp.net MVC ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码]
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码] Unity 2.x依赖注入(控制反转)IOC,对 ...
- 基于Docker的TensorFlow机器学习框架搭建和实例源码解读
概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
随机推荐
- 【mpu6050】学习笔记——基础知识点记录
如图: 假设为三维空间有一个向量R 满足关系: 即为加速度计的x轴,y轴,z轴. 对于MPU6050 其求出的数值为: 分母为灵敏度, ADCRx为读出值. 我关心的是Axr,Ayr,Azr即 ...
- python ddt模块
ddt模块包含了一个类的装饰器ddt和两个方法的装饰器: data:包含多个你想要传给测试用例的参数: file_data:会从json或yaml中加载数据: 通常data中包含的每一个值都会作为一个 ...
- PyQt5--StatusBar
# -*- coding:utf-8 -*- ''' Created on Sep 13, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...
- 8.UDP协议
传输层协议:TCP UDP TCP和UDP有什么区别? TCP是面向连接的 UDP是面向无连接.在互通之前,面向连接的协议会先建立连接,如TCP会三次握手.所谓的建立连接,是为了在客户端和服务端维护连 ...
- 有crontab中的脚本不执行,需要在脚本里面export各种环境变量
[oracle@sta ~]$ vi .bash_profile # .bash_profile # Get the aliases and functionsif [ -f ~/.bashrc ]; ...
- java操作数据库的事务支持
一.需求背景: 我们生活经常遇到一个情况:在购买商品的时候,已经支付的了,那么商品应该处于已购买订单里.而不是付款之后,已购买商品没有. 还有转账的时候,转出方和转入方都需要扣减相应的金额,而不是一方 ...
- 纯css实现弹窗左右垂直居中效果
1.HTML <div class="container"> <div class="dialog"> <div class=&q ...
- P2962 [USACO09NOV]灯Lights
贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望.她希望您能够帮帮她,把所 ...
- Kubernetes哪一点最打动你?或者,它发布过的哪一项特性让你认为最厉害?
kubernates 打动我的地方应该是他解决了docker 的一个痛点,各个docker之间的通信以及集成管理.因为这跟微服务很像,微服务之间也是需要通信和统一管理.知识总是相同的,在这里就体现出来 ...
- STM32驱动ILI9341控制器控制TFTLCD显示
STM32驱动ILI9341控制器控制TFTLCD显示 一.用STM32控制TFTLCD显示的编程方法,在编程驱动TFTLCD液晶显示器之前,我们先熟悉以下概念: 1.色彩深度,这是一个与TFTLCD ...