我正在做一个机器学习项目,我的数据集的一个特征是分类数据。该数据首先存储在尺寸为 的熊猫系列 ( <class 'pandas.core.series.Series'>
)mesh
中(2000,)
。行数对应于数据实例的总数。每行包含该数据实例所属的类别字符串,其中类别用逗号分隔。有数百个不同的类别。例如,
0 Aged, Angiotensin-Converting Enzyme Inhibitors...
1 Aged, Angiotensin-Converting Enzyme Inhibitors...
2 Adult, Aged, Aged, 80 and over, Angiotensin-Co...
....
在这个例子Aged
中是一个类别和Angiotensin-Converting Enzyme Inhibitors
另一个。正如您在示例中看到的那样,同一类别可能会出现多次,但如果该类别仅在字符串中出现一次,则编码应该没有不同。
我希望使用 one-hot 编码来表示它们。为此,我使用以下代码:
mlb = MultiLabelBinarizer(sparse_output=True)
for s in data:
pre_data = mlb.fit_transform(str(s).split(', '))
return pre_data, len(mlb.classes_)
但是,这会产生一个 numpy 维度数组(19, 37)
。为什么会这样?
回应MaxU 的回答:
替换str(s).split(', ')
为 时s.str.split(',\s*')
,会产生以下错误:
Traceback (most recent call last):
File ".../guidedLearning.py", line 166, in <module>
X, y = processTrainingData(directory, filename)
File ".../guidedLearning.py", line 130, in processTrainingData
pre_mesh, meshN = oneHot(mesh)
File ".../guidedLearning.py", line 73, in oneHot
pre_data = mlb.fit_transform(data.str.split(',\s*'))
File ".../sklearn/preprocessing/label.py", line 723, in fit_transform
yt = self._transform(y, class_mapping)
File ".../sklearn/preprocessing/label.py", line 781, in _transform
indices.extend(set(class_mapping[label] for label in labels))
TypeError: 'float' object is not iterable