字符种类转换one hotlabel
方法一
直接用scikit learn里面的onehot encoder
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
encoder.fit(data_train)
train_features = encoder.transform(data_train)
data_train就是要one hot的类别。
注意当data train是多类别的话,他会把类别线性合并,比如A有3个类别,B有4个类别,那么会one hot成3+4=7种类别,并且会把向量合并,或者说,2种类别会独立进行one hot,然后合并one hot向量。
from sklearn.preprocessing import OneHotEncoder
# 创建一个包含多个类别的数据集
data = [['red', 'apple'], ['blue', 'banana'], ['green', 'orange']]
# 创建一个OneHotEncoder对象
encoder = OneHotEncoder()
# 使用fit_transform方法将类别数据转换为独热编码形式
one_hot_encoded = encoder.fit_transform(data)
# 打印独热编码结果
print(one_hot_encoded.toarray())
#结果
[[0. 0. 1. 1. 0. 0.]
[1. 0. 0. 0. 1. 0.]
[0. 1. 0. 0. 0. 1.]]

方法2
一个是可以使用scikit learn里面的label encoder。
这个是把原先的字符类别转成数字,再通过torch.nn.functional的one_hot转换成独热向量
from sklearn.preprocessing import LabelEncoder
cell_name_label=pd_data['cell_type']
conpound_name_label=pd_data['sm_lincs_id']
cell_cat=LabelEncoder().fit_transform(cell_name_label)
cell_label=F.one_hot(torch.from_numpy(cell_cat).long())#,max(cell_cat)
conpound_cat=LabelEncoder().fit_transform(conpound_name_label)
conpound_label=F.one_hot(torch.from_numpy(conpound_cat).long())
方法3
另外一个还可以使用pandas的get dummy。
会把原先在一列的字符类别,扩增成len(类别)的属性。
比如原先有列性别选项是[男,女],get dummy后,性别列消失,直接成为2列,一列是否男,一列是否女。变相地进行了one hot编码,只不过在取的时候记得把所有横列都取到。
import pandas as pd
pd_data['cell_type''].get_dummy()
或者
pd.get_dummies(combined_data, columns=xlist)
浙公网安备 33010602011771号