前言
前一篇
文章我简单介绍了线性回归的原理以及推导过程,下面我将使用一个简单的例子来带大家一起使用sklearn库实战线性回归,并把最终结果进行可视化。
1、数据获取
在这里简单的构建一些二维数据:
import numpy as np
lists = []
for i in range(100): #随机构建一百个数据点
x = float(np.random.random([1])*2)
y = 0.3*x+0.5+float((np.random.random(1)-0.5)/10) #最后是为了加入随机波动
lists.append([x,y])
lists = np.array(lists) #转换为np格式
X = lists[:,:1] #取第一个特征为自变量
y = lists[:,1:] #取第二个特征为因变量
我们随机构建了一百条的二维数据,包含了自变量X和因变量y(为使数据尽量真实,我们加入了随机波动)。
2、数据可视化
下面对结果进行可视化,看看我们的数据具有什么样的特征:
import matplotlib.pyplot as plt
plt.scatter(X,y, linewidths=0.01) #绘制散点图
plt.xlabel('X') #设置x轴标签
plt.ylabel('y') #设置y轴标签
plt.show()
可视化结果:
很明显,我们根据可视化结果可以看出,我们的数据大致上可以用一条直线来拟合,那什么样的直线才能更好的拟合我们的样本呢(也就是什么样的k和b)?下面我们就要找到这条直线!
3、线性回归模型
在sklearn中封装了非常多的机器学习算法,其中就包含线性回归算法,所以我们就只需要调用sklearn中的方法就可以了,线性回归具体原理可参考我
上一篇
博文,可能有些童鞋会说为什么不自己实现呢?首先第一个是时间问题(自己从头到尾实现花的时间会多很多),第二是效率(自己写的代码一般没有别人封装的好)。
from sklearn.linear_model import LinearRegression #导入线性回归模型
model = LinearRegression() #创建线性回归对象
model.fit(X, y) #训练模型
y_pred = model.predict(X) #预测
模型训练好了之后,我们就来看看得到最好k和b到底是什么:
print(model.intercept_) #打印偏置系数(b)
## array([0.49385634]) #结果约为0.5
print(model.coef_) #打印自变量系数(k)
## array([[0.30241506]]) #结果约为0.3
还记得我们一开始构造数据的时候用的什么表达式吗?没错,我们用的是:
y = 0.3*x+0.5+float((np.random.random(1)-0.5)/10)
可以看到我们表达式中k的值为0.3,b的值为0.5,而我们模型得到的k和b值也都约等于0.3和0.5!!有些同学可能会问,我们得到的知识约等于,并没有完全等于,那我们得到的最后的结果不应该是等于0.3和0.5而不是约等于,这个问题大家自己思考一下(在表达式后面我们添加了随机噪声!)!
4、结果可视化
在得到我们最终想要的直线后,那下一步应该将它画出来看看是否正确:
plt.scatter(X,y) #绘制散点图
plt.plot(X, y_pred, c='r', alpha=0.6) #绘制预测直线
plt.xlabel('X') #设置x轴标签
plt.ylabel('y') #设置y轴标签
plt.show()
结果:
根据上面可视化结果可以看到,我们模型的拟合效果还是非常好的。
5、模型评价
那我们如何评价模型好还是不好呢?难道就简单用肉眼看?你可能会说根据比较模型的k、b与原始的k、b,那我们在真实数据中没有原始(因为上面数据是我们按照表达式构建的,所以会存在k和b)的k和b怎么办呢?所以我们要使用模型评价方法——均方误差(MSE),这是回归预测常用的评价方法!均方误差是指参数估计中均方误差是指参数估计值与参数真值之差平方的期望值,可见均方误差越小模型效果越好。
from sklearn.metrics import mean_squared_error #导入均分误差评价方法
print(mean_squared_error(y, y_pred)) #传入真实值和预测值
## 0.0008842073013817016 得到结果
由我们的均方误差结果可见,我们的误差损失是非常小的,故我们所建立的模型效果也非常好!!
6、总结
前面我们使用了自己构建的数据集,进行线性回归实战,从数据构建、可视化、模型构建、模型评价等进行讲解通俗易懂!但这并非真实数据,所以下一篇我将使用线性回归实战波士顿房价数据集,欢迎大家关注!!