Python实现的线性回归算法示例【附csv文件下载】


Posted in Python onDecember 29, 2018

本文实例讲述了Python实现的线性回归算法。分享给大家供大家参考,具体如下:

用python实现线性回归

Using Python to Implement Line Regression Algorithm

小菜鸟记录学习过程

代码:

#encoding:utf-8
"""
  Author:   njulpy
  Version:   1.0
  Data:   2018/04/09
  Project: Using Python to Implement LineRegression Algorithm
"""
import numpy as np
import pandas as pd
from numpy.linalg import inv
from numpy import dot
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn import linear_model
# 最小二乘法
def lms(x_train,y_train,x_test):
  theta_n = dot(dot(inv(dot(x_train.T, x_train)), x_train.T), y_train) # theta = (X'X)^(-1)X'Y
  #print(theta_n)
  y_pre = dot(x_test,theta_n)
  mse = np.average((y_test-y_pre)**2)
  #print(len(y_pre))
  #print(mse)
  return theta_n,y_pre,mse
#梯度下降算法
def train(x_train, y_train, num, alpha,m, n):
  beta = np.ones(n)
  for i in range(num):
    h = np.dot(x_train, beta)       # 计算预测值
    error = h - y_train.T         # 计算预测值与训练集的差值
    delt = 2*alpha * np.dot(error, x_train)/m # 计算参数的梯度变化值
    beta = beta - delt
    #print('error', error)
  return beta
if __name__ == "__main__":
  iris = pd.read_csv('iris.csv')
  iris['Bias'] = float(1)
  x = iris[['Sepal.Width', 'Petal.Length', 'Petal.Width', 'Bias']]
  y = iris['Sepal.Length']
  x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=5)
  t = np.arange(len(x_test))
  m, n = np.shape(x_train)
  # Leastsquare
  theta_n, y_pre, mse = lms(x_train, y_train, x_test)
  # plt.plot(t, y_test, label='Test')
  # plt.plot(t, y_pre, label='Predict')
  # plt.show()
  # GradientDescent
  beta = train(x_train, y_train, 1000, 0.001, m, n)
  y_predict = np.dot(x_test, beta.T)
  # plt.plot(t, y_predict)
  # plt.plot(t, y_test)
  # plt.show()
  # sklearn
  regr = linear_model.LinearRegression()
  regr.fit(x_train, y_train)
  y_p = regr.predict(x_test)
  print(regr.coef_,theta_n,beta)
  l1,=plt.plot(t, y_predict)
  l2,=plt.plot(t, y_p)
  l3,=plt.plot(t, y_pre)
  l4,=plt.plot(t, y_test)
  plt.legend(handles=[l1, l2,l3,l4 ], labels=['GradientDescent', 'sklearn','Leastsquare','True'], loc='best')
  plt.show()

输出结果

Python实现的线性回归算法示例【附csv文件下载】

sklearn: [ 0.65368836  0.70955523 -0.54193454  0.        ]
 LeastSquare: [ 0.65368836  0.70955523 -0.54193454  1.84603897]
 GradientDescent: [ 0.98359285  0.29325906  0.60084232  1.006859  ]

附:上述示例中的iris.csv文件点击此处本站下载

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
python获取当前文件路径以及父文件路径的方法
Jul 10 Python
python进程间通信Queue工作过程详解
Nov 01 Python
Python3 元组tuple入门基础
Feb 09 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
Python 串口通信的实现
Sep 29 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
python使用pymysql模块操作MySQL
Jun 16 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 #Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 #Python
Python实现高斯函数的三维显示方法
Dec 29 #Python
Python3 SSH远程连接服务器的方法示例
Dec 29 #Python
使用python绘制3维正态分布图的方法
Dec 29 #Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 #Python
对python指数、幂数拟合curve_fit详解
Dec 29 #Python
You might like
一个php作的文本留言本的例子(五)
2006/10/09 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
python TCP包注入方式
2020/05/05 Python
python怎么判断模块安装完成
2020/06/19 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
秋季运动会通讯稿
2014/01/24 职场文书
小学生常见病防治方案
2014/06/06 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
医院见习报告范文
2014/11/03 职场文书
英文产品推荐信
2015/03/27 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python