网上对于线性回归的讲解已经很多,这里不再对此概念进行重复,本博客是作者在听吴恩达ML课程时候偶然突发想法,做了两个小实验,第一个实验是采用最小二乘法对数据进行拟合, 第二个实验是采用梯度下降方法对数据集进行线性拟合,下面上代码:

最小二乘法:

#!/usr/bin/env python
#encoding:UTF-8
import numpy as np
import matplotlib.pyplot as plt N=10
X=np.linspace(-3, 3, N)
Y=(X+10.0)/2.0
Z=-5.0+X+3.0*Y P=np.ones((N, 1))
P=np.c_[P, X, Y] t=np.linalg.pinv(P)
w=np.dot(t, Z) print "拟合后的权重:"
print w
A=np.dot(P, w)-Z print "拟合后的LOSTFUNCTION值:"
print np.dot(A, A)/2

由LOSTFUNCTION值可知所得权重可以使得模型得到较少的损失。

由代码中给出的拟合权重和代码运行后得出的拟合权重可以很清楚的发现并不一致,由此很容易得出该数据集对于线性模型存在多重共线性

梯度下降法:

#!/usr/bin/env python
#encoding:UTF-8
import numpy as np
import matplotlib.pyplot as plt np.random.seed(0) N=10 X=np.linspace(-3, 3, N)
Y=(X+10)/2
Z=-5+X+3*Y P=np.ones((N, 1))
P=np.c_[P, X, Y] alafa=0.001 def fun():
W=np.random.random(3) for _ in xrange(1000000000):
A=(np.dot(P, W)-Z) W0=alafa*( np.sum(A) )
W1=alafa*( np.dot(A, X) )
W2=alafa*( np.dot(A, Y) ) if abs(W0)+abs(W1)+abs(W2)<0.000001:
break W[0]=W[0]-W0
W[1]=W[1]-W1
W[2]=W[2]-W2 return W list_global=[]
for _ in xrange(100):
list_global.append( fun() )
list_global.sort(key=lambda x:x[0])
for k in list_global:
print k

运行结果:

