读书笔记之机器学习

机器学习

何为机器学习

  人能通过以往的学习经验知道,下足了功夫、弄清楚概念、做足了功课、自然就会取得好成绩,这是因为我们人能够做出有效的预测,是因为我们已经积累的许多经验,而通过经验的利用,就能通过对新情况做出有效的决策。同样的机器学习就是利用计算机来实现对经验的利用,对新的情况做出有效的决策。

  机器学习致力于研究如何人通过计算的手段;利用经验来改善系统自身的性能。在计算机系统中,”经验“通常以”数据“形式存在,因此机器学习所研究的主要内容,是在关于在计算机上从数据上从数据中产生”模型“(model)的算法,即为”学习算法“(learning algorithm),有了学习算法,我们把经验数据提供给TA,TA就能基于这些数据产生模型;在面对新的情况时,模型就会给我们提供相应的判断。

  进行机器学习,需要先有”经验“,即数据,假设我们采集好了一堆关于树叶的数据,如形状,大小,厚度,颜色等等,这组数据的集合称为“数据集”(data set),其中每条记录是关于一个事件或是对象(一片树叶)的描述,称为一个”示例”(instance)或“样本”(sample),反映事件或对象在某方面的表现或性质的事项,如”颜色”,“材质”,“大小”称为“属性”(attribute)或“特征”(feature);属性上的取取值称为“属性空间”(attribute space)、样本空间(sample value)或输入空间。

  例如我们把”颜色”,“材质”,“大小”量化,作为三个坐标轴,则它们张成一个描述树叶的三维空间,每一片树叶都可以在这个空间找到自己对应的坐标轴,因空间中的每一个点对应一个坐标向量,因此我们也把一个示例称为一个“特征向量”(feature vector)

实现机器学习主要流程

数据采集和标记

  在数据采集阶段,需要收集尽量多的特征的,特征越多,数据越多,训练出来的模型才会越准确。

  如在房价评估系统中,我们需要最真实的交易价格,因此我们采集了房子的实际成交价格,这一过程称为数据标记,标记可以是人工标记,也可以是自动标记,如通过分析数据,找出房产评估中心给的房子评估价格和真实成交价格匹配关系,直接算出来。数据标记对有监督算法是必须的。

模型训练和测试

  把数据集分成训练集测试集(一般按照8:2或7:3来划分),然后用训练集来训练模型,训练出参数后再使用测试集来测试准确度。目的是为了测试模型的准确性,用新的、‘没见过’的数据测试。
   [理论上更为合理是划分成3个,多一个交叉验证集]

模型选择

  房价评估系统是属于有监督学习的回归学习类型,我们可选择最简单的线性方程来模拟,选择哪个模型,问题领域,数据量大小,训练时长,模型的准确度等多方面有关。

模型性能评估和优化

  模型出来后需要对机器学习的算法模型进行评估。性能评估包括很多方面

训练时长 是指花费多少时间来训练这个模型。

  训练数据量,一般对于复杂特征的系统,训练数据集越大越好。然后还需判断模型的准确性,即对一个新的数据能否准确的预测【泛化能力】.最后需要判断模型能否满足应用场景的性能要求,如不能满足则需要优化,然后继续训练和评估,或更换为其他模型。

模型使用

  训练出来的模型可以把参数保存下来,下次使用时直接加载即可。一般来讲,模型训练需要的计算量是很大的,也需要较长的时间来训练,这是因为一个好的的模型参数,需要对大型数据集进行训练后才能得到。而真正使用模型时,其计算量是比较少的,一般是直接把新样本作为输入,然后调用模型即可得出预测结果。

过拟合和欠拟合

  过拟合 是指模型能够很好的拟合训练样本,但对新数据的预测准确性很差。 欠拟合 是指模型不能很好的拟合训练样本,且对新数据的预测准确性也不好。

import numpy as np

n_dots = 20
x = np.linspace(0, 1, n_dots)   # [0,1]之间创建20个点
y = np.sqrt(x) + 0.2 * np.random.rand(n_dots) - 0.1

训练样本是

y=x+r y = x + r

其中r是[-0.1,0.1]之间的一个随机数。

  然后分别用一阶多项式、三阶多项式和十阶多项式3个模型来拟合这个数据集,得到的结果如图000所示

Tip:图中的点是我们生成的20个训练样本;虚线中实际的模型

y=x y = x

实线是用训练样本拟合出来的模型。
这里写图片描述

  在图中左边是欠拟合(underfitting),也称为高偏差(high bias),因为我们尝试用一条线来拟合样本数据。右边是过拟合(overfitting),也称高方差(high variance),用来十阶多项式来拟合数据,虽然模型对现有的数据集拟合得很好,但对新数据预测误差却很大。只有中间的模型较好的拟合了数据集,可以看出虚线和实现基本拟合。

通过例子是为了读者理解过拟合(高方差)和欠拟合(高偏差)。

完整实现代码:

import matplotlib.pyplot as plt
import numpy as np

n_dots = 20
# [0, 1] 之间创建 20 个点
x = np.linspace(0, 1, n_dots)        
y = np.sqrt(x) + 0.2*np.random.rand(n_dots) - 0.1;

def plot_polynomial_fit(x, y, order):
    p = np.poly1d(np.polyfit(x, y, order))

    # 画出拟合出来的多项式所表达的曲线以及原始的点
    t = np.linspace(0, 1, 200)
    plt.plot(x, y, 'ro', t, p(t), '-', t, np.sqrt(t), 'r--')
    return p

plt.figure(figsize=(18, 4), dpi=200)

titles = ['Under Fitting', 'Fitting', 'Over Fitting']
models = [None, None, None]

for index, order in enumerate([1, 3, 10]):
    plt.subplot(1, 3, index + 1)
    models[index] = plot_polynomial_fit(x, y, order)
    plt.title(titles[index], fontsize=20)

plt.show()

文中代码大量采用了
《机器学习》 -周志华
《scikit-learn机器学习:常用算法原理编程实战及》
代码和例子,请有条件的同学可自行购书支持哦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值