博舍

线性回归算法(Linear Regression)及相关案例 线性回归算法实验报告

线性回归算法(Linear Regression)及相关案例

线性回归算法的原理和代码实现大家好,我是W

这次讲线性回归,之前有说逻辑回归(LogisticRegression),虽然逻辑回归负责分类,可是在数据到达二值函数之前的逻辑都是线性回归的逻辑,所以这两个回归是十分相似的。这篇文章的顺序是:1、线性回归算法原理2、最小二乘法和算法评估标准3、案例1-简单数据集标准线性回归4、案例2-简单数据集局部加权线性回归5、案例3-鲍鱼年龄预测。

1、线性回归算法原理

在学习scikitlearn的时候会有一个经典案例,就是Boston房价预测,就是用回归去做的,当然也可以使用其他方法但是这次讲回归。那么再线性回归里如何去预测房价?那么我们要得到房子各方面数据如:房产证上的面积、实际居住面积、物业费、位置、周围的超商、幼儿园、小学等等。

那么对这些指标经过加权最终得到一个公式就是:

y_predict=w1*房产证上的面积+w2*实际居住面积+w3*物业费+....

这就是所谓的回归方程了,而w1、w2…都是回归系数,回归系数是对与其相关的特征对结果影响强弱的参数体现,当然这里对数据的要求都是数值型的数据,即能够参与运算的数据。而针对无法运算的标称型数据后面也会给出解决方案。

2、最小二乘法和算法评估标准2.1最小二乘法

普通最小二乘法的推导证明,这篇文章里第一点说的很清楚,最小二乘法的思想就是要使得真实值与预测值间的距离的平方达到最小。即真实值与预测值越贴合就证明预测的准嘛。

那么用数学公式表达出来就是:

假设我们的数据集是这样的:

x0x1y1.0000000.0677323.1765131.0000000.4278103.8164641.0000000.9957314.5500951.0000000.7383364.256571

这个数据集每行代表一个实例(房子、车等等需要预测的目标),x0、x1代表的是这个实例的两个特征。上面这个公式的y_i表示的是每一个实例的y_true(第一行就是3.176513),而x_i表示的是每个实例的所有特征的值的一个向量,x_1表示[1.00.067732],而w表示的是每个特征前的回归系数。那么x_i*w就是y_predict。

用另外一种表示方法就是:

上面这个公式用行列式表示就是:

那么我们就对变形后的行列式公式对w求偏导:

这个式子不好求,那就把它拆散出来:

再继续分成各项之和:

那么接下来还是要对w求偏导通过一个例子快速上手矩阵求导,这篇博客同样也讲解了整个求导过程,当然最主要看的是各个部分对w求偏导。那么最终得到偏导结果就是:

既然x,y向量我们都知道了,那么令等式为0就可以求出w,显然我们只需要乘x转置x的逆到右边就可以了:

那么到这里,w向量的求解过程就全部讲清楚了,这也就是通过最小二乘法求解w向量的过程。当然,**这种方法在面对大型矩阵时会产生大量的计算从而导致计算量激增,所以更常用的是梯度下降法来求w向量。**梯度下降在逻辑回归(LogisticRegression)算法及简单案例里有讲,感兴趣的可以看一下。

2.2算法评估标准

算法的好坏需要有一些标准来做评判的,这也是在做科研的时候常用到的东西。Python实现回归算法的衡量指标计算:MSE/RMSE/MAE/R^2,这篇博客里也介绍了几种不同的回归算法评价指标。

所以,在我们模型做出来之后就会从中选择几种指标来对模型做评价。

案例1-简单数据集标准线性回归案例1-查看数据集

这篇文章所有的数据集我都会打包上传到github上面,大家不用担心,因为我也是体会过到处找数据集来做测试的那种心累=。=

每次做东西之前都需要先看一看数据集:

print(df)x0x1y01.00.4278103.81646411.00.9957314.55009521.00.7383364.25657131.00.9810834.56081541.00.5261713.929515...........1941.00.2570173.5858211951.00.8337354.3743941961.00.0700953.2138171971.00.5270703.9526811981.00.1161633.129283

显然这个数据集很小,2个特征,200行不到,y就是我们需要predict的值。

再查看有无缺失值:

