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 说明 在前面尾随者台大机器学习基石课程和机器学习技法课程的设置,对机器学习所涉及到的大部分的知识有了一个较为全面的了解,可是对于没有动手敲代码并加以使用的情况,基本上 ...
随机推荐
- pandas 索引与列相互转化
1. 准备数据 import pandas as pd from io import StringIO csv_txt = '''"date","player1" ...
- TMS320VC5509使用nof flash AM29LV400
1. 硬件接口如下,其中nor flash的使用方法,写的时候和NAND FLASH是一样的,读的时候和DRAM是一样的 2. 看下擦除指令和编程指令 3. 代码如下 #include <csl ...
- 微信小程序实现各种特效实例
写在前面 最近在负责一个微信小程序的前端以及前后端接口的对接的项目,整体上所有页面的布局我都已经搭建完成,里面有一些常用的特效,总结一下,希望对大家和我都能有所帮助 实例1:滚动tab选项卡 先看一下 ...
- C#图片处理(转zhjzwl/archive)
基本原理: 获取每一个像素值,然后处理这些每一个像素值. 原始图片: ISINBAEVA ~~~~~~~~ 一. 底片效果 原理: GetPixel方法获得每一点像素的值, 然后再使用SetPix ...
- Asp.Net_Get跟Post
1. Get(即使用QueryString显式传递) 方式:在url后面跟参数. 特点:简单.方便. 缺点:字符串长度最长为255个字符:数据泄漏在url中. 适用数据 ...
- JQ_One()函数特效
先看一个例子,当点击 p 元素时,增加该元素的文本大小,代码如下:<script type="text/javascript" src="http://keleyi ...
- 前端开发工具icestar
前端开发工具icestar 最近忙里偷闲,把之前的mock工具进行了全面的重构,最大的改变就是换了个名称icestar,icestar意思就是"爱死他",首先他的预想并不只是替代m ...
- 绕WAF&安全狗新姿势
俗话说只要思路宽,绕狗绕的欢.前段时间我有尝试着用以下的方法绕狗,效果还不错.不过这方法呢也许这段时间可以绕过,过段时间可能就失效了,大家还是要多去尝试找到更多的方法. 举例-->整型注入 绕过 ...
- 揭秘memset与sizeof的结合使用方法
memset与sizeof为什么经常结合起来用呢? 一.memset介绍 memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数. 基本用法: void * ...
- PHP学习 安装环境和语法学习
要回归技术了,昨天下午专门去深圳大学城图书馆借书,甚是漂亮 禁不住搞了几张照片 在图书馆里面的书真多,图书馆环境真好,清华大学 北京大学研究生院的学生们有福了,最后一句深圳政府真尼玛有钱,下图是图书馆 ...