目录

1)导入相关库和数据

2)代价函数

3)批量梯度下降

4)绘制线性模型

前阵子在网易云课堂学习了吴恩达老师的机器学习课程,今天结合网上资料,用Python实现了线性回归作业,共勉。建议大家使用Jupyter notebook来编写程序。

1)导入相关库和数据

导入相关库:numpy, pandas, matplotlib

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

拿到数据之后,建议大家先看看数据长什么样子,这样有助于我们进行之后的分析:

path = 'ex1data1.txt'
#指定了列名,header=None
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.head()data.describe()data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
plt.show()

2)代价函数

现在我们使用梯度下降来实现线性回归,以最小化成本函数。

首先,我们将创建一个以参数为特征的代价函数:

其中:

def computeCost(X, y, theta):inner = np.power(((X * theta.T) - y), 2)return np.sum(inner) / (2 * len(X))

我们需要在训练集中添加一列,以便我们可以使用向量化解决方案来计算大家函数:

#在第0列插入1,列名为“Ones”
data.insert(0, 'Ones', 1)# set X (training data) and y (target variable)
#cols = 3
cols = data.shape[1]
X = data.iloc[:,0:cols-1] #X选取所有行,去掉最后一列,第一个分号前为行。
y = data.iloc[:,cols-1:cols]#y选取所有行,最后一列

代价函数应该是numpy矩阵,所以我们需要转换X和y,然后才能使用它们。我们还需要初始化参数theta。

X = np.matrix(X.values)
y = np.matrix(y.values)
#我们这里是单变量线性回归,故只需要两个参数
theta = np.matrix(np.array([0,0]))

现在我们计算代价函数(theta初始值为0)

computeCost(X, y, theta)
32.072733877455676

3)批量梯度下降

我们前面只是计算了初试theta为0时代价函数的值,我们现在要使用梯度下降算法来求我们的参数

def gradientDescent(X, y, theta, alpha, iters):temp = np.matrix(np.zeros(theta.shape))    #theta.shape=(1,2)parameters = int(theta.ravel().shape[1])    #ravel()降维,parameters=2cost = np.zeros(iters)                      #iter维零向量for i in range(iters):                        #迭代iters次error = (X * theta.T) - yfor j in range(parameters):                #2个参数term = np.multiply(error, X[:,j])temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))theta = tempcost[i] = computeCost(X, y, theta)    #保存每次迭代后的cost值return theta, costalpha = 0.01
iters = 1000

现在我们运行梯度下降算法来求我们的参数theta并求出拟合后的代价函数值。

g, cost = gradientDescent(X, y, theta, alpha, iters)computeCost(X, y, g)
4.5159555030789118

4)绘制线性模型

现在我们来绘制线性模型以及数据,直观地看出它的拟合。

x = np.linspace(data.Population.min(), data.Population.max(), 100)
f = g[0, 0] + (g[0, 1] * x)fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

由于梯度方程式函数也在每个训练迭代中输出一个代价的向量,所以我们也可以绘制。 请注意,代价总是降低 - 这是凸优化问题的一个例子。

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iters), cost, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()

