Machine Learning(吴恩达) 学习笔记(一)


最近在听吴恩达老师的ML网课,作为一个即将入学的研一菜鸟,我觉得有必要将一些自认为比较重要的知识点记录下来,同时我还找到了对应的练习题以及对应的代码,每一次分享的学习笔记都会对关键代码进行一个review。
本人才疏学浅,不足之处请多指正!

1.什么是机器学习?

卡内基梅隆大学Tom Mitchell教授提出了如下定义:

A computer programm is said to learn from experience E with respect to some task T and some performance P, if its performance on T, as measured by P, improves with experince E.

读一下就会发现这段话十分押韵。

2.监督学习

监督学习就是通过对已有的带标志(label)的数据集(data set)进行学习,从而能够对无标记数据进行标志的预测。

监督学习
上图是一个监督学习的模型,假设我们要通过已知的房屋的大小(长、宽、高等)信息来预测房屋的价格,可以用学习算法通过训练集数据的训练找到这样的一个预测函数 h h h,达到预测的目的。

3.无监督学习

无监督学习就是通过对不带标志的数据集的学习,从而能够对数据进行分类,找到数据的结构

4.单变量线性回归

回归:根据之前的数据预测出一个准确的输出值

如果将预测函数 h h h设置为一个单变量的线性方程如:
h θ ( x ) = θ 0 + θ 1 x (1) h_{\theta}(x)=\theta_0+\theta_1x\tag{1} hθ(x)=θ0+θ1x(1)
这样就变成了单变量线性回归问题

4.1代价函数

选好了模型之后,对于单变量线性回归,我们需要找到一组最理想的参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1来让模型的预测结果达到最精确。为此我们用代价函数来评估当前参数下模型的性能。
代价函数可以有多种选择,其中一种为模型预测值与真实值的差值,差值越小,代表预测结果越好。代价函数 J J J表示如下:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 M ( h θ ( x ( i ) ) − y ( i ) ) 2 (2) J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^M(h_\theta(x^{(i)})-y^{(i)})^2\tag{2} J(θ0,θ1)=2m1i=1M(hθ(x(i))y(i))2(2)
于是我们可以得到如下的无约束优化问题:

m i n i m i z e θ 0 , θ 1 J ( θ 0 , θ 1 ) (3) \mathop{minimize}\limits_{\theta_0,\theta_1} J(\theta_0,\theta_1) \tag{3} θ0,θ1minimizeJ(θ0,θ1)(3)

4.2 梯度下降

梯度下降法是解决这类问题的常用算法,其主要思想就是从初始的参数开始,不断改变参数以使得函数值不断变小,其找到的最小值被称为局部最优值(local minimum),对于凸问题,其局部最优值即为全局最优值(global minimum)。针对问题(3)的梯度下降法的具体表示为:

Gradient Decent Algorithm:
r e p e a t   u n t i l l   c o n v e r g e n c e   { θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( f o r   j = 0   a n d   j = 1 ) } (4) repeat\ untill\ convergence\ \{\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)\quad (for\ j=0\ and\ j=1)\} \tag{4} repeat untill convergence {θj:=θjαθjJ(θ0,θ1)(for j=0 and j=1)}(4)
其中 α \alpha α是学习率(learning rate)。我们可以简单地将整个流程理解为不停地沿着与梯度相反的方向“走一步”,这个步长由 α \alpha α决定, α \alpha α越大步长越长。合理地选择 α \alpha α,经过多次迭代后就能够找到最优解

5.代码回顾

用机器学习算法去解决实际问题的过程大致可以分为六个步骤:
1、根据需要选取合适的模型
2、获取数据
3、选择评价标准并设计代价函数
4、选择一个合适的解法
5、训练模型
6、检验模型

假设我们要预测一家餐厅的年收益与餐厅附近人口数量的关系,并且选择了单变量线性回归模型(由公式(1)给出)。
接下来应该去获取各个餐厅的收益以及附近的人口数量

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = 'ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
plt.show()

在这里,与之相应的数据事先存放在了ex1data1.txt文件中并且被提取出来,进而得到了data这样的一个DataFrame类。接着我们将数据画出来得到如下结果
data可视化
接着我们选择最小二乘法最为评判标准(由公式(2)给出),定义代价函数。

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

接着再用gradient desent的解法迭代地使代价函数收敛,这部分代码太长,于是就以空函数体的形式给出。

def gradientDescent(X, y, theta, alpha, iters):

	return theta, cost

其中X代表人口数量,y代表年收益,theta是与X相对应的权重,alpha代表学习率,iters代表迭代的数量。最后两个参数可以根据用户需要来设置。该函数返回经过iters次迭代后的theta值与cost值。
这可以看做是选择解法与训练模型一起完成的过程,得到了使cost最小(非严格)的theta之后,带回公式(1)就能够得到训练后的模型。

最后,要想检验模型,必须要有在训练集之外的测试集数据,在这个练习中并没有这些数据,所以我们只能看到模型的拟合程度(cost),而不能看到泛化程度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值