写在前面:机器学习主要分为监督学习、无监督学习和强化学习。本节内容主要针对监督学习下的线性回归进行简要说明及实现。机器学习开篇模型就是线性回归,简言之就是用一条直线较为准确的描述数据之间的关系,当出现新的数据的时候的时候,给出一个简单的预测值。
一、回归问题
回归问题是监督学习的一个重要问题,回归用于预测输入变量(自变量)和输出变量(因变量)之间的关系,特别的当输入变量的值发生变化时,输出变量的值随之发生改变。回归模型正是表示输入变量到输出变量之间映射的函数。
回归按照输入变量的个数,分为一元回归和多元回归;
回归按照输入变量和输出变量的关系类型,分为线性回归和非线性回归。
回归问题分为学习和预测两个过程,首先给定一个训练数据集:
T={(x1,y1),(x2,y2),...,(xN,yN)}
这里xi€Rn是输入,y€R是对应的输出,i=1,2,...,N.
二、线性回归
-
假定:模型假定服从线性关系,即 y = ax+b or y = a1x1+a2x2+...+aNxN
输出为离散的就是分类,输出为连续值就是回归,而我们初中学过的直线方程就是线性的。所以线性回归就是用线性的线来拟合一些回归的值。
- 损失函数:常用的是平方损失
平方损失即欧氏距离,用来衡量预测值和真实值之间的距离误差的函数,这就是我们模型的一个评价标准,值越小说明我们越能拟合数据,反之值越大就说明模型的拟合能力越差。
∑i=1(y(i)-y_hat(i))2
- 求解:最小二乘法
三、实战
- 数据准备
y = 0.568*X + 0.283 + ε,ε服从高斯分布
用上面的式子产生真实数据样例,ε添加给模型的噪声,噪声满足均值为0,方差为0.1的高斯分布,随机采样100次,作为模型的训练数据。
data = [] #构造样本数据 for i in range(100): x = np.random.uniform(-10.,10) eps = np.random.normal(0.,.1)#高斯噪声 y = 1.568*x + 0.283 + eps data.append([x,y]) data = np.array(data)
- 误差计算
计算每个点(x(i),y(i))处的预测值和真实值之间差的平方并累加,得到训练集上的均方误差损失值。
def mse(b,w,points): err = 0#训练集总的误差累积 for i in range(0,len(points)): x = points[i,0] y = points[i,1] err += (y - (w*x + b))**2 return err / float(len(points))#得到平均误差
来源:https://www.cnblogs.com/monkeyT/p/12019002.html