Has*_*aan 4 python machine-learning one-hot-encoding
我需要将独立字段从字符串转换为算术符号。我正在使用OneHotEncoder进行转换。我的数据集有许多独立的列,其中一些是:
Country | Age
--------------------------
Germany | 23
Spain | 25
Germany | 24
Italy | 30
Run Code Online (Sandbox Code Playgroud)
我必须像编码国家列
0 | 1 | 2 | 3
--------------------------------------
1 | 0 | 0 | 23
0 | 1 | 0 | 25
1 | 0 | 0 | 24
0 | 0 | 1 | 30
Run Code Online (Sandbox Code Playgroud)
我通过使用OneHotEncoder成功获得了欲望的转化
#Encoding the categorical data
from sklearn.preprocessing import LabelEncoder
labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])
#we are dummy encoding as the machine learning algorithms will be
#confused with the values like Spain > Germany > France
from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categorical_features=[0])
X = onehotencoder.fit_transform(X).toarray()
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用折旧消息categories='auto'。如果我这样做,那么将对所有独立列(例如国家/地区,年龄,工资等)进行转换。
如何仅在数据集第0列上实现转换?
实际上有2条警告:
FutureWarning:整数数据的处理将在0.22版中更改。当前,类别是根据范围[0,max(values)]确定的,而将来,它们将根据唯一值来确定。如果您想要将来的行为并消除此警告,则可以指定“ categories ='auto'”。如果您在此OneHotEncoder之前使用LabelEncoder将类别转换为整数,则现在可以直接使用OneHotEncoder。
第二个:
'categorical_features'关键字在0.20版中已弃用,并将在0.22版中删除。您可以改用ColumnTransformer。
“改为使用ColumnTransformer。”,DeprecationWarning)
将来,除非您要使用“ categories ='auto'”,否则不应直接在OneHotEncoder中定义列。第一条消息还告诉您直接使用OneHotEncoder,而无需先使用LabelEncoder。最后,第二条消息告诉您使用ColumnTransformer,这就像用于列转换的Pipe。
这是您的情况的等效代码:
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([("Name_Of_Your_Step", OneHotEncoder(),[0])], remainder="passthrough")) # The last arg ([0]) is the list of columns you want to transform in this step
ct.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)
另请参阅:ColumnTransformer文档
对于上面的例子;
编码分类数据(基本将文本更改为数值数据,即国家/地区名称)
from sklearn.preprocessing import LabelEncoder, OneHotEncoder from sklearn.compose import ColumnTransformer编码国家/地区列labelencoder_X = LabelEncoder() X[:,0] = labelencoder_X.fit_transform(X[:,0]) ct = ColumnTransformer([("Country", OneHotEncoder(), [0])], remainder = 'passthrough') X = ct.fit_transform(X)
从 0.22 版本开始,您可以编写如下相同的代码:
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([("Country", OneHotEncoder(), [0])], remainder = 'passthrough')
X = ct.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)
如您所见,您不再需要使用LabelEncoder了。
transformer = ColumnTransformer(
transformers=[
("Country", # Just a name
OneHotEncoder(), # The transformer class
[0] # The column(s) to be applied on.
)
], remainder='passthrough'
)
X = transformer.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)
提醒将保留以前的数据,而第 [0] 列将被替换将被编码
小智 5
不要使用labelencoder,直接使用OneHotEncoder。
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import make_column_transformer
A = make_column_transformer(
(OneHotEncoder(categories='auto'), [0]),
remainder="passthrough")
x=A.fit_transform(x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5568 次 |
| 最近记录: |