devil@devilmaycry:/tmp$ python x2.py
[ 0.13859798 1.51383611 1.97228226]
[ 0.15812746 1.51578866 1.9683764 ]
[ 0.15935113 1.51591164 1.96813162]
[ 0.16440946 1.51641705 1.96711998]
[ 0.20540823 1.52051731 1.9589202 ]
[ 0.25569366 1.52554514 1.94886317]
[ 0.25880876 1.52585729 1.9482401 ]
[ 0.27499425 1.52747539 1.94500304]
[ 0.27534702 1.52751115 1.94493244]
[ 0.27945902 1.52792177 1.94411009]
[ 0.28400393 1.52837623 1.94320111]
[ 0.28696386 1.52867268 1.94260909]
[ 0.30536768 1.53051274 1.93892835]
[ 0.31818944 1.53179514 1.93636398]
[ 0.32798936 1.53277487 1.93440402]
[ 0.33334942 1.53331098 1.933332 ]
[ 0.34418953 1.53439535 1.93116395]
[ 0.3463948 1.53461533 1.93072294]
[ 0.3567094 1.53564731 1.92865998]
[ 0.36449799 1.53642554 1.92710231]
[ 0.38157383 1.53813337 1.92368712]
[ 0.38437965 1.53841409 1.92312594]
[ 0.40486422 1.54046214 1.91902906]
[ 0.41061448 1.54103779 1.91787896]
[ 0.43215718 1.54319227 1.91357041]
[ 0.43668932 1.54364513 1.912664 ]
[ 0.45612785 1.54558868 1.90877632]
[ 0.45977762 1.54595351 1.90804638]
[ 0.464536 1.54643 1.90709465]
[ 0.4673361 1.54670955 1.90653467]
[ 0.47087532 1.54706372 1.9058268 ]
[ 0.47690637 1.54766664 1.90462061]
[ 0.47718128 1.54769405 1.90456563]
[ 0.48571646 1.54854761 1.90285859]
[ 0.49155064 1.5491312 1.90169175]
[ 0.50684386 1.55066075 1.89863308]
[ 0.53314394 1.55329031 1.8933731 ]
[ 0.53925928 1.55390247 1.89214999]
[ 0.55049834 1.55502603 1.8899022 ]
[ 0.55622356 1.55559837 1.88875717]
[ 0.55765135 1.55574137 1.8884716 ]
[ 0.57794078 1.55777008 1.88441373]
[ 0.57995539 1.55797184 1.88401078]
[ 0.59427067 1.55940304 1.88114775]
[ 0.64070329 1.56404638 1.87186122]
[ 0.66360817 1.56633707 1.86728023]
[ 0.66533542 1.56650939 1.86693481]
[ 0.67435485 1.56741169 1.8651309 ]
[ 0.67461209 1.56743719 1.86507947]
[ 0.67841117 1.56781728 1.86431964]
[ 0.70004027 1.56998004 1.85999383]
[ 0.70249948 1.57022613 1.85950197]
[ 0.70332716 1.57030915 1.85933642]
[ 0.71017421 1.57099365 1.85796702]
[ 0.71407859 1.57138402 1.85718615]
[ 0.7277948 1.57275571 1.85444291]
[ 0.72946533 1.57292232 1.85410883]
[ 0.73050737 1.57302649 1.85390043]
[ 0.73111226 1.57308748 1.85377941]
[ 0.73420373 1.5733964 1.85316114]
[ 0.74375506 1.57435197 1.85125084]
[ 0.76167277 1.57614361 1.8476673 ]
[ 0.76645953 1.5766221 1.84670997]
[ 0.77628556 1.57760457 1.84474477]
[ 0.78124114 1.5780999 1.84375367]
[ 0.79445023 1.57942128 1.84111182]
[ 0.82246882 1.58222329 1.83550809]
[ 0.83844516 1.58382098 1.83231282]
[ 0.8504276 1.58501882 1.82991636]
[ 0.85371404 1.58534781 1.82925904]
[ 0.86614329 1.58659024 1.82677323]
[ 0.86963538 1.58693955 1.82607481]
[ 0.87227961 1.58720441 1.82554593]
[ 0.87565432 1.58754174 1.824871 ]
[ 0.88307665 1.58828406 1.82338652]
[ 0.89447944 1.58942419 1.82110598]
[ 0.89722723 1.58969873 1.82055644]
[ 0.90304827 1.5902811 1.81939221]
[ 0.91298315 1.59127442 1.81740525]
[ 0.92325648 1.59230144 1.8153506 ]
[ 0.93695625 1.59367157 1.81261064]
[ 0.94954532 1.59493075 1.8100928 ]
[ 0.96887547 1.59686409 1.80622675]
[ 0.97346265 1.59732198 1.80530938]
[ 0.98253813 1.59822971 1.80349427]
[ 0.98361444 1.59833731 1.80327901]
[ 0.98569708 1.59854557 1.80286248]
[ 0.99156202 1.59913215 1.80168948]
[ 0.99512314 1.59948855 1.80097724]
[ 1.05384788 1.60536059 1.78923232]
[ 1.05416379 1.60539244 1.78916912]
[ 1.07563405 1.60753962 1.78487506]
[ 1.08513878 1.60848968 1.78297414]
[ 1.09067723 1.60904425 1.7818664 ]
[ 1.10849918 1.61082595 1.77830205]
[ 1.13617915 1.61359433 1.77276602]
[ 1.16159108 1.61613499 1.76768368]
[ 1.16994446 1.61697081 1.76601296]
[ 1.18300731 1.61827712 1.76340039]
[ 1.18811107 1.61878732 1.76237965]

由梯度下降法可知,对于存在多重共线性的数据集合进行线性拟合所得到的权重值并不一致,该权重值会随着初始权重值的不同而不同,该现象用一句比较学术的话来描述就是对初始状态敏感。

