目录

介绍

回归模型

线性回归

局部加权线性回归

岭回归

套索(Lasso)回归

逐步线性回归

结论与分析


可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表。

介绍

通常存在变量之间的关系。实际上,这种关系可以分为两类,即确定关系和不确定关系。确定性关系可以用函数表示。确定性关系也称为相关性,可以用回归分析进行研究。

通常,线性回归模型是:

最优化可以通过最小损失函数来确定:

回归模型

线性回归包括线性回归,局部加权线性回归,岭回归,套索回归和逐步线性回归。

线性回归

线性回归的参数可以通过梯度下降法或正则表达式计算。由于梯度下降法已经在实现机器学习的循序渐进指南IV——逻辑回归中引入,因此我们在本文中介绍具有正则表达式的解决方案。

首先,计算损失函数的导数:

然后,使导数等于0,我们可以得到:

最后,是:

其中X是训练数据,Y是相应的标签。线性回归的代码如下所示:

def standardLinearRegression(self, x, y):if self.norm_type == "Standardization":x = preProcess.Standardization(x)else:x = preProcess.Normalization(x)xTx = np.dot(x.T, x)if np.linalg.det(xTx) == 0:   # calculate the Determinant of xTxprint("Error: Singluar Matrix !")returnw = np.dot(np.linalg.inv(xTx), np.dot(x.T, y))return w

局部加权线性回归

使用最小均方误差(MMSE)的无偏估计,它在线性回归中是不合适的。为了解决这个问题,我们在要预测的点周围的点上分配权重。然后,我们对其应用常规回归分析。局部加权线性回归的损失函数是:

像线性回归一样,我们计算损失函数的导数并使其等于0。最优的

局部加权线性回归中的权重类似于SVM中的核函数(kernel function),其由下式给出:

局部加权线性回归的代码如下所示:

def LWLinearRegression(self, x, y, sample):if self.norm_type == "Standardization":x = preProcess.Standardization(x)else:x = preProcess.Normalization(x)sample_num = len(x)weights = np.eye(sample_num)for i in range(sample_num):diff = sample - x[i, :]weights[i, i] = np.exp(np.dot(diff, diff.T)/(-2 * self.k ** 2))xTx = np.dot(x.T, np.dot(weights, x))if np.linalg.det(xTx) == 0:print("Error: Singluar Matrix !")returnresult = np.dot(np.linalg.inv(xTx), np.dot(x.T, np.dot(weights, y)))return np.dot(sample.T, result)

岭回归

如果特征维度大于样本数量,则输入矩阵不是满秩,其逆矩阵不存在。为了解决这个问题,岭回归增加了到矩阵的非奇异性。实际上,对于岭回归的损失函数,等于加上L2正则化,即:

像线性回归一样,我们计算损失函数的导数并使其等于0.最优的是:

岭回归的代码如下所示:

def ridgeRegression(self, x, y):if self.norm_type == "Standardization":x = preProcess.Standardization(x)else:x = preProcess.Normalization(x)feature_dim = len(x[0])xTx = np.dot(x.T, x)matrix = xTx + np.exp(feature_dim)*self.lamdaif np.linalg.det(xTx) == 0:print("Error: Singluar Matrix !")returnw = np.dot(np.linalg.inv(matrix), np.dot(x.T, y))return w

套索(Lasso)回归

与岭回归一样,套索(Lasso)回归在损失函数上加上L1正则化,即:

因为L1正则化包含绝对值表达式,所以损失函数不能在任何地方导出。因此,我们应用坐标下降法(CD)。CD在每次迭代的方向上得到最小值,即

我们可以得到一个封闭的CD解决方案,由下面给出:

其中:

套索(Lasso)回归的代码如下所示:

def lassoRegression(self, x, y):if self.norm_type == "Standardization":x = preProcess.Standardization(x)else:x = preProcess.Normalization(x)y = np.expand_dims(y, axis=1)sample_num, feataure_dim = np.shape(x)w = np.ones([feataure_dim, 1])for i in range(self.iterations):for j in range(feataure_dim):h = np.dot(x[:, 0:j], w[0:j]) + np.dot(x[:, j+1:], w[j+1:])w[j] = np.dot(x[:, j], (y - h))if j == 0:w[j] = 0else:w[j] = self.softThreshold(w[j])return w

逐步线性回归

逐步线性回归类似于套索(Lasso)回归,它在每次迭代时应用贪婪算法以获得最小值而不是CD。逐步线性回归在每次迭代时增加或减少一小部分权重。逐步线性回归的代码如下所示:

def forwardstepRegression(self, x, y):if self.norm_type == "Standardization":x = preProcess.Standardization(x)else:x = preProcess.Normalization(x)sample_num, feature_dim = np.shape(x)w = np.zeros([self.iterations, feature_dim])best_w = np.zeros([feature_dim, 1])for i in range(self.iterations):min_error = np.inffor j in range(feature_dim):for sign in [-1, 1]:temp_w = best_wtemp_w[j] += sign * self.learning_ratey_hat = np.dot(x, temp_w)error = ((y - y_hat) ** 2).sum()           # MSEif error < min_error:                   # save the best parametersmin_error = errorbest_w = temp_ww = best_wreturn w

