网上对于线性回归的讲解已经很多,这里不再对此概念进行重复,本博客是作者在听吴恩达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. Linux 设置定时任务 清空日志

    Step 1:前提是linux服务器安装了crond 定时任务需要crond服务的支持 1.启动方法 service crond restart 2.该服务默认是开机启动的 取消定时任务 1.全部取消 ...

  2. S4 对象系统

    上一节中,我们介绍了 S3 系统.与大多数其他编程语言的面向对象系统不同,与那些类被定义为固定结构,且随着程序编译有确定的方法分派的系统相比,S3 系统显得非常不严谨.当我们定义一个 S3 类时,几乎 ...

  3. HDU 6114 Chess

    Chess 思路:求C(n,m),除法取余用乘法逆元算. 代码: #include<bits/stdc++.h> using namespace std; #define ll long ...

  4. Longest Repeating Character Replacement

    2018-06-29 22:56:24 问题描述: 问题求解: 本题是一条字符串问题,且是求Optimal,自然最初想到的是使用DP来进行求解,但是问题就是如果采用DP的话,前一个状态也太多了,和替换 ...

  5. 12月3日周日,关联:has_many(dependent::delete_all和destroy的区别) 注意看log; where等查询语句的用法。 layout传递参数❌

    错误❌: 1.belongs_to :job, dependent: :destroy //尝试删除一条resumen后,job没有同步删除?? 答:建立一对多的关系,如job和resume.应该在j ...

  6. Oracle性能诊断艺术-读书笔记(脚本execution_plans截图)

  7. Delegate比较全面的例子(需整理)

    将Delegate理解为接口,只有一个方法的接口,这样最容易理解.这个方法只有声明,没有实现,实现在别的类.(实际上应该把它看作函数指针,不过接口更容易理解些.) 在你的类中有一个Delegate就相 ...

  8. Oracle DISTINCT A 排序问题(转)

    请问Oracle 中有ID,A栏要怎么读出栏的不重复值,并且用ID来排序,請大家帮帮忙? 解决方案: ID | A 1 | x 2 | y 3 | x A栏的不重复值: x, y 但用ID來排序时 x ...

  9. Data Guard Wait Events

    This note describes the wait events that monitor the performance of the log transport modes that wer ...

  10. Py打包exe报错

      Py打包exe报错       下载地址 https://github.com/pyinstaller/pyinstaller       用管理员执行   pip install https:/ ...