在机器学习中,对于分类变量要进行
from sklearn.preprocessing import OneHotEncoder
def df2onehot_narray(input_matrix):
in_df = input_matrix
var_2 = {}
var_1 = {}
var_0 = {}
#Label_values= [0,1,2] #t_df.columns
#columns_len = len(list(t_df.columns))#list(t_df.columns) #columns 列的名字;可以换 range(columns_len)
for col in list(t_df.columns):
var_0[col] = 0
var_1[col] = 1
var_2[col] = 2
var_0_df = pd.DataFrame(var_0,index=["var_0"])
var_1_df = pd.DataFrame(var_1,index=["var_1"])
var_2_df = pd.DataFrame(var_2,index=["var_2"])
in_df = in_df .append(var_0_df)
in_df = in_df .append(var_1_df)
in_df = in_df .append(var_2_df)
values = np.unique(in_df .values)#values#输出为多维的 (numpy array ,narray) #从df中获得所有唯一的标签(值)
# values 内部可以重复,但是必须是1维度的(1D);np.unique()可以做到转为1维度
# integer encode
label_encoder = LabelEncoder() #导入类对象(类似导入针对特定数据的流程,包含多步骤函数和获得属性变量,就是常说的类class 写法)
integer_encoded = label_encoder.fit_transform(values)
onehot_encoder = OneHotEncoder(sparse=False)
#初始化OneHotEncoder实例时,默认sparse参数为True,编码后返回的是一个稀疏矩阵的对象,如果要使用一般要调用toarray()方法转化成array对象。若将sparse参数设置为False,则直接生成array对象,可直接使用
# binary encode
integer_encoded = integer_encoded.reshape(len(values),1)
onehot_np_array = onehot_encoder.fit_transform(in_df)
return onehot_np_array[0:-3] #返回值去掉最后3个自己添加的内容,这三个样品 特征,是为了保证所有样品特征都有这三个标签,方便转换;以及和训练集合的对应
参考:
l利用sklearn进行One-Hot转换
sklearn中OneHotEncoder使用注意事项——sparse参数
Pandas:DataFrame数据的更改、插入新增的列和行
np.unique( )的用法
网友评论