我们刚才已经用OrdinalEncoder把分类变量Sex和Embarked都转换成数字对应的类别了。在舱门Embarked这一 列中,我们使用[0,1,2]代表了三个不同的舱门,然而这种转换是正确的吗?
我们来思考三种不同性质的分类数据:
1) 舱门(S,C,Q) 三种取值S,C,Q是相互独立的,彼此之间完全没有联系,表达的是S≠C≠Q的概念。这是名义变量。
2) 学历(小学,初中,高中) 三种取值不是完全独立的,我们可以明显看出,在性质上可以有高中>初中>小学这样的联系,学历有高低,但是学 历取值之间却不是可以计算的,我们不能说小学 + 某个取值 = 初中。这是有序变量。
3) 体重(>45kg,>90kg,>135kg) 各个取值之间有联系,且是可以互相计算的,比如120kg - 45kg = 90kg,分类之间可以通过数学计算互相转换。这 是有距变量。
然而在对特征进行编码的时候,这三种分类数据都会被我们转换为[0,1,2],这三个数字在算法看来,是连续且可以 计算的,这三个数字相互不等,有大小,并且有着可以相加相乘的联系。所以算法会把舱门,学历这样的分类特 征,都误会成是体重这样的分类特征。这是说,我们把分类转换成数字的时候,忽略了数字中自带的数学性质,所 以给算法传达了一些不准确的信息,而这会影响我们的建模。
类别OrdinalEncoder可以用来处理有序变量,但对于名义变量,我们只有使用哑变量的方式来处理,才能够尽量向算法传达最准确的信息。
代码实现:
import pandas as pd
data=pd.read_csv(r"C:\Users\JYuXuAN\Desktop\sklearn\预处理数据\Narrativedata.csv", index_col=0)
Age = data.loc[:,"Age"].values.reshape(-1,1)
Embarked=data.loc[:,"Embarked"].values.reshape(-1,1)
from sklearn.impute import SimpleImputer
data.loc[:,"Age"]=SimpleImputer(strategy="median").fit_transform(Age)
data.loc[:,"Embarked"]=SimpleImputer(strategy="most_frequent").fit_transform(Embarked)
print(data.info())
print("空值填补完毕...")
from sklearn.preprocessing import OneHotEncoder
X=data.iloc[:,1:-1]
enc=OneHotEncoder(categories='auto').fit(X)
result=enc.transform(X).toarray()
result=OneHotEncoder(categories='auto').fit_transform(X).toarray()
print(enc.get_feature_names())
print("特征替换完毕...")
newdata = pd.concat([data,pd.DataFrame(result)],axis=1)
newdata.drop(["Sex","Embarked"],axis=1,inplace=True)
newdata.columns = ["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"]
print(newdata.head(20))
print("表格重置...")
Java语言规范中指出:为了获得佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使
python-Levenshtein用于更快的编辑距离(不用于n-gram距离)
如果您已经可以正常安装NumPy和SciPy,则安装dirty_cat的最简单方法是使用pip
pip install -U --user dirty_cat
Spark ML: : //github.com/rakutentech/spark-dirty-cat
Patricio Cerda,GaëlVaroq
在机器学习的分类、聚类等任务中,我们经常会遇到一个或多个类别型的数据特征,如衣服颜色、商品类别等,这些特征的取值之前并无相对大小关系,难以直接作为机器学习模型的输入,因此我们先要对这类特征做转换才能作为模型输入。
对于类别型特征,需要需要做2件事:
(1)进行one-hot转换
(2)进行PCA降维
新建一个类别型的特征列
import numpy as np
fro...
文章目录概述数据挖掘的五大步骤skleran中的数据处理和特征工程数据预处理Preprocessing&Impute数据无量纲化数据归一化---MinMaxScaler示例
数据挖掘的五大步骤
数据预处理
数据预处理是从数据中检测,纠正或删除损坏,不准确或不适用于模型的记录的过程
可能面对的问题有:数据类型不同,比如有的是文字,有的是数字,有的含时间序列,有的连续,有的间断。也可能,数据的质量不行,有噪声,有异常,有缺失,数据出错,量纲不一,有重复,数据是偏态,数据量太大或太小
文章目录前言一、get_dummies1、导库,创建表格2、调用哑变量方法3、删除无用列4、修改列的名字二、OneHotEncoder1、导库2、调用OneHotEncoder函数总结
机器学习在建模期间一般使用的是纯数值型数据,但是在实际生活中往往数据中会掺杂一些文本数据,例如人员信息中的性别等,这里的男,女,我们可以转化成为线性不相关的矩阵,如(1,0)、(0,1),在机器学习中这被称为哑变量。本节介绍两种方法来实现数值与非数值的转化,分别是pandas库中的get_dummies()和skl.
1.3 处理分类型特征:编码与哑变量
在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn当中,除了专用来处理文字的算法,其他算法在fit的时候全部要求输入数组或矩阵,也不能够导入文字型数据(其实手写决策树和普斯贝叶斯可以处理文字,但是sklearn中规定必须导入数值型)。
然而在现实中,许多标签和特征在数据收集完毕的时候,都不是以数字来表现的。比如说,学历的取值可以是[“小 学”,“初中”,“高中”,“大学”],付费方式可能包含[
我试图使用sk learn在Python中运行一个常见的线性回归,但是我有一些分类数据,我不知道如何处理,特别是因为我使用pandas导入了数据,而且我从以前的经验和阅读中了解到pandas和sk learn相处得不太好(现在)。我的数据如下:Salary AtBat Hits League EastDivision475 315 81 1 04...
本文为kaggle机器学习中级课程 第三部分 Categorical Variables --There's a lot of non-numeric data out there. Here's how to use it for machine learning.在本教程中,您将了解什么是分类变量,以及处理此类数据的三种方法。
preprocessing.OrdinalEncoder
特征专用,能够将分类特征转换为分类数值
将原本的Sex,原本为male与female,现在将这两个数据转换为0和1 。
原本的Embarked,不同的舱位,有SCQ三种,现在可以转换为0、1、2 。
Servived有Yes、No、Unknown,转换...