print(df.describe())x0x1ycount199.0199.000000199.000000mean1.00.4904333.838914std0.00.2921490.502523min1.00.0148553.07813225%1.00.2361263.46519050%1.00.4667763.84442675%1.00.7308784.249712max1.00.9957314.692514

没有缺失值,均值、标准差等等都出来了,很方便。

再看一看数据实际分布怎么样,因为x0全是1,所以直接用x1来画:

案例1-读取数据

导包先,这次需要用到的包:

importmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnpfromnumpy.linalgimportlinalg

读数据代码,没什么好解释的了,使用pandas来做处理,然后用numpy矩阵来计算很方便,相较于python数组一行行的写好多了:

defload_data(file_path):"""加载数据集:paramfile_path:路径:return:"""df=pd.read_csv(file_path)#[n,m-1]data_matrix=np.mat(df.iloc[:,:-1])#[n,1]label_matrix=np.mat(df.iloc[:,-1]).T#print(np.shape(data_matrix)," ")#print(np.shape(label_matrix)," ")#print(data_matrix," ")#print(label_matrix)returndata_matrix,label_matrix案例1-标准回归

这里需要解释一下,因为pandas读csv后我把y_true放到了label_matrix里,所以data_matrix就只有特征值没有目标值了。

那么转为numpy矩阵后可以安心计算了,因为w的公式里有求逆的过程,所以需要对XTX进行行列式判断,这个大家需要理解。

最后只需要按照公式算出w向量就可以了。

defstandRegress(data_matrix,label_matrix):"""标准回归:paramdata_matrix::paramlabel_matrix::return:"""#准备xTx即x的转置乘x阵,用于求行列式从而判断是否可逆[m-1,m-1]=[m-1,n]*[n,m-1]xTx=data_matrix.T*data_matrix#print(xTx)#判断行列式iflinalg.det(xTx)==0:print("该矩阵不可逆")return#若矩阵可逆直接使用最小二乘法(即公式法)来算系数矩阵ww=[m-1,m-1]*[m-1,n]*[n,1]=[m-1,1]w=xTx.I*data_matrix.T*label_matrixprint("W阵:",w)returnw案例1-画图

其实到刚才两个函数整个标准回归已经做完了,但是为了直观体现出来需要画张图看一看回归曲线:

defmy_paint(w,data_matrix,label_matrix):"""画图:paramw::paramdata_matrix::paramlabel_matrix::return:"""fig=plt.figure(figsize=(10,10),dpi=200)#对数据有疑问的可以打开下面几行注释查看数据#print(data_matrix[:,1])#print(data_matrix[:,1].flatten())#print(label_matrix.T)#print(label_matrix.T.flatten())#print(label_matrix.T.flatten().A[0])plt.scatter(x=data_matrix[:,1].flatten().A[0],y=label_matrix.T.flatten().A[0])data_matrix_copied=data_matrix.copy()data_matrix_copied.sort(0)#print(data_matrix_copied)y_predict=data_matrix_copied*wplt.plot(data_matrix_copied[:,1],y_predict)plt.show()

案例2-简单数据集局部加权线性回归

在案例1可以看到曲线拟合的不错,但是还有点欠拟合,还有没有更好的拟合情况呢?还真有,这就是局部加权线性回归。这篇文应该很长了,我决定分两期,详情见下期

项目地址

点击进入github

机器学习线性回归算法实验报告

机器学习简介人工智能AI、机器学习与深度学习来自贪心学院课堂PPT

它们都是一种科学研究方法。宗旨即辅助人进行决策,减少人的不必要劳动时间。

机器学习:训练模型+决策(判别)

训练模型:前提选择已知的模型(如LR,kNN,DT,SVM,MSE等),然后训练模型中的每个参数【训练参数即学习得到参数】;决策(判别):即通过模型对一个未知类别的样本进行分类的过程,同时也是一种检验模型好坏的方法【好的训练模型应具有不错的泛化能力】;

不同领域的爱称:模式识别,现代统计学,数据挖掘等。

【当然大多是基于对自己专业情感上的一种爱称】

机器学习分类:

监督学习:指对学习过程有参考帮助,即训练样本有已知标签;

注:按标签的连续或者离散划分,有分类与回归。

有时候为了方便解决问题标签连续及离散之间也可以相互转换。连续性标签可以分成离散的区间,离散标签也可以通过加权平均得到连续值。

非监督学习:指没有标签参考的帮助࿰

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