吴恩达机器学习课后作业ex1
题目大体意思就是输入的是某地的人口,输出的是某地方的收益。
题目及数据集下载:
https://wwa.lanzous.com/b054sprza 密码:ba3w
大体模型如下图:现在X前边加一列值为1的列,然后求解两个参数theta1和theta2,这样求解和y=kx+b,求k与b一样,只不过是通过下边这种方法求解,模型更有适应性,可以更适应其他相似的模型。

1.计算损失
1.1计算损失的公式:
\]
# 计算损失
def computeLoss(x, y, theta):
error=np.power(x.dot(theta) - y, 2)
# print(error)
return np.sum(error)/(2*len(X))
2.多变量梯度下降
2.1根据上边计算损失的公式求导得计算梯度的公式:
\]
\]
代码里边各个元素的含义:

error:红框
xj:蓝框
term:绿框
temp:紫框
# 多变量梯度下降
def gradient(x,y,theta,learningrate,iters):
temp = np.zeros(theta.shape) # [2,1]
param = theta.size # 要学习参数的个数,2
for i in range(iters):
error = x @ theta - y # 数学矩阵相乘,[97,2]@[2,1]=[97,1]
for j in range(param):
xj=x[:,j].reshape(np.shape(x)[0],1) # 取X的第j列,[97,1]
term = error*xj # 对应元素相乘,[97,1]*[97,1]=[97,1]
temp[j,0]=theta[j,0]-learningrate*np.sum(term)/len(x) # 计算所有的损失和
theta = temp
return theta
最后的总代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
lr=0.01 # 训练速率
Iters = 5000 # 训练次数
# 计算损失
def computeLoss(x, y, theta):
loss=np.power(x.dot(theta) - y, 2)
return np.sum(loss)/(2*len(X))
# 多变量梯度下降
def gradient(x,y,theta,learningrate,iters):
temp = np.zeros(theta.shape) # [2,1]
param = theta.size # 要学习参数的个数,2
for i in range(iters):
error = x @ theta - y # 数学矩阵相乘,[97,2]@[2,1]=[97,1]
for j in range(param):
xj=x[:,j].reshape(np.shape(x)[0],1) # 取X的第j列,[97,1]
term = error*xj # 对应元素相乘,[97,1]*[97,1]=[97,1]
temp[j,0]=theta[j,0]-learningrate*np.sum(term)/len(x) # 计算所有的损失和
theta = temp
return theta
if __name__ == '__main__':
# 1.1先拿到数据
path='ex1data1.txt'
data=pd.read_csv(path,header=None,names=['Population','Profit'])
# 1.2看一下数据大体什么样子
print(data.head())
print(data.describe())
# 1.3进行数据处理,在数据第0列前边加一列
data.insert(0,'Ones',1)
print(data.head())
# 1.4将X和Y分开,
cols=data.shape[1]
X=data.iloc[:,0:cols-1]
Y=data.iloc[:,cols-1:]
print(X.head())
print(Y.head())
# 1.5将数据转换成numpy格式
X=np.array(X)
Y=np.array(Y)
# 创建要训练的参数,并设置成两行一列向量
theta=np.array([1,1]).reshape([2,1])
# 1.6再看一下数据的各个形状
print(X.shape,Y.shape,theta.shape)
print(theta)
# 2.计算损失
print(computeLoss(X,Y,theta))
# 3.优化损失
theta=gradient(X,Y,theta,lr,Iters)
print(theta)
print(computeLoss(X,Y,theta))
# 求得最后的损失为4.476971407448775
# 求得theta1和theta2为[-3.8951929 , 1.19297458]
# 4.用plt绘制一下最后的图形
# 绘制直线
x = np.arange(5, 22.5)
y = theta[0]+x*theta[1]
plt.plot(x, y)
# 绘制散点
plt.scatter(X[:,1], Y)
plt.show()
吴恩达机器学习课后作业ex1的更多相关文章
- coursera吴恩达 机器学习编程作业原文件 及我的作业
保存在github上供广大网友下载:点击 8个zip,原文件,没有任何改动. 另外,不定期上传我自己关于这门课的学习过程笔记和心得,有兴趣的盆友可以点击这里查看.
- ML:吴恩达 机器学习 课程笔记(Week1~2)
吴恩达(Andrew Ng)机器学习课程:课程主页 由于博客编辑器有些不顺手,所有的课程笔记将全部以手写照片形式上传.有机会将在之后上传课程中各个ML算法实现的Octave版本. Linear Reg ...
- 吴恩达机器学习-终于完成ex4
几年前就想学习吴恩达的老课-机器学习,学了n次都没有坚持下来.其实很多东西都是这样,开始的时候信誓旦旦,信心满满,慢慢的就泄气了. 每天铺天盖地的深度学习,人工智能听得耳朵都要起茧子了.这算法,那框架 ...
- 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)
Google TensorFlow程序员点赞的文章! 前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业
一.准备工作 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确.如: 提交作业:提交时候需要使用自己的登录邮箱和提交令牌 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业(线性回归)
一.准备工作 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确.如: 提交作业:提交时候需要使用自己的登录邮箱和提交令牌 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第三周编程作业
一. 逻辑回归 1.背景:使用逻辑回归预测学生是否会被大学录取. 2.首先对数据进行可视化,代码如下: pos = find(y==); %找到通过学生的序号向量 neg = find(y==); % ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第四周编程作业(多分类与神经网络)
多分类问题——识别手写体数字0-9 一.逻辑回归解决多分类问题 1.图片像素为20*20,X的属性数目为400,输出层神经元个数为10,分别代表1-10(把0映射为10). 通过以下代码先形式化展示数 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第三周编程作业(逻辑回归)
一. 逻辑回归 1.背景:使用逻辑回归预测学生是否会被大学录取. 2.首先对数据进行可视化,代码如下: pos = find(y==); %找到通过学生的序号向量 neg = find(y==); % ...
- Coursera 吴恩达 机器学习 学习笔记
Week 1 机器学习笔记(一)基本概念与单变量线性回归 Week 2 机器学习笔记(二)多元线性回归 机器学习作业(一)线性回归——Matlab实现 机器学习作业(一)线性回归——Python( ...
随机推荐
- java线程示例
需要开启线程 的方法继承线程类,并在run 中写逻辑 public class Ant extends Thread{ Cake cake; public Ant(String name,Cake ...
- vscode 注释后 光标下移(注释后光标快速定位下一行) 仿照idea
VSCode 注释后光标快速定位下一行 1. 安装插件 Multi-command Multi-command 2.打开 Keybinding.json Keybinding.json 左下角齿轮图标 ...
- Dot Log 插件 输入 .log 回车 自动插入 console.log - vscode插件
Dot Log 插件 输入 .log 回车 自动插入 console.log
- linux下命令行打开文件夹窗口
方法一: 使用自带的命令:nautilus . 打开当前文件夹 nautilus . 打开指定路径文件夹 nautilus ddd/ccc/ 方法二:xdg-open xdg-open 命令相当于在 ...
- ubuntu16.04 关闭系统的屏幕阅读功能
在安装audacity的时候,不知道点到哪里,电脑突然就不停的"Chinese Letter",后面仔细听,鼠标点到那里就会读那里文字,键盘输入也是,联想到Android上也有类似 ...
- 基于恒玄BES2600的轻量级鸿蒙操作系统AIOT开发平台解析之SDK下载和编译
一 鸿蒙系统 华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人.设备.场景有机地联系在一起, 将消费者在全场景生活中接触的多种智能终端实现极速发现.极速连接.硬 ...
- GDB简洁指南
启动gdb:gdb program 设置运行参数:set args 10 20 30 启动程序: run(r),start 显示源代码:list(l) 显示当前栈帧和运行行:frame(f) 设置显示 ...
- 记录--7个Js async/await高级用法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 7个Js async/await高级用法 JavaScript的异步编程已经从回调(Callback)演进到Promise,再到如今广泛使 ...
- 用免费GPU部署自己的stable-diffusion项目(AI生成图片)
2021年时出现了 openAI 的 DALL,但是不开源.2022年一开年,DALL-E 2发布,依然不开源.同年7月,Google 公布其 Text-to-Image 模型 Imagen,并且几乎 ...
- halo【攻防世界】Misc
这是一个傻逼的解题记录 初学自己摸索的菜鸟,欢迎大佬指正(磕头) 题目: 下载打开: 一时间也没啥头绪,丢到CyberChef里面看看 只有base64解码出非乱码字符串 igq4;441R;1ikR ...