一个云主机怎么挂两个网站,微信怎么做网站的动图,网站建设原型图,网站案例欢迎关注哈希大数据微信公众号【哈希大数据】在之前我们介绍了直接使用线性回归进行波士顿房价的预测#xff0c;但是预测准确率仅有60%左右。预测准确率不高一方面是我们未对数据进行一定的预处理(包括归一化和标准化等)#xff0c;这样不能确保在使用优化方式时#xff0c…欢迎关注哈希大数据微信公众号【哈希大数据】在之前我们介绍了直接使用线性回归进行波士顿房价的预测但是预测准确率仅有60%左右。预测准确率不高一方面是我们未对数据进行一定的预处理(包括归一化和标准化等)这样不能确保在使用优化方式时对不同特征参数起到同样的影响。 其次是未深入挖掘数据特征间关系比如当原始数据某些特征与目标值不具有线性关系时不应当纳入训练模型中。而且数据特征之间可能存在共线性等其他问题不完全适合使用线性回归模型进行拟合。因此本节我们将介绍Ridge Regression(岭回归)和Lasso Regression(拉索回归)进行波士顿房价数据集中的特征选取和共线性问题的处理从而更加准确的构建模型实现房价预测。算法理论介绍机器学习机制回顾在之前Linear Regression普通线性回归的应用中(忘记的小伙伴可拉到文末查看线性回归详情内容)我们的输入数据是具有13个特征属性的波士顿房价数据集。回归模型的构建就是实现这13个特征属性值的线性加权之和用于与实际的房价进行拟合。 image然后通过机器学习功能来训练数据集进而获取该模型的参数也就是每个特征属性之前的权值系数(即权值a的确定)。机器学习是如何得到权值呢是通过定义的一个损失函数实现将训练数据代入我们模型的预测房价和真实房价的差的平方然后再将这些平方求和即普通最小二乘法。 image因此求权值a的问题就成了损失函数求和的最小化的最优化问题。通过一定的理论推导可以得知权值系数实际为(特征属性值的广义逆) image而且普通的线性回归算法可以直接训练得到该结果进而实现对房价的预测。但是直接使用普通的线性回归模型当训练样本数量过少甚至少于样本维数(仅有12条房屋数据)这样将导致特征数据矩阵无法求逆则不能完成参数a的估计其次如果样本特征中存在大量相似的特征(即样本属性之间存在共线性关系)将会导致很多权重所代表的意义重复使原本简单高效的模型复杂化。因此希望可以对参数a的计算时提供某种约束(增加一个惩罚因子)只保留具有共线性的一个特征属性值而实现特征数据的缩减同时解决过拟合的问题岭回归和拉索回归恰好可以解决该问题。下面来详细了解一下岭回归和拉索回归的相关理论和python实现。岭回归 Ridge在出现普通线性回归无法解决的问题时可以在原来加一个小扰动值λI image其中I为对角矩阵 image可以对特征属性的权重计算进行一定约束形象的称加入的对角矩阵I为岭。当λ越大惩罚约束作用就越大而原始数据对回归求取参数的作用就会减小λ为0时也就是普通的线性回归算法。如果给λ指定一个合适的值就能在一定意义上解决过拟合的问题(原先过拟合的特别大或者特别小的参数会被约束到正常取值但不会为零)。可以通过多次调试寻找较优的λ值也就是当λ调整到获取的参数值稳定时即可。因此岭回归可以初步解决特征权值参数a的动态调整(普通线性回归是无偏估计的唯一值)进而缓解过拟合的问题(尽可能找到不同 特征与目标值的具体关系)。拉索回归 Lasso岭回归可以动态调整特征属性的权重参数进而使得模型更加契合实际情况充分解释不同特征对目标值的影响力但是其只能将具有线性相关的相似特征属性的权重降低却不能完全剔除。拉索回归与岭回归类似也是加入了一个扰动项其使用的惩罚项对角矩阵而是可以实现特征选择的收缩惩罚性 image可以保证当λ充分大时可以把某些特征属性的权重精确地收缩到0也就是在模型中剔除了该特征属性从而从大量特征数据中挑选出。该方法的两大好处一方面剔除噪声特征(也就是房价不受其影响的特征)其次可以消除具有线性相关关系的不同属性(会造成模型的不稳定原因在之后做具体介绍)。除此以外岭回归中的约束因子λ需要手动调试而在拉索回归算法中可以实现λ参数的交叉验证而寻找使得误差最小的λ的取值使用交叉检验的训练方法可以进一步提高模型的科学性和准确性。python实现Ridge python同样使用scikit-learn库中的包实现该算法岭回归算法实现的部分代码如下from sklearn.linear_model import Ridge岭回归模型的导入ridge Ridge(alphafloat(‘{}’.format(i))).fit(house_price_train_X,house_price_train_y)# 默认的lamda的参数为i岭回归模型训练的准确率predict_result_ridge ridge.predict(house_price_test_X)predict_result_ridge1 ridge.score(house_price_train_X, house_price_train_y)predict_result_ridge0 ridge.score(house_price_test_X, house_price_test_y)print(‘岭回归惩罚参数为 {} 训练集的准确率:’.format(i),predict_result_ridge1)print(‘岭回归惩罚参数为 {} 测试集的准确率:’.format(i), predict_result_ridge0)Lasso python普通拉索回归算法实现的部分代码如下普通拉索回归模型的导入from sklearn.linear_model import Lassolasso Lasso(alphanp.float(‘{}’.format(i)) ,max_iter1000000).fit(house_price_train_X, house_price_train_y) # 默认的lamda的参数为i拉索模型训练的准确率predict_result_lasso lasso.predict(house_price_test_X)predict_result_lasso1 lasso.score(house_price_train_X, house_price_train_y)predict_result_lasso0 lasso.score(house_price_test_X, house_price_test_y)print(‘拉索回归惩罚参数为 {} 训练集的准确率:’.format(i), predict_result_lasso1)print(‘拉索回归惩罚参数为 {} 测试集的准确率:’.format(i), predict_result_lasso0)print(‘拉索回归惩罚参数为 {}使用的特征属性有{}’.format(i,np.sum(lasso.coef_ ! 0))交叉验证的拉索回归算法实现的部分代码如下实现交叉检验拉索回归模型的导入from sklearn.linear_model import LassoCVlasso_cv LassoCV(alphasnp.logspace(-3,1,2,50) ,max_iter1000000).fit(house_price_train_X, house_price_train_y) # 默认的lamda的参数为i交叉检验拉索模型训练的准确率predict_result_lasso_cv lasso_cv.predict(house_price_test_X)predict_result_lasso_cv1 lasso_cv.score(house_price_train_X, house_price_train_y)predict_result_lasso_cv0 lasso_cv.score(house_price_test_X, house_price_test_y)print(‘交叉检验拉索回归 训练集的准确率:’, predict_result_lasso_cv1)print(‘交叉检验拉索回归 测试集的准确率:’, predict_result_lasso_cv0) image.png预测对比结果1、当设置惩罚参数为0时会提示建议使用回归模型。2、当惩罚参数不同时lasso算法选数据特征属性个数是不同的。3、如果惩罚参数设置过大则无法进行预测。4、也因数据自身特征三种方式的预测准确率相差不大。可以提示我们在训练不同数据时要针对性的选用不同模型。(源码请直接通过给后台发消息获取哦)