机器学习包sklearn的使用——以波士顿房价预测为例

it2022-05-05  180

一、 问题定义

本项目利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试。通过该数据训练后的好的模型可以被用来对房屋做特定预测—尤其是对房屋的价值。对于房地产经纪等人的日常工作来说,这样的预测模型被证明非常有价值。 本数据集的数据特征:

图1 波士顿房价数据集特征值 1 本项目的数据集来自UCI机器学习知识库。波士顿房屋这些数据于1978年开始统计,共506个数据点,涵盖了麻省波士顿不同郊区房屋14种特征的信息。本项目对原始数据集做了以下处理: (1)在打乱后去 90%数据作为训练集,10%的数据作为测试集 (2)有16个’MEDV’ 值为50.0的数据点被移除。 这很可能是由于这些数据点包含遗失或看不到的值。 (3)有1个数据点的 ‘RM’ 值为8.78. 这是一个异常值,已经被移除。 (4)对于本项目,房屋的’RM’, ‘LSTAT’,'PTRATIO’以及’MEDV’特征是必要的,其余不相关特征已经被移除。 (5)'MEDV’特征的值已经过必要的数学转换,可以反映35年来市场的通货膨胀效应。 (6)由于这个项目最终目的是建立一个预测房价的模型,所以我将数据集分为特征(RM、LSTAT、PTRATIO)和目标变量(MEDV) 图2 需要关注的特征值

二、 实验原理与流程

2.1实验原理

第一步操作,就是在读入housing.csv文件后,统计一下价格的最小值、最大值、均值、中值和标准差,后期做数据分析的时候,其实用到这几个统计值。 这里实现呢,本身python是自带统计函数的,但是,这里使用numpy相关的函数处理,理论上速度应该更快一些。 可以这样认为,numpy包是基于python做的优化,而pandas是基于numpy做的优化。 第二步操作,开始建模准备 选用R^2, 也就是决定系数作为模型的评测函数,一看这意思,就是要用回归分析来进行预测啦,因为决定系数,就是回归分析中最经常用的评价指标, 比如,回归系数是否显著,调整后的R平方(调整后的R2平方,及调整后的决定系数,若R2平方为)0.60,可解释为自变量的变异解释了因变量变异的60%,R2平方取值范围为0-1,越大代表回归方程对因变量的解释程度越大) R^2的0表示从变量不能预测因变量. R^2的1表示从自变量可以无误差地预测因变量。 所谓的拟合程度,就是指模型本身预测的准确程度,欠拟合,说明预测的太烂,过拟合,说明模型本身对数据太敏感,只是在训练数据上得分高,但是一旦超过那个数据的范围,使用新数据的话,预测准确性就会往下掉。 第三步,做数据切割 主要目的就是为了分为训练数据和测试数据,主要是用到了sklearn中model_selection这个包,然后用到train_test_split, 这个方法主要目的,就是随机生成的参数都比较好理解, 只是,random_state这个参数需要认真学习一下,这个东西叫随机数种子,我们做一个小测试,下面我们在使用train_test_split方法的时候设置这个参数,比如设置为0,当然也可以设置成1,2或者其他整数。 第四步,通过学习曲线和验证曲线来分析模型的来对算法进行诊断。 学习曲线,是用来判断算法究竟是过拟合还是欠拟合,欠拟合:对数据本身以来过强,泛化能力较差,可以认为是模型的问题,可能就是模型本身参数太多太复杂。但是一般来说,这种模型的偏差太高,解决办法是有的,但是就是单纯的增大训练集,可是这在实际操作中不容易完成,所以一般不容易做到。 欠拟合:是说模型的预测能力太差,评测函数打的分很低,这有可能是数据本身比较复杂,但是模型比较简单造成的,一般来说这种模型偏差较高。解决办法是构建更多特征,减少正则项,加大鲁棒性能。 那么如何解决呢?答案是通过验证曲线。验证曲线,主要展示的是不同深度所对应的分数,这里的分数仍然是决定系数。通过观察,可以发觉在深度为3的时候应该是个最佳点。 第五步,数据归一化。 由于每个特征的数据范围相差较大,为了加快梯度下降求最优解的速度,将它们进行归一化处理,均转化为0~1之间的数据。原理图如下: 数据未经处理时: 图3 未经处理时 经过归一化处理后: 图4 经过归一化处理后 1 在这里强调归一化处理我使用的是min_max_scaler中的fit_transform函数,会将其转化成1列,行数自动确定。

三、 实验内容分析

