现有两个数据集,一为训练数据集SP_train.csv,一为测试数据集SP_test.csv,训练数据集包括5000条数据,测试数据集包括1000条数据集。 训练数据集数据格式内容如下: 测试数据集数据格式内容如下: 所需解决的问题就是根据每个学生的gender、race/ethnicity、parental level of education、lunch、test preparation course等5种因素,预测math score、reading score、writing score。决定学生的五种因素各有其类别,比如gender包括female和male,lunch包括standard和free/reduced。
二、 解决思路 1. 决策树办法一开始想用决策树,是因为训练集中的math score、reading score、writing score是整数数值,所以假设成绩是类别变量,类别最大不会超过100,只是类别有点多而已,于是打算用其5种特征因素训练生成决策树,根据决策树结构训练测试集从而得到相应的预测分数。 具体操作方式为:将每种特征的类别变量分别映射成数值变量,如t1={‘female’:1,‘male’:2},t2={‘group A’:1, ‘group B’:2, ‘group C’:3, ‘group D’:4, ‘group E’:5},然后根据数值变量训练生成决策树模型。
但是实践证明这条路行不通,因为训练过程中电脑直接死机、计算资源利用率瞬间拉满,而且决策树生成的决策树过于复杂、庞大,电脑根本查看不了细节信息。
2. 回归办法预测分数问题本质是回归问题,成绩不能通过决策树预测出来。所以对于预测学生成绩问题,回归回归办法才是王道。所谓回归就是根据特征因素预测出数值,特征可以有多个,预测的数值也可以有多个。一旦确定用回归办法,就需要解决两个问题:1、如何把类别变量转换成数值变量;2、选择何种回归模型。常见的回归模型有线性回归模型、逻辑回归模型、岭回归模型、套索回归模型。 针对第一个问题,针对类别是否有序,一般有两种办法,如果类别有明显的大小关系或者顺序关系,就采用映射办法赋予类别变量相应的数值,如衣物的尺寸S、M、L就可赋予以下数值:{S: 1, M: 2, L: 3},给S赋予1,M赋予2,L赋予3,因为尺寸S、M、L本身是有大小关系的,所以赋予的值也得有这种关系。如果类别变量只是简单的并列关系,是无序的,那一般就采用独热码(onehot)对类别进行编码。就如训练数据集中的race/ethnicity(种族/民族)特征,group A、group B、group C、group D、group E谁也不比谁更好或者更好,它们只是并列关系而已,所以就可用独热码对其编码。 再看第二个问题,选择何种模型。其实这不是一个问题,这些模型,都跑一边就知道哪个模型的效果好了,哪个模型的效果好,就选哪个。实践操作中,我具体训练了多元回归模型、岭回归模型和套索模型,发现岭回归模型的效果最好。
三、理论基础 1. 独热码在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。 独热码最重要的地方是任意两个码字之间的距离相等,因此如果对无序的类别变量进行独热码编码,就能使不同类别的码字距离比较合理。 从效果上看,独热码的效果就是把特征数字化、扩大化,数字化顾名思义,就是把类别变成数字,扩大化则是把一个特征列变为多个特征列。例如,给测试数据集的race/ethnicity列进行独热码编码,结果如下:
类别One hot codeGroup A10000Group B01000Group C00100Group D00010Group E00001本来是一列特征,即race/ethnicity,但是经过独热码编码后,就变成了5列数字,这是独热码的特性所致——同一时刻只有一位数字有效(值为1),不同位的数字表示不同的类别,在上面的例子中,第一位表示Group A,第二位表示Group B,以此类推。所以根据编码结果,我们可以直接根据码字看出原类别。同理,训练数据集的其他类别特征也按照这样的方式编码,最终的结果是,原数据集中的5个特征类别,被编码成了17列特征数字。如下图所示:
17=2(gender)+5(race/ethnicity)+6(parental level of education)+2(lunch)+2(test preparation course)。第0列和第1列表示gender,第2~6列表示race/ethnicity,后续以此类推。
2. 回归模型简介 A. 线性回归模型给定数据集 ,其中 ,x为特征,y为真实值。线性回归模型实际上就是求y和x的关系。它假设y和x之间存在线性关系,然后试图学得一个线性模型,然后根据模型尽可能准确地预测一个与真实值相接近的数值,表达式为:
向量表达式为:
B. 逻辑回归模型逻辑回归虽然听起来是个回归算法,但实际上是个分类算法。它有二项式逻辑回归和多项式逻辑回归两种模式,共同点都是综合数据集给定的所有特征,得到一个或多个判定的阈值,然后将数据集中的数据分为两类或者多类。
C. 岭回归模型这是线性模型的改良模型,线性模型求解特征值和真实值之间的线性关系时用的是最小二乘法,这是无偏的估计回归方法,存在的一个问题是,对于某些矩阵,某个元素很小的变动,会造成最后的计算结果有很大的变动,从而误差很大,岭回归模型采用的岭回归估计方法,是放弃无偏性、损失部分信息、降低精度的改良版最小二乘法。
D. 套索回归模型岭回归是线性模型的改良版,但是也始终保留了所有的特征变量,无法降低模型的复杂度,套索回归是线性回归的另外一种改良版本,在估计模型的时候,它将一些不重要的参数直接置为0,达到变量筛选的目的。
四、 动手实践 1. 环境及模块环境:Win10、Anaconda 3-2020.07-Windows-x86_64下的spyder(python3.8.3) 模块:pandas、sklearn、numpy、json Pandas:用来处理数据结构和数据分析; Sklearn:包含了一些机器学习方法,