题外话

我很早就对人工智能是非常感兴趣的。记得我大学的毕业论文,就是使用遗传算法解决了一个经典的寻路问题。
我一直对人类经典的思想是非常敬畏和崇拜的,比如传统的计算机数据结构算法问题,例如) U J 9 ~ . G Z p经典S , W |的排序算法或者动态规划思想,把一些看T / n O ] } \ z I
复杂的问题竟然用短短十几行甚至一个 for 循环就能解决,这令我感受到了一种美学,也同时对人类的伟大思想而赞叹。
但传统的计算机算6 H 8 ^ v法其实还是通过,人来编写代码,人来通过完整的、解决问题的思路来解决问题。但如果机器能有自己的思想,如果它自己就能“学习”到解决问题的方法,岂不是非常 cool 的一件事。但以u g l j h N我目前的认知来看,现在的人工智能是更像是一种工具,一种“数学工具”,一种“统计学工具”,
它是从大量数据里总结出了一种g P E ~ { t J 2“规律”,用来解决实际问题。它l – ~ ,离电脑真正有思想还相距甚远,甚至以目前来看,二者可能并不是一回事。可能让机器具有思维,还需要I ^ t j G在其他学科上进行突破比如人的认知机制,脑科学进行突破。哈哈扯远了。

先来介绍自己的一些简单认识。

线性

  1. 什么是线性?

有一类几何对象,比如直线、平面、立方体,看上去都是有棱有角的,都是“直”的,在数学中称为线性
avatar

要处理L a l U f h它们相关的问题就非常简单。比如在高中就学过,两根直线可以用两个线性方程来表示,想求它们交点的话:

avator

联立出两者的方程组,求出该方I ! L \ . o程组的解就可以得到交点

  1. 为什么要研究线性

(1)我们V + X所处的世界、宇宙太复杂了,很多现象都无法理解,更谈不上用数学去描述;

(2)有一些符合特定条件的复杂问题,可以转化为简单的线性问题。线性问题就可以完全被理解,完全可以被数学所描述

回归

以我目前的认知来看,机器学习主要的任务有两类。
第一就是分类任务,比如

  • 判断一张图片里的是猫还是狗 (Y L c * : 9 1 L T二分类,因为我U O x 9 m D目标结论有两种,即猫或者狗)
  • 判断一个股票明天是涨还是跌
  • 判断一个图4 z $片中的数字是几(多分类。因为我定义目标结论有 10 种,0 到P Z * 9)

avator

也就是说,分类的结果是,人为预先定义的结果范围里的一种

而第二类任务就是回归任务,而它得出的结果是一个连续数字的值,而非类别。
例如

  • 预测房屋价格
  • 预测股票价格

什么是机器学习

这是我目前的浅显理解。机器学习目前我觉得是一种数学工具。通过喂给机器大量的学习资料,然后机器运行一个机器学习算法,训练出了一个模型。然后再向机器丢入问题,机器I { Z [ s ; & 8通过这个模型运算得出结果。

avator

线性回归的初步D – D 8 C D o感性理解

比如我收集到了有 x, y 的两组数据(比如年龄和身高),我想要知道这两组变量是否有线性关系。那么我\ F 8 ~ h h q先以一个变量为 x 轴,另一个变量为 y 轴画出这样一副散点图。

avator

那么我就可以找出这样的一条直线。这条直线的特征是:尽可能的离所有离散点最近,也可以表述成,每个离散点离直线距离的差值之和最小。
那么我就可以很好的根据我算出的这条直线,由已知的 x 值,来预测的未知的 y 值。
假如说 x, y 有线性关系的话,那么预测的效果还是很! T G ; x . k不错的。所以线性回归的主要任务是,找出这条直线。

单变量线性回归

我们先从单变量线性回归开始理解,即假设 x 只有一个特征(比如一氧化氮浓度),y 是房价。
根据前文提到的感性理I y s \ Q i K解,我们的目标就是找到最佳的直线方程:

avator

其实就是求参数 a 和 b 的过程。
那其实我们( Z N c ^ ( N v =的目标就是,使得根据每一个 x 点,使得

avator

最小。这个方程叫做损失函数。
你可能想问为什么是差的平方和最小?而不是差的绝对, v n B * g n值和最小或者差的 3 或者 4 次方最小?
差的平方和最小在数学中叫做最小二乘法,这里i E & 0 v Z给出一个链接
https:a N ` ( ) @//www.zhihu.c~ A u v $ Bom/question/24095027,这里不再细究。

所以一类机器学习算法的基本思路是: 通过确定问题的损失函数,然后最优化损失函数,来获得机器学习的模型。
怎么求得这个损失函数的最小值,即求 a 和 b 的值。则需要对 a 和 b 分别| 3 ` I E ] 4 Z进行求导。导数为 0 的点则为极值点。
现在我们对 a 进行求导(复合函数的链式求导法则):

avator

化简一下:

avator

根据同样的过程得v ] @ @ `出 a,化简过程省略:

avator

然后 python 实现一下:
简单来说我需要定义两个方法。

  • fit 拟合方法。或者我们常说的训练方法。通过将训练数据作为参数传入这个方法,得出模型的各个参数。
  • predictk f / ` D 预测方法。将 x 值带入这个方H p M法,得出预测值

avator

这里需要注意一下:这里采用了向量化代替了循环* t s去求 a。 我们看到,a 的分子分母实际上用循环也可以求,
但是实际上,a 的分子分母其实可以看成向量的点乘(即向量 a 里的每一个分量乘以向量 b 里的每一个分量)。
这样做有两个好处:

  • 代码更清晰
  • 向量r + F B e F o k是并行运算。(调用 GPU 流处理器进行并行运算)远快于 cpu 里进行循环

当把这个 a 和 b 的参数求出之后,我们就得出了一个模型(在这个例子中是 y) Z $ s v : N=ax+b),然后我们就可以进行预测了,把 x 带入这个方程中,就可以得出预测后的这个 y 值。

多元线性回归

理解了单变量线性回归之后,我们就开始需要解决,当特征为多个的时候b d c C u p D,怎么进行预测?
也就是多元线性回归。
我们可以理解一下,多元线性回归实际要求的是这样的@ y 3一个方程

avator

即每一个特征前面都有一个常数系数,p # 8 I = ] \ : F再加一个常数(截距)。
这里我们把这些系数整理成一个(列)向量

avator

然后我们为了方便起见,设置一个 x0,[ Q Z ! 0 t g s x0 恒等于 1,那\ Q d r么我们最终就化简成了下面两个向量的点乘

avator

然后把所有的 x 向量(样本)组合成一个矩阵,将 theta 整理成一个列向量。那K ` P 0 F么 y(向量)就是所有 x 向量的预测值。这里用到了, 0 c矩阵和向量的乘法(哈哈忘了的话得复习一下线性代数)。

avator

那么根i 8 v E ~ # T |据最小二乘法,我们的目标就是使k 3 V 4avator

最小。也就是要对整个矩| ` ,阵进行求导,具体推导过程省略,这@ r I u E里给出最终 theta 的解:

avator

也就是我们通过数学推导,直接求出了参数的数学解,然而一般而言,能够直接得0 l f C出参数数学解的机器学习方法还是比较少的,有可能还需要借助其他方法比如梯度下降才能够求出参数。

多元线性回归的实现

接下来根据这个数学解进行实现。

avator

简单线性回归实战(波士顿房价预测)

这个波士顿房价数据集是 sklearn(一个机器学习框架)自带的数据集

其实我看到这个数据集时也懵了,这个例子是带我们预测房价吗?预测明天深圳的房价?
我觉得是可以这样理解,通过收集一些特征(学习资料)如下图和波士顿某些地区的平均房价(目标结论),来推测出你或者房地产商卖房子时应该怎么定价比较划算。或者说通过这个数据集来N L 0 I a 4 m M A理解,哪个8 { & L @ M b因素对于房价影响更大。8 k $

数据介绍

该数据集包含马萨诸塞州波士顿郊区的房屋信息数据,来自 UCI 机@ 6 2 j e器学习知识库(数) D J N R y据集已下线),n [ T + # 1 @ t于 1978 年开始统计,包括 506 个样本,每个样本包括 12 个特征变D O q F { \ Z! I p `和该地区的平均房价。

字段含义

avator

可以B o 5 a Z 8 \ _看到,研究者希望找出影响房价的重要因素,比如环境因素(一氧化氮浓度),位置因素(到波士顿 5 个中心区域的加权距离)等等(不过我相信影响中国房C * 1 0 ! x B B j价因素要比这复杂的w l L @ $ E ; f 5多)

avator

经过求解得出了(或者说学习到了)各个参数的值,然后如果地产商想要定价d t b q @ : w的话,可以收集这些特征,然后使用模型的 predicV c & p {t 方法可以得出一个房价的参考值。

然后我J r @ j t们也可以看到,哪些因素对于房价是正相关的,哪些是负相关的。然后参数越大,越影响房价,这就是线性回归法对于结果的可解释性(有些机器学习方法是不支持的)。


欢迎关注凹凸实验室博客:aotu.io

或者关注凹凸实验室} c \公众号(AOTULabs),不定时推送文章:

欢迎关注凹凸实验室公众号

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注