3.1模型分析 3.1.1线性回归(LinearRegression) 线性回归,就是能够用一个直线较为精确地描述数据之间的关系。这样当出现新的数据的时候,就能够预测出一个简单的值。线性回归中最常见的就是波士顿房价的问题。一直存在很多房屋面积和房价的数据,可以利用线性回归构造出一条直线来近似地描述放假与房屋面积之间的关系,从而就可以根据房屋面积推测出房价 图5 推测房价回归模型 Hypothesis,表示的就是线性回归模型Cost Function,代价函数Goal,就是要求对应的代价函数最小。 特点:建模速度快,不需要很复杂的计算,在数据量大的情况下依然运行速度很快。可以根据系数给出每个变量的理解和解释。对异常值很敏感 3.1.2岭回归(Ridge Regression) 岭回归其实是对最小二乘回归的一种补充,它以损失无偏性为代价,来换取高的数值稳定性,从而得到较高的计算精度。通常岭回归方程的R平方值会稍低于普通回归分析,但回归系数的显著性往往明显高于普通回归,在存在共线性问题和病态数据偏多的研究中有较大的实用价值。 按照这种方法求取参数的解析解的时候,最后的表达式是在原来的基础上在求逆矩阵内部加上一个对角矩阵,就好像一条“岭”一样。加上这条岭以后,原来不可求逆的数据矩阵就可以求逆了。不仅仅如此,对角矩阵其实是由一个参数lamda和单位对角矩阵相乘组成。lamda越大,说明偏差就越大,原始数据对回归求取参数的作用就越小,当lamda取到一个合适的值,就能在一定意义上解决过拟合的问题:原先过拟合的特别大或者特别小的参数会被约束到正常甚至很小的值,但不会为零。 3.1.3鲁棒回归(Huber Regression) 在统计学领域和机器学习领域,对异常值也能保持稳定、可靠的性质,称为鲁棒性。 鲁棒回归也叫中位数回归,对于中位数计算y_test 和 y_preid效果更好,鲁棒性也更好,也叫做稳健回归(Robust Regression) 3.1.4支持向量回归(SVR) 支持向量机(SVM)本身是针对二分类问题提出的,而SVR(支持向量回归)是SVM(支持向量机)中的一个重要的应用分支。SVR回归与SVM分类的区别在于,SVR的样本点最终只有一类,它所寻求的最优超平面不是SVM那样使两类或多类样本点分的“最开”,而是使所有的样本点离着超平面的总偏差最小。 3.1.5最近邻回归(Nearest Neighbors Regression) 包括K最近邻模型(KNeighborsClassifier)和区域最邻近模型(RadiusNeighborsClassifier)。适用于类别之间没有明确界限或者界限不规则的数据场景。可以用于采集样本不均衡的情况,但是采集样本均衡有助于提高模型的准确性。 3.1.6决策树回归(Decision Trees) 决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵决策树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选择选择下一比较分支,直到叶子节点作为最终的决策结果。 3.1.7神经网络回归(Neural Network Regression) 神经网络模型一般用来做分类,回归预测模型不常见。由于字幅限制,我具体会在cifar-10分类器中说明。 3.2性能指标分析 3.2.1解释方差(Explained Variance) 当有多个变量,分析单个变量与总方差的方差比为变量的解释方差,最大为1.0,越靠近1.0说明数值回归的越准确。 3.2.2平均绝对误差(MAE,Mean Absolute Error) 平均绝对误差,又叫平均绝对离差,是所有单个观测值与算术平均值的偏差的绝对值的平均。平均绝对误差可以避免误差相互抵消的问题,因而可以准确反映实际预测误差的大小。 3.2.3平均平方误差(MSE,Mean Squared Error) 有n对输入输出数据,每对为[Pi,Ti],i=1,2,…,n.网络通过训练后有网络输出,记为Yi。MSE是衡量“平均误差”的一种较方便的方法,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。 3.2.4中位绝对误差(MedAE, Median Absolute Error) 绝对中位差是一种统计离差的测量。而且,MAD是一种鲁棒统计量,比标准差更能适应数据集中的异常值。对于标准差,使用的是数据到均值的距离平方,所以大的偏差权重更大,异常值对结果也会产生重要影响。对于MAD,少量的异常值不会影响最终的结果。

四、 结果讨论

4.1结果展示 图6 线性回归结果展示 (一下就不截图了直接粘贴结果) 线性回归: 可执行方差 0.7248340702962794 平均绝对误差 [0.08971896] 均方误差MSE 0.014401297014022416 中位数绝对误差 0.05990736030912733 岭回归: 可执行方差 0.7230584594542566 平均绝对误差 [0.08980946] 均方误差MSE 0.014389600840771267 中位数绝对误差 0.0602440376332149 鲁棒回归: 可执行方差 0.718630508217646 平均绝对误差 [0.09165834] 均方误差MSE 0.01520293544569245 中位数绝对误差 0.05834218795726742 支持向量回归(SVR) 可执行方差 0.7127204947723801 平均绝对误差 [0.09243548] 均方误差MSE 0.014963519981494484 中位数绝对误差 0.06711624708316649 最近邻回归(Nearest Neighbors Regression) 可执行方差 0.69288081332931 平均绝对误差 [0.09595913] 均方误差MSE 0.015858661982717567 中位数绝对误差 0.07548651416865826 决策树回归(Decision Trees) 可执行方差 0.5651847380018313 平均绝对误差 [0.11462608] 均方误差MSE 0.022434385171770682 中位数绝对误差 0.07892340958233762 神经网络回归(Neural Network Regression) 可执行方差 0.7432759192564162 平均绝对误差 [0.08329337] 均方误差MSE 0.013197781660242764 中位数绝对误差 0.044739881926788516 其中对决策树和神经网络回归在多次预测的时候都会发生变化,这里取最高值了。为了得出的是一个最优模型,你需要使用网格搜索法训练模型,以找到最佳的 ‘max_depth’ 参数。把’max_depth’ 参数理解为决策树算法在做出预测前,允许其对数据提出问题的数量。当最大深度是3或者4的时候,模型的泛化能力最强。

五、 实验分析

一个最优的模型不一定是一个健壮模型。有的时候模型会过于复杂或者过于简单,以致于难以泛化新增添的数据;有的时候模型采用的学习算法并不适用于特定的数据结构;有的时候样本本身可能有太多噪点或样本过少,使得模型无法准确地预测目标变量。这些情况下我们会说模型是欠拟合的。 那么如何来健壮程序来保证预测的一致性呢?是我接下来继续学习时要考虑的问题。


最新回复(0)