机器学习的入门算法:线性回归
人通过问题或者经验得到规律,利用的是学习方法,然后就能预测未来的可能发展。
人工智能通过数据得到数据模型,利用的是算法,然后也可以预测未来的发展,其实和人的学习是类似的。
人工智能的数据模型是一种函数的表达式,机器学习通过训练不断的调整,最后得到最好的表达来呈现出最理想的数据模型
基础概念:
我们可以通过样本中的特征去预测样本的结果,多个特征形成的一个数据可以用向量来表示,多个数据可以用矩阵来表示,人工智能要通过数据得到模型,主要的载体就是向量或者矩阵。
机器学习:
有监督学习(包括分类和回归):又叫有标签学习,利用已知类别的样本,训练学习得到一个最优模型,使其达到所要求性能,再利用这个训练所得模型,将所有的输入映射为相应的输出,对输出进行简单的判断,从而实现分类的目的,即可以对未知数据进行分类。比如x1和x2通过某些方式得到y,那么y就是可以进行标记的结果。
无监督学习(包括聚类):又叫没有标签的学习,对于没有标记的样本,学习算法直接对输入数据集进行建模,例如聚类,即“物以类聚,人以群分” 。我们只需要把相似度高的东西放在一起,对于新来的样本,计算相似度后,按照相似程度进行归类就好。
无监督和有监督的区别就在于是否有外标签设置,无监督学习也是一种比较靠后的学习。
有监督中的分类和回归的区别:分类得到的标签是呈离散型的,回归得到的标签是呈连续型的。
离散和连续的区别:是否能把所有结果都列出
数据集分割:训练集、验证集、测试集
用同一个验证集做评估,有可能出现模型对验证集上表现的比较好的情况,要想真正评估
这个最佳模型在将来的样本上的表现,这也就是需要把第三个子集即测试集保留在一边的
原因(小风险)
企业中往往去掉了验证集:因为测试集就是没有被“污染”的数据,综合考虑训练
误差和测试误差,同样能起到模型评估的作用;这样划分数据集的优点是降低工程
实施的时间成本。
用线性回归把数据集表达出来,回归是一种算法,得到的模型是呈连续型的
回归算法是一种有监督算法
回归算法是一种比较常用的机器学习算法,用于构建一个模型来做特征向量到标签的映射。在算法
的学习过程中,试图寻找一个模型,最大程度拟合训练数据。
回归算法在使用时,接收一个n维度特征向量,输出一个连续的数据值
算法流程:
数据通过算法,然后经过调整才得到数据模型,这个调整的过程就是重新进行数据通过算法得到新模型的过程。其中要经过一次次的尝试,一次次的拟合。
经过以上的流程,确定数据模型完善合格之后,就拿来使用,使用的过程也会不断的学习更新数据模型。
函数呈线性:对x求导得到的是一个常数,那么就是一个线性问题,一维特征当中图像为一条直线,多维特征当中图像为一个平面。
迭代优化过程:通过算法的流程,不断学习训练得到最优的数据模型时,函数的图像是最理想的,以后学习还可以继续提高。
回归算法得到的图像一条直线的图像,表示这类数据的一种合理的表达式(数据模型),不一定真实,但很接近,所以能拿来进行预测。
单变量线性回归模型:
对于函数的图像的改变得到最优数据模型,肯定是要换成最好的函数来解才行的,y=kx+b这里通过换k和b就相当于换函数了。
回归是统计学的一个重要概念,其本意是根据之前的数据预测一个准确的输出值。
最小二乘法:目的是让直线到每个样本点的距离都最近,是一种数学优化技术。
一、计算所有样本误差的平均(代价函数)
二、使用最优化方法寻找数据的最佳函数匹配(抽象的)
最小二乘法是抽象的,具体的最优化方法有很多,比如正规方程法、梯度下降法、牛顿法、拟牛顿法等等
代价函数定义: 估计误差的平方和再去求均值,越大,越不合理。越小,越合理。
作用:用于数据模型和数据的性能比较
估计误差:样本点到直线的距离
代价函数的理解:J(θ)中θ为权重值,所有样本点都在图像上的时候代价值为0,这里的θ权重和数据模型的函数要一样。无论原函数怎么变化,都对应着代价函数的一个点,所有原函数凑成代价函数的图像就是一个抛物线图像。所以要找到代价函数最小值那个对应点就能得到最优的原函数,最小值求导为0。
梯度下降定义(属于算法的一种):
梯度下降是一个用来求代价函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1) 的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合(θ0,θ1),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。
梯度下降原理:
θj := θj - aΔθj(这里的 := 是赋值的意思)
α是学习率(learning rate),大于0的一个很小经验值,它决定沿着能让代价函数下降的程度有多大。
每一次都同时让所有的参数减去学习速率乘以代价函数的导数,每次调整的跨度取决于a学习率,当某次调整刚好使得a学习率乘以到了最小值,然后得到0,那么θj的赋值就是他本身,此时就得到最优解。
学习率调参:
如果学习率比较大,就容易在某次调整的时候和最优解擦肩而过,甚至一直都无法收敛产生偏差,所以小。
如果学习率太小,梯度下降就会变慢
学习率不好调动的时候就可以进行学习率调参了
参数调整模型的精度就越高,调整不好甚至会出现模型没有精度
参数更新方程(调整完之后就要进行的操作):
当参数不止一个的时候,可以用来当作多维度代入向量,此时多个参数求导数就要用到偏导(保持其中一个参数改变,其他参数不变)。计算偏导就要用到
代价函数Python语言实现代码:
J=(1.0/(2*m))*np.sum(np.square(X.dot(theta)-y))
J = (1.0/(2*m))*(X.dot(theta)-y).T.dot(X.dot(theta)-y)
底层算法:
线性回归的真实运算过程(像执行for循环一样直到出现最合理的模型):
1、随机取权重来设定一个数据模型
2、计算代价函数cost mse 均方差
3、计算梯度下降过程(在代价函数执行后,发现有损失值)
(1)计算θ的导数
(2)更新θ的值
以上涉及的最优化方法的各种调节,都是线性回归模型中算法的特点
数据越多不一定能让数据模型越好,但是数据越多差异又越大,才能通过调整得到更好的数据模型