标签:classlabel 处理 mapping df 类标 print 数据 class size
生成类标数据:
import pandas as pd # 生成类别数据 df = pd.DataFrame([ ["green", "M", 10.1, "class1"], ["red", "L", 13.5, "class2"], ["blue", "XL", 15.3, "class1"] ]) df.columns = ["color", "size", "price", "classlabel"] print(df)
运行结果:
有序特征的映射:
1 size_mapping = { 2 "XL": 3, 3 "L": 2, 4 "M": 1, 5 } 6 df["size"] = df["size"].map(size_mapping) 7 print(df)
运行结果:
可以通过size_mapping映射回去
1 # 通过size_mapping映射回去 2 inv_size_mapping = {v: k for k, v in size_mapping.items()} 3 df["size"] = df["size"].map(inv_size_mapping) 4 print(df)
运行结果:
类标的编码:
可以简单地从0开始设置类标
1 import numpy as np 2 class_mapping = {label: idx for idx, label in enumerate(np.unique(df["classlabel"]))} 3 print(class_mapping) 4 df["classlabel"] = df["classlabel"].map(class_mapping) 5 print(df)
运行结果:
同样我们可以使用键值对倒置还原类标
1 inv_class_mapping = {v: k for k, v in class_mapping.items()} 2 df["classlabel"] = df["classlabel"].map(inv_class_mapping) 3 print(df)
使用scikit-learn中的LabelEncoder类完成类标的编码
1 from sklearn.preprocessing import LabelEncoder 2 class_le = LabelEncoder() 3 df["classlabel"] = class_le.fit_transform(df["classlabel"].values) 4 print(df) 5 # 可以使用inverse_transfrom()还原类标 6 df["classlabel"] = class_le.inverse_transform(df["classlabel"]) 7 print(df)
遇到警告可以使用下面的代码忽略警告:
1 import warnings 2 warnings.filterwarnings('ignore')
运行结果:
标称特征上的独热编码
1 from sklearn.preprocessing import OneHotEncoder 2 x = df[["color", "size", "price"]].values 3 color_le = LabelEncoder() 4 x[:, 0] = class_le.fit_transform(x[:, 0]) 5 # categorical_features来选定矩阵的列;toarray方法将其转化为一个numpy数组 6 ohe = OneHotEncoder(categorical_features=[0]) 7 x = ohe.fit_transform(x).toarray() 8 print(x)
运行结果:
我们可以使用get_dummies更加方便地实现独热编码
1 print(df) 2 print(pd.get_dummies(df))
运行结果:
这里要注意如果类标classlael也是和标称特征一样,则 get_dummies 会使类标也进行独热编码,而这不是我们希望做的!!!
标签:classlabel,处理,mapping,df,类标,print,数据,class,size 来源: https://blog.51cto.com/u_15228753/2819764
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。