结论与分析

有许多解决方案可以获得线性回归的最优参数。在本文中,我们仅介绍一些基本算法。最后,让我们将线性回归与Sklearn中的线性回归进行比较,检测性能如下所示:

Sklearn线性回归性能:

我们的线性回归性能:

性能看起来很相似。

可以在MachineLearning中找到本文中的相关代码和数据集。

有兴趣的小伙伴可以查看上一篇或者下一篇。

原文地址:https://www.codeproject.com/Articles/5061034/Step-by-Step-Guide-to-Implement-Machine-Learning-6

实现机器学习的循序渐进指南VIII——线性回归相关推荐

  1. 实现机器学习的循序渐进指南系列汇总

    之前曾尝试翻译了机器学习中的KNN和决策树,最近这段时间陆续看到这个系列的相关文章,并尝试翻译分析.由于此系列文章直接相对零散,所以有了这篇简单的汇总文章,以帮助有兴趣的小伙伴迅速找到想看的文章. 具 ...

  2. 实现机器学习的循序渐进指南XII——Apriori

    目录 介绍 Apriori模型 频繁项集 关联规则 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 Apriori是一种学习频繁项集和关联规则的算法.Aprio ...

  3. 实现机器学习的循序渐进指南XI——DBSCAN

    目录 介绍 DBSCAN模型 开始 聚类算法 参数估计 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 基于密度的噪声应用空间聚类(DBSCAN)是一种基于密度 ...

  4. 实现机器学习的循序渐进指南X——KMeans

    目录 介绍 KMeans模型 KMEANS 平分KMeans KMEANS ++ 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 KMeans是一种简单的聚类算 ...

  5. 实现机器学习的循序渐进指南IX ——树回归

    目录 介绍 回归模型 特征选择 回归树的生成 回归 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 在现实世界中,一些关系不是线性的.因此,应用线性回归分析这些 ...

  6. 实现机器学习的循序渐进指南VII——Blending Stacking

    目录 介绍 混合(Blending)模型 混合(Blending)架构 混合(Blending)实现 混合(Blending)分类 堆叠(Stacking)模型 堆叠(Stacking)架构 堆叠(S ...

  7. 实现机器学习的循序渐进指南VI——AdaBoost

    目录 介绍 AdaBoost模型 弱分类器 权重更新 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 AdaBoost是Boosting的一种方法,它基于 ...

  8. 实现机器学习的循序渐进指南V——支持向量机

    目录 介绍 SVM模型 优化问题 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 支持向量机(SVM)是一种基于特征空间最大边距的分类器.SVM ...

  9. 实现机器学习的循序渐进指南IV——逻辑回归

    目录 介绍 逻辑回归模型 参数估计 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 逻辑回归是统计学习中的经典方法,它计算条件概率P(Y|X)并 ...

最新文章

  1. linux 虚拟环境
  2. alias提升效率工具
  3. Linux下ps -ef和ps aux的区别
  4. idea中查看类的继承关系图
  5. python抽奖概率设计_通过python分析原神,结果出现了“这种情况”
  6. 李开复:AI能在15年内取代40%~50%岗位
  7. 虚拟化精华问答 | 虚拟化会使管理更轻松吗?
  8. asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发
  9. 2020年,5 种 将死的编程语言!
  10. 程序员编程艺术:第五章、寻找满足和为定值的两个或多个数
  11. a4如何打印双面小册子_小册子打印
  12. ArcView 9.3 安装帮助指南(针对Student Edition-One-Year版本)
  13. vmware workstation 12 永久激活码
  14. 数据结构与算法分析—C语言描述 pdf
  15. 钛资本研究院:保险科技行业现状及趋势分析
  16. 华为P50手机怎样投屏至投影仪?华为P50终于要来了
  17. 从零开始之驱动发开、linux驱动(六十六、内核调试篇--printk原理)
  18. UG编程是指采用西门子公司研发的3D软件 NXUG
  19. php 命格算法,具有“一夜暴富”天赋的命格
  20. 动态轮播图,支持gif动态轮播

热门文章

  1. 三八妇女节PSD分层海报,来啦!
  2. 鸿蒙测试版苹果,华为鸿蒙OS 2.0开发者Beta新增招募 苹果macOS 11.4测试版发布
  3. mysql 堵塞_Mysql解决USE DB堵塞详解
  4. C++数据结构03--静态链式线性表的实现
  5. mysql查询操作的5种子句
  6. Docker Engine在CentOS上的安装
  7. OpenSSL:openssl-xxx.tar.gz
  8. 怎么恢复php格式关联,SCN与数据恢复关联
  9. 华为删除dhcp地址池_配置设备作为DHCP中继示例
  10. 51单片机的轮胎气压监测系统_汽车的胎压监测系统有哪些作用?