吴恩达机器学习作业(1):线性回归相关推荐

  1. 吴恩达机器学习作业 1线性回归

    一.单变量线性回归 数据可视化 import numpy as np import pandas as pd import matplotlib.pyplot as plt #print(np.eye ...

  2. 吴恩达机器学习作业ex2-python实现

    系列文章目录 吴恩达机器学习作业ex1-python实现 吴恩达机器学习作业ex2-python实现 吴恩达机器学习作业ex3-python实现 作业说明及数据集 链接:https://pan.bai ...

  3. 第一章-机器学习简介 深度之眼_吴恩达机器学习作业训练营

    目录 专栏简介: 一,机器学习简介 1.1 机器学习定义 1.1 机器学习的重要性 1.2 应用领域 二.监督学习 三.无监督学习 四.总结 专栏简介: 本栏主要内容为吴恩达机器学习公开课的学习笔记, ...

  4. k均值算法python实现(吴恩达机器学习作业)

    k均值算法python实现(吴恩达机器学习作业) 题目要求 数据集 读取mat文件 K-means 实现 结果 问题 题目要求 采用K均值算法对样本进行聚类. 编写K均值算法源代码,对ex7data2 ...

  5. 吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现)

    吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现) Introduction 在本实验中,将实现K-means聚类算法,并将其应用于图像压缩.在第二部分实验中,将使用主成分 ...

  6. 吴恩达机器学习作业Python实现(五):偏差和方差

    吴恩达机器学习系列作业目录 在本练习中,您将实现正则化的线性回归和多项式回归,并使用它来研究具有不同偏差-方差属性的模型 1 Regularized Linear Regression 正则线性回归 ...

  7. 吴恩达机器学习作业Python实现(八):异常检测和推荐系统

    吴恩达机器学习系列作业目录 1 Anomaly detection 这部分,您将实现一个异常检测算法来检测服务器计算机中的异常行为.他的特征是测量每个服务器的响应速度(mb/s)和延迟(ms).当你的 ...

  8. 吴恩达机器学习作业Python实现(七):K-means和PCA主成分分析

    吴恩达机器学习系列作业目录 1 K-means Clustering 在这个练习中,您将实现K-means算法并将其用于图像压缩.通过减少图像中出现的颜色的数量,只剩下那些在图像中最常见的颜色. 1. ...

  9. 吴恩达机器学习作业Python实现(六):SVM支持向量机

    吴恩达机器学习系列作业目录 1 Support Vector Machines 1.1 Example Dataset 1 %matplotlib inline import numpy as np ...

  10. 吴恩达机器学习作业Python实现(二):logistic回归

    吴恩达机器学习系列作业目录 1 Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果, ...

最新文章

  1. 原创:纯手工打造CSS像素画--笨笨熊系列图标
  2. checkbox全选衍生问题讨论
  3. android:layout_gravity=end,Android中 layout_gravity和gravity的区别
  4. js整理 03-18
  5. 【报告分享】2019双11洞察报告资料包(含6大权威报告下载链接)
  6. 框架对比_2020 年前端框架性能对比和评测
  7. throw和throws有什么区别
  8. 学习EXT第八天:EXT的布局(Layout)Part 1
  9. python中如何将列表按列打印_如果列表只包含0,我如何在python中打印?
  10. WIN7 IE10降级为IE9
  11. 安卓苹果双端五级分销影视APP源码美化版
  12. FLUKE高端时域反射OTDR OFP-100-Q上线
  13. uniapp拍照上传照片流程笔记
  14. 解决用友固定资产出现的“不能月末结账,可能月末未结账”的处理办法
  15. 中小型企业网络规划设计方案_深圳线尚网络:中小型企业网站建设方案包含哪些内容?...
  16. 佐切的第三天学习分享
  17. 客户案例 | 初窥元宇宙,Oasis让更多人找到第二人生
  18. Android的adb命令 查看sqlite命令
  19. 编程文档中常见的 Foo 和 Bar
  20. Unfortunately XXX has stopped. 系统应用安装后导致其他应用

热门文章

  1. matlab2008报错,simulink的.mdl的文件在matlab2008a中打开报错,高手指点下
  2. python request库_【Python爬虫】Request库入门
  3. Canvas之进度条的制作(矩形,圆环)
  4. php关闭按钮,C#_winform去掉右上角关闭按钮的方法,一种方法是可以在窗体的属性 - phpStudy...
  5. python pp模块_python常用模块
  6. 树莓派 蓝牙音响_你应该拥有一个树莓派
  7. php 简析对象,PHP白盒审计工具RIPS源码简析
  8. php鼠标悬停显示图片,鼠标滑过出现预览的大图提示效果
  9. UE4中的字符串转换
  10. Asterisk PBX 快速安装向导