数据分析之线性回归
线性回归用来预测数据的原理以及代码
我之前有些过一篇关于数据库预测的实战练习的,今天来讲一讲原理
- 首先这一张代码的截图,我们看到
from sklearn.linear_model import LinearRegression #线性回归
这一行的代码:
我们从sklearn这一个依赖库当中导入LinearRegression,这是最简单的一元线性回归。
那么线性回归的原理是什么呢,为什么能用线性回归来预测数据呢?我们还是以疫情数据为例:
我们将新增个案单独拉出来
也就是这是以日期为横坐标,新增个案为纵坐标的值的一个笛卡尔坐标系。
- 我们模拟出一条直线,让已知的数据点尽量落在直线上或直线周围。
就当是类似于这一个图吧。
那么我们要预测的下一天的数据也应该在这条直线上对不对?
那么比如我们随手画的是这一条线,预测出了下一天或者是下个月一直的数据,但是一万个人有一万种画出这条线的方法,也就是说,每个人画的线都是不一样的。
我们现在知道,线性回归就是要找一条直线,并且让这条直线尽可能地拟合图中的数据点。
- 所以,我们如何才能够绘出一条大家都认可的线呢?
我们需要的是不断的训练数据,也就是所谓的训练集与测试集的划分(在我的程序里面还没有用到验证集)
- 这其实就是所谓的损失函数,而利用线性回归来计算与利用损失函数是最简单的一种。
在训练数据之前,我们必不可少的需要获取数据吧:
data=pd.read_excel('香港疫情数据.xlsx')
data.index=data.iloc[:,0]
data=data.drop(['日期'],axis=1)
这里的程序
第二行:data.index=data.iloc[:,0]
先将日期这一行数据储存在data.index中
第三行:data=data.drop([‘日期’],axis=1)
选择先不将日期那一列导入,先导入三个病例数据
- 接着,我们划分训练集与测试集
model=LinearRegression()
##划分测试集和训练集7:3
m=data.shape[0]
train=data.iloc[:int(0.3*m),:]
test=data.iloc[int(0.7*m):,:]
接下来这些代码是进一步的训练数据,以及是整个算法思路的核心,利用循环来训练以及输出数据
for i in range(data.shape[1]):
train_y,train_x=train[train.columns[i]],train.drop([train.columns[i]],axis=1)
test_x,test_y=test.drop([test.columns[i]],axis=1),test[test.columns[i]]
model.fit(train_x,train_y)#训练数据
predict=model.predict(test_x)#返回样本结果
- 输出数据:
plt.plot(test_x.index,test_y,label='True',c='red')
plt.plot(test.index,predict,label='prdict',c='black')
plt.title('predict {}'.format(str(train.columns[i])))
plt.show()