Liner Regression

1.梯度下降算法

Cost Function

      

对其求导:

      

theta更新函数:

代码如下:

from numpy import *
import numpy as np
import matplotlib.pyplot as plt def loadDataSet(filename):
data = []
label = []
fr = open(filename)
for line in fr.readlines():
curLine = line.strip().split(',')
a = [1.0]
a.append(float(curLine[0]))
data.append(a)
label.append([float(curLine[1])])
return data, label def computeCost(X, Y, theta):
theta = mat(theta)
m = shape(X)[0]
J = 1 / (2 * m) * sum(array((X * theta - Y))**2)
return J #矩阵形式的梯度下降算法
def gradientDescentMatrix(X, y, theta, alpha, iterations):
m = shape(y)[0]
theta_s = theta.copy()
for i in range(iterations):
theta = theta - alpha/m * (X.T *(X * theta - y))
return theta #梯度下降算法
def gradientDescent(X, y, theta, alpha, iterations):
m = len(y)
# theta_s = theta :此表达式中共享内存空间
theta_s = theta.copy()
for i in range(iterations):
theta[0] = theta[0] - (alpha/m) * np.sum(np.mat(X)*np.mat(theta_s) - np.mat(y))
p1 = np.mat(X)*np.mat(theta_s) - np.mat(y)
p2 = X[:, 1]*p1
# print(p2)
theta[1] = theta[1] - (alpha / m) * p2
# print(theta[1])
theta_s = theta.copy()
return theta def Plotting(x, y, theta):
f2 = plt.figure(2)
p1 = plt.scatter(x, y, marker='x', color='r', label='Training Data', s=30) x1 = np.linspace(0, 25, 30)
y1 = theta[0] + theta[1] * x1 plt.plot(x1, y1, label="Test Data", color='b') plt.legend(loc='upper right')
plt.show() dataSet, label = loadDataSet("ex1data1.txt")
theta = zeros((2, 1))
iterations = 1500
alpha = 0.01 #数组格式X, Y
X = array(dataSet)
Y = array(label) #矩阵格式 XMat, YMat
XMat = mat(X)
YMat = mat(Y) if 1: #梯度下降算法
theta = gradientDescent(X, Y, theta, alpha, iterations)
else: #矩阵形式的梯度下降算法
theta = gradientDescentMatrix(XMat, YMat, mat(theta), alpha, iterations)
print(theta) x = []
for k in dataSet:
x.append([k[1]])
Plotting(array(x), Y, theta)

  代码中对于梯度下降算法有两种形式,一种就是一般形式 gradientDescent(),另一种就是矩阵形式gradientDescentMatrix()

运行效果:

      

Andrew Ng机器学习课程,第一周作业,python版本的更多相关文章

  1. Stanford coursera Andrew Ng 机器学习课程第二周总结(附Exercise 1)

    Exercise 1:Linear Regression---实现一个线性回归 重要公式 1.h(θ)函数 2.J(θ)函数 思考一下,在matlab里面怎么表达?如下: 原理如下:(如果你懂了这道作 ...

  2. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...

  3. Andrew Ng机器学习课程笔记(四)之神经网络

    Andrew Ng机器学习课程笔记(四)之神经网络 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365730.html 前言 ...

  4. Andrew Ng机器学习课程笔记(三)之正则化

    Andrew Ng机器学习课程笔记(三)之正则化 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365475.html 前言 ...

  5. Andrew Ng机器学习课程笔记(一)之线性回归

    Andrew Ng机器学习课程笔记(一)之线性回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364598.html 前言 ...

  6. Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

    title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...

  7. Andrew Ng机器学习课程笔记--汇总

    笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...

  8. Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计

    Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7392408.h ...

  9. Andrew Ng机器学习课程笔记(二)之逻辑回归

    Andrew Ng机器学习课程笔记(二)之逻辑回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364636.html 前言 ...

  10. Andrew Ng机器学习课程6

    Andrew Ng机器学习课程6 说明 在前面尾随者台大机器学习基石课程和机器学习技法课程的设置,对机器学习所涉及到的大部分的知识有了一个较为全面的了解,可是对于没有动手敲代码并加以使用的情况,基本上 ...

随机推荐

  1. POJ2531&&1416&&2676&&1129

    搜索专题的最后一块了,也告别了这些老的东西了 接下来就是些全新的内容了啊! 这次的标签是简单搜索技巧和剪枝,也就是优化爆搜 当然,像Dancing links这样的玄学操作还是没有的 2531 题意: ...

  2. vs如何将工程配置,保存到属性表

    上次讲到新建一个opencv工程的配置过程,整个流程下来还是非常麻烦的.每次新建一个工程都要走这个流程的话就要疯了! 现在介绍一种将工程配置,保存到属性表的方法,那么下次新建工程时,只要添加这个属性表 ...

  3. tkinter 弹出窗口 传值回到 主窗口

    有些时候,我们需要使用弹出窗口,对程序的运行参数进行设置.有两种选择 一.标准窗口 如果只对一个参数进行设置(或者说从弹出窗口取回一个值),那么可以使用simpledialog,导入方法: from ...

  4. 一些IT中的工具介绍

    1. 史上最全github使用方法:github入门到精通 2. Git教程 3. GIT与GitHub使用简介 简单来说,git是一种版本控制系统.跟svn.cvs是同级的概念.github是一个网 ...

  5. 【LG3768】简单的数学题

    [LG3768]简单的数学题 题面 求 \[ (\sum_{i=1}^n\sum_{j=1}^nij\text{gcd}(i,j))\text{mod}p \] 其中\(n\leq 10^{10},5 ...

  6. JVM技术周报第1期

    JVM技术周报 · 第1期 JVM技术每周分享整理了JVM技术交流群每周讨论的内容,由群内成员整理归纳而成.如果你有兴趣入群讨论,请关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友, ...

  7. 6、Docker图形化管理(Portainer)

    一.Portainer简介 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控 ...

  8. 设计模式 笔记 桥接模式 Bridge

    //---------------------------15/04/15---------------------------- //Bridge 桥接模式----对象结构型模式 /* 1:意图:将 ...

  9. Python RASP 工程化:一次入侵的思考

    前言 今天讲的内容会很深,包括一些 Python的高级用法和一些自己创造的黑科技,前半部分内容你们可能听过,后半部分内容就真的是黑科技了... 深入的研究和思考,总会发现很多有意思的东西.每一次的研究 ...

  10. laraver框架学习------工厂模型填充测试数据

    在laravel中填充数据有几种方式.一种是Seeder,另一种是工厂模式进行的填充. 工厂模式可以实现大批量的填充数据,数据的量可以自定义.这也为后续的软件测试提供方便. 在laravel框架有da ...