一、目的和要求
1、理解监督学习和回归预测的基本概念。
2、掌握回归预测五种算法的算法流程。
3、学会编写回归预测五种算法的Python编程方法。
4、会使用回归预测评价方法测评不同的算法性能
二、设备或环境
个人电脑、Anaconda2、Python2.7.10和网络
三、实验步骤
1、设计算法步骤和流程
2、根据算法编写Python程序
3、运行机器学习算法程序并调试
四、内容
针对美国波士顿地区房价数据预测问题,设计不同的回归模型进行预测。
(一):线性回归器
1、写出本例中所用数据的数据描述
该数据共有506条美国波士顿地区房价的数据,每条数据包括对指定房屋的13项数值型特征描述和目标房价。
2、运行Chapter_2.1.2 粘贴线性回归器相关的实验结果,并分别对每一个结果做出解释
数据描述
数据分割:
数据标准化处理:
使用回归评价机制对模型的回归性能做出评价:
3、在代码中添加查看数据规模和特征维度的语句,粘贴结果。
4、在代码中添加语句用于查看原始数据,粘贴结果。
5 、对训练集和测试集的目标值标准化之后,添加代码查看标准化之后的y_train和y_test,对比数据标准化之后数据有什么变化?
标准化之后:
数据标准化后将原来的数据进行重新调整,使他们具有标准正态分布的属性
(二):支持向量机
1运行Chapter_2.1.2 粘贴支持向量机相关的实验结果、并分别对每一个结果做出解释
2 说明支持向量机中核函数的作用
答:可以通过配置不同的核函数来改变模型性能,通过某种函数计算,将原有的特征映射到更高维度的空间,从而尽可能达到新的高维度特征线性可分的程度。
3说明本例中使用的三种核函数(linear’, ‘poly’, ‘rbf’),分析这三种核函数对结果的准确率的影响。
答:liner是最准确的
linear:线性核函数,是在数据线性可分的情况下使用的,运算速度快,效果好。不足在于它不能处理线性不可分的数据。
poly:多项式核函数,多项式核函数可以将数据从低维空间映射到高维空间,但参数比较多,计算量大。
rbf:高斯核函数(默认),高斯核函数同样可以将样本映射到高维空间,但相比于多项式核函数来说所需的参数比较少,通常性能不错,所以是默认使用的核函数。
(三):K近邻回归
1运行Chapter_2.1.2 粘贴K近邻回归相关的实验结果、并分别对每一个结果做出解释
2 说明KNeighborsRegressor函数的作用和各参数的含义
作用:用于实现k近邻算法的分类器
n_neighbors:默认情况下kneighbors查询使用的邻居数。就是k的值,选取最近的k个点。
Weights:默认是uniform,参数可以是uniform、distance,也可以是用户自己定义的函数。uniform是均等的权重,就说所有的邻近点的权重都是相等的。distance是不均等的权重,距离近的点比距离远的点的影响大。用户自定义的函数,接收距离的数组,返回一组维数相同的权重。
3在程序中修改KNeighborsRegressor函数的两个参数,观察和记录模型的R_squred、MSE、MAE的变化,找到最优的参数并记录。
(四):回归树与集成模型
1运行Chapter_2.1.2 粘贴回归树和三种集成模型相关的实验结果、并分别对每一个结果做出解释
回归树:
集成回归:
2 通过分析Chapter_2.1.2所有算法的性能指标,说明不同算法对波士顿房价预测的性能差异。
答:使用非线性回归树模型,特别是集成模型,能够取得更高的性能表现
五、实验结果与分析
六、调试和运行程序过程中产生的问题及采取的措施
七、思考题
1、简述sklearn库中计算R_squared的两种函数方法及其使用。
答:使用LinearRegression模型自带的评估模块,使用SGDRegressor模型自带的评估模块
2、简述sklearn库中class sklearn.svm.SVR()的含义,并说明其核函数的种类和使用方法。
答:SVR非线性回归,linear:线性核函数,是在数据线性可分的情况下使用的,运算速度快,效果好。不足在于它不能处理线性不可分的数据。
poly:多项式核函数,多项式核函数可以将数据从低维空间映射到高维空间,但参数比较多,计算量大。
rbf:高斯核函数(默认),高斯核函数同样可以将样本映射到高维空间,但相比于多项式核函数来说所需的参数比较少,通常性能不错,所以是默认使用的核函数。
使用kernel调用和函数,kernel: str参数 默认为‘rbf’
算法中采用的核函数类型,可选参数有:
‘linear’:线性核函数
‘poly’:多项式核函数
‘rbf’:径像核函数/高斯核
‘sigmod’:sigmod核函数
‘precomputed’:核矩阵
precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵。