实现机器学习的循序渐进指南VIII——线性回归
目录
介绍
回归模型
线性回归
局部加权线性回归
岭回归
套索(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——线性回归相关推荐
- 实现机器学习的循序渐进指南系列汇总
之前曾尝试翻译了机器学习中的KNN和决策树,最近这段时间陆续看到这个系列的相关文章,并尝试翻译分析.由于此系列文章直接相对零散,所以有了这篇简单的汇总文章,以帮助有兴趣的小伙伴迅速找到想看的文章. 具 ...
- 实现机器学习的循序渐进指南XII——Apriori
目录 介绍 Apriori模型 频繁项集 关联规则 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 Apriori是一种学习频繁项集和关联规则的算法.Aprio ...
- 实现机器学习的循序渐进指南XI——DBSCAN
目录 介绍 DBSCAN模型 开始 聚类算法 参数估计 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 基于密度的噪声应用空间聚类(DBSCAN)是一种基于密度 ...
- 实现机器学习的循序渐进指南X——KMeans
目录 介绍 KMeans模型 KMEANS 平分KMeans KMEANS ++ 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 KMeans是一种简单的聚类算 ...
- 实现机器学习的循序渐进指南IX ——树回归
目录 介绍 回归模型 特征选择 回归树的生成 回归 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 在现实世界中,一些关系不是线性的.因此,应用线性回归分析这些 ...
- 实现机器学习的循序渐进指南VII——Blending Stacking
目录 介绍 混合(Blending)模型 混合(Blending)架构 混合(Blending)实现 混合(Blending)分类 堆叠(Stacking)模型 堆叠(Stacking)架构 堆叠(S ...
- 实现机器学习的循序渐进指南VI——AdaBoost
目录 介绍 AdaBoost模型 弱分类器 权重更新 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 AdaBoost是Boosting的一种方法,它基于 ...
- 实现机器学习的循序渐进指南V——支持向量机
目录 介绍 SVM模型 优化问题 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 支持向量机(SVM)是一种基于特征空间最大边距的分类器.SVM ...
- 实现机器学习的循序渐进指南IV——逻辑回归
目录 介绍 逻辑回归模型 参数估计 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 逻辑回归是统计学习中的经典方法,它计算条件概率P(Y|X)并 ...
最新文章
- linux 虚拟环境
- alias提升效率工具
- Linux下ps -ef和ps aux的区别
- idea中查看类的继承关系图
- python抽奖概率设计_通过python分析原神,结果出现了“这种情况”
- 李开复:AI能在15年内取代40%~50%岗位
- 虚拟化精华问答 | 虚拟化会使管理更轻松吗?
- asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发
- 2020年,5 种 将死的编程语言!
- 程序员编程艺术:第五章、寻找满足和为定值的两个或多个数
- a4如何打印双面小册子_小册子打印
- ArcView 9.3 安装帮助指南(针对Student Edition-One-Year版本)
- vmware workstation 12 永久激活码
- 数据结构与算法分析—C语言描述 pdf
- 钛资本研究院:保险科技行业现状及趋势分析
- 华为P50手机怎样投屏至投影仪?华为P50终于要来了
- 从零开始之驱动发开、linux驱动(六十六、内核调试篇--printk原理)
- UG编程是指采用西门子公司研发的3D软件 NXUG
- php 命格算法,具有“一夜暴富”天赋的命格
- 动态轮播图,支持gif动态轮播
热门文章
- 三八妇女节PSD分层海报,来啦!
- 鸿蒙测试版苹果,华为鸿蒙OS 2.0开发者Beta新增招募 苹果macOS 11.4测试版发布
- mysql 堵塞_Mysql解决USE DB堵塞详解
- C++数据结构03--静态链式线性表的实现
- mysql查询操作的5种子句
- Docker Engine在CentOS上的安装
- OpenSSL:openssl-xxx.tar.gz
- 怎么恢复php格式关联,SCN与数据恢复关联
- 华为删除dhcp地址池_配置设备作为DHCP中继示例
- 51单片机的轮胎气压监测系统_汽车的胎压监测系统有哪些作用?