线性回归简介
线性回归问题是机器学习中最基本的问题,它常用来预测一些和特征具有线性关系的值,我们在之前的文章中也提到过,可见这篇文章
线性回归公式
(1)基本公式
在这个公式中,y是预测值,a是参数,x是特征值,模型的学习目标就是拟合合适的a值,来预测y
(2)公式向量化
y = a·x
这里的a和x都是一组包含多个值的向量,为什么要这样做呢?因为在代码中,我们常常把数据组合成向量进行训练
模型评估
我们当然要判断模型的性能,这时我们需要一个指标,在回归任务中,最常见的指标是MSE(均方误差)
其中m是数据的个数,容易得到,MSE越小时模型性能更好,这代表着预测值和真实值的误差越小
机器学习代码
环境安装
sklearn,一个经典的机器学习库,在python命令行或conda虚拟环境命令行中运行以下代码(不知道怎么安装请自行搜索,这里不具体讲述)
pip install scikit-learn
numpy,一个常用的数据处理库
pip install numpy
matplotlib,一个好用的可视化库
pip install matplotlib
生成数据
我们先随机产生一些数据,并把它们绘制出来
import matplotlib.pyplot as plt import numpy as np np.random.seed(42) # 设置随机数种子,以便结果复现 x = np.random.rand(100, 1) # 产生100个0-1的数据x y = 2*x+np.random.rand(100, 1) # 与x有线性关系并加上误差的y plt.scatter(x, y) plt.show()
有必要简单解释一下np.random.rand函数,rand的参数个数代表维度,参数数字代表每个维度的大小,在这个例子中rand(100, 1)创建了一个二维数组,里面有100个一维数据,数据类型大概为[[x1], [x2], [x3], [x4]......],这样是方便我们之后的训练(机器学习库对样本格式有要求,不符合会报错),对于这个维度,我的理解是这样的,最外围代表训练数据这个整体,里面的每一个框代表一轮训练数据,框里的数字个数则代表数据特征个数,还有不懂的可以私信问我
效果如下
机器学习线性模型拟合
接下来我们使用机器学习模型来拟合
import matplotlib.pyplot as plt import numpy as np from sklearn.linear_model import LinearRegression np.random.seed(42) x = np.random.rand(100, 1) y = 2*x+np.random.rand(100, 1) model = LinearRegression() model.fit(x, y) pre_y = model.predict(x) plt.scatter(x, y) plt.plot(x, pre_y, "r-") plt.show()
运行结果如下
这个红色的线就是机器学习模型拟合的线,可以看到效果还是不错的
重点代码
model = LinearRegression() model.fit(x, y) pre_y = model.predict(x)
这里先定义模型为线性回归模型
然后fit()函数就是用x,y数据训练模型
predict()函数就是用训练好的模型进行预测