最小二乘法 及 梯度下降法 分别对存在多重共线性数据集 进行线性回归 (Python版)的更多相关文章

  1. 最小二乘法 及 梯度下降法 运行结果对比(Python版)

    上周在实验室里师姐说了这么一个问题,对于线性回归问题,最小二乘法和梯度下降方法所求得的权重值是一致的,对此我颇有不同观点.如果说这两个解决问题的方法的等价性的确可以根据数学公式来证明,但是很明显的这个 ...

  2. 梯度下降法的python代码实现(多元线性回归)

    梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...

  3. 线性回归(最小二乘法、批量梯度下降法、随机梯度下降法、局部加权线性回归) C++

    We turn next to the task of finding a weight vector w which minimizes the chosen function E(w). Beca ...

  4. 机器学习入门-BP神经网络模型及梯度下降法-2017年9月5日14:58:16

    BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. B ...

  5. (转)梯度下降法及其Python实现

    梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最优化问题最常用的方法,它是一种迭代方法,每一步主要的操作是求解目标函数的梯度向量,将当前 ...

  6. BP神经网络模型及梯度下降法

    BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. B ...

  7. A-02 梯度下降法

    目录 梯度下降法 一.梯度下降法详解 1.1 梯度 1.2 梯度下降法和梯度上升法 1.3 梯度下降 1.4 相关概念 1.4.1 步长 1.4.2 假设函数 1.4.3 目标函数 二.梯度下降法流程 ...

  8. 机器学习中梯度下降法原理及用其解决线性回归问题的C语言实现

    本文讲梯度下降(Gradient Descent)前先看看利用梯度下降法进行监督学习(例如分类.回归等)的一般步骤: 1, 定义损失函数(Loss Function) 2, 信息流forward pr ...

  9. [ch04-02] 用梯度下降法解决线性回归问题

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.2 梯度下降法 有了上一节的最小二乘法做基准,我们这 ...

随机推荐

  1. 30分钟了解Shiro与Springboot的多Realm基础配置

    写在前面的话: 我之前写过两篇与shiro安全框架有关的博文,居然能够广受欢迎实在令人意外.说明大家在互联网时代大伙对于安全和登录都非常重视,无论是大型项目还是中小型业务,普遍都至少需要登录与认证的逻 ...

  2. Codeforces 820B - Mister B and Angle in Polygon

    820B - Mister B and Angle in Polygon 思路: 由于正多边形以某个顶点分成的三角形后以这个点为顶点的角都相等,所以可以确定两个点为相邻点,只要再找一个点就够了. 证明 ...

  3. openshift harp.js heroku react-router 4

    https://segmentfault.com/a/1190000000355181 http://harpjs.com/ https://www.jianshu.com/p/7bc34e56fa3 ...

  4. Java JDK5新特性-可变参数

    2017-10-31 00:19:07 可变参数:定义方法的时候不知道该定义多少个参数 格式:修饰符 返回值类型 方法名(数据类型... 变量名){} 注意:这里的变量其实是一个数组          ...

  5. C# Random循环生成随机数重复问题解决方案

    C# Random循环生成随机数重复问题解决方案1.当我们通过Random生成随机数时,习惯的写法如下: int a=new Random().Next(0,100); 然后生成一个数据数没有任何问题 ...

  6. CSS实现和选择器

    CSS实现和选择器 本课内容: 一.实现CSS四种方式 1,每个html标签中都有一个style样式属性,该属性的值就是css代码.(针对一个标签)2,使用style标签的方式. 一般都定义在head ...

  7. jsp/servlet区别

    简介: JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态 ...

  8. C# Arc Gis实例教程——网络链接

    http://www.doc88.com/p-305888679879.html http://www.doc88.com/p-992232217007.html http://www.cnblogs ...

  9. 51 jquery 节点操作和 bootstrapt

    jquery 和 bootstrapt1.jquery each 函数 1.each 循环方式一: 可循环对象: var arr =["alex","deng" ...

  10. python-day8-字典的内置方法

    # info=['egon','male',18,180,75]### info_dic={'name':'egon','age':18,'sex':'male'} # 有对应关系 # 常用操作:优先 ...