基于Python的线性回归最小二乘算法的设计与实现
2021-02-28王立友
王立友
摘要:随着科学技术的不断进步,以深度学习为代表的人工智能技术应用逐步走入人们的视野。从车牌、人脸、语音的识别到推荐系统及自动驾驶,人工智能技术的应用越来越贴近人们的日常生活,给予人们极好的切身体验。得益于大数据的迅猛发展、计算能力的增强、学习算法的成熟,越来越多的人开始关注这个“全新”的研究领域:深度学习。深度学习(Deep Learning)隶属于机器学习( Machine Learning)领域范畴。深度学习以神经网络为主要模型,探索学习样本的内在表现规律。在学习过程中,获得文本、图像和音频等数据的解释信息。其终极目标是利用计算机模拟人的大脑进行工作,拥有自主分析学习能力,精准地识别音频、文本、图像等数据信息。深度学习是一个复杂的机器学习算法,该文将利用 Python 语言对深度学习中的线性回归最小二乘法的设计与实现做进一步探讨,希望让许多深度学习的初学者和爱好者对深度学习有一个最简单明了的认知。
关键词:深度学习;Python;线性回归;最小二乘法
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2021)35-0123-02
1 深度学习概述
深度学习是机器学习的一个极为重要分支,深度学习基于人工神经网络的研究[1]。组合若干低层特征,以便于生成更高层次的表征属性特征,发现数据的分布式特征表述。其本质是对数据进行表征学习的相关算法。例如描述图像的观测值过程中,能够采用多种不同的形式进行表述。如使用像素强度值向量表示;又或抽象为多条边、特定形状区域等。近年来监督式深度学习算法(以反馈算法训练 CNN、LSTM 等)获得了空前的成功,而基于半监督或无监督的算法(如 DBM、DBN)仍处在研究阶段并已获得不错的进展。
探索深度学习的初衷,在于建立模拟人脑的神经系统,进行数据的分析和学习。它参照人脑神经工作模式来解释数据[2-3],例如识别图像、声音、文本等。 上述信息的输入和输出会形成一对一的映射模式 ,其中的计算问题则利用一个流向图(flow graph)来阐述。图中各节点(node)均为一个基本计算单元,计算结果被应用到该节点的子节点的值。进而形成一个计算集合,被允许在各节点和可能的图结构里。其中,输入节点无前继节点,输出节点无后续节点。该流向图的一个特别属性是深度(depth):从一个输入到一个输出的最长路径的长度(含多个隐层的深度学习模型如图1 所示)。
2 线性回归及最小二乘法
2.1 线性回归
线性回归是指在现有数据集上构建一个线性模型,以便于拟合这个数据集特征向量中多个分量之间的关系[4]。可以通过已经拟合好的线性模型来预测“新数据”的预期结果。二维线性模型为一条直线,三维的则是一个平面。目前,关于线性回归的算法实现,最小二乘法是应用最为广泛的算法之一[5]。对于数据集,利用线性模型来拟合其数据关系,相对于一维或多维数据,均可通过构建线性模型的方法来实现。例如,房子估价问题:当已知房子的面积、卧室数量和房屋价格之间的关系时,在得知一个新的房子信息后,如何进行预测,进而得到对应新房子的价格,假设面积用[x1]表示,卧室数量用[x2]表示,则房屋价格[h(x)]是关于面积与卧室数量的一次线性方程:
[h(x)=hθ(x)=θ0+θ1x1+θ2x2]
该线性模型仅包含两个特征分量:面积和卧室数量。而大多数情况下,拟合的模型可能含有若干个特征分量,那么线性模型中对应的权重值[θ]同样需要相同的量。可以使用矩阵向量来进行表示:[hθ=θTX]。
2.2 最小二乘法
向量[θ](长度为[n])中所有的分量都是预测表达式函数[h(x)]中相对应参数,矩阵[X(m*n)]构成了数据集中所有样本特征向量所组成的矩阵。数据集中的实际值使用向量[Y](长度为[m])表示,若通过实际值来构建方程组,参数向量[θ]中的对应值即为我们所求未知量。通常状况下,设定一个超定方程组(无确定解),只能求出超定方程组的最优解。利用构建相应的损失函数权衡估值和实际值之间的误差,将最小误差损失函数作为约束条件求出参数向量最优解。函数[J(θ)]即为损失函数,它计算出数据集中每一个样例的估值和实际值的平方差并求取平均,即最小二乘法。最小二乘法经数学推导最终得到一个标准方程,该方程的解即为最优的参数向量。即:
[J(θ)=12i=1m(hθ(x(i))-y(i))2]
3 线性回归最小二乘法的Python程序实现
3.1 实验数據来源
本文实验数据来源于互联网上的网络资源。数据主要内容为:某大城市用户一天的用电时间、用电功率。编写Python程序,以便实现输出用户用电时间和用电功率之间的线性关系的真实值和采用线性回归最小二乘法的预测值,并对两者之间进行比对。
3.2 程序实现
编写主程序并运行,实现线性回归最小二乘法,具体实现的主要代码如下:
from sklearn.linear_model import LinearRegression # 导入线性回归模型
from sklearn.model_selection import train_test_split # 导入训练测试集
from sklearn.preprocessing import StandardScaler # 导入数据标准化
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import time
path1 = 'datas/household_power_consumption.txt' #实验数据所在路径
df = pd.read_csv(path1, sep=';', low_memory=False)
# 异常数据的处理
new_df = df.replace('?', np.nan)
datas = new_df.dropna(axis=0, how='any')
Y = datas['Global_active_power'] # 提取Y的实际值
def data_format(dt):#格式化時间数据
t = time.strptime(' '.join(dt), '%d/%m/%Y %H:%M:%S') # 合并第一列和第二列中X的对应值,将t转化为时间元组,并格式化t
return t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec
X = datas.iloc[:, 0:2] # 利用索引提取第一列和第二列的X的值
X = X.apply(lambda x: pd.Series(data_format(x)), axis=1)
# 对数据集进行测试、训练集划分,X: 特征矩阵(类型一般为DataFrame)
# Y: 特征对应的Label标签或目标属性(类型一般为Series)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
ss = StandardScaler()
X_train = ss.fit_transform(X_train) # 标准化
X_test = ss.transform(X_test)
lr = LinearRegression(fit_intercept=True) # fit 模型训练
lr.fit(X_train, Y_train) # 对模型进行训练
y_predict = lr.predict(X_test)
print('训练集上的R^2:', lr.score(X_train, Y_train))
print('测试集上的R^2:', lr.score(X_test, Y_test))
mse = np.average((y_predict - Y_test) ** 2)
rmse = np.sqrt(mse)
print('rmse:', rmse)
print('模型训练后的系数:', end='')
print(lr.coef_)
print('模型训练后的截距:', end='')
print(lr.intercept_)
t = np.arange(len(X_test))
plt.figure(facecolor='w')
plt.plot(t, Y_test, 'r-', linewidth=2, label='真实值')
plt.plot(t, y_predict, 'g-', linewidth=2, label='预测值')
plt.legend(loc='upper left')
plt.title('线性回归预测时间和功率之间的关系', fontsize=20)
plt.grid(b=True)
plt.show() #显示时间和功率的真实值与预测值图表
4 结束语
本研究利用Python程序实现了线性回归最小二乘算法,预测值与真实值之间存在一定的差异,希望在以后的研究中逐步改进现有算法,争取获得更好的实验效果。
参考文献:
[1] 汪飞.基于人工智能下深度学习的现状及趋势研究[J].电脑迷,2018(10):140-141.
[2] 王梓桥,刘沛丰,郝峰,等.基于深度学习的手写数字识别技术应用[J].数字技术与应用,2018,36(11):78-79.
[3] 史聪慧.基于深度学习的智能参考咨询服务模式[J].电脑知识与技术,2020,16(3):205-206,229.
[4] 李严明.基于机器学习的气象因素对小麦产量影响的分析预测[D].郑州:河南农业大学,2019.
[5] 罗润林,阮怀宁,朱昌星.基于粒子群-最小二乘法的岩石流变模型参数反演[J].辽宁工程技术大学学报(自然科学版),2009,28(5):750-753.
【通联编辑:谢媛媛】