我在python中实现了梯度下降的线性回归.为了了解它的表现如何,我将它与scikit-learn的LinearRegression()类进行了比较.出于某种原因,sklearn总是比MSE平均表现优于我的程序(我使用Boston Housing数据集进行测试).我知道我目前没有进行梯度检查以检查收敛,但我允许进行多次迭代并将学习率设置得足够低,以便它应该收敛.我的学习算法实现中有没有明显的错误?这是我的代码:

import numpy as np

from sklearn.linear_model import LinearRegression

def getWeights(x):

lenWeights = len(x[1,:]);

weights = np.random.rand(lenWeights)

bias = np.random.random();

return weights,bias

def train(x,y,weights,bias,maxIter):

converged = False;

iterations = 1;

m = len(x);

alpha = 0.001;

while not converged:

for i in range(len(x)):

# Dot product of weights and training sample

hypothesis = np.dot(x[i,:], weights) + bias;

# Calculate gradient

error = hypothesis - y[i];

grad = (alpha * 1/m) * ( error * x[i,:] );

# Update weights and bias

weights = weights - grad;

bias = bias - alpha * error;

iterations = iterations + 1;

if iterations > maxIter:

converged = True;

break

return weights, bias

def predict(x, weights, bias):

return np.dot(x,weights) + bias

if __name__ == '__main__':

data = np.loadtxt('housing.txt');

x = data[:,:-1];

y = data[:,-1];

for i in range(len(x[1,:])):

x[:,i] = ( (x[:,i] - np.min(x[:,i])) / (np.max(x[:,i]) - np.min(x[:,i])) );

initialWeights,initialBias = getWeights(x);

weights,bias = train(x,y,initialWeights,initialBias,55000);

pred = predict(x, weights,bias);

MSE = np.mean(abs(pred - y));

print "This Program MSE: " + str(MSE)

sklearnModel = LinearRegression();

sklearnModel = sklearnModel.fit(x,y);

sklearnModel = sklearnModel.predict(x);

skMSE = np.mean(abs(sklearnModel - y));

print "Sklearn MSE: " + str(skMSE)

解决方法:

首先,确保您正在计算正确的目标函数值.线性回归目标应该是.5 * np.mean((pred-y)** 2),而不是np.mean(abs(pred – y)).

您实际上正在运行随机梯度下降(SGD)算法(对各个示例运行梯度迭代),这应该与“梯度下降”区分开来.

要使SGD收敛,必须限制学习率.通常,学习速率设置为基本学习速率除以迭代次数,如alpha /(迭代1),使用代码中的变量.

您还在渐变中包含1 / m的倍数,这通常不用于SGD更新.

要测试您的SGD实现,而不是评估您使用的数据集上的错误,请将数据集拆分为训练集和测试集,并在使用这两种方法进行训练后评估此测试集上的错误.训练/测试集拆分将允许您将算法的性能估计为学习算法(估计预期误差)而不是作为优化算法(最小化经验误差).

标签:python,machine-learning,scikit-learn,linear-regression

来源: https://codeday.me/bug/20190612/1226365.html

python 线性回归 优化_python – 线性回归实现总是比sklearn更糟糕相关推荐

  1. python linux 优化_Python 代码性能优化技巧

    Python 性能优化除了改进算法,选用合适的数据结构之外,还有几种关键的技术,比如将关键 python 代码部分重写成 C 扩展模块,或者选用在性能上更为优化的解释器等,这些在本文中统称为优化工具. ...

  2. python线性回归实例_python 线性回归示例

    说明:此文的第一部分参考了这里 用python进行线性回归分析非常方便,有现成的库可以使用比如:numpy.linalog.lstsq例子.scipy.stats.linregress例子.panda ...

  3. python回归分析实验_python线性回归实验

    实验 算法 python 线性回归实验 [实验名称] Python 线性回归实验 [实验要求] 掌握 Python 线性回归模型应用过程,根据模型要求进行数据预处理,建模,评价与应用: [背景描述] ...

  4. python线性回归实例_python线性回归示例

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/haluoluo211/article/details/78761466 下面给出sklearn 库线性 ...

  5. python mse函数_Python 线性回归处理糖尿病数据 计算MSE等

    import pandas as pd import seaborn as sns from math import sqrt import matplotlib.pyplot as plt from ...

  6. python 框架 优化_python+unittest框架第六天unittest之优化测试报告

    今天的内容主要是,用第三方的HTMLRUNner 第三方的报告来优化之前第五天批量执行案例的测试报告.案例的部分看第五天的批量执行笔记~ HTMLRUNner他可以生成更美观的测试报告,基于前辈造的车 ...

  7. python 内存优化_Python 黑魔法之内存优化

    本文字数:2634 字 阅读本文大概需要:7 分钟 写在之前 围绕类的话题,说是说不完的,仅在特殊方法,除了我们在前面遇到过的 __init__(),__new__(),__str__() 等之外还有 ...

  8. python网页优化_python大佬养成计划----JavaScript对html的优化

    切换图片 当我们浏览网页时,时常出现图片轮播场景.实现用鼠标点击'下一页'时,更换图片的功能. #当前目录下建立img目录,存放图片,图片命名格式'img1.jpg' 图片切换 #snow_maps{ ...

  9. python数据库优化_Python学习(二十九)—— pymysql操作数据库优化

    转载自:http://www.cnblogs.com/liwenzhou/articles/8283687.html 我们之前使用pymysql操作数据库的操作都是写死在视图函数中的,并且很多都是重复 ...

最新文章

  1. Ethereal使用入门
  2. Freescale 车身控制模块(BCM) 解决方案
  3. Sharding-JDBC(二)2.0.3版本实践
  4. python flask 大文件 下载_flask - python上传大文件到服务器报错
  5. int?id与id??1 的意思
  6. Oracle HA 之 OGG部署流水
  7. 在 Linux shell 中自由操作时间变量
  8. return 0在c语言中是什么意思_单次T+0与蓝筹股试点T+0制度是什么意思,两者有何区别?...
  9. HCL_路由器_OSPF配置
  10. 傅里叶变换及拉普拉斯变换直观理解总结
  11. 一套基于java的开源车牌识别算法
  12. 数据结构习题及解析三
  13. php 商户转账到微信零钱
  14. 何恺明的ResNet引用量突破10万!
  15. (原创文章)羊毛党何去何从
  16. 体系 英文缩写是(D)
  17. 【渝粤题库】广东开放大学 文化服务营销管理 形成性考核 (2)
  18. springboot启动错误 Could not resolve placeholder
  19. 传人保助贷险部门大地震 去年信保承保净亏损29亿
  20. Linux中的timedatectl时间设置及ntp时间同步服务搭建

热门文章

  1. 自定义SAP Spartacus的产品搜索API参数 - Product Search
  2. Spring JDBC 框架一个最简单的Hello World级别的例子
  3. ABAP内表在ABAP 740后支持的filter操作
  4. 一种JavaScript里小数的精确计算方式
  5. 编程语言里函数方法类型检查的重要性
  6. 使用cf curl查看SAP云平台上的应用各项明细
  7. SAP CRM,C4C和Hybris的product Cockpit
  8. git stash命令的用法
  9. How is OData selected implemented
  10. variable not availabe in Chrome debugger