Python 将字符串数据转换为决策树的数字
我正在尝试将几列字符串数据转换为数字,以输入分类模型。具有一个修改列的示例数据集为: 输入: 输出: 我意识到scikit learn不能很好地处理字符串数据,但现在我真的更愿意继续使用它,如果可能的话。然而,我的问题是如果我使用Python 将字符串数据转换为决策树的数字,python,pandas,scikit-learn,classification,decision-tree,Python,Pandas,Scikit Learn,Classification,Decision Tree,我正在尝试将几列字符串数据转换为数字,以输入分类模型。具有一个修改列的示例数据集为: 输入: 输出: 我意识到scikit learn不能很好地处理字符串数据,但现在我真的更愿意继续使用它,如果可能的话。然而,我的问题是如果我使用 sklearn.preprocessing.LabelEncoder 我可以使用“.classes_ux”获取一些数值,例如: 输入: 我明白了 输出: 因为这个数组只包含三个值,所以我不能使用 数据['Name']=VAL 用于分配,因为我的列长度为4,VAL长
sklearn.preprocessing.LabelEncoder
我可以使用“.classes_ux”获取一些数值,例如:
输入:
我明白了
输出:
因为这个数组只包含三个值,所以我不能使用
数据['Name']=VAL
用于分配,因为我的列长度为4,VAL长度为3
考虑到这一点,在scikit learn中是否有其他方法可以实现这一点,或者是我使用其他库的唯一选择?尝试以下方法:
le = preprocessing.LabelEncoder()
data['Name']= le.fit_transform(data['Name'])
这将为整个列指定标签。您也可以这样做:
pd.get_dummies(data=data, columns=['Name'])
输出:
Age Name_juli Name_nick Name_tom
0 10 0 0 1
1 15 0 1 0
2 14 1 0 0
3 12 0 1 0
现在,您的数据已准备好进行模型培训。通常,OneHot编码比LabelEncoding好,因为LabelEncoding意味着名字之间存在数字关系。如果Juli==0,Nick==1,Tom==2,则表示Julyle = preprocessing.LabelEncoder()
le.fit(data['Name'])
le.classes_
vals = le.transform(data['Name'])
vals
使用fitdata['Name']时,实际上可以使用fitdata['Name']。唯一,因为只有唯一的值用于拟合,但对于转换,必须使用所有数据
from sklearn.preprocessing import Imputer
imputer =Imputer(missing_values="NaN", strategy='mean', axis=0)
imputer=imputer.fit(X[:,1:3])
X[:,1:3]= imputer.transform(X[:,1:3])
#Concept of Dummy Variable, Handling the conflict of them
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
#We have to give the column number necessary to change it in numeric form
X[:,0]=labelencoder_X.fit_transform(X[:,0])
在此处输入代码准备输入功能
# prepare input features
def LABEL_Encoding(X):
objList = data.select_dtypes(include = "object").columns
print (objList)
le = LabelEncoder()
for feat in objList:
data[feat] = le.fit_transform(data[feat].astype(str))
return data
vals=le.transformdata['Name']我同意此任务的一种热编码,但也值得一提的是本机sklearn,它可以更容易地在sklearn生态系统中使用啊,谢谢。我最近确实知道你不想要一个隐含的命令,但我有点回过头来,根据我的阅读,我认为get_dummies不是OneHot,而Labelencoded是。谢谢你的更正。那么,如果我需要对数据集中的多个列执行此操作,这个过程会改变吗?我猜不会,因为这只是使用一个布尔值?这只是给我的数据集添加了一些额外的特性。我的理解正确吗?对我来说,pandas更简单,但如果你正在构建管道,那么最好使用OneHotEncoder。如果您想添加更多的列,请将它们添加到columns=['Name']列表中,这很容易,您会自动获得一个更新的数据帧
Age Name_juli Name_nick Name_tom
0 10 0 0 1
1 15 0 1 0
2 14 1 0 0
3 12 0 1 0
le = preprocessing.LabelEncoder()
le.fit(data['Name'])
le.classes_
vals = le.transform(data['Name'])
vals
from sklearn.preprocessing import Imputer
imputer =Imputer(missing_values="NaN", strategy='mean', axis=0)
imputer=imputer.fit(X[:,1:3])
X[:,1:3]= imputer.transform(X[:,1:3])
#Concept of Dummy Variable, Handling the conflict of them
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
#We have to give the column number necessary to change it in numeric form
X[:,0]=labelencoder_X.fit_transform(X[:,0])
onehotencoder=OneHotEncoder(categorical_features =[0])
X=onehotencoder.fit_transform(X).toarray()
# prepare input features
def LABEL_Encoding(X):
objList = data.select_dtypes(include = "object").columns
print (objList)
le = LabelEncoder()
for feat in objList:
data[feat] = le.fit_transform(data[feat].astype(str))
return data