网站源码 带数据,wordpress文章排行,龙岩小程序报价,咖啡网站源码三、处理分类型特征#xff1a;编码与哑变量 点击标题即可获取文章相关的源代码文件哟#xff01; 在机器学习中#xff0c;大多数算法#xff0c;譬如逻辑回归#xff0c;支持向量机SVM#xff0c;k近邻算法等都只能够处理数值型数据#xff0c;不能处理文字#xff0…三、处理分类型特征编码与哑变量 点击标题即可获取文章相关的源代码文件哟 在机器学习中大多数算法譬如逻辑回归支持向量机SVMk近邻算法等都只能够处理数值型数据不能处理文字在sklearn当中除了专用来处理文字的算法其他算法在fit的时候全部要求输入数组或矩阵也不能够导入文字型数据其实手写决策树和普斯贝叶斯可以处理文字但是sklearn中规定必须导入数值型。 然而在现实中许多标签和特征在数据收集完毕的时候都不是以数字来表现的。比如说学历的取值可以是[“小 学”“初中”“高中”“大学”]付费方式可能包含[“支付宝”“现金”“微信”]等等。在这种情况下为了让数据适应算法和库我们必须将数据进行编码即是说将文字型数据转换为数值型。
preprocessing.LabelEncoder标签专用能够将分类转换为分类数值 preprocessing.OrdinalEncoder特征专用能够将分类特征转换为分类数值 preprocessing.OneHotEncoder独热编码创建哑变量 我们刚才已经用OrdinalEncoder把分类变量Sex和Embarked都转换成数字对应的类别了。在舱门Embarked这一列中我们使用[0,1,2]代表了三个不同的舱门然而这种转换是正确的吗 我们来思考三种不同性质的分类数据 1 舱门SCQ 三种取值SCQ是相互独立的彼此之间完全没有联系表达的是S≠C≠Q的概念。这是名义变量。 2 学历小学初中高中 三种取值不是完全独立的我们可以明显看出在性质上可以有高中初中小学这样的联系学历有高低但是学历取值之间却不是可以计算的我们不能说小学 某个取值 初中。这是有序变量。 3 体重45kg90kg135kg 各个取值之间有联系且是可以互相计算的比如120kg - 45kg 90kg分类之间可以通过数学计算互相转换。这是有距变量。
然而在对特征进行编码的时候这三种分类数据都会被我们转换为[0,1,2]这三个数字在算法看来是连续且可以计算的这三个数字相互不等有大小并且有着可以相加相乘的联系。所以算法会把舱门学历这样的分类特征都误会成是体重这样的分类特征。这是说我们把分类转换成数字的时候忽略了数字中自带的数学性质所以给算法传达了一些不准确的信息而这会影响我们的建模。 类别OrdinalEncoder可以用来处理有序变量但对于名义变量我们只有使用哑变量的方式来处理才能够尽量向算法传达最准确的信息 这样的变化让算法能够彻底领悟原来三个取值是没有可计算性质的是“有你就没有我”的不等概念。在我们的数据中性别和舱门都是这样的名义变量。因此我们需要使用独热编码将两个特征都转换为哑变量。 特征可以做哑变量标签也可以吗 可以使用类sklearn.preprocessing.LabelBinarizer可以对做哑变量许多算法都可以处理多标签问题比如说决策树但是这样的做法在现实中不常见因此我们在这里就不赘述了。