Andrew Ng机器学习课程,第一周作业,python版本
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版本的更多相关文章
- Stanford coursera Andrew Ng 机器学习课程第二周总结(附Exercise 1)
Exercise 1:Linear Regression---实现一个线性回归 重要公式 1.h(θ)函数 2.J(θ)函数 思考一下,在matlab里面怎么表达?如下: 原理如下:(如果你懂了这道作 ...
- Andrew Ng机器学习课程笔记(五)之应用机器学习的建议
Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...
- Andrew Ng机器学习课程笔记(四)之神经网络
Andrew Ng机器学习课程笔记(四)之神经网络 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365730.html 前言 ...
- Andrew Ng机器学习课程笔记(三)之正则化
Andrew Ng机器学习课程笔记(三)之正则化 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365475.html 前言 ...
- Andrew Ng机器学习课程笔记(一)之线性回归
Andrew Ng机器学习课程笔记(一)之线性回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364598.html 前言 ...
- Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...
- Andrew Ng机器学习课程笔记--汇总
笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...
- Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计
Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7392408.h ...
- Andrew Ng机器学习课程笔记(二)之逻辑回归
Andrew Ng机器学习课程笔记(二)之逻辑回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364636.html 前言 ...
- Andrew Ng机器学习课程6
Andrew Ng机器学习课程6 说明 在前面尾随者台大机器学习基石课程和机器学习技法课程的设置,对机器学习所涉及到的大部分的知识有了一个较为全面的了解,可是对于没有动手敲代码并加以使用的情况,基本上 ...
随机推荐
- [CF986F]Oppa Funcan Style Remastered[exgcd+同余最短路]
题意 给你 \(n\) 和 \(k\) ,问能否用 \(k\) 的所有 \(>1\) 的因子凑出 \(n\) .多组数据,但保证不同的 \(k\) 不超过 50 个. \(n\leq 10^{1 ...
- Java 多线程(三)之线程状态及其验证
目录 线程状态 Thread.State 状态类型 定义 说明 状态转换 状态验证 「NEW」-> 「RUNNABLE」 -> 「TERMINATED」 「RUNNABLE」 -> ...
- CSS快速入门-属性和伪类
一.属性选择器 <div class="gradefather"> hello1 <div name="son">hello2 < ...
- 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...
- centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)
写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用. 当然,在真实的产线环境中需要分析的数据和难度远远高于demo所示,所以demo的作用也仅仅只能起到介绍工具的作用. ...
- leetcode刷题笔记172 阶乘后的零
题目描述: 给定一个整数 n,返回 n! 结果尾数中零的数量. 示例1: 输入: 输出: 解释: ! = , 尾数中没有零. 示例2: 输入: 输出: 解释: ! = , 尾数中有 个零. 说明: 你 ...
- Go语言实现数据结构(一)单链表
1.基本释义 2.结构体设计 3.基本方法设计 4.Main函数测试 1. 基本释义 线性表包含两种存储方法:顺序存储结构和链式存储结构,其中顺序表的缺点是不便插入与删除数据:接下来我们重点实现基于G ...
- [转载] JVM 内存结构
转载自:http://gityuan.com/2015/10/17/java-memory/
- 作业要求20160901 从edu.cnblogs.com中抄过来的,备忘
[已完成] 杨贵福 发布于 2016-09-01 21:51 开通技术博客,博客园 cnblogs 关注 杨贵福 younggift,回贴 "构建之法东北师大站,继续 2016秋" ...
- Linux第一章读书笔记
一.Linux历史 Unix强大的根本原因: 1.简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的 2.文件对待所有东西,通过一套相同的系统调用接口来进行对数据和设备的操作 3.由于用C语言编 ...