线性回归有哪些算法,4、python简单线性回归代码案例(完整)
大家好,线性回归算法的原理和代码实现。我是w,这次讲的是线性回归,之前讲的是Logistic回归。虽然logistic回归负责分类,但是数据到达二元函数之前的逻辑是线性回归逻辑,所以这两个回归非常相似。本文顺序为:1、线性回归算法原理 2、最小二乘法和算法评估标准 3、案例1-简单数据集标准线性回归 4、案例2-简单数据集局部加权线性回归 5、案例3-鲍鱼年龄预测。。
1.线性回归算法原理在学习scikitlearn的时候,会有一个经典案例,就是波士顿房价预测,就是用回归的方式来做的。当然也可以用其他方法,但是这次我们就说回归。那么如何在线性回归中预测房价呢?然后需要拿到房子各方面的数据,比如房产证上的面积,实际居住面积,物业费,地段,超市,幼儿园,小学等等。
然后,对这些指标进行加权后,最终得到一个公式:
Y_predict=w1*房产证上的面积w2*实际居住面积w3*物业费.这就是所谓的回归方程,而w1和w2…都是回归系数,回归系数是对与其相关的特征对结果影响强弱的参数体现。当然,这里的数据要求都是数值型数据,也就是可以参与计算的数据。无法运算的标称型数据会给出解决方案。
2.最小二乘法及算法评价标准2.1最小二乘法普通最小二乘法的推导证明本文第一点很清楚,最小二乘法的思路是要使得真实值与预测值间的距离的平方达到最小。也就是说,真实值越接近预测值,预测就越准确。
那么用数学公式表示就是:
假设我们的数据集如下所示:
x0x1y 1 . 000000 . 0677323 . 1765131 . 000000 . 4278103 . 8164641 . 00000 . 9957314 . 5500951 . 0000 . 738364 . 256571本数据集每行代表一个实例以上公式,而x0、x1代表的是这个实例的两个特征
另一种表达方式是:
上述公式由行列式表示:
然后我们对变形行列式公式取W的偏导数:
这个公式很难求,所以分解一下:
继续分成项的总和:
然后,下一步就是通过一个例子来取W的偏导数。这个博客也解释了整个衍生过程。当然最重要的是每一部分都取w的偏导数,那么最后的偏导数结果是:
现在我们都知道X和Y向量,我们可以通过使方程为0来找到W。很明显,我们只需要通过乘以X将X的倒数转置到右边:
那么在这里,求解W向量的过程就全部清楚了,就是用最小二乘法求解W向量的过程。当然,* *这种方法在面对大矩阵时会产生大量的计算,导致计算量急剧增加,所以更常用梯度下降法来求W向量。* *梯度下降在LogisticRegression算法和简单案例中讨论。有兴趣的可以看看。
2.2算法评价标准一个算法的好坏需要一些标准来判断,这也是做科研时常用的东西。计算Python回归算法的度量指标:MSE/RMSE/Mae/R 2。本博客还介绍了回归算法的几种不同的评价指标。
所以我们的模型做出来之后,会选取几个指标来评价模型。
案例1-简单数据集标准线性回归案例1-查看数据集。本文中的所有数据集都将被打包并上传到github。不用担心,因为我也经历过那种到处找数据集做测试的累=。=
每次做东西之前,你都需要看一下数据集:
打印(df)x0 x1 y0 1.0 0.427810 3.8164641 1.0 0.995731 4.5500952 1.0 0.738336 4.2565713 1.0 0.981083 4.5608154 1.0 0 0.526171 3.929515..194 1.0 0.2570 13.585821195 1.0 0.833735 4.374394196 1.0 0.07095 3.213817197 1.0 0.527070 3.952681198 1.0 0 . 116163.129283显然,这个数据集很小,有两个特征,不可能是y是我们需要的。
检查缺少的值:
print(df . describe())x0 x1 y count 199.0 199.0000000 199.0000000 mean 1.0 0.490433 3.838914 STD 0.0 0.292149 0.502523min 1.0 0 0.014855 3.07813225% 1.0 0 0.236126 3.46519050% 1.0都出来了,很方便。
再看一下数据的实际分布。因为x0全是1,所以直接用x1画出来:
案例1-在阅读数据指南包之前,这次要使用的包:
导入matplotlib.py剧情为PLT导入熊猫为PD导入numpy为NP from numpy.lina LG导入lina LG读取数据代码,没什么好解释的。用熊猫进行处理,然后用numpy矩阵进行计算,非常方便,比一行一行写python数组要好得多:
Load _ data(file _ path): Load dataset:param file _ path: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), \ n )# print(NP . shape(label_matrix), \n) # print(data_matrix,\ n) # print (label_matrix)返回data_matrix,label_matrix情况1-标准回归这里需要说明一下,因为我在熊猫读csv后把y_true放在label _ matrix里,所以data_matrix只有特征值没有目标值。
然后转换成numpy矩阵就可以安心计算了。因为W的公式中有一个求逆的过程,所以需要对XTX做行列式判断。每个人都需要明白这一点。
最后,我们只需要根据公式计算出W矢量。
DEF regression(data _ matrix,label _ matrix):“”标准回归:param data _ matrix:param label _ matrix:return:“# Prepare xTx,即X的转置X矩阵,用于求行列式判断是否可逆[m-1,m-1]=[m-1,n] * [n,M-1]xTx=data _ matrix . t * data _ matrix # print(xTx)#判断行列式if linalg.det(xTx)==0: print(矩阵不可逆)return 直接用最小二乘法(即公式法)计算系数矩阵w w=[m-1,M-1] * [m-1,n] * [n,1]=[m-1,1]w=xtx . I * data _ matrix . t * label _ matrix print( w matrix:,w)返回w Case 1- Drawing其实刚才已经完成了两个函数的全标准回归,但是
My _ paint (w,data _ matrix,label _ matrix): Drawing:param w:param data _ matrix:param label _ matrix:return: fig=PLT . fig(fig size=(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]。展平()。A[0],y=标签_矩阵。T.flatten()。a[0])data _ matrix _ copied=data _ matrix . copy()data _ matrix _ copied . sort(0)# print(data _ matrix _ copied)y _ predict=data _ matrix _ copied * w PLT . PLT(data _ matrix _ copied[:1],y_predict) plt.show()
案例2-简单数据集的局部加权线性回归在案例1中,可以看出曲线拟合的很好,但是还是有一点欠拟合。有没有更合适的?的确,这就是局部加权线性回归。这篇文章应该很长。我决定分成两期。详见下期。
点击项目地址进